《操作系统》实验指导书 3.pdf
《《操作系统》实验指导书 3.pdf》由会员分享,可在线阅读,更多相关《《操作系统》实验指导书 3.pdf(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、操作系统实 验 指 导 书绍兴文理学院计算机系名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 42 页 -前言1实验总体目标通过学生自己动手设计实验验证理论知识,使学生掌握操作系统特征和功能,掌握不同调度算法下进程的调度、进程控制、进程调度与死锁,并必须掌握作业管理、存储器管理、设备管理和文件管理的主要原理。加深对操作系统基本原理理解。适用专业计算机科学与技术 先修课程C语言程序设计、计算机组成原理、数据结构 实验课时分配序号实验名称学时实验要求实验类型1 分析操作系统所面临的操作需求2 必修验证2 进程管理4 必修设计3 存储管理4 必修设计4 设备管理2 必修设计5 文件管理
2、4 必修设计 实验环境有 70 台中等配置的计算机组成的小型局域网的实验室环境。计算机的具体要求:(1)Pentium 133Hz 以上的 CPU;(2)建议至少 256MB 的内存;(3)建议硬盘至少2GB,并有 1GB空闲空间。(4)安装 Windows 操作系统及C语言编译程序或Linux 虚拟环境。实验总体要求培养计算机专业的学生的系统程序设计能力,是操作系统课程的一个非常重要的环节。通过操作系统上机实验,可以培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。使学生更好地掌握操作系统的基本概念、基本原理、及基本功能,具有分析实际操
3、作系统、设计、构造和开发现代操作系统的基本能力。实验要求做到:1)详细描述实验设计思想、程序结构及各模块设计思路;2)详细描述程序所用数据结构及算法;3)明确给出测试用例和实验结果;4)为增加程序可读性,在程序中进行适当注释说明;5)认真进行实验总结,包括:设计中遇到的问题、解决方法与收获等;6)实验报告撰写要求结构清晰、描述准确逻辑性强;7)实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 42 页 -本实验的重点、难点及教学方法建议重点:理解进程调度中PCB的设计,以实现对进程的调度。难点:进程调度程序的设计,设备管理程
4、序的设计。教学方法建议:力争在本指导书的帮助下,独立设计程序以加深理解。名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 42 页 -实验一分析操作系统所面临的操作需求(一)实验目的使学生理解操作系统所面临的操作需求,掌握操作系统中的进程管理、存储管理、设备管理和文件管理等功能。(二)实验内容1.分析操作系统所面临的操作需求;2.熟悉实验环境;3.资料搜集与整理,进行实验的前期准备。熟悉编程环境本课程中的实验题目既可以在windows 下用控制台应用程序实现,也可以在linux 下用全屏幕程序实现。这里我们首先介绍在windows 下用 vc+6.0 设计控制台应用程序的步骤,然后
5、介绍在linux 下用 C 语言编写全屏幕程序的步骤。1.windows 的控制台应用程序图 1-1 图 1-2图 1-3 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 42 页 -步骤 1:开机,单击“开始”按钮,选择“程序-Microsoft Visual Studio 6.0-Microsoft Visual C+6.0”进入 Microsoft Visual C+6.0。见图1-1。步骤 2:在 Microsoft Visual C+6.0 中,单击“File”菜单,选择“New”菜单命令,见图 1-2。步骤 3:在“Files”选项卡中选择“C+Source File
6、”,见图 1-3 2.linux的 vi 应用编程登录Linux 是一个多用户多任务操作系统,多个用户可以拥有自己独立的用户账号登录提示:Red Hat Linux release 6.0(Hedwing)Kernel 2.2.5-15 on an i686 Login:此时输入用户户名(账号)并键入回车,则系统显示“passward”。在输入密码和回车。登录后:roothawk/root#表示是按root 方式登录,$表示是普通用户。Linux 大小写敏感,用“-”加参数zlinux:#ls F HowTo/HowToMin/linux nag/sag/获取帮助:Linux 带有联机手册,可
7、以用man 命令来阅读Zlinux:$man ls 虚拟终端Linux 可有多个用户登录到同一个计算机,但一般微机只有一个终端难以体现。可以使用多个虚拟终端,用Alt+F1、Alt+F2 等来切换。退出系统在停止使用系统时,要退出系统。具体方法:exit 或 logout,或 Ctrl+D 关机如果没有用户在使用系统,可以关机。但是不能直接关闭电源,而要按正常顺序关机。一般用户是不能关机的,只有root 用户可以关机。方法:可以使用halt 或 shutdown 命令,也可以同时键入Ctrl+Alt+Del。Windows 虚拟机环境:登录到系统点击桌面“VMware”图标 Vmware Wo
8、rkstation 窗口 Commands Start this virtual machine 进入 fedora 后,用户名:root 口令:123456 使用编辑器vi 编辑文件1.进入 linux 的文本模式之后,在命令行键入vi filename.c 然后回车。下面作一些简单的解释:首先 vi 命令是打开vi 编辑器。后面的 filename.c 是用户即将编辑的c 文件名字,注意扩展名字是.c;当然,vi 编辑器功能很强,可以用它来编辑其它格式的文件,比如汇编文件,其扩展名字是.s;也可以直接用vi 打开一个新的未命名的文件,当保存的时候再给它命名,只是这样做不很方便。2.最基本的
9、命令I:当进入刚打开的文件时,不能写入信息,这时按一下键盘上的I 键(insert),插入的意思,就可以进入编辑模式了。如下图所示:名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 42 页 -3.a与 i 是相同的用法4.当文件编辑完后,需要保存退出,这时需要经过以下几个步骤:1)按一下键盘上的Esc 键;2)键入冒号(:),紧跟在冒号后面是wq(意思是保存并退出)。如果不想保存退出,则在第二步键入冒号之后,键入!q(不带 w,机尾部保存)。如下图所示:5.退出 vi 编辑器的编辑模式之后,要对刚才编写的程序进行编译。编译的命令是:gcc filename.c-o outputf
10、ilename,其中 gcc是 c 的编译器。参数:filename.c 是刚才编辑的 c 文件(当然也可以是以前编写好的c 文件);后面中括号里面的参数是可选的,它是一个输出文件。如果不选,默认的输出文件是a.out,选了之后输出文件就是outputfilename.out 6.最后一步是运行程序,方法如下:./outputfilename.out 名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 42 页 -实验二进程管理(一)实验目的掌握临界区的概念及临界区的设计原则;掌握信号量的概念、PV 操作的含义以及应用PV 操作实现进程的同步与互斥;分析进程争用资源的现象,学习解决进
11、程互斥的方法;掌握进程的状态及状态转换;掌握常用的进程调度算法。(二)实验内容1分析进程的同步与互斥现象,编程实现经典的进程同步问题生产者消费者问题的模拟;2 编写允许进程并行执行的进程调度程序,在常用的进程(作业)调度算法:先来先服务算法、短作业优先算法、最高响应比优先算法、高优先权优先算法等调度算法中至少选择三种调度算法进行模拟,并输出平均周转时间和平均带权周转时间。本实验涉及内容较多,可以在两个题目里选择一个完成。编程实现经典的进程同步问题生产者消费者问题的模拟模拟实现用同步机构避免发生进程执行时可能出现的与时间有关的错误。进程是程序在一个数据集合上运行的过程,进程是并发执行的,也即系统
12、中的多个进程轮流地占用处理器运行。我们把若干个进程都能进行访问和修改的那些变量称为公共变量。由于进程是并发地执行的,所以,如果对进程访问公共变量不加限制,那么就会产生“与时间有关”的错误,即进程执行后所得到的结果与访问公共变量的时间有关。为了防止这类错误,系统必须要用同步机构来控制进程对公共变量的访问。一般说,同步机构是由若干条原语同步原语所组成。本实验要求模拟PV操作同步机构的实现,模拟进程的并发执行,了解进程并发执行时同步机构的作用。此次用到的数据结构知识如下:typedef struct Pcb char name10;/进程名char state10;/运行状态char reason1
13、0;/若阻塞,其原因int breakp;/断点保护struct Pcb*next;/阻塞时的顺序Pcb,*link;名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 42 页 -进程控制块结构定义两个进程:link p1;/生产者进程,link c1;/消费者进程。pc 程序计数器和link ready;就绪队列,link b_s1;s1 阻塞队列,link b_s2;s2 阻塞队列。实验指导:a.h 头文件#include#include#include/*malloc()等*/#include/*INT_MAX等*/#include/*EOF(=Z 或 F6),NULL*/#
14、include/*atoi()*/#include/*eof()*/#include/*floor(),ceil(),abs()*/#include/*exit()*/#include using namespace std;#include#define BUF 10/缓存的大小#define MAX 20/最大可以输入的字符b.h 头文件/数据结构的定义和全局变量typedef struct Pcb char name10;/进程名 char state10;/运行状态 char reason10;/若阻塞,其原因 int breakp;/断点保护 struct Pcb*next;/阻塞时
15、的顺序Pcb,*link;int s1,s2;/信号量link p1;/生产者进程link c1;/消费者进程char strMAX;/输入的字符串char bufferBUF;/缓冲池int len;/输入长度int sp=0;/string的指针进程名状态等待原因断点后继进程名师资料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 42 页 -int in=0;/生产者指针int out=0;/消费者指针char temp;/供打印的临时产品char rec_pMAX;/生产记录int rp1=0;/生产记录指针char rec_cMAX;/消费记录int rp2=0;/消费记录指针l
16、ink ready;/就绪队列link b_s1;/s1 阻塞队列link b_s2;/s2 阻塞队列int pc;/程序计数器int count;/字符计数器int con_cnt;/消费计数器c.h 头文件void init();/初始化void p(int s);/P 操作void v(int s);/V 操作void block(int s);/阻塞函数void wakeup(int s);/唤醒函数void control();/处理机调度void processor();/处理机执行void print();/打印函数void init()/初始化 s1=BUF;s2=0;p1=(
17、link)malloc(sizeof(Pcb);/建立新的结点,并初始化为生产者 strcpy(p1-name,Producer);strcpy(p1-state,Ready);strcpy(p1-reason,Null);p1-breakp=0;p1-next=NULL;c1=(link)malloc(sizeof(Pcb);/建立新的结点,并初始化为消费者 strcpy(c1-name,Consumer);strcpy(c1-state,Ready);strcpy(c1-reason,Null);c1-breakp=0;c1-next=NULL;ready=p1;ready-next=c1
18、;/初始化为生产进程在前,消费进程在后 c1-next=NULL;名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 42 页 -b_s1=NULL;b_s2=NULL;/阻塞进程为NULL pc=0;con_cnt=0;/消费计数器 void p(int s)if(s=1)/p(s1)s1-;if(s1breakp=pc;/保存断点 else/p(s2)s2-;if(s2breakp=pc;/保存断点 void v(int s)if(s=1)/v(s1)s1+;if(s1breakp=pc;/保存断点 else/v(s2)s2+;if(s2breakp=pc;/保存断点 void
19、block(int s)/阻塞函数的定义 link p;名师资料总结-精品资料欢迎下载-名师精心整理-第 10 页,共 42 页 -int num1=0;int num2=0;if(s=1)/生产进程strcpy(p1-state,Block);/改变状态strcpy(p1-reason,S1);/说明原因p=b_s1;while(p)num1+;p=p-next;/p 的值为 NULL,表示队尾 if(!b_s1)b_s1=p1;else p=p1;p1-next=NULL;printf(t*p1生产进程阻塞了!n);ready-breakp=pc;/保存断点ready=ready-next
20、;/在就绪队列中去掉,指向下一个num1+;else/消费进程strcpy(c1-state,Block);strcpy(c1-reason,S2);p=b_s2;while(p)num2+;p=p-next;/p 的值为 NULL,表示队尾 if(!b_s2)b_s2=c1;else p=c1;ready-breakp=pc;/保存断点ready=ready-next;/在就绪队列中去掉,指向下一个c1-next=NULL;printf(t*c1消费进程阻塞了!n);num2+;printf(t*阻塞的生产进程个数为:%dn,num1);printf(t*阻塞的消费进程个数为:%dn,num
21、2);void wakeup(int s)/唤醒函数的定义 link p;名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 42 页 -link q=ready;if(s=1)/唤醒 b_s1 队首进程,生产进程队列p=b_s1;b_s1=b_s1-next;/阻塞指针指向下一个阻塞进程strcpy(p-state,Ready);strcpy(p-reason,Null);while(q)/插入就绪队列q=q-next;q=p;p-next=NULL;printf(t*p1生产进程唤醒了!n);else/唤醒 b_s2 队首进程,消费进程队列p=b_s2;b_s2=b_s2-ne
22、xt;/阻塞指针指向下一个阻塞进程strcpy(p-state,Ready);strcpy(p-reason,Null);while(q-next)/插入就绪队列q=q-next;q-next=p;p-next=NULL;printf(t*c1消费进程唤醒了!n);void control()/处理器调度程序 int rd;int num=0;link p=ready;if(ready=NULL)/若无就绪进程,结束return;while(p)/统计就绪进程个数 num+;p=p-next;/最终 p 变为 NULL printf(t*就绪进程个数为:%dn,num);time_t t;sr
23、and(unsigned)time(&t);rd=rand()%num;/随机函数产生随机数名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 42 页 -if(rd=1)p=ready;ready=ready-next;ready-next=p;p-next=NULL;strcpy(ready-state,Run);strcpy(ready-next-state,Ready);else strcpy(ready-state,Run);pc=ready-breakp;void processor()/模拟处理器指令执行 if(strcmp(ready-name,Producer)=
24、0)/当前进程为生产者switch(pc)case 0:/produce printf(t*生产者生产了字符%cn,strsp);rec_prp1=strsp;/添加到生产记录sp=(sp+1)%len;pc+;ready-breakp=pc;/保存断点break;case 1:/p(s1)pc+;p(1);break;case 2:/put bufferin=rec_prp1;/放到缓冲区printf(t*%c字符成功入驻空缓存!n,bufferin);rp1+;in=(in+1)%BUF;pc+;ready-breakp=pc;/保存断点break;case 3:/v(s2)pc+;pri
25、ntf(t*释放一个s2 信号 n);v(2);break;case 4:/goto01 printf(t*生产进程goto 0 操作 n);pc=0;名师资料总结-精品资料欢迎下载-名师精心整理-第 13 页,共 42 页 -count-;/剩余字符个数减1 printf(t*剩余字符count=%d 个n,count);ready-breakp=pc;/保存断点if(countstate,Stop);strcpy(p1-reason,Null);ready-breakp=-1;ready=ready-next;/在就绪队列中去掉 else/当前进程为消费者switch(pc)case 0:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 操作系统实验指导书 2022 实验 指导书
限制150内