操作系统进程调度实验报告问题

运行态 进程调度
落选 发生等待事件 就绪态 等待事件结束 阻塞态
评分标准:基本状态2分,进城转换图4分 7、答案:⑴10:00⑵60分钟⑶10:25⑷11:10⑸120分钟⑹10:00⑺10:25⑻70分钟
1.简述具有通道的系统中独占设备的一般分配过程。(3分) 2.比较电梯调度算法和最短寻找时间优先调度算法。(6分) 3.为了实现虚拟页式存储管理,页表应该包含哪些内容?(4分) 4.简述一种LRU页面置换算法的实现方案。(5分) 6.列举引起进程创建的事件。简述进程创建的过程。(6分) 7. 若系统有某类资源m×n+1个,允许进程执行过程中动态申请该类资源,但在该系统上运行的每一个进程对该资源的占有量任何时刻都不会超过m+1个。当进程申请资源时只要有资源尚未分配完则满足它的申请,但用限制系统中可同时执行的进程数来防止发生死锁,你认为进程调度允许同时执行的最大进程数应该是多少?并证明之。(7分) 1、答案:可按下述步骤进行设备分配: ①分配设备。②分配控制器。③分配通道。 2、答案:①“电梯调度”与“最短寻找时间优先”都是要尽量减少移动臂移动时所花的时间;②不同的是“最短寻找时间优先”不考虑臂的移动方向,总是选择离当前读写磁头最近的那个柱面的访问者,这种选择可能导致移动臂来回改变移动方向;“电梯调度”是沿着臂的移动方向去选择离当前读写磁头最近的那个柱面的访问者,仅当沿臂移动方向无等待访问者时才改变臂的移动方向;③由于移动臂改变方向是机械动作,速度相对较谩。相比之下,电梯调度算法是一种简单、实用且高效的调度算法。但是,在实现时除了要记住读写磁头的当前位置外,还必须记住移动臂的移动方向。 3、答案:在分页虚拟存储管理时使用的页表,最少包括以下内容:物理块号、状态位、修改位、外存地址。 4、答案:方案多个,下面仅是其一:为了实现LRU,必须在主存维护一张作业所有页的链表,表中各项按访问时间先后排序,最近访问的页排在表头,最久末用的页排在表尾,这就是所谓的栈式算法。每当要置换一页时,必须对链表中的各项进行修改。若被访问的页在主存,则将其移到表头,调整相应项。若不在主存,则将新调的页放表头,其它项依次后移,将表尾一项挤掉。 6、答案:引起进程创建的典型事件有①分时系统中的用户登录、②批处理系统中的作业调度、③系统提供服务、④应用进程本身的应用请求等。创建进程:①申请空白PCB。②为新进程分配资源。③初始化进程控制块。④将新进程插入就绪队列。 7、答案:假设系统中有x个进程的进程,则资源至少要有m×x+1个,由于系统资源有m×n+1个,则可列出不等式:m×x+1≤m×n+1解不等式,得到x≤n,所以系统允许同时执行的最大进程数为n。 证明:假设在系统允许同时执行的最大进程数为n时,仍然出现了死锁,此时应该存在一组进程进程都在等待资源,而且系统已无资源可用。则此时该组进程最多n个,每个进程没有执行完时最多占用m个资源,所以现在系统分配出去的资源最多m×n,少于系统资源m×n+1,所以不可能有死所出现。 因此,系统允许同时执行的最大进程数为n时系统不会有死锁发生
1、有一个具有两道作业的批处理系统,有如下表所示的作业序列(表中所列作业优先级即为进程优先级,数值越小优先级越高)。分别列出下面两种情况下所有作业进入内存时刻及结束时刻,并计算其平均周转时间。 作业名 A B C D 到达时刻 10:00 10:20 10:30 10:40 估计运行时间(分) 40 30 50 20 优先级 5 3 4 6 假设采用短作业优先的调度算法,进程调度采用优先级为基础的剥夺式算法。(6分)10:00 A到达,无竞争,A开始运行 10:20 B到达,进入内存,B的优先级高于A,A停止,B运行(1分) 10:30 C到达,不能进入内存(1分) 10:40 D到达,不能进入内存 10:50 B运行结束,C和D竞争进入内存,D进入,A运行(1分) 11:10 A运行结束,C进入内存,C运行(1分) 12:00 C运行结束,D运行 12:20全部结束 T=(70+30+90+100)/4=72.5分钟(2分) 2、在一分页存储管理系统中,逻辑地址长度为16位,页面大小为4096字节,现有一逻辑地址为2F6AH,且第0、1、2页依次存放在物理块5、10、11中,问相应的物理地址为多少?(6分) 由题意可知,本页式系统的逻辑地址结构为:(3分) 页号P 页内位移W
0 逻辑地址2F6AH的二进制表示:分) 页号为2,在第11块中,故物理地址为BF6AH。(2分) 3、有一个仓库,可以存放A和B两种产品,但要求:1)每次只能存入一种产品(A或B);2)-N<A产品数量―B产品数量<M。其中,N和M是正整数。试用同步算法描述产品A与产品B的入库过程。(13分) 答案: int mutex=1; int sa=M-1; int sb=N-1; main() {while(1)
{取一个产品;
if(取的是A产品) {wait(sa);
wait(mutex);
将产品入库;
signal(mutex);
signal(sb); }
else {wait(sb);
wait(mutex);
将产品入库;
signal(mutex);
signal(sa); } } } 4、在一个系统中,不采用死锁避免和预防措施,但当死锁发生后需要能够检测出来,请设计一个可行的死锁检测方案 答案:死锁检测的数据结构类似银行家算法(略):1)可利用资源向量available:表示m类资源中每一类资源的可用数目;2)把不占用资源的进程向量allocation=0记入表L中,即Li∪L;3)从进程集合中找到一个requesti≤work的进程,做如下处理:将其资源分配图简化,释放出资源,增加工作向量work=work+allocation;将他记入L表中;4)若不能把所有的进程都记入L表中,则表明系统状态S的资源分配图是不可完全简化的,因此该系统状态将发生死锁。 5、设有A B、C三个进程,它们共享十个资源,每个进程最大需求量分别为4,7,8,它们对资源请求的序列如下表:(8分) 序号 1 2 3 4 5 6 ?? 进程 A B C B C A ?? 申请资源数 2 4 2 2 2 2 ?? ⑴请画出执行完序号4时的资源分配矩阵;(2分) ⑵为使系统不发生死锁,执行完序号6时,3个进程各处于什么状态,获得多少同类资源?(3分) ⑶按照上题时的状态,系统会发生死锁吗?为什么?(3分) 解题步骤及其评分标准: (2
2) (2分) A运行,B、C阻塞 4、4、2
(3分) 不会,A已得到全部资源,运行结束后释放资源可以使B、C正常结束 (2分)
6、在实现文件系统时,为了加快文件目录的检索速度,可利用“FCB分解法”。假设目录文件存放在磁盘上,每个盘块512B。FCB占64B,其中文件名占8B,通常将FCB分解为符号目录项和基本目录项两部分,其中符号目录项大小为10B:(8分) ⑴基本目录项大小为多少字节?(2分) ⑵假设某一目录文件共有254个FCB,试分别给出采用分解法之前和之后,对该目录文件分别的平均访问磁盘次数:(3分) ⑶一般地,若目录文件分解前占用N个盘块,分解后符号目录文件占用M个盘块,请给出访问磁盘次数减少的条件:(3分 解题步骤及其评分标准: 64-8=56B (2分) 分解之前:平均访问次数为(64×254/512+1)/2=165
分解之后:平均访问次数为(10×254/512+1)/2=3 (2分) 条件为:分解前平均读盘次数-分解后平均访问符号目录文件的读盘次数>1, 即N/2-M/2>1,故M<N-2。 (3分) 7、若在一分页存储管理系统中,某作业的页表如下表所示。已知页面大小为1024字节,试将逻辑地址、转化为相应的物理地址。(4分) 页号 0 1 2 3 解题步骤及其评分标准: 设页号为P,页内位移为W,逻辑地址为A,页面大小为L,则: P=int(A/L)
W=A mod L ⑴1011有:P=int()=0
W=1011 mod
第0页在第2块,故物理地址:3059 ⑵2148有:P=int()=2
W=2148 mod
第2页在第1块,故物理地址:1124 ⑶3000有:P=int()=2
W=3000 mod
第2页在第1块,故物理地址:1976 ⑷4000有:P=int()=3
W=4000 mod
第3页在第6块,故物理地址:7072 8、现有四个进程R1、R2、W1、W2,它们共享可以存放一个数的缓冲器B。进程R1每次把来自键盘的一个数存入缓冲器B中,供进程W1打印输出;进程R2每次从磁盘上读一个数存放到缓冲器B中,供进程W2打印输出。为防止数据的丢失和重复打印,问怎样用信号量操作来协调这四个进程的并发执行。(13分) 1、目的:考查学生对同步问题的掌握;满分值:13分;答案: 四个进程可如下描述: Semaphore sb=1,sx=0,sy=0; Item B; Void
{ 接收来自键盘的数; x=接收的数; wait(sb); B:=x;
while(1) 从磁盘上读一个数; y:=读入的数;
wait(sb); B:=y;
{ wait(sx); k:=B;
打印k中数;
{ wait(sy); j:=B;
wait(sb); 打印j中数;
} } main() { } } 块号 2 3 1 6 signal(sb);
W2( ) Signal(sx);
{ Signal(sy);
W2(); } } 9、试设计在虚拟存储环境下实现简单的clock页面置换的可行方案。(12分) 使用Clock算法时,只须为每页设置一个访问位。在将内存中的所有页面都通过链接指针链成一个循环队列(4分)。当某页被访问时,其访问位置1。置换算法在选择一页淘汰时,只须检查其访问位,如果是0,就选择该页换出;若为1,则重新将它复0、暂不换出而给该页第二次驻留内存的机会(4分)。再按照FIFO算法检查下一个页面。当检查到队列中的最后―个页面时,若其访问值仍为1、则再返回到队首再去检查第一个页面(4分)
10、某系统采用空闲区链结构对内存的空闲区进行说明,用UPT表结构说明内存的占用情况。UPT表和空闲链结构分别如下所示: #define
/*已分分区表结构*/ {
/*分区起始地址*/
/*分区长度*/ int
/*表目状态,1表示有用登记项,0表示空表目*/ ?.. }UTABLE[m]; Typedef
/*空闲分区链表结构*/ {
* /*上一个分区起始地址*/ FREGION
* /*下一个分区起始地址*/
/*分区长度*/
?..?.. }FREGION;
/*空闲分区链表头指针*/
UPT; /*已分分区表*/ 函数过程:没有更多推荐了,
不良信息举报
举报内容:
操作系统实践(9)——进程、多进程、系统调用、进程调度
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长! 您现在的位置:&&>>&&>>&&>>&操作系统实验报告+进程调度+作业调度等正文
操作系统实验报告+进程调度+作业调度等
操作系统实验报告+进程调度+作业调度等
梁振芳  
  []操作系统1、进程调度2、作业调度3、主存空间的分配与回收 4、文件系统学生______计算机学院______ 班级____网络工程(3)班_____ 学
