ImageVerifierCode 换一换
格式:DOCX , 页数:91 ,大小:582.10KB ,
资源ID:8071091      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8071091.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(广工12届操作系统实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

广工12届操作系统实验报告.docx

1、广工12届操作系统实验报告操作系统实验报告 学生学院 计算机学院 专业班级 学 号 学生姓名 指导教师 2015年 1 月 14日1 实验一 进程调度单道12 实验二 作业调度单道批处理163 实验三 可变式分区分配264 实验四 文件系统711 实验一 进程调度1、实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。2、实验内容及要求设计一个有 N个进程共行的进程调度程序。进程调度算法:采用多队列时间片轮转法。 每个进程有一个进程控制块( PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。 进程需

2、要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。 就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。 每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。3、实验设计方案及原理程序一开始先从第一个队列读取进程,每个进程运行一个时间片后,如果还没有结束就排到下一个队列的队尾等待下一次运行,当第一个队列为空时,读取第二个队列的首进

3、程,执行相同的过程,直到所有的队列都为空程序流程图4、重要数据结构或源程序中疑难部分的说明,需附详细注释#include stdio.h #include #include #define getpch(type) (type*)malloc(sizeof(type) #define NULL 0 struct pcb /* 定义进程控制块PCB */ char name10; char state; int ntime; int rtime;int row; struct pcb* link; *ready=NULL,*p,*q; typedef struct pcb PCB;int h=0

4、; /*全局变量在running函数中记录进程执行次数*/insert() if(ready=NULL) p-link=ready; ready=p; q=p; else p-link=q-link; q-link=p; q=p; input() /* 建立进程控制块函数*/ int i,num; / clrscr(); /*清屏*/ printf(n 请输入进程个数:); scanf(%d,&num); for(i=0;iname); printf(n 输入进程运行时间:); scanf(%d,&p-ntime); printf(n); p-rtime=0;p-state=w;p-row=1

5、; p-link=NULL; insert(); /* 调用insert函数*/ disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ printf(n qname t state t ndtimet runtime row n); printf( |%st,pr-name); printf( |%ct,pr-state); printf( |%dt,pr-ntime); printf( |%dt,pr-rtime); printf( |%dt,pr-row); printf(n); check() /* 建立进程查看函数 */ int j; PCB* pr; printf

6、(n * 当前正在运行的进程是:%s,p-name); /*显示当前运行进程*/ disp(p); pr=ready; printf(n *当前就绪队列状态为:n); /*显示就绪队列状态*/ for(j=1;jrow=j) disp(pr); pr=pr-link; printf(n); destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ printf(n 进程 %s 已完成.n,p-name); free(p); running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ int i,timepiece=1; for(i=1;irow;i+) timep

7、iece*=2; for(i=1;irtime)+; if(p-rtime=p-ntime) break; getchar(); if(p-row=3) if(p-rtime=p-ntime) destroy(); /* 调用destroy函数*/ else p-state=w; insert(); /*调用insert函数*/ else if(p-rtime=p-ntime) destroy(); /* 调用destroy函数*/ else p-state=w; p-row+; insert(); /*调用insert函数*/ main() /*主函数*/ char ch; input();

8、 /ch=getchar(); while(ready!=NULL) p=ready; ready=p-link; p-link=NULL; p-state=R; running(); printf(n 按任一键继续.); ch=getchar(); printf(nn 进程已经完成.n); ch=getchar();多队列轮转法代码说明:本程序巧妙地只用了一个队列实现了多队列功能,实现方法是,先在进程控制块设置一个记录进程当前所在队列的变量row,取值范围是13,程序只设置了三个队列,而每个队列所运行的时间片用timepiece记录,第一队列为1,第二队列为(2timepiece)第一队列的

9、两倍。5、程序运行结果输入5个进程和进程信息队列的初始状态a进程运行一个时间片后进入第二个队列: 6、结果分析与实验小结在设计实验的时候本来想参考实验册的做法,但是后来觉得直接用数组好像更加容易编,所以就这样写了,但是后来发现这样写有缺点,就是数组空间没有释放,以后有机会再想想别的方法。实验二 作业调度1、 实验目的 FCFS本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。2、实验内容和要求 (1)、编写并调试一个单道处理系统的作业调度模拟程序。(2)、作业调度算法:分别采用先来先服务(FCFS),

10、最短作业优先(SJF)的调度算法。(3)、由于单道批处理系统中,作业一投入运行后,它就占有计算机的一切资源直到作 业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它占用的CPU 时限等因素。(4)、每一个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交 时间、所需要的运行时间、所需资源、作业状态、链指针等等。作业的状态可以是等待 (Wait)、运行(Run)和完成(Finish)三种状态之一。每个作业的最初状态总是等待 W。(5)、对每种调度算法都要求要打印每个作业开始运行时刻、完成时刻、周转时间、带 权周转时间,以及这组作业的平均周转时间以及带权平均周转时间

11、,并比较各种算法的 优缺点。3、实验设计方案和原理先确定进程个数,把进程的信息输入到结构体pcb中,然后使用冒泡排序按到达时间的大小对进程排序。调用进程,每调用一次,该进程的需要的时间-1,当需要的时间为0时,判断该进程结束,并调用下一进程,如果下一进程不存在,则计算平均周转时间和带权平均周转时间,程序结束。4、程序流程图5、重要数据结构或源程序中疑难部分的说明,需附详细注释#include#include struct pcbchar name; /作业名int ntime; /需要时间int atime; /到达时间 int stime; /开始运行时间;int main()int n,i

12、,j;int time,t;int nt100;time=0;int ftime100,ttime100; /*ftime完成时间 ttime周转时间*/float dtime100,attime,adtime; /*dtime带权周转时间,attime平均周转时间,adtime 平均带权周转时间*/struct pcb a100,b;printf(请输入作业数目:);scanf(%d,&n);getchar(); for(i=1;i=n;i+) printf(作业%ds名字:如A B C.n,i); scanf(%s,&ai.name); getchar(); printf(作业%d的到达时

13、间:,i); scanf(%d,&ai.atime); /输入作业的名字、到达时间和需要时间 getchar(); printf(作业%d的需要时间:,i); scanf(%d,&ai.ntime); getchar(); for(i=1;i=n;i+) for(j=1;jaj+1.atime) b=aj; aj=aj+1; /按到达时间大小冒泡排序 aj+1=b ; nti=ai.ntime; for(i=1;i=n;i+) nti=ai.ntime; for(i=1;itime) time+; ai.stime=time; for(;ai.ntime!=0;) printf(正在运行的作业

14、是%cn,ai.name); printf(名字t 需要的时间tn); /输出运行的作业 printf(%ct %dn,ai.name,ai.ntime); ai.ntime-; time+; printf(-n); for(j=i+1;j=n;j+) printf(waiting process is %cn,aj.name); /输出等待的作业 printf(-nn); getch(); if (ai.ntime=0) printf(作业%c已经完成.n,ai.name); ftimei=time; ttimei=time-ai.atime; dtimei=(float)ttimei/nt

15、i; printf(作业%c的开始时间:%dn,ai.name,ai.stime); /作业完成时,打印开始时间、完成时间、周转时间和带权周转时间 printf(作业%c的完成时间:%dn,ai.name,ftimei); printf(作业%c的周转时间:%dn,ai.name,ttimei); printf(作业%c的带权周转时间:%fn,ai.name,dtimei); printf(*nn); getch(); for(i=1;i=n;i+) attime=attime+ttimei; adtime=adtime+dtimei; attime=(float)attime/n; adti

16、me=(float) adtime/n; /最后计算平均周转时间和带权平均周转时间 printf(平均周转时间:%fn,attime); printf(带权平均周转时间:%fn,adtime); getch(); 6、运行结果输入:运行:SJF1、实验目的本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。2、实验内容和要求 (1)、编写并调试一个单道处理系统的作业调度模拟程序。(2)、作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)的调度算法。(3)、由于单道批处理系统中,作业一投

17、入运行后,它就占有计算机的一切资源直到作 业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它占用的CPU 时限等因素。(4)、每一个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交 时间、所需要的运行时间、所需资源、作业状态、链指针等等。作业的状态可以是等待 (Wait)、运行(Run)和完成(Finish)三种状态之一。每个作业的最初状态总是等待 W。(5)、对每种调度算法都要求要打印每个作业开始运行时刻、完成时刻、周转时间、带 权周转时间,以及这组作业的平均周转时间以及带权平均周转时间,并比较各种算法的 优缺点。3、实验设计方案和原理先确定进程个数,把进程

18、的信息输入到结构体pcb中,然后使用冒泡排序按需要的时间的大小对进程排序。调用进程,每调用一次,该进程的需要的时间-1,当需要的时间为0时,判断该进程结束,并调用下一进程,如果下一进程不存在,则计算平均周转时间和带权平均周转时间,程序结束。4、程序流程图:N Y5、程序清单:#include#include struct pcbchar name; /作业名int ntime; /需要时间int atime; /到达时间 int stime; /开始运行时间;int main()int n,i,j;int time,t;int nt100;time=0;int ftime100,ttime10

19、0; /完成时间,周转时间float dtime100,attime,adtime; /带权周转时间、平均周转时间、平均带权周转时间struct pcb a100,b;printf(Please input the number of process:);scanf(%d,&n);getchar(); for(i=1;i=n;i+) printf(Process %ds name:如A B C.n,i); scanf(%s,&ai.name); getchar(); /输入作业的名字、到达时间和需要时间 printf(Process %ds arrival time:,i); scanf(%d

20、,&ai.atime); getchar(); printf(Process %ds needtime:,i); scanf(%d,&ai.ntime); getchar(); for(i=1;i=n;i+) for(j=1;jaj+1.ntime) b=aj; aj=aj+1; /按需要时间大小冒泡排序 aj+1=b ; nti=ai.ntime; for(i=1;i=n;i+) nti=ai.ntime; for(i=1;itime) time+; ai.stime=time; for(;ai.ntime!=0;) printf(running process is %cn,ai.name

21、); printf(namet needtimetn); /输出运行的作业 printf(%ct %dn,ai.name,ai.ntime); ai.ntime-; time+; printf(-n); for(j=i+1;j=n;j+) printf(waiting process is %cn,aj.name); /输出等待的作业 printf(-nn); getch(); if (ai.ntime=0) printf(process %c has finished.n,ai.name); ftimei=time; ttimei=time-ai.atime; dtimei=(float)t

22、timei/nti; /作业完成时,打印开始时间、完成时间、周转时间和带权周转时间 printf(process %c s start time:%dn,ai.name,ai.stime); printf( process %c s finish time:%dn,ai.name,ftimei); printf( process %c s cycle time:%dn,ai.name,ttimei); printf( process %c s daiquan time:%fn,ai.name,dtimei); printf(*nn); getch(); for(i=1;i=n;i+) atti

23、me=attime+ttimei; adtime=adtime+dtimei; attime=(float)attime/n; adtime=(float) adtime/n; /最后计算平均周转时间和带权平均周转时间 printf(平均周转时间:%fn,attime); printf(带权平均周转时间:%fn,adtime); getch(); 6、运行结果:输入:运行:7、实验小结在设计实验的时候本来想参考实验册的做法,但是后来觉得直接用数组好像更加容易编,所以就这样写了,但是后来发现这样写有缺点,就是数组空间没有释放,以后有机会再想想别的方法。SFJ的程序和这个大同小异。实验三 可变式分

24、区分配1、实验目的熟悉主存的分配与回收。理解在不同的存储管理方式下,如何实现主存空间的分配与回收。掌握动态分区分配方式中的数据结构与分配算法及动态分区存储管理方式及其实现过程。2、实验内容和要求实验要求使用可变分区存储管理方式,分区分配中所用的数据结构采用空闲分区表和空闲分区链来进行,分区分配中所用的算法采用首次适应算法、最坏适应算法、最佳适应算法三种算法来实现主存的分配与回收。同时,要求设计一个实用友好的用户界面,并显示分配与回收的过程。3、实验设计方案和原理主存空间分配过程设计数据结构:使用链指针把所有的空闲分区链成一条链,用指针实现分区分配和链接。空闲分区链:双向链非循环链分区首地址:记

25、录空闲内存空间块首地址分区大小: 记录空闲内存块大小分区状态 n:空间空闲可用 r:空间不可用分区前指针:链接前一空闲内存块,首指针前一指针置空 分区后指针:链接后一空闲内存块,尾指针后一指针置空struct subarea /分区块 char name10; int addr; /分区首地址 int size; /分区大小 char state; /分区状态 struct subarea *pre; /空闲分区前一指针 struct subarea *next; /空闲分区后一指针 *sub=NULL,*r,*s; /空闲分区队列指针sub, typedef struct subarea SUB;当有进程要求分配XKB主存时,按照进程的需要量XKB,从链头开始找到第一个空闲区;A,若空闲区小于XKB,则沿链找下一个空闲区;B,若

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1