上海大学操作系统2实验报告合集1

上海大学操作系统2实验报告合集1
上海大学操作系统2实验报告合集1

上海大学操作系统2实验报告合集1

评分:SHANGHAI UNIVERSITY 操作系统实验报告学院计算机工程与科学专业计算机科学与技术学号14122602 学生姓名余果《计算机操作系统》实验一报告实验一题目:操作系统的进程调度姓名:余果学号:14122602 实验环境:Microsoft Visual Studio 实验目的:进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。例如,简单轮转法和优先数法等。本实习可加深对于进程调度和各种调度算法的理解。实验内容:1、设计一个有n个进程工行的进程调度程序。

每个进程一个进程控制块表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。2、调度程序应包含2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。3、系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程。操作过程:1、本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。进程控制块结构如下:进程控制块结构如下:PCB 进程标识数链指针优先数/轮转时间片数占用CPU 时间片数进程所需时间片数进程状态进程控制块链结构如下:其中:RUN—当前运行进程指针;

HEAD—进程就绪链链首指针;TAID—进程就绪链链尾指针。2、算法与框图(1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3,理是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。(2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进

程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。(3) 程序框图运行结果:Priority算法:Round Robin算法:

实验代码://操作系统实验--进程调度#include #include #include #include const long n=5; struct pcbtype { long id, priority, runtime, totaltime; char status; //R, W, F -> 运行,就绪,完成//进程控制块结构}PCB[n+1];long link[n+1]; //链表结构long RUN, HEAD, TAIL; //选择算法long ChooseAlgo() {char s[128]; printf(\gets(s); if (s[0]==‘P’ || s[0]==‘p’) } return 1; return 0; //初始化void init() { long i; for (i=1; ii; j--) { if (PCB[sort[j]].priority > PCB[sort[j-1]].priority) { k=sort[j];

sort[j]=sort[j-1]; sort[j-1]=k; } } } //根据优先数排序long sort[n+1]; PCB[RUN].priority -= 3;//优先级减3 PCB[RUN].runtime++; if (PCB[RUN].totaltime == 0) { PCB[RUN].status=‘F’;RUN = HEAD; if (HEAD != -1) HEAD = link[HEAD]; PCB[RUN].status=‘R’; } else { if (HEAD != -1 && PCB[RUN].priority PCB[RUN].priority) k=link[k]; if (k == TAIL) { link[k] = RUN; TAIL = RUN; link[RUN] = -1;RUN = HEAD; HEAD = link[HEAD]; PCB[RUN].status = ‘R’; } else { link[RUN] = link[k]; link[k] = RUN; RUN = HEAD; //链首进程开始运行//插入链中//插入链尾之后//进程运行完成HEAD = link[HEAD]; PCB[RUN].status = ‘R’; } } }} showit(); } //轮转调度算法void main_round_robin() { long i; init(); //设置就绪链HEAD = 1; for (i=1; i

PCB[RUN].status=‘W’; //插入链尾link[TAIL]=RUN; link[RUN]=-1; TAIL=RUN; RUN=HEAD;//链首进程开始运行HEAD=link[HEAD]; PCB[RUN].status=‘R’; } } } showit(); } //主函数int main() { long algo; srand(time(NULL)); algo = ChooseAlgo(); if (algo == 1) { main_priority();//优先数法} else { main_round_robin();//简单轮转法} printf(\return 0; } 实验体会:通过写代码的过程更加清晰地了解了两种算法的思想和用处,对算法的了解加深的同事也锻炼了写代码的能力。《计算机操作系统》实验二报告实验二题目:死锁观察与避免姓名:余果学号:14122602 实验环境:Linux Ubuntu系统实验目的:1、目的死锁会引起计算机工作僵死,造成整个系统瘫痪。因此,死锁现象是操作系统特别是大型系统中必须设法防止的。学生应独立的使用高级语言编写和调试一个系统动态分配资源的简单模

拟程序,观察死锁产生的条件,并采用适当的算法,有效的防止死锁的发生。通过实习,更直观地了解死锁的起因,初步掌握防止死锁的简单方法,加深理解课堂上讲授过的知识。2、要求(1) 设计一个n 个并发进程共享m 个系统资源的系统。进程可动态地申请资源和释放资源。系统按各进程的申请动态地分配资源。(2) 系统应能显示各进程申请和释放资源以及系统动态分配资源的过程,便于用户观察和分析。(3) 系统应能选择是否采用防止死锁算法或选用何种防止算法(如有多种算法)。在不采用防止算法时观察死锁现象的发生过程。在使用防止死锁算法时,了解在同样申请条件下,防止死锁的过程。实验内容:1、题目本示例采用银行算法防止死锁的发生。假设有三个并发进程共享十个系统。在三个进程申请的系统资源之和不超过10 时,当然不可能发生死锁,因为各个进程申请的资源都能满足。在有一个进程申请的系统资

源数超过10 时,必然会发生死锁。应该排除这二种情况。程序采用人工输入各进程的申请资源序列。如果随机给各进程分配资源,就可能发生死锁,这也就是不采用防止死锁算法的情况。假如,按照一定的规则,为各进程分配资源,就可以防止死锁的发生。示例中采用了银行算法。这是一种犹如“瞎子爬山”的方法,即探索一步,前进一步,行不通,再往其他方向试探,直至爬上山顶。这种方法是比较保守的。所花的代价也不小。2、代码#include using namespace std; #include int Res[15]; int n,m; struct Process{ int Had[15]; int Max[15]; int Need[15]; bool IsEnd;}Processes[15]; int curProcess; int Req[15]; Process tmpProcesses[15]; bool IsEnd(){ bool R = true; for(int i = 0;i bool IstmpEnd(){ bool R = true;for(int i = 0;i bool Legal= false; bool Banker(){ Legal = true; for(int i = 0;i

