操作系统实习报告

上传人:平*** 文档编号:13754573 上传时间:2017-10-25 格式:DOC 页数:23 大小:233.42KB
返回 下载 相关 举报
操作系统实习报告_第1页
第1页 / 共23页
操作系统实习报告_第2页
第2页 / 共23页
操作系统实习报告_第3页
第3页 / 共23页
操作系统实习报告_第4页
第4页 / 共23页
操作系统实习报告_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《操作系统实习报告》由会员分享,可在线阅读,更多相关《操作系统实习报告(23页珍藏版)》请在金锄头文库上搜索。

1、操作系统实习报告实习一 处理器调度一、实习内容选择一个调度算法,实现处理器调度。二、实习目的在采用多道程序设计的系统中,往往若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占有处理器。本实习模拟在单处理器情况下的处理器调度,加深了解处理器调度的工作。三、实习题目设计一个按优先数调度算法实现处理器调度的程序。提示:(1) 假定系统有 5 个进程,每个进程用一个 PCB 来代表。PCB 的格式为:进程名、指针、要求运行时间、优先数、状态。进程名P1P5。指针按优先数的大小把 5 个进程连成队列,用指针指出下一个进程 PCB 的首地址。要求运行时间假设进

2、程需要运行的单位时间数。优先数赋予进程的优先数,调度时总是选取优先数大的进程先执行。状态假设两种状态,就绪,用 R 表示,和结束,用 E 表示。初始状态都为就绪状态。(2) 每次运行之前,为每个进程任意确定它的“优先数” 和“要求运行时间” 。(3) 处理器总是选队首进程运行。采用动态改变优先数的办法,进程每运行 1 次,优先数减 1,要求运行时间减 1。(4) 进程运行一次后,若要求运行时间不等于 0,则将它加入队列,否则,将状态改为“结束” ,退出队列。(5) 若就绪队列为空,结束,否则,重复(3)。四、数据结构及符号说明进程的定义:struct pcb /* 定义进程控制块 PCB */

3、 char name10; /*进程名*/char state; /*进程状态,就绪或者完成*/int super; /*进程优先级 */int needtime; /*进程所需时间*/int runtime; /*进程已完成时间*/struct pcb* link; /*指向下一进程*/函数说明:1.void insert()功能:进程优先级排列函数,比较进程优先级,将其插入适当的位置。参数:super,依据进程优先级 super 来确定进程的插入位置。调用:被进程控制块函数和进程就绪函数调用。2.void input()功能:进程控制块函数操作系统实习报告参数:num,i,name,sup

4、er,needtime调用:主函数 main()调用3. void disp(PCB * pr)功能:进程显示函数,用于显示当前进程。参数:name,state,super,needtime,runtime调用:被进程查看函数 check()调用4. void check()功能:进程查看函数,用于显示当前运行进程和就绪队列状态。参数:PCB* pr pr=ready调用:被主函数 main()调用5. void destroy()功能:进程撤消函数,用于当进程运行结束时,撤消进程。参数:p-name调用:被进程就绪函数 running()调用6. void running()功能:进程就绪函

5、数,当进程运行时间到,置进程就绪状态。参数:p-runtime调用:被主函数 main()调用7. main()功能:主函数操作系统实习报告五、程序流程图六、实验源程序#include #include #include #define getpch(type) (type*)malloc(sizeof(type)struct pcb /* 定义进程控制块 PCB */ char name10; char state; int super; int needtime; int runtime; struct pcb* link; *ready=NULL,*p; typedef struct p

6、cb PCB; 操作系统实习报告void sort() /* 建立对进程进行优先级排列函数*/ PCB *first, *second; int insert=0; if(ready=NULL)|(p-super)(ready-super) /*优先级最大者,插入队首*/ p-link=ready; ready=p; else /* 进程比较优先级,插入适当的位置中*/ first=ready; second=first-link; while(second!=NULL) if(p-super)(second-super) /*若插入进程比当前进程优先数大,*/ /*插入到当前进程前面*/ p

7、-link=second; first-link=p; second=NULL; insert=1; else /* 插入进程优先数最低,则插入到队尾*/ first=first-link; second=second-link; if(insert=0) first-link=p; int input() /* 建立进程控制块函数*/ int i,num; printf(n 请输入进程数?); scanf(%d,&num); for(i=0;iname); printf(n 输入进程优先数:); scanf(%d,&p-super); 操作系统实习报告printf(n 输入进程运行时间:);