号___________ 学生姓名________张菲__ _____ 指导_______胡欣如
_______2009
20 日班_____ 姓名
教师评定_________________ 实验
进程调度一、实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的及进程调度算法的理解,[|]。二、实验内容和要求编写并调试一个模拟的进程调度程序,采用“简单片轮转法”调度算法对五个进程进行调度。每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、到达时间、需要运行时间、已运行时间、进程状态等等。进程的到达时间及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。 进程的运行时间以时间片为进行计算。
每个进程的状态可以是就绪 W(Wait)、运行R(Run)两种状态之一。就绪进程获得 CPU后都只能运行一个时间片。用运行时间加1来表示。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应分配时间片给就绪队列中排在该进程之后的进程,并将它插入就绪队列队尾。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。 三、实验主要仪器设备和硬件:IBM-PC或兼容机 软件环境:C语言编程环境 四、实验原理及设计1、进程调度算法:采用多级反馈队列调度算法。其基本是:当一个新进程进入内在后,首先将它放入第一个队列的末尾,按FCFS原则排队等待高度。当轮到该进程时,如能在该时间片内完成,便可准备撤离系统;如果它在一个时间片结束时尚为完成,调度程序便将该进程转入第二队列的末尾,再同样地按FCFS原则等待调度执行,以此类推。2、实验步骤:(1)按先来先服务算法将进程排成就绪队列。(2)检查所有队列是否为空,若空则退出,否则将队首进程调入执行。(3)检查该运行进程是否运行完毕,若运行完毕,则撤消进程,否则,将该进程插入到下一个逻辑队列的队尾。(4)是否再插入新的进程,若是则把它放到第一逻辑队列的列尾。 (5)重复步骤(2)、(3)、(4),直到就绪队列为空。五、流程图六、结果过程及截图 初始化队列按Y键继续运行进程:按Y键继续运行进程:运行若干次后的状态:添加新的进程:七、所遇困难的解决以及在这个多级反馈的实验中,我采取了用一条实际上的链表队列来模拟多个逻辑上的队列,通过维护几个链表的状态信息来找到每个进程运行完后应该插入的地方,还有一个标志位Fend用来表明新插入的队列的位置。虽然实验原理很简单,但是在编写代码的过程中遇到了不少的问题,在两个小时之内已经完成的大体代码的编写,但是之中存在不少的问题,导致了用了差不多四个小时的时间去调试才把它弄好,这主要归咎于在开始设计代码的不太合理,在后期使得代码结构有些混乱,使得调试更加的麻烦,以及对编程的不熟悉。通过这个实验不仅使我对进程的调度算法有了更深的,使得理论知识得到的,也使我的编程能力得到了进一步提高。 七、思考题1、 不同调度算法的调度策略,比较不同调度算法的优缺点,它们的适用范围。 答:动态有限权算法:动态优先权是指在创建进程时所创建的优先权,会随进程的推进或者等待时间的增加而改变,以便获得更好的调度性能。处理机为每个进程分配一定的时间片,在就绪队列中,优先权高的进程将优先获得处理机,进程在进去运行完响应的时间片后,如没完成,优先权减1,从新回到就绪队列等待分配处理机。时间片的轮转法:系统将所有进程排成一个队列,按照先来先服务的原则,对队列首的进程进行处理,每个进程在用完自己的时间片后,从新回到队尾进行排队。每运行一次,进程的需要时间减1,直到就绪队列为空! 八、源代码#include #include#include#define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0#define TIME 2//时间片长度typedef struct pcb{//进程管理块
char name[10];//进程名字
//进程状态//进程所在的队列//进程需要运行的时间//进程已经运行的时间//进程在本队列可运行的时间片struct pcb *}PCB;PCB *ready = NULL, *pinsert = NULL, *pfend = NULL,*p =NULL; 位置的变量int geti() //使用户仅能输入整数 { int i = 0; fflush(stdin); ch = getchar(); while(ch == '\n'){//就绪队列,进程插入printf(fflush(stdin);
ch = getchar(); }while(ch != '\n'){if(ch > '9' || chfflush(stdin); i = 0; ch = getchar();}else{
i*10 + (ch - '0');
}ch = getchar();}}void findpos()//更新状态量 {PCB *ps =if(!ps || !ps -> link || (ps-> link->queue - ps->queue) > 1)
pinsert = else{
while (ps->link && ps ->link->queue != (pfend ->queue +2))
}ps = ps-> pinsert =}void insert()//插入进程 {if(!ready ){ready =pfend =
pinsert =}else if(ready ->queue == 1){//第一队列存在p->link = pfend-> pfend->link = pfend = findpos();}void input()/*建立进程控制块函数*/ {int i,printf(for(i=0; ip=getpch(PCB);printf(printf(p->queue =1;p->etime = TIME; p->link=NULL;insert();/*调用insert函数*/ } else{
}findpos();}void disp(PCB *pr)/*建立进程现实函数,用于显示当前进程*/ {printf(}void check()/*建立进程查看函数*/{}void sort()//调整进程队列{} if(!ready->link ||ready->queue link->queue)
p = ready -> ready ->link = pinsert -> pinsert ->link = pinsert = ready = if (ready && ready -> queue
== pinsert ->queue){
findpos(); }
PCB * printf(void addnew()//添加新的进程{if(ready ->queue != 1){ (ready -> queue)++; ready->etime *= 2; ready -> state='w'; sort();/*调用sort函数*/ input(); } else{
input();}}void destroy()/*建立进程撤销函数(进程运行结束,撤销进程)*/{}void running()/*建立进程就绪函数(进程运行时间到,置就绪状态)*/{}void main(){ input(); while(ready != NULL) {
printf(}ready ->state = 'R'; check(); running(); printf(计算机
学院 网络工程 专业班_____ 姓名
教师评定_________________ 实验题目
作业调度一、实验目的本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。二、实验内容和要求1、编写并调度一个多道程序系统的作业调度模拟程序。作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的进行设计。
对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。三、实验主要仪器设备和材料硬件环境:IBM-PC或兼容机软件环境:C语言编程环境四、实验原理及设计方案采用多道程序设计方法的操作系统,在系统中要经常保留多个运行的作业,以提高系统效率。作业调度从系统已接纳的暂存在输入井中的一批作业中挑选出若干个可运行的作业,并为这些被选中的作业分配所需的系统资源。对被选中运行的作业必须按照它们各自的作业说明书规定的步骤进行控制。采用先来先服务算法算法模拟设计作业调度程序。(1)、作业调度程序负责从输入井若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理器运行。作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。但有时系统中现有的尚未分配的资源既可满足某个作业的要求也可满足其它一些作业的要求,那么,作业调度必须按一定的算法在这些作业中作出选择。先来先服务算法是按照作业进入输入井的先后次序来挑选作业,入输入井的作业优先被挑选,当系统中现有的尚未分配的资源不能满足先进入输入井的作业时,那么顺序挑选后面的作业。(2) 假定某系统可供用户使用的主存空间共100k,并有5台磁带机。3)流程图:五、结果过程及截图读取文件jobs.txt来初始化主存,磁带机的个数,并打印出来。初始时间是9:00:按Y运行5分钟:按Y运行5分钟:按Y运行5分钟:多次运行后最后状态:六、所遇困难的解决以及心得体会这个实验是的时间最多的一个实验,做的时候由于理解有些问题,所以做错了。之后重新做了一遍,收获还是很多的,遇到了很多的细节问题,例如像是时间化成浮点数和浮点数化成时间等一些问题,从中也暴露了自己的编程能力欠缺,之后要多多的写程序。七、思考题1、 写出每种算法的调度策略,最后比较各种算法的优缺点。答:先来先服务算法是根据作业的进入时间来排序,到达时间短的先运行,优点是实现简单,缺点是运行时间慢。短作业优先算法是根椐作业的估计运行时间来排序,估计运行时间短的先运行,优点是运行时间快,缺点是实现起来比较复杂。2、 选择调度算法的依据是什么?答:如果作业要求的速度不高,而且作业比较小型,那就最好用先来先服务算法。如果作业要求的速度高,作业流程复杂,那就最好用短作业优先算法。八、源代码#include#include#include#include#define getjcb() (JCB*)malloc(sizeof(JCB))typedef struct
{//资源的总量}RESOURCE;typedef struct JCB {//作业控制块char username[20];//用户名char jobname[10];//作业名//作业状态 char atime[5];//到达时间//运行时间 RESOURCE//资源数量 struct JCB* }JCB;RESOURCE source = {100,5};JCB *pjcb =getjcb();//作业链表头char nowtime[5];//现在时间,初始时间为9:00FILE* ignore(FILE *fp)//忽略文件中的空白符{if(feof(fp)) char ch = fgetc(fp); while (!feof(fp) && (ch == ' '|| ch == ' ')){
ch = fgetc(fp); } //if(!feof(fp)) fseek(fp, -1, SEEK_CUR);}FILE* findchar(FILE *fp,char c)//在文件中找到一个字符的位置(读取文件时用) {if(feof(fp)) char ch = fgetc(fp); while (!feof(fp) && (ch != c)){
} ch = fgetc(fp); fseek(fp, -1, SEEK_CUR);}void destory()//释放链表所占的内存{JCB *p = pjcb-> while(pjcb){
free(pjcb); pjcb = if(p) p = p->}}float stof(char *time)//把时间转化为浮点型数{float h = 0, m = 0; int i = 0; while(time[i] != ':'){
h = h*10 + time[i] - '0';
} i++; while(time[i] != '\0'){
m = m*10 + time[i] - '0';
} i++; i++;return (h + m/60);}char* ftos(double ftime)//把浮点型数值转化为时间{}float timesub(char *time1, char *time2)//两个时间相减,得到时间差{}void print()//打印输出{JCB *p = pjcb-> printf(p->atime, p->rtime, p->resource.memory,p->resource.tape);}void sendsource()//为作业分配资源{JCB *p; p = pjcb-> while(p){//为到达的作业调度 p = p-> }if(p->state == 'W' && source.memory - p->resource.memory >=0 && source.tape - p->resource.tape >=0){}
} p = p-> p->state = 'R'; source.memory -= p->resource. source.tape -= p->resource. printf(}void init()//初始化,读取文件中的作业信息{FILE * JCB *p= NULL,*q = if((fp = fopen(}
fp = ignore(fp); p->rtime = 0;//不初始化则会发生,????? fscanf(fp,int checkend() //检查是否所有的作业都已经运行完了{JCB *p = pjcb -> while(p){
if(p ->state != 'F'){
return 0; } p = p-> } return 1;}void run()//运行作业{if(checkend()){//检查是否所有的作业都已经运行完了
p = p-> } p = pjcb -> while(p){//计算到达的作业
if( strcmp(nowtime, p->atime) ==0 && p->state == 'N'){
p->state = 'W';
printf(int main(){double time =9.00;}double step = float(5)/60+0.00001; ftos(9.0); init(); do{
puts(班_____ 姓名
教师评定_________________实验题目
主存空间的分配和回收一、实验目的熟悉主存的分配与回收,《》()。理解在不同的存储管理方式下,如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据结构和分配算法及动态分区存储管理方式及其实现过程。二、实验内容和要求主存的分配和回收的实现是与主存储器的管理方式有关的。所谓分配,就是解决多道作业或多进程如何共享主存空间的问题。所谓回收,就是当作业运行完成时将作业或进程所占的主存空间归还给系统。可变分区管理是指在处理作业过程中建立分区,使分区大小正好适业的需求,并且分区个数是可以调整的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入,作业等待。随着作业的装入、完成,主存空间被分成许多大大小小的分区,有的分区被作业占用,而有的分区是空闲的。实验要求使用可变分区存储管理方式,分区分配中所用的数据结构采用空闲分区表和空闲分区链来进行,分区分配中所用的算法采用首次适应算法、循环首次适应算法、最佳适应算法三种算法来实现主存的分配与回收。同时,要求设计一个实用友好的用户界面,并显示分配与回收的过程。三、实验主要仪器设备和材料硬件环境:IBM-PC或兼容机软件环境:VC++ 6.0四、实验原理及设计方案1、循环首次适应算法在该算法中,把主存中所有空闲区按其物理地址递增的次序排列。在为作业分配存储空间时,从上次找到的空闲分区的下一个空闲分区开始查找,直到找到第一个能满足要求的空闲区,从中划出与请求的大小相等的存储空间分配给作业,余下的空闲区仍留在空闲区表或链中。2、 实验步骤(1)初始化空闲分区;(2)反复对现有的空闲分区进行进程创建和撤消,即内存分配和回收;(3)退出。3、流程图五、结果过程及截图初始化主存大小后的状态按1后分配一块内存:按1后分配一块内存:按2释http://www.unjs.cOm/news/55B7D663B60055B5.html放内存:六、所遇困难的解决以及心得体会本实验我采取用一条链表同时表示空闲分区链和主存空间占用,因为主存总大小是固定的,把空闲分区链所表示的区域从总的内存里去除就是被占用的空间的大小,这个实验还是比较简单的,因此很快就完成了,通过它使我学习了主存空间的分配与回收,同时也让我意识到了在回收内存时的一些问题,使我对课本知识有了更进一步的理解。七、思考题1、内存的主要分配方式有哪些?回收时可能出现的什么情况?应怎样处理这些情况? 答:有定分区分配和动态分区分配两种,回收时可能出现内存分区被切成若干在小不等小分区,过小的分区浪费内存资源,这要求我们要用紧凑技术修整。2、动态分区管理的常用内存分配算法有哪几种?比较它们各自的使用范围。答:有首次适应算法、循环首次适应算法、最佳适应算法三种。首次适应算法适用于小型作业,而且分配速度不怎么要求的作业,循环首次适应算法适用于一些大的作业,避免大作业长期得不到分配,最佳适应算法适应于对分配速度要求高,作业容量比较大的作业。八、源代码#include#include#include#define getMEM() (MEM*)(malloc(sizeof(MEM)))typedef struct Memory{//可用分区链表节点//基地址//大小struct Memory *}MEM;MEM *pm = getMEM();//可用分区的链表头MEM *//int SIZE;//总的内存的大小,由用户输入int geti()//让用户只能输入正整数{ int i = 0; fflush(stdin); ch = getchar(); while(ch == '\n'){
printf(}bool check(MEM* pm, int base, int size){//检查用户输入的合法性MEM *p =p = while(p->next){
if(p->base + p->size next->base && p->next->base >= base + size){} p= p -> } if(!p->next && p->base + p->size base + p->size = base + size)} }bool release(MEM *pm, int base, int size){//释放内存空间MEM *p =}int allocMem(MEM *pm, int size){//分配内存空间MEM *p = if(!check(pm, base ,size)){
} while(p->next){
if(base + size next->base) p = p-> } if(base == p->base + p->size){//低地址相邻
if(p ->next && p->next->base == base + size){//释放区上下都相邻
p->size += size + p->next-> temp = p->
p->next = p->next->
free(temp); }else{//仅与地地址相邻
p->size +=
} }else if (p->next && p->next->base == base +size){//仅高地址相邻
p->next->base =
p->next->size += }else{//释放区上下与空闲区都不相邻
temp = getMEM(); temp->size = temp->base = temp->next = p-> p->next =} if(p->next->size >= size) p = p-> if(!p->next)
return -1;if(p->next->size == size){//空闲分区大小刚好等于所需分区base = p->next->p->next = p->next->}else{p->next->size -=base = p->next->p->next->base +=}}void print(MEM *pm){//打印空闲分区表和空闲分区链MEM *p = pm->puts(puts(while(p){printf(p = p->}puts(puts(p =while(p->next){printf(}if(p->base + p->sizeprintf(}void init(){//初始化总内存大小和空闲分区链的头结点pm->base = 0;pm->size = 0;pm->next = getMEM();puts(}SIZE = geti(); pm->next->size = SIZE; pm->next->base = 0; pm->next->next =NULL;int main(){}int size = 0,base = 0; init(); print(pm); while(1){
puts(班_____ 姓名
教师评定_________________ 实验题目
文件系统一、实验目的模拟文件系统实现的基本功能,了解文件系统的基本结构和文件的各种管理方法,加深理解文件系统的内部功能及内部实现。通过用高级语言编写和调试一个简单的文件系统,模拟文件管理的过程,从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。二、实验内容和要求编程模拟一个简单的文件系统,实现文件系统的管理和控制功能。要求本文件系统采用两级目录,即设置主文件目录[MFD]和用户文件目录[UED]。另外,为打开文件设置运行文件目录[AFD]。设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件,并对文件必须设置保护。在用户程序中通过使用文件系统提供的Create、open、read、write、close、delete等文件命令,对文件进行操作三、实验主要仪器设备和材料硬件环境:IBM-PC或兼容机软件环境:C语言编程环境四、实验原理及设计方案1、实验原理运用二级目录思想来模拟文件系统。为每个用户建立一个单独的用户文件目录UFD。这些文件目录具有相似的结构,它由用户文件的文件块组成。此外,在系统再建立一个主文件目录MFD;在主文件目录中,每个用户目录都占有一个目录项,其目录项中包含文件名和指向该文件目录文件的指针。3、程序流程图五、结果过程及截图系统的使用简要说明:登陆:create命令新建文件file5Create失败delete命令删除文件Delete失败:open打开命令,及write命令来追加文件Read命令和close命令关闭对没打开的文件读写:六、所遇困难的解决以及心得体会本实验的代码长度的最常的,但是原理很简单,并且实验要求的是模拟,所以大大降低了实验的难度,在操作系统课中我们还有一个课程设计,也是文件管理系统,但是要比这个难很多,通过这个实验,我对文件管理系统的运行机制有了深入的了解,因为要做好这个实验必须要懂得文件管理系统的架构,这也迫使我认认真真的研究了操作系统中关于文件管理这一章的内容。同时这个程序也为以后的课程设计奠定了基础,并且很多的代码也是可以重用的。七、思考题1、文件系统要解决哪些问题?答:要解决文件和用户是否同名,文件创建数是否超额,所要求文件是否存在等问题。2、什么是文件目录?什么是文件目录中包含哪些信息?目前广泛采用的目录结构形式是哪种?答:文件目录就是用来展示一个用户的所有文件的一个表格,文件目录应包含文件名,保密码,文件大小,目前广泛采用的目录结构形式是多级目录形式。八、源代码#include#include#include#include#define NULL 0typedef struct mdf{//MDF结构体char username[20];//用户名 char filename[20];//文件名struct mdf *}MDF;typedef struct ufd{//UFD结构体char filename[20];//文件名//文件保护码//文件长度struct ufd *}UFD;typedef struct afd{//AFD结构体char filename[20];//文件名//文件保护码//文件读写指针struct afd *}AFD;MDF *//全局链表头指针UFD *AFD *char UserUFD[20];//已经登陆的用户名void initMDF()//初始化MDF表{FILE * pmdf= (MDF*)malloc(sizeof(MDF)); MDF *p = if((fp = fopen(}
exit(1); } while (!feof(fp)){//把MDF文件中的内容装入链表
} p->next = (MDF*)malloc(sizeof(MDF)); p = p-> fscanf(fp,void printUFD()//打印MDF表 {UFD *p = pufd-> puts(}void initUFD(char *name)//初始化UFD表 {FILE * pufd= (UFD*)malloc(sizeof(UFD)); UFD *p = if((fp = fopen(name,} p->next = NULL; fclose(fp);int checkuser()//检测登陆的用户名 {} char username[20]; while(1){
puts(void initAFD()//初始化AFD {pafd = (AFD*)malloc(sizeof(AFD)); pafd->next = NULL; }bool create()//创建文件命令 {char filename[20]; UFD *p = pufd-> AFD *pa = puts(} } if(!p->next) p= p-> p->next = (UFD*)malloc(sizeof(UFD)); p=p-> strcpy(p->filename, filename); p->protect = 2; p->length = 0; p->next = NULL;
while(pa->next){//创建文件后加入到AFD
} pa=pa-> pa->next = (AFD*)malloc(sizeof(AFD)); pa = pa-> strcpy(pa->filename ,filename); pa->protect = 2; pa->point = 0; pa->next = NULL;
return 1;}bool _delete()//删除文件命令 {char filename[20]; puts(puts(return 0;}bool open()//打开文件命令{char filename[20];
puts(} } puts(void close()//关闭文件命令{char filename[20]; UFD *pu = pufd-> puts(int read()//读文件命令{char filename[20]; AFD *p = pafd->} puts(int write()//写文件命令{}char filename[20]; AFD *p = pafd-> puts(void destroy()//释放内存{}void saveUFD()//保存UFD文件{}void bye()//推出系统{ FILE * UFD *p = pufd-> if((fp = fopen(UserUFD,UFD *pu = pufd-> while(pa){
if(pa->protect == 2){
while(pu){
saveUFD(); printUFD(); destroy();
} if(strcmp(pa->filename, pu->filename) == 0){
} pu->length = pa-> pu = pu-> pa =pa->}void operate()//命令识别{while(1){
char command[20]; char name[][8] = {}} }else
puts(void print(){puts(int main(){}print(); initMDF(); checkuser(); initAFD(); operate();)//命令识别
    〖预览〗本人***,竞聘的岗位是**公司生产副经理。
一、个人简历
尹建超,男,31岁,山东微山人,中共党员。华东师范大学应用电子系毕业,大专学历,工程师,现任选煤厂机电车间主任。
1994年10月-1995年7月在选煤厂机电车间实习;
1995年7月-1998年11月任选煤厂技术组技术员,助理工程师;
二、竞聘优势
我的优势主要体现在以下三个方面:
二是具有基层管理经验。在5年的基层管理工作中,我在全车间先后推行了班组优化组合,实现了人员双向选择,动态流动,进行了班组整合,将xxxx专业组合并精简为xxxx,大大提高了工作效率,实施了设备包机到人,制定包机责任制共6章48条,坚持了每季一次的技术测试,在分配上实行了竞岗分配。通过这些管……【】    〖预览〗竞 聘 书
本人***,竞聘的岗位是恒邦公司生产副经理。
一、个人简历
尹建超,男,31岁,山东微山人,中共党员。华东师范大学应用电子系毕业,大专学历,工程师,现任选煤厂机电车间主任。
1994年10月-1995年7月在选煤厂机电车间实习;
1995年7月-1998年11月任选煤厂技术组技术员,助理工程师;
二、竞聘优势
我的优势主要体现在以下三个方面:
二是具有基层管理经验。在5年的基层管理工作中,我在全车间先后推行了班组优化组合,实现了人员双向选择,动态流动,进行了班组整合,将7个专业组合并精简为3个,大大提高了工作效率,实施了设备包机到人,制定包机责任制共6章48条,坚持了每季一次的技术测试,在分配上实行了竞岗分配。通过这……【】    〖预览〗煤矿系统公司生产副经理竞聘书
[推荐]煤矿系统公司生产副经理竞聘书本人***,竞聘的岗位是恒邦公司生产副经理。
一、个人简历
尹建超,男,31岁,山东微山人,中共党员。华东师范大学应用电子系毕业,大专学历,工程师,现任选煤厂机电车间主任。
1994年10月-1995年7月在选煤厂机电车间实习;
1995年7月-1998年11月任选煤厂技术组技术员,助理工程师;
1998年11月至今,任选煤厂机电车间主任,20xx年获工程师技术称职。
二、竞聘优势
我的优势主要体现在以下三个方面:
一是具有丰富的专业技术知识。自94年参加工作以来,我一直在一线从事机电技术及管理工作,并努力做到理论联系实际,大力开展技术革新。其中1998年《选煤厂……【】
  推荐专题:
  〔操作系统实验报告+进程调度+作业调度等〕
  操作系统实验报告+进程调度+作业调度等所属栏目:〖〗〖〗
  “操作系统实验报告+进程调度+作业调度等”相关:
  〖〗链接地址:
  工作报告提供的操作系统实验报告+进程调度+作业调度等由网友原创或转发,若操作系统实验报告+进程调度+作业调度等侵犯了您的权益,请与本站联系,谢谢!
https://www.unjs.com/
上一篇范文: 下一篇范文:
操作系统实验报告+进程调度+作业调度等相关范文

我要回帖

更多关于 进程调度实验 的文章

 

随机推荐