Processes[curProcess].Need[i]){Legal = false;break;} } for(int i = 0;i Res[i]){Legal = false; break;} } int tmp[15]; for(int i = 0;i tmp[i] = Res[i];} for(int i = 0;i tmp[i]){IsFF = false; break;}}IsFind = IsFF; if(IsFind == true){curRel = i; break;}}} if(IsFind){ for(int i = 0;i}while(!IstmpEnd() && IsFind == true); for(int i = 0;i if(tmpProcesses[i].IsEnd == false){Legal = false;break;} } return Legal; } int main() { memset(Processes,0,sizeof(Process es)); memset(Res,0,sizeof(Res)); memset(Req,0,sizeof(Req)); cin>>n>>m; for(int i = 0;i>Res[i]; } for(int i = 0;i>Processes[i].Had[j]>>Processes[i].Ma x[j];} } int option = -1; cin>>option; if(option ==

0){do{for(int i = 0;i cin>>curProcess;for(int i = 0;i>Req[i];}Legal = false; Banker();

if(Legal){Processes[curProcess].IsEn d = true;for(int i = 0;i}}while(!IsEnd()); } return 0; } 3、程序运行结果INPUT: OPTION =0 CLAIM OF PROCESS

1 IS: 1

2

3 -1 -1 0 CLAIM OF PROCESS

2 IS: 2

3 1 1 -2 0 CLAIM OF PROCESS 3 IS: 1 2 5 -1 -2 0 MAXCLAIM OF PROCESS 1 IS: 6 MAXCLAIM OF PROCESS 2 IS: 7 MAXCLAIM OF PROCESS 3 IS:8 THE SYSTEM ALLOCTION PROCESS IS AS FOLLOWS: PROCESS CLAIM ALLOCATION REMAINDER (1) 1 1 1 9 RESOURCE IS ALLOCATED TO PROCESS 1 (2) 2 2 2 7 RESOURCE IS ALLOCATED TO PROCESS 2 (3) 3 1 1 6 RESOURCE IS ALLOCATED

TO PROCESS 3 (4) 1 2 3 4 RESOURCE IS ALLOCATED TO PROCESS 1 (5) 2 3 2 4 IF ALLOCATED,DEADLOCK MAY OCCUR (6) 1 2 3 4 THE REMAINDER IS LESS THAN PROCESS 2 CLAIMS (7) 3 0 0 10 PROCESS 3 HAS FINISHED, RETURN ITS RESOURSE THE WHOLE WORK IS COMPLETED

********************************** ********** 《计算机操作系统》实验三报告实验三题目:请求页式存储管理姓名:余果学号:14122602 实验环境:Microsoft Visual Studio 实验目的:近年来,于大规模集成电路和超大规模集成电路技术的发展,使存储器的容量不断扩大,价格大幅度下降。但从使用角度看,存储器的容量和成本总受到一定的限制。所以,提高存储器的效率始终是操作系统研究的重要课题之一。虚

拟存储技术是用来扩大内存容量的一种重要方法。学生应独立地用高级语言编写几个常用的存储分配算法,并设计一个存储管理的模拟程序,对各种算法进行分析比较,评测其性能优劣,从而加深对这些算法的了解。实验内容:为了比较真实地模拟存储管理,可预先生成一个大致符合实际情况的指令地址流。然后模拟这样一种指令序列的执行来计算和分析各种算法的访问命中率。本实验采用页式分配存储管理方案,并通过分析计算不同页面淘汰算法情况下的访问命中率来比较各种算法的优劣。另外也考虑到改变页面大小和实际存储器容量对计算结果的影响,从而可为算则好的算法、合适的页面尺寸和实存容量提供依据。实验是按下述原则生成指令序列的:(1) 50%的指令是顺序执行的。(2) 25%的指令均匀散布在前地址部分。(3) 25%的指令均匀散布在后地址部分。示例中选用最佳淘汰算法和最近最少使用页面淘汰算法计算

页面命中率。公式为假定虚存容量为32K,页面尺寸从1K 至8K,实存容量从 4 页至32 页。最佳淘汰算法这是一种理想的算法,可用来作为衡量其他算法优劣的根据,在实际系统中是难以实现的,因为它必须先知道指令的全部地址流。于本示例中已预生成了全部的指令地址流,故可计算出最佳命中率。该算法的准则是淘汰已满页表中不再访问或是最迟访问的的页。这就要求将页表中的页逐个与后继指令访问的所有页比较,如后继指令不在访问该页,则把此页淘汰,不然得找出后继指令中最迟访问的页面淘汰。可见最佳淘汰算法要花费比较长的运算时间。最近最少使用页淘汰算法这是一种经常使用的方法,有各种不同的实施方案,这里采用的是不断调整页表链的方法,即总是淘汰页表链链首的页,而把新访问的页插入链尾。如果当前调用页已在页表内,则把它再次调整到链尾。这样就能保证最近使用的页,总是处于靠近

链尾部分,而不常使用的页就移到链首,逐个被淘汰,在页表较大时,调整页表链的代价也是不小的。操作过程:编写程序:#include #include #include #include #include #include #include #include #include using namespace std; int adress[32];//全局变量数组,地址流int p;//全局变量p是一共有多少地址流void init(){//初始化函数,int t; srand(time(0));//随机产生指令序列p=12+rand()2; cout=m){queye++;} } if(flag==1){int temp[10]={0}; for(int i=0;itemp[i]){min=temp[i]; index=i;}}int l=leaflink[index];

leaflink[index]=leaflink[0];

leaflink[0]=l;}for(int j=0;j mfd[i].user=i;memset(f,0,sizeof f); for(int j=0;j>x;if(x=10){cout>s; switch(s){case 1: if(flag3){cout>mfd[x].p[0].fname;

cout>mfd[x].p[0].len;

cout>mfd[x].p[0].procode[i];for(int j=0;j>mfd[x].p[index].fname;

cout>mfd[x].p[index].len;

cout>mfd[x].p[index].procode[i];

for(int j=0;j>t;for(int i=0;i>file; for(int i=0;i>file1;for(int i=0;i>file2; for(int i=0;i实验体会:本次实验主要是模拟了一下文件系统,文件是我们平时接触最多也是最广的形式,即便是不会计算机的人们也可以通过这种操作文件来很方便地完成操作,而本次实验让我了解到了文件系统的内部实现,虽然仅仅是通过C++模拟的,但还是让我对它的原理有了更好的理解,也是对我们上课的内容的一个巩固。《计算机操作系统》实验五报告实验五题目:Linux文件系统实验实验目的:

return 0; } int

main(int argc,char *argv) {int i,ret; for(i=1;i{ret=ShowFileInfo(argv[i]); if(argc-i>1)printf(\} return ret; } // #include extern int etext,edata,end; main() { printf(\} // #include #include #include #include #include #define SHW_ADR(ID,I) printf(\extern int etext,edata,end; char *cptr=\char buffer1[25]; main() { void showit(char *);int i=0; printf(\ SHW_ADR(\SHW_ADR(\ SHW_ADR(\SHW_ADR(\ SHW_ADR(\strcpy(buffer1,\ write(1,buffer1,strlen(buffer1)+1);

for(;i void showit(char *p) { char *buffer2; SHW_ADR(\ if ((buffer2=(char *)malloc((unsigned)(strlen(p)+1)))!=NUL L){ strcpy(buffer2,p);printf(\ free(buffer2);}else { printf(\exit(1);} } //

#include #include int main(int argc,char *argv) { char s[1024]; FILE *fp; if((fp=fopen(argv[1],\ { while((fgets(s,1024,fp))!=(char *)0) puts(s);}else { fprintf(stderr,\exit(1);} exit(0); } 《计算机操作系统》实验六报告实验六题目:FAT 文件系统实验姓名:余果学号:14122602 实验环境:win95 虚拟机实验目的:从系统分析的角度出发,了解FAT 文件系统的组织结构和文件的存储方式。进一步理解操作系统文件管理的基本思想。实验内容: 1.了解 3 吋软盘的FAT 文件系统结构。 2.察看文件分配表的簇号链。 3.察看文件目录表中文件目录结构。 4.了解用簇号链映射的文件链式存储结构。 5.分析目录文件的组成。实验步骤: 1. 进入DEBUG 环境,装入FAT 文件系统结构。执行命令:L 0 0 0 21 说明:

将0 号驱动器中,逻辑扇区号从0 开始的共21H 个扇区读入内存,放在DS:0000 为起始的地址中。2.观察软盘中FAT12 文件系统结构。执行命令:D 0000 连续执行 D 命令,每次显示128 个字节,可见文件系统结构。FAT 文件系统结构如下:逻辑扇区号其中:Boot 引导程序FAT 文件分配表FDT 文件目录表软盘逻辑扇号与物理扇区的对应关系逻辑扇号0 # ——0 道0 面 1 扇逻辑扇号 1 H ~11H ——0 道0 面 2 ~18 扇逻辑扇号12 H ~23H —— 0 道1 面1 扇~18 扇逻辑扇号24 H ~35H —— 1 道0 面 1 扇~18 扇软盘有两面,每面80 个磁道,每个磁道18 个扇区,每个扇区512 个字节,所以软盘的容量是2*80*18*512 = 1474560, 1474560/1024/1024 大约为。3.分析文件分配表结构,了解用簇链映射的文件的链式存储结构。执行命令:D 200 思考:上面屏幕显示首

簇号为003 的文件共包括几个扇区?它分布在哪几个物理扇区上?答:首簇号为003 的文件共包括 2 个扇区,它分布在0 道0 面2、3 扇。4.观察软盘中文件目录表FDT 以及文件目录结构执行命令:L 0 0 0 21 说明:将逻辑扇区0H 开始的共21H 个物理扇区装入DS:0000H 起始的内存。执行命令:D 2600 说明:显示从2600H 地址开始的FDT 文件表。思考:①计算的软盘根目录最多可以容纳多少文件?答:软盘的文件目录表FDT共14个扇区,每个文件的目录登记项占用32 个字节,用作目录的一个扇区最多只能装入512/32=16 个文件。因此,软盘的根目录下最多可建文件或子目录224 个。②上图屏幕显示的文件的目录项中标示该文件的首簇号在何处?该文件是什么属性?答:首簇号在第 2 行的1A~1B 字节处,首簇号为002,该文件属于归档文件。书上显示的文件首簇号在第

6 行的1A~1B 字节处,首簇号为091,属归档文件。③书上面的屏幕显示第1~2 行目录项表示的是什么项目?答:第1~2 目录项表示卷标。5.观察软盘中文件目录表的长文件名目录结构思考:①书上面屏幕显示的2~3 行是什么目录项?答:长名的第一项,也是最后一项。②若有一个文件名共长34 个字符,要占多少目录项?答:四个目录项,三个长目录项和一个短目录项。6.自己动手做:①观察测试软盘的FDT 区,找到名为BAK 的文件目录。该文件是什么类型的文件?文件放在磁盘的哪个位置?占用几个存储单位?调出其内容看看。该文件为,属于归档文件。察看其首簇号为002,对应了数据区21H 逻辑扇区。执行:L 0 0 0 21 D 2600 察看内容执行:L 8000 0 21 8

操作系统实验报告--实验一--进程管理

实验一进程管理 一、目的 进程调度是处理机管理的核心内容。本实验要求编写和调试一个简单的进程调度程序。通过本实验加深理解有关进程控制块、进程队列的概念,并体会和了解进程调度算法的具体实施办法。 二、实验内容及要求 1、设计进程控制块PCB的结构(PCB结构通常包括以下信息:进程名(进程ID)、进程优先数、轮转时间片、进程所占用的CPU时间、进程的状态、当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删)。为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的轮转时间数以及进程需运行的时间片数的初始值均由用户给定。 2、系统资源(r1…r w),共有w类,每类数目为r1…r w。随机产生n进程P i(id,s(j,k),t),0<=i<=n,0<=j<=m,0<=k<=dt为总运行时间,在运行过程中,会随机申请新的资源。 3、每个进程可有三个状态(即就绪状态W、运行状态R、等待或阻塞状态B),并假设初始状态为就绪状态。建立进程就绪队列。 4、编制进程调度算法:时间片轮转调度算法 本程序用该算法对n个进程进行调度,进程每执行一次,CPU时间片数加1,进程还需要的时间片数减1。在调度算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了1个单位),这时,CPU时间片数加1,进程还需要的时间片数减1,并排列到就绪队列的尾上。 三、实验环境 操作系统环境:Windows系统。 编程语言:C#。 四、实验思路和设计 1、程序流程图

2、主要程序代码 //PCB结构体 struct pcb { public int id; //进程ID public int ra; //所需资源A的数量 public int rb; //所需资源B的数量 public int rc; //所需资源C的数量 public int ntime; //所需的时间片个数 public int rtime; //已经运行的时间片个数 public char state; //进程状态,W(等待)、R(运行)、B(阻塞) //public int next; } ArrayList hready = new ArrayList(); ArrayList hblock = new ArrayList(); Random random = new Random(); //ArrayList p = new ArrayList(); int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m为要模拟的进程个数,n为初始化进程个数 //r为可随机产生的进程数(r=m-n) //a,b,c分别为A,B,C三类资源的总量 //i为进城计数,i=1…n //h为运行的时间片次数,time1Inteval为时间片大小(毫秒) //对进程进行初始化,建立就绪数组、阻塞数组。 public void input()//对进程进行初始化,建立就绪队列、阻塞队列 { m = int.Parse(textBox4.Text); n = int.Parse(textBox5.Text); a = int.Parse(textBox6.Text); b = int.Parse(textBox7.Text); c = int.Parse(textBox8.Text); a1 = a; b1 = b; c1 = c; r = m - n; time1Inteval = int.Parse(textBox9.Text); timer1.Interval = time1Inteval; for (i = 1; i <= n; i++) { pcb jincheng = new pcb(); jincheng.id = i; jincheng.ra = (random.Next(a) + 1); jincheng.rb = (random.Next(b) + 1); jincheng.rc = (random.Next(c) + 1); jincheng.ntime = (random.Next(1, 5)); jincheng.rtime = 0;

操作系统实验报告

操作系统实验报告 ' 学号: 姓名: 指导老师: 完成日期: ~

目录 实验一 (1) 实验二 (2) 实验三 (7) 实验四 (10) 实验五 (15) 实验六 (18) 实验七 (22) \

实验一 UNIX/LINUX入门 一、实验目的 了解 UNIX/LINUX 运行环境,熟悉UNIX/LINUX 的常用基本命令,熟悉和掌握UNIX/LINUX 下c 语言程序的编写、编译、调试和运行方法。 二、实验内容 熟悉 UNIX/LINUX 的常用基本命令如ls、who、pwd、ps 等。 练习 UNIX/LINUX的文本行编辑器vi 的使用方法 熟悉 UNIX/LINUX 下c 语言编译器cc/gcc 的使用方法。用vi 编写一个简单的显示“Hello,World!”c 语言程序,用gcc 编译并观察编译后的结果,然后运行它。 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。 四、实验程序 #include <> #include <> int main() { printf ("Hello World!\n"); return 0; } 五、实验感想 通过第一次室验,我了解 UNIX/LINUX 运行环境,熟悉了UNIX/LINUX 的常用基本命令,熟悉和掌握了UNIX/LINUX 下c 语言程序的编写、编译、调试和运行方法。

实验二进程管理 一、实验目的 加深对进程概念的理解,明确进程与程序的区别;进一步认识并发执行的实质。 二、实验内容 (1)进程创建 编写一段程序,使用系统调用fork()创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示“a“;子进程分别显示字符”b“和字符“c”。试观察记录屏幕上的显示结果,并分析原因。 (2)进程控制 修改已编写的程序,将每一个进程输出一个字符改为每一个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析原因。 (3)进程的管道通信 编写程序实现进程的管道通信。使用系统调用pipe()建立一个管道,二个子进程P1 和P2 分别向管道各写一句话: Child 1 is sending a message! Child 2 is sending a message! 父进程从管道中读出二个来自子进程的信息并显示(要求先接收P1,再接收P2)。 三、实验要求 按照要求编写程序,放在相应的目录中,编译成功后执行,并按照要求分析执行结果,并写出实验报告。 四、实验设计 1、功能设计 (1)进程创建 使用fork()创建两个子进程,父进程等待两个子进程执行完再运行。 (2)进程控制 使用fork()创建两个子进程,父进程等待两个子进程分别输出一句话再运行。 (3)进程的管道通信 先创建子进程1,向管道写入一句话,子进程1结束后创建子进程2,向管道写入一句话,最后父进程从管道中读出。 2、数据结构 子进程和管道。 3、程序框图

上海大学操作系统(1)期末复习整理4.0版

第一章 1.操作系统的目标 方便性、有效性、可扩充性、开放性 2.操作系统的作用 1.OS作为用户与计算机硬件系统之间的接口(命令方式,系统调用方式和图标-窗口方式) 2. OS作为计算机系统资源的管理者(处理机、存储器、I/O设备以及文件(数据和程序)) 3. OS实现了对计算机资源的抽象(铺设在计算机硬件上的多层软件的集合) 3.推动操作系统发展的的主要动力 1.不断提高计算机资源利用率 2.方便用户 3. 器件的不断更新换代 4. 计算机体系结构的不断发展 5. 不断提出新的应用需求 4.未配置操作系统的计算机系统 1. 人工操作方式 2. 脱机输入/输出(Off-Line I/O)方式 脱机I/O 是指事先将装有用户程序和数据的纸带或卡片装入纸带输入机或卡片机,在外围机的控制下,把纸带或卡片上的数据或程序输入到磁带上。该方式下的输入输出由外围机控制完成,是在脱离主机的情况下进行的。而联机I/O方式是指程序和数据的输入输出都是在主机的直接控制下进行的。 5.单道批处理系统 存中始终只保持一道作业 在解决人机矛盾和CPU与I/O设备速度不匹配矛盾的过程中形成的 批处理系统旨在提高系统资源的利用率和系统吞吐量 缺点:系统中的资源得不到充分的利用(存中仅有一道程序,每逢该程序在运行中发出I/O 请求后,CPU便处于等待状态) 6.三大经典OS (1)多道批处理系统 从后备队列中选择若干个作业调入存,使它们共享CPU和系统中的各种资源 优缺点:(1) 资源利用率高。(多道程序交替运行,提高CPU,存,I/O利用率) (2) 系统吞吐量大。(CPU和其他资源保持忙碌状态,系统开销小) (3) 平均周转时间长。(作业要排队依次进行处理) (4) 无交互能力(修改和调试程序不便) 多道批处理系统需要解决的问题 (1) 处理机争用问题。 (2) 存分配和保护问题。 (3) I/O设备分配问题。 (4) 文件的组织和管理问题。 (5) 作业管理问题。 (6) 用户与系统的接口问题。

操作系统实验报告_实验五

实验五:管道通信 实验内容: 1.阅读以下程序: #include #include #include main() { int filedes[2]; char buffer[80]; if(pipe(filedes)<0) //建立管道,filedes[0]为管道里的读取端,filedes[1]则为管道的写入端 //成功则返回零,否则返回-1,错误原因存于errno中 err_quit(“pipe error”); if(fork()>0){ char s[ ] = “hello!\n”; close(filedes[0]); //关闭filedes[0]文件 write(filedes[1],s,sizeof(s)); //s所指的内存写入到filedes[1]文件内 close(filedes[1]); //关闭filedes[0]文件 }else{ close(filedes[1]); read(filedes[0],buffer,80); //把filedes[0]文件传送80个字节到buffer缓冲区内 printf(“%s”,buffer); close(filedes[0]); } } 编译并运行程序,分析程序执行过程和结果,注释程序主要语句。

2.阅读以下程序: #include #include #include main() { char buffer[80]; int fd; unlink(FIFO); //删除FIFO文件 mkfifo(FIFO,0666); //FIFO是管道名,0666是权限 if(fork()>0){ char s[ ] = “hello!\n”;

嵌入式操作系统实验报告

中南大学信息科学与工程学院实验报告 姓名:安磊 班级:计科0901 学号: 0909090310

指导老师:宋虹

目录 课程设计内容 ----------------------------------- 3 uC/OS操作系统简介 ------------------------------------ 3 uC/OS操作系统的组成 ------------------------------ 3 uC/OS操作系统功能作用 ---------------------------- 4 uC/OS文件系统的建立 ---------------------------- 6 文件系统设计的原则 ------------------------------6 文件系统的层次结构和功能模块 ---------------------6 文件系统的详细设计 -------------------------------- 8 文件系统核心代码 --------------------------------- 9 课程设计感想 ------------------------------------- 11 附录-------------------------------------------------- 12

课程设计内容 在uC/OS操作系统中增加一个简单的文件系统。 要求如下: (1)熟悉并分析uc/os操作系统 (2)设计并实现一个简单的文件系统 (3)可以是存放在内存的虚拟文件系统,也可以是存放在磁盘的实际文件系统 (4)编写测试代码,测试对文件的相关操作:建立,读写等 课程设计目的 操作系统课程主要讲述的内容是多道操作系统的原理与技术,与其它计算机原理、编译原理、汇编语言、计算机网络、程序设计等专业课程关系十分密切。 本课程设计的目的综合应用学生所学知识,建立系统和完整的计算机系统概念,理解和巩固操作系统基本理论、原理和方法,掌握操作系统开发的基本技能。 I.uC/OS操作系统简介 μC/OS-II是一种可移植的,可植入ROM的,可裁剪的,抢占式的,实时多任务操作系统内核。它被广泛应用于微处理器、微控制器和数字信号处理器。 μC/OS 和μC/OS-II 是专门为计算机的嵌入式应用设计的,绝大部分代码是用C语言编写的。CPU 硬件相关部分是用汇编语言编写的、总量约200行的汇编语言部分被压缩到最低限度,为的是便于移植到任何一种其它的CPU 上。用户只要有标准的ANSI 的C交叉编译器,有汇编器、连接器等软件工具,就可以将μC/OS-II嵌入到开发的产品中。μC/OS-II 具有执行效率高、占用空间小、实时性能优良和可扩展性强等特点,最小内核可编译至2KB 。μC/OS-II 已经移植到了几乎所有知名的CPU 上。 严格地说uC/OS-II只是一个实时操作系统内核,它仅仅包含了任务调度,任务管理,时间管理,内存管理和任务间的通信和同步等基本功能。没有提供输入输出管理,文件系统,网络等额外的服务。但由于uC/OS-II良好的可扩展性和源码开放,这些非必须的功能完全 可以由用户自己根据需要分别实现。 uC/OS-II目标是实现一个基于优先级调度的抢占式的实时内核,并在这个内核之上提供最基本的系统服务,如信号量,邮箱,消息队列,内存管理,中断管理等。 uC/OS操作系统的组成 μC/OS-II可以大致分成核心、任务处理、时间处理、任务同步与通信,CPU的移植等5个部分。如下图:

电大操作系统本科实验报告

中央广播电视大学计算机科学与技术专业操作系统(本科) 实验报告 院系:_______________ 班级:________ 学生姓名:_____________ 学号:______ 指导教师:________ 完成日期2015年月日

一、实验题目: Linux应用及shell编程 二、实验目的和要求: 目的 1.掌握Linux一般命令格式和常用命令。 2.学会使用vi编辑器建立、编辑文本文件。 3.了解shell的作用和主要分类。 4.学会bash脚本的建立和执行方式。 5.理解bash的基本语法。 6.学会编写简单的shell脚本。 要求 1.登录进入系统,修改个人密码。 2.使用简单命令:date,cal,who,echo,clear等,了解Linux命令格式。 3.进入vi。建立一个文件,如。进入插入方式,输入一个C语言程序的各行内容,故意制造几处错误。最后,将该文件存盘。回到shell状态下。 4.运行,编译该文件,会发现错误提示。理解其含义。 5.利用vi建立一个脚本文件,其中包括date,cal,pwd,ls等常用命令。然后以不同方式执行该脚本。 6.对主教材第2章中的适当例题进行编辑,然后执行。从而体会通配符、引号、输入输出重定向符、成组命令的作用;能正确使用自定义变量、位置参数、环境变量、输入/输出命令;能利用if语句、while语句、for语句和函数编写简单的脚本。 三、实验内容: 1.正确地登录和退出系统。 2.熟悉使用ls,cp,cat,等常用命令。 3.进入和退出vi。利用文本插入方式建立一个文件。

5.建立简单shell脚本并执行它。 四、实验技术和方法: Linux中各种脚本语言 五、实验环境: 虚拟机,ubuntuserver版,shell 六、实验步骤和结果: 1.正确地登录和退出系统。 使用exit命令退出系统 2.熟悉使用cat,cd,cp,ls,mor,rm,vi,who等常用命令。 2.使用vi编写 按:wq存储,并退出 5.建立shell脚本并执行它。 使用VI创建ex1文件,内容含三条命令date/pwd/cd.. 七、实验结果分析: 无 实训3 一、实验题目: 进程管理 二、实验目的和要求: 目的 1.加深对进程概念的理解,明确它与程序的区别,突出理解其动态性特征。

上海大学操作系统2复习资料

存储管理的主要功能: ●地址转换(逻辑地址转为物理地址 ●存储器的分配和回收 ●存储保护 ●存储扩充 地址转换(重定位) 逻辑地址—>物理地址;多道程序中编译程序不可能预支经编译后所得到的目标模块应放在内存何处,不能用绝对装入,要用可重定位装入。 ●静态转换:在装入时对目标程序中指令和数据地址进行修改 ●动态转换 ?地址转换推迟到真正执行时 ?静态的不允许程序运行时在内存中移动位置,动态的可以 分配方式 ?连续分配 ?单一连续分配 ◆单个程序独占 ?固定分区分配 ◆划分分区:分区大小相等、不等 ◆内存分配:按大小排序,分区使用表 ◆优点:能在内存中装入多道程序 ◆缺点:存储空间浪费 ?动态分区分配 ◆数据结构:空闲分区表;空闲分区链 ◆动态分区分配算法: ●顺序搜索算法(用于不太大的系统) ?首次适应:空闲分区地址递增,从链首开始寻找,满足要求后切割 ◆优点:优先利用低址,保留高址大空闲区,为以后到达的大作业 分配大的内存空间创造了条件 ◆缺点:低址部分被不断划分,留下许多难以利用的、很小的空闲 分区 ?循环首次适应:空闲分区地址递增,从上次找到的下个空闲分区开始 ◆优点:避免低址部分留下太多空闲分区 ◆缺点:缺乏大的空闲分区 ?最佳适应:空闲分区大小递增,找到的第一个 ◆优点:避免大材小用 ◆缺点:每次切割剩下的都是最小的,会留下难以利用的碎片

?最坏适应:找最大的一个空闲分区 ◆优点:使剩下的空间不会太小,产生碎片的可能性最小,对中小 作业有利 ◆缺点:缺乏大的空闲分区 ●索引搜索算法(大中型系统) ?快速适应:每一类相同容量的分区,单独设一个链表,查找时先去索 引表,然后去链表取下第一块即可(可将其理解为一个菜单) ◆优点:提高搜索速度 ◆缺点:分区归还主存时较为复杂;分配空闲分区时是以进程为单 位的,一个分区只属于一个进程,存在浪费(以空间换空间) ?伙伴系统:内容看书吧 ◆时间性能:劣于快速适应,优于顺序搜索 ◆空间性能:劣于顺序搜索优于快速适应 ?哈希算法 ◆直接根据分区大小利用哈希函数计算 ◆分配内存:m.size-u.size<=size ◆回收内存:回收区与前后空闲分区的邻接情况 ?动态可重定位分区分配 ◆比动态分区增加了紧凑功能 ◆地址变换在程序执行期间随着对每条指令或数据的访问自动进行(动态地址转 换) ●离散分配方式 ?分页存储管理:将用户程序的地址空间分为若干固定大小的区域(页) ◆页面:进程的逻辑地址空间分为若干页 ◆物理块:内存的物理地址空间分为若干块 ◆若干页装入多个可以不相邻的物理块 ◆最后一页经常装不满,形成的碎片为“页内碎片” ◆页面太小 ●减小内存碎片,内存利用率提高 ●每个进程占用页面过多,页表过长,占用大量内存 ●降低页面换进换出的效率 ◆页面太大 ●减少页表长度,提高换进换出效率 ●页内碎片增大 ◆页面适中大小:2的幂,通常为1kb-8kb ◆逻辑地址形式: ●页号+位移量/页内地址(一维) ◆页表:实现从页号到物理块号的地址映射 ●进程的各个页离散的存储在内存的任一物理块中 ●为了找到每个页面对应的物理块 ● ◆地址转换机构 ●硬件(一个页表项用一个寄存器)实现的动态地址转换机构 ●存储保护:页表长度寄存器

操作系统实验报告

《计算机操作系统》实验报告 教师: 学号: 姓名: 2012年3月6日 计算机学院

实验题目:请求页式存储管理(三) ----------------------------------------------------------------------------- 实验环境:VC6.0++ 实验目的:学生应独立地用高级语言编写几个常用的存储分配算法,并设计一个存储管理的模拟程序,对各种算法进行分析比较,评测其性能优劣,从而加深对这些算法的了解。实验内容: (1)编制和调试示例给出的请求页式存储管理程序,并使其投入运行。 (2)增加1~2种已学过的淘汰算法,计算它们的页面访问命中率。试用各种算法的命中率加以比较分析。(增加了FIFO) 操作过程: (1)产生随机数 (2)输入PageSize(页面大小1 /2/4/8 K) (pageno[i]=int(a[i]/1024)+1) (3)菜单选择

(4)OPT/ LRU/FIFO演示(pagesize=1K)

(5) 过程说明(PAGESIZE = 4K ) OPT :最佳置换算法(淘汰的页面是以后永不使用,或许是在最长时间内不再被访问的页面) //在Table 表中如果未找到,记录每个元素需要找的长度 //全部table 中元素找完长度,然后进行比较,找出最大的,进行淘汰 int max=0; int out; for(k=0;kmax){ max = table_time[k]; out = k; } }//找出最长时间,进行替换 table[out]=pageno[i]; page_out++;

实时操作系统报告

实时操作系统课程实验报告 专业:通信1001 学号:3100601025 姓名:陈治州 完成时间:2013年6月11日

实验简易电饭煲的模拟 一.实验目的: 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,基于多任务的模式的编程方法。锻炼综合应用多任务机制,任务间的通信机制,内存管理等的能力。 二.实验要求: 1.按“S”开机,系统进入待机状态,时间区域显示当前北京时间,默认模式“煮饭”; 2.按“C”选择模式,即在“煮饭”、“煮粥”和“煮面”模式中循环选择; 3.按“B”开始执行模式命令,“开始”状态选中,时间区域开始倒计时,倒计时完成后进入“保温”状态,同时该状态显示选中,时间区域显示保温时间; 4.按“Q”取消当前工作状态,系统进入待机状态,时间区域显示北京时间,模式为当前模式; 5.按“X”退出系统,时间区域不显示。 6.煮饭时长为30,煮粥时长为50,煮面时长为40. 三.实验设计: 1.设计思路: 以老师所给的五个程序为基础,看懂每个实验之后,对borlandc的操作有了大概的认识,重点以第五个实验Task_EX为框架,利用其中界面显示与按键扫描以及做出相应的响应,对应实现此次实验所需要的功能。 本次实验分为界面显示、按键查询与响应、切换功能、时钟显示与倒计时模块,综合在一起实验所需功能。 2.模块划分图: (1)界面显示: Main() Taskstart() Taskstartdispinit() 在TaskStartDispInit()函数中,使用PC_DispStr()函数画出界面。

(2)按键查询与响应: Main() Taskstart() 在TaskStart()函数中,用if (PC_GetKey(&key) == TRUE)判断是否有按键输入。然后根据key 的值,判断输入的按键是哪一个;在响应中用switch语句来执行对应按键的响应。 (3)切换功能: l计数“C”按 键的次数 M=l%3 Switch(m) M=0,1,2对应于煮饭,煮粥,煮面,然后使用PC_DispStr()函数在选择的选项前画上“@”指示,同时,在其余两项钱画上“”以“擦出”之前画下的“@”,注意l自增。 四.主要代码: #include "stdio.h" #include "includes.h" #include "time.h" #include "dos.h" #include "sys/types.h" #include "stdlib.h" #define TASK_STK_SIZE 512 #define N_TASKS 2 OS_STK TaskStk[N_TASKS][TASK_STK_SIZE]; OS_STK TaskStartStk[TASK_STK_SIZE]; INT8U TaskData[N_TASKS];

操作系统实验报告

操作系统实验报告 集团企业公司编码:(LL3698-KKI1269-TM2483-LUI12689-ITT289-

实验二进程调度1.目的和要求 通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。 2.实验内容 阅读教材《计算机操作系统》第二章和第三章,掌握进程管理及调度相关概念和原理。 编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。 程序要求如下: 1)输出系统中进程的调度次序; 2)计算CPU利用率。 3.实验环境 Windows操作系统、VC++6.0 C语言 4设计思想: (1)程序中进程可用PCB表示,其类型描述如下:

structPCB_type { intpid;//进程名 intstate;//进程状态 2——表示“执行”状态 1——表示“就绪”状态 0——表示“阻塞”状态 intcpu_time;//运行需要的CPU时间(需运行的时间片个数) } 用PCB来模拟进程; (2)设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。队列类型描述如下: structQueueNode{ structPCB_typePCB; StructQueueNode*next; } 并设全程量: structQueueNode*ready_head=NULL,//ready队列队首指针 *ready_tail=NULL,//ready队列队尾指 针

上海大学操作系统(二)实验报告(全)

评分: SHANGHAI UNIVERSITY 操作系统实验报告 学院计算机工程与科学 专业计算机科学与技术 学号 学生姓名

《计算机操作系统》实验一报告 实验一题目:操作系统的进程调度 姓名:张佳慧学号 :12122544 实验日期: 2015.1 实验环境: Microsoft Visual Studio 实验目的: 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。例如,简单轮转法和优先数法等。本实习可加深对于进程调度和各种调度算法的理解。实验内容: 1、设计一个有n个进程工行的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块通常应包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。 2、调度程序应包含2~3种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。 3、系统应能显示或打印各进程状态和参数的变化情况,便于观察诸进程的调度过程。 操作过程: 1、本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。进程控制块结构如下: 进程控制块结构如下: PCB 进程标识数 链指针 优先数/轮转时间片数 占用 CPU 时间片数 进程所需时间片数 进程状态 进程控制块链结构如下:

其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAID—进程就绪链链尾指针。2、算法与框图 (1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减 1,说明它已运行了一个时间片,优先数也减 3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。 (2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加 1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。 (3) 程序框图

操作系统实验报告-中南大学

操作系统原理试验报告 班级: 学号: 姓名:

实验一:CPU调度 一、实验内容 选择一个调度算法,实现处理机调度。 二、实验目的 多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优先占用处理机。本实验模拟实现处理机调度,以加深了解处理机调度的工作。 三、实验题目 1、设计一个按优先权调度算法实现处理机调度的程序; 2、设计按时间片轮转实现处理机调度的程序。 四、实验要求 PCB内容: 进程名/PID; 要求运行时间(单位时间); 优先权; 状态: PCB指针; 1、可随机输入若干进程,并按优先权排序; 2、从就绪队首选进程运行:优先权-1/要求运行时间-1 要求运行时间=0时,撤销该进程 3、重新排序,进行下轮调度 4、最好采用图形界面; 5、可随时增加进程; 6、规定道数,设置后备队列和挂起状态。若内存中进程少于规定道数,可自动从后备 队列调度一作业进入。被挂起进程入挂起队列,设置解挂功能用于将指定挂起进程解挂入就绪队列。 7、每次调度后,显示各进程状态。 实验二:内存管理 一、实验内容 主存储器空间的分配和回收 二、实验目的 帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。 三、实验题目 在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。

四、实验要求 1、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表; 表目内容:起址、长度、状态(未分/空表目) 2、结合实验一,PCB增加为: {PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB指针} 3、采用最先适应算法分配主存空间; 4、进程完成后,回收主存,并与相邻空闲分区合并 .1、Vo类说明(数据存储结构) 进程控制块PCB的结构: Public class PCB{ //进程控制块PCB,代表一个进程 //进程名,作为进程的标识; private String name; //要求运行时间,假设进程运行的单位时间数; private int time; //赋予进程的优先权,调度时总是选取优先数小的进程先执行; private int priority; //状态,假设有“就绪”状态(ready)、“运行”状态(running)、 //“后备”状态(waiting)、“挂起”状态(handup) private String state; //进程存放在table中的位置 private int start; //进程的大小 private int length; //进程是否进入内存,1为进入,0为未进入 private int isIn; //进程在内存中的起始位置 private int base; //进程的大小 private int limit; //一些get和set方法以及构造器省略… };

操作系统(2)实验六

SHANGHAI UNIVERSITY <操作系统>实验报告 学院计算机工程与科学学院学号10122050 姓名王杰 指导老师张建 日期2014.03.07

实验六FAT文件系统实验 一、实验目的: 1、从系统分析的角度出发,了解FAT文件系统的组织结构和文件的存储方式。 2、进一步理解操作系统文件管理的基本思想。 二、实验内容: 1..进入DEBUG环境,装入FAT文件系统结构。 执行命令:L 0 0 0 21 2.观察1.44M软盘中FAT12文件系统结构。 执行命令:D 0000 软盘有两面,每面80个磁道,每个磁道18个扇区,每个扇区512个字节,所以软盘的容量是2*80*18*512 = 1474560, 1474560/1024/1024大约为1.44M。 3.分析文件分配表结构,了解用簇链映射的文件的链式存储结构。 执行命令:D 200

◆思考:上面屏幕显示首簇号为003的文件共包括几个扇区?它分布在哪几个物理扇区上? 答:首簇号为003的文件共包括2个扇区,它分布在0道0面2、3扇。 4.观察1.44M软盘中文件目录表FDT以及文件目录结构 执行命令:L 0 0 0 21 说明:将逻辑扇区0H开始的共21H个物理扇区装入DS:0000H起始的内存。 执行命令:D 2600 说明:显示从2600H地址开始的FDT文件表。 思考:①计算1.44M的软盘根目录最多可以容纳多少文件? 答:1.44MB软盘的文件目录表FDT共14个扇区,每个文件的目录登记项占用32个字

节,用作目录的一个扇区(512字节)最多只能装入512/32=16个文件。因此,1.44MB软盘的根目录下最多可建文件或子目录224个。 ②上图屏幕显示的文件BAK.txt的目录项中标示该文件的首簇号在何处?该文件是什么属性? 答:首簇号在第2行的1A~1B字节处,首簇号为002,该文件属于归档文件。 书上显示的文件office.txt首簇号在第6行的1A~1B字节处,首簇号为091,属归档文件。 ③书上面的屏幕显示第1~2行目录项表示的是什么项目? 答:第1~2目录项表示卷标。 5.观察1.44M软盘中文件目录表的长文件名目录结构 思考:①书上面屏幕显示的2~3行是什么目录项? 答:长名的第一项,也是最后一项。 ②若有一个文件名共长34个字符,要占多少目录项? 答:四个目录项,三个长目录项和一个短目录项。 6.自己动手做: ①观察测试软盘的FDT区,找到名为BAK的文件目录。该文件是什么类型的文件?文件放在磁盘的哪个位置?占用几个存储单位?调出其内容看看。 该文件为BAK.txt,属于归档文件。察看其首簇号为002,对应了数据区21H逻辑扇区。执行:L 0 0 0 21 D 2600 察看内容执行:L 8000 0 21 8

操作系统实验报告

操作系统教程实验报告 专业班级 学号 姓名 指导教师

实验一WINDOWS进程初识 1、实验目的 (1)学会使用VC编写基本的Win32 Consol Application(控制台应用程序)。 (2)掌握WINDOWS API的使用方法。 (3)编写测试程序,理解用户态运行和核心态运行。 2、实验内容和步骤 (1)编写基本的Win32 Consol Application 步骤1:登录进入Windows,启动VC++ 6.0。 步骤2:在“FILE”菜单中单击“NEW”子菜单,在“projects”选项卡中选择“Win32 Consol Application”,然后在“Project name”处输入工程名,在“Location”处输入工程目录。创建一个新的控制台应用程序工程。 步骤3:在“FILE”菜单中单击“NEW”子菜单,在“Files”选项卡中选择“C++ Source File”, 然后在“File”处输入C/C++源程序的文件名。 步骤4:将清单1-1所示的程序清单复制到新创建的C/C++源程序中。编译成可执行文件。 步骤5:在“开始”菜单中单击“程序”-“附件”-“命令提示符”命令,进入Windows “命令提示符”窗口,然后进入工程目录中的debug子目录,执行编译好的可执行程序:E:\课程\os课\os实验\程序\os11\debug>hello.exe 运行结果 (如果运行不成功,则可能的原因是什么?) : (2)计算进程在核心态运行和用户态运行的时间 步骤1:按照(1)中的步骤创建一个新的“Win32 Consol Application”工程,然后将清单1-2中的程序拷贝过来,编译成可执行文件。 步骤2:在创建一个新的“Win32 Consol Application”工程,程序的参考程序如清单1-3所示,编译成可执行文件并执行。 步骤3:在“命令提示符”窗口中运行步骤1中生成的可执行文件,测试步骤2中可执行文件在核心态运行和用户态运行的时间。 E:\课程\os课\os实验\程序\os12\debug>time TEST.exe 步骤4:运行结果 (如果运行不成功,则可能的原因是什么?) : 步骤5:分别屏蔽While循环中的两个for循环,或调整两个for循环的次数,写出运行结果。 屏蔽i循环:

嵌入式实时操作系统实验报告

嵌入式实时操作系统实验报告 任务间通信机制的建立 系别计算机与电子系 专业班级***** 学生姓名****** 指导教师 ****** 提交日期 2012 年 4 月 1 日

一、实验目的 掌握在基于嵌入式实时操作系统μC/OS-II的应用中,任务使用信号量的一般原理。掌握在基于优先级的可抢占嵌入式实时操作系统的应用中,出现优先级反转现象的原理及解决优先级反转的策略——优先级继承的原理。 二、实验内容 1.建立并熟悉Borland C 编译及调试环境。 2.使用课本配套光盘中第五章的例程运行(例5-4,例5-5,例5-6),观察运行结果,掌握信号量的基本原理及使用方法,理解出现优先级反转现象的根本原因并提出解决方案。 3.试编写一个应用程序,采用计数器型信号量(初值为2),有3个用户任务需要此信号量,它们轮流使用此信号量,在同一时刻只有两个任务能使用信号量,当其中一个任务获得信号量时向屏幕打印“TASK N get the signal”。观察程序运行结果并记录。 4. 试编写一个应用程序实现例5-7的内容,即用优先级继承的方法解决优先级反转的问题,观察程序运行结果并记录。 5.在例5-8基础上修改程序增加一个任务HerTask,它和YouTask一样从邮箱Str_Box里取消息并打印出来,打印信息中增加任务标识,即由哪个任务打印的;MyTask发送消息改为当Times为5的倍数时才发送,HerTask接收消息采用无等待方式,如果邮箱为空,则输出“The mailbox is empty”, 观察程序运行结果并记录。 三、实验原理 1. 信号量 μC/OS-II中的信号量由两部分组成:一个是信号量的计数值,它是一个16位的无符号整数(0 到65,535之间);另一个是由等待该信号量的任务组成的等待任务表。用户要在OS_CFG.H中将OS_SEM_EN开关量常数置成1,这样μC/OS-II 才能支持信号量。

操作系统实验报告

《操作系统原理》实验报告 实验项目名称:模拟使用银行家算法判断系统的状态 一、实验目的 银行家算法是操作系统中避免死锁的算法,本实验通过对银行家算法的模拟,加强对操作系统中死锁的认识,以及如何寻找到一个安全序列解除死锁。 二、实验环境 1、硬件:笔记本。 2、软件:Windows 7 , Eclipse。 三、实验内容 1.把输入资源初始化,形成资源分配表; 2.设计银行家算法,输入一个进程的资源请求,按银行家算法步骤进行检查; 3.设计安全性算法,检查某时刻系统是否安全; 4.设计显示函数,显示资源分配表,安全分配序列。 四、数据处理与实验结果 1.资源分配表由进程数组,Max,Allocation,Need,Available 5个数组组成; 实验采用数据为下表: 2.系统总体结构,即菜单选项,如下图

实验的流程图。如下图 3.实验过程及结果如下图所示

1.首先输入进程数和资源类型及各进程的最大需求量 2.输入各进程的占有量及目前系统的可用资源数量 3.初始化后,系统资源的需求和分配表 4.判断线程是否安全

5.对线程进行死锁判断 五、实验过程分析 在实验过程中,遇到了不少问题,比如算法无法回滚操作,程序一旦执行,必须直接运行到单个任务结束为止,即使产生了错误,也必须等到该项任务结束才可以去选择别的操作。但总之,实验还是完满的完成了。 六、实验总结 通过实验使我对以前所学过的基础知识加以巩固,也对操作系统中抽象理论知识加以理解,例如使用Java语言来实现银行家算法,在这个过程中更进一步了解了银行家算法,通过清晰字符界面能进行操作。不过不足之处就是界面略显简洁,对于一个没有操作过计算机的人来说,用起来可能还是有些难懂。所以,以后会对界面以及功能进行完善,做到人人都可以看懂的算法。

操作系统实验报告

操作系统实验报告 实验名称: 系统的引导 所在班级: 指导老师: 老师 实验日期: 2014年3 月29 日

一、实验目的 ◆熟悉hit-oslab实验环境; ◆建立对操作系统引导过程的深入认识; ◆掌握操作系统的基本开发过程; ◆能对操作系统代码进行简单的控制,揭开操作系统的神秘面纱。 二、实验容 1. 阅读《Linux核完全注释》的第6章引导启动程序,对计算机和Linux 0.11的引导过程进行初步的了解。 2. 按照下面的要求改写0.11的引导程序bootsect.s。 3. 有兴趣同学可以做做进入保护模式前的设置程序setup.s。 4. 修改build.c,以便可以使用make BootImage命令 5. 改写bootsect.s主要完成如下功能: bootsect.s能在屏幕上打印一段提示信息XXX is booting...,其中XXX是你给自己的操作系统起的名字,例如LZJos、Sunix等。 6. 改写setup.s主要完成如下功能: bootsect.s能完成setup.s的载入,并跳转到setup.s开始地址执行。而setup.s 向屏幕输出一行"Now we are in SETUP"。setup.s能获取至少一个基本的硬件参数(如存参数、显卡参数、硬盘参数等),将其存放在存的特定地址,并输出到屏幕上。setup.s不再加载Linux核,保持上述信息显示在屏幕上即可。 三、实验环境

本实验使用的系统是windows系统或者是Linux系统,需要的材料是osexp。 四、实验步骤 1. 修改bootsect.s中的提示信息及相关代码; 到osexp\Linux-0.11\boot目录下会看到图1所示的三个文件夹,使用UtraEdit 打开该文件。将文档中的98行的mov cx,#24修改为mov cx,#80。同时修改文档中的第246行为图2所示的情形。 图1图2 图3 2. 在目录linux-0.11\boot下,分别用命令as86 -0 -a -o bootsect.obootsect.s和 ld86 -0 -s -obootsectbootsect.o编译和bootsect.s,生成bootsect文件; 在\osexp目录下点击MinGW32.bat依此输入下面的命令: cd linux-0.11 cd boot as86 -0 -a -o bootsect.obootsect.s ld86 -0 -s -o bootsectbootsect.o

相关文档
最新文档