8、 scanf(%d,&p-needtime); printf(n); p-runtime=0;p-state=w; p-link=NULL; sort(); /* 调用 sort 函数*/ return num; void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ printf(n qname t state t super t ndtime t runeedtime n); printf(|%st,pr-name); printf(|%ct,pr-state); printf(|%dt,pr-super); printf(|%dt,pr-needtime);

9、printf(|%dt,pr-runtime); printf(n); void check() /* 建立进程查看函数 */ PCB* pr; printf(n * 当前正在运行的进程是:%s,p-name); /*显示当前运行进程*/ disp(p); pr=ready; printf(n *当前就绪队列状态为:n); /*显示就绪队列状态*/ while(pr!=NULL) disp(pr); pr=pr-link; void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ printf(n 进程 %s 已完成.n,p-name); free(p); void r

10、unning() /* 建立进程就绪函数( 进程运行时间到,置就绪状态*/ (p-runtime)+; if(p-runtime=p-needtime) destroy(); /* 调用 destroy 函数 */ else 操作系统实习报告(p-super)-; p-state=w; sort(); /*调用 sort 函数*/ main() /*主函数*/ int len,h=0; char ch; len=input();while(len!=0)&(ready!=NULL) ch=getchar(); h+; printf(n The execute number:%d n,h); p

11、=ready; ready=p-link; p-link=NULL; p-state=R; check(); running(); printf(n 按任一键继续.); ch=getchar(); printf(nn 进程已经完成.n); ch=getchar(); 操作系统实习报告实习二 主存空间的分配和回收一、实习内容主存储器空间的分配和回收。二、实习目的通过本实习帮助理解在不同的存储管理方式下应怎样进行存储空间的分配和回收。三、实习题目第一题:在可变分区管理方式下采用首次适应算法实现主存分配和回收。提示:(1) 可变分区方式是按作业需要的主存空间大小来分割分区的。当要装入一个作业时,根据

12、作业需要的主存容量查看是否有足够的空闲空间,若有,则按需分配,否则,作业无法装入。假定内存大小为 128K,初始状态见右图。空闲区说明表格式为:起始地址指出空闲区的起始地址;长度一个连续空闲区的长度;状态有两种状态,一种是“未分配”状态,另一种是“空表目”状态。(2) 采用首次适应算法分配。运行时,输入一系列分配请求和回收请求。四、程序流程为了说明哪些区是空闲的,可以用来装入新作业,必须要有一张空闲区说明表,格式如下:起 址 长 度 状 态第一栏 14 K 12 K 未 分 配第二栏 32 K 96 K 未 分 配空 表 目空 表 目其中:起址指出一个空闲区的主存起始地址。长度指出从起始地址开

13、始的一个连续空闲的长度。状态有两种状态,一种是“未分配”状态,指出对应的由起址指出的某个长度的操作系统实习报告分配算法流程图:回收算法流程图:操作系统实习报告六、实验源程序#include #include #include #define n 10 /*假定系统允许的最大作业为,假定模拟实验中 n 值为 10*/#define m 10 /*假定系统允许的空闲区表最大为 m,假定模拟实验中 m 值为 10*/#define minisize 100structfloat address; /*已分分区起始地址*/float length; /*已分分区长度,单位为字节*/int flag;

14、/*已分配区表登记栏标志,用0 表示空栏目*/used_tablen; /*已分配区表*/structfloat address; /*空闲区起始地址*/float length; /*空闲区长度,单位为字节*/int flag; /*空闲区表登记栏标志,用0 表示空栏目,用1表示未分配*/free_tablem; /*空闲区表*/void allocate(char J,float x)/*采用首次适应算法分配 x 大小的空间*/int i,k;float ad;k=-1;for(i=0;i=x&free_tablei.flag=1)if(k=-1|free_tablei.length=n)

15、 /*无表目填写已分分区*/printf(无表目填写已分分区,错误n);/*修正空闲区表*/if(free_tablek.flag=0)/*前面找到的是整个空闲分区 */free_tablek.flag=1;else/*前面找到的是某个空闲分区的一部分*/free_tablek.length=free_tablek.length+x;return;else/*修改已分配表*/used_tablei.address=ad;used_tablei.length=x;used_tablei.flag=J;return;/*主存分配函数结束*/void reclaim(char J)/*回收作业名为 J 的作业所占主存空间 */int i,k,j,s,t;float S,L;/*寻找已分配表中对应登记项 */s=0;while(used_tables.flag!=J|used_tables.flag=0)&s=n)/*在已分配表中找不到名字为 J 的作业*/printf(找

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号