东北大学操作系统试验报告_第1页
东北大学操作系统试验报告_第2页
东北大学操作系统试验报告_第3页
东北大学操作系统试验报告_第4页
东北大学操作系统试验报告_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程编号:B080000070操作系统实验报告班级指导教师石凯实验名称操作系统实验开设学期2016-2017 第二学期开设时间第11周第18周报告日期2017年7月3日评定成绩评定人石凯评定 日 期2017年7月5日东北大学软件学院实验一进程的同步与互斥实验题目:通过学习和分析基础例子程序.使用windows进程和线程编程(也可以采用Java或 Unix/Linux的POSIX线程编程)实现一个简单的生产者/消费者问题的程序。关键代码:import java.util.ArrayList;public class Produce public Object object;public Arra

2、yList list;/用list存放生产之后的数据.最大容量为1public Produce(Object object,ArrayList list )this.object = object;this. list = list;)public void produce。synchronized (object) /*只有list为空时才会去进行生产操作*/try while (!list.isEmpty()System. out.println (生产者+Thread. currentThread().getName() + waiting);object.wait();)int val

3、ue = 9999;list.add(value);System. out.println(生产者+Thread. currentThreadQ.getName()+ Runnable);object.notifyAll();/然后去唤醒因object调用wait方法处于阻塞状态的线程catch (InterruptedException e) e.printStackTrace();)import java.util.ArrayList;public class Consumer public Object object;public ArrayList list;/用list存放生产之后的

4、数据.最大容量为1public Consumer(Object object,ArrayList list )this.object = object;this. list = list;)public void consmer() synchronized (object) try /*只有list不为空时才会去进行消费操作*/while (list.isEmpty()System. out.println(消费者+Thread. currentThread().getName() + waiting);object.wait();)list.clear();System. out.prin

5、tln(消费者+Thread. currentThreadQ.getName()+Runnable);object.notifyAll();/然后去唤醒因object调用wait方法处于阻塞状态的线程catch (InterruptedException e) e.printStackTrace();)实验结果:_ Probleimf 卜,比 K-. Dclaratlui m Can笛口真 总 Wciik叩ace Mlgra七口小JAX-WS AnnoiatiaHS 总 JPA AiHKiiarWrE吗必小“加3( Mm (Jjvj applicmt幻n匚Mpp师理匚即式由口2块口f 粗口加限

6、jdk5 w。抡油也g_i2gin晒van 2017Wf-l 下午&汨;回:产失生产舌2 hmahlc看 上,; TT 1 迎3 K 芍=Runnable消景着HI钥昔1 K.jiting: h3itLhg生F fer n 1 Rubble生F 士生j ci 1 tjai-ti.r.E消费者省才2 Runnabls注 )/,,:; wnitinc小;三 l KflitiHE生产者生产者2 faiwublE-?):二/;: 1 WiitirE消一舌消叫:T1 Runnable:台 产 Hi n式ting漕.号捎叫u2 baiting生产者生,甘L Ruckle生产餐生产者1 waitbie正日之

7、 ri J Runnable猫“,棺: H 2 wa it LHg泊百 a rA ,ti mitiriB思考题:(1)如何控制进程间的相互通信?答:主要有:管道.信号.共享内存.消息队列(2)什么是进程的同步?什么是进程的互斥?分别有哪些实现方式?答:进程互斥是进程之间的间接制约关系。当一个进程进入临界区使用临界资源时.另一个进程必须等待。只有当使用临界资源的进程退出临界区后.这个进程才会解除阻塞状态。进程同步也是进程之间直接的制约关系.是为完成某种任务而建立的两个或多个线程 这个线程需要在某些位置上协调他们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系来源于他们之间的合作。

8、可以利用信号量来实现进程的同步与互斥。实验二处理机调度实验题目:设计一个按优先权调度算法实现处理器调度的程序数据结构及符号说明:typedef struct pb 每个进程char pname5;/进程的名字char status8;/进程的状态int time;/要求运行时间int pri;进程的优先权int cputime;/cpu时间struct pb *p;/队列结构.它的下一个。pbc, *pbcp;流程设计:关键代码:void attemper(pbcp pbca) pbcp pItem = pbca-p;pbcp pIterator = pbca-p;while (pIterat

9、or!= NULL) if (pItem-pri pri&pIterator-time != 0) pItem = pIterator;) pIterator = pIterator-p;)if (pItem-time -二 1)二= 0) pItem-cputime += 1;pItem-pri -= 1;strcpy(pItem-status, finish);)else strcpy(pItem-status, run); pItem-cputime += 1;pItem-pri -= 1;strcpy(pItem-status, run);)pIterator = pbca-p;whi

10、le (pIterator != NULL) if (pIterator-cputime != 0&pIterator!=pItem&pIterator-time!=0) pIterator-cputime += 1;strcpy(pIterator-status, ready); ) pIterator = pIterator-p;)printPbc(pbca);)运行结果:利蛤比进也去据发请输人进程塞后:5清传人进每名,运行时目,加生世P1 2 J请输入进程名,运行时司.优先辄P2 3 5消输人进苣号运行时旬优先皱,9 1 号金辖入进程各运行时间忧元坂P4 2 4他输入进卷卷运行时间,优先

11、较他程却cpu时间运行时间优先如状态PI 02 rtady进程名/时间.,运行时间/ft先鎏状者P?035rwadr送程却cpu时间运行时间优先如秋态Pi03ready进程名,“时间/运行时间优先而状态P4024rga 小冏程包/cpu时间运行时间优先如状态PS042readyTIUE1域程名pu时间运行时间优先馥,状态P102rwadr进程卷5时间/运行时间缗先缠/状态P2124rimU CAMndDM上竽值面32比ecLexe X进程名.印u时IH运行时间 优先薮.状态P5 042 readrTIME1进程名,鼻。时间运行时间优先缓,状态Pl D 2 radv进程名,CPU时间迂行时间优先

12、俎:状态P2L24nm进程名.pu时间运行时间优先裹.状态P3Q3rtady进程名/cpuBl间运亍时间,优无攀,犹升P4024readr电程名/cpu时间W行时间世先扳状态P5042i*advTIME2进程名,匚PU时间迂行时间优先貌:状态PL D 2 L-=adr进程名.pu时间运行时间优先裹.状态P2224rtady进程力/cpuEl-l R运行时间优先巍状态Pi03readr进行名/cpu时间,运行时间.优先级;状态P413rim进程名,鼻。时间运行时间优先缓,状态P5D42L-tiidTTIME?进程名.pu时间运行时间优先裹.状态PL Q 2 rtadvS CzWAinHclUHk

13、systiEnnIZ/irdjexE X进程名.ce时间 运行时间 优先敏 KWP5 042 reidvTIME3进程名总叫时间运行时间优先破.状志Pl02radv进程名/匚叫时间透行时间优先貌f状态P233nm进程名,Mu时间运行时间优先缓,状者P3Q3rtady进程名餐阻时间运厅时间.优先酬状态P428readr迸程名,cpu时间运行时间优先魏,状态PiQ42rtadyTIUE4进程名/匚叫时间 透行时间 优先貌f状态FLQ2L-sadj-进程名,Mu时间运行时间优先缓,状者P243rtady进程右左四刖问三行时间/优先翻/状态PJ08readr迸程名北口口时皿运行时间/优先绿状态P430

14、2finish进程名,&u时闰嗨行时间哦先豺状杳P5042readyTIMES进程名/中u时间/运行时间峨先豺状态F1 021 read?U CAMndDM上竽值面32比ecLexe X进程名.印u时IH运行时间 优先薮.器内P5 042 eadrTIMES进程名,3u时间运行时间优先缓,状态Pl D 2 radv进程名,CPU时间迂行时间优先俎:状态P25-3rwadv进程名.pu时间运行时间优先辍.状浩P3102finish进程名/cpuBl间运亍时间,仔爨,状盛P4302finjsh电程名/cpu时间W行时间优先飘状态P5042i*advTIMES进程名,匚PU时间迂行时间优先貌:状态P

15、LD2i-=ady进程名.pu时间运行时间优先辍.状浩P2602finish进程力/cpuBl间运行时间优先巍状态P31cl2 finjsh进行.a七pu时间,运行时间.优先级;状态P4202finish进程名,3u时间运行时间优先缓,状态P5D42L-tiidTTIME?进程名.pu时间运行时间优先裹.状态PL Q 2 rtady31 2AWindn!i,1stenil2cirbcLcMe XPJ L 02 finish进程名Apu时间 运行时间 优先如状态P4302finish进程名.Xpu时间运行时间.优先献状春PSS20radvTIME10进程告u时间运行时间.优先破.,状志P120r

16、*adv进程名儿叫时间 运行时间 优先如状态P2602il-isb进程S &u时间,运行时间优先初状态P31a2finish进程名fcpu时间迂行时间优先如状态P4&02finish进程名u时间/运行时间.,优先缴3状态Pi 4- run-TIME11后程名:邛u时间.,运行时间.优先圾,状态PL 3 a- finish进程名/QiRl同店:亍时用优先球状态P2.602 finish进程名,W时间,足行时间.优先绷状态P3102finish进程名/CPUH1间运行时间/优先豺状态P4302fin jsh进程暂cpu时间迁有时间优先初状态Pi 5- ready孱授任意裙奉段.思考题:(1)处理机

17、调度的目的?答:主要还是为了优化软件的运行。(2)你实现优先权调度算法的思想?答:遍历一次.取出优先权最高的.判断该进程是否还要运行.要允许就运行它。实验三存储管理实验题目:模拟分页式存储管理中硬件的地址转换和产生缺页中断。 用先进先出下0)页面调度算法处理缺页中断。数据结构及符号说明:int paper_table75 char *oper_char12 int oper_table122 int fifo_table4int static count = 0;/7乘5的页表每次操作/指令序列的单元号和操作存储/先进先出表.记录那几个在内存中/记下哪个先来的流程设计:核心代码:void sc

18、heduler(void)(int i, page, page_block, page_move;for (i = 0; ic&in3kZcm(l esie在内存口-决号;马保巷步二70;物理地址F:F口谓皮箪法页需排序F 123710在内存口-央号:B:偏巷步: 50:物理地址FIFO调度算法页表排序力12 J1074在内存中,块号:制偏存Hj 15:物理地址FIFO调度算法页表排序:。12 31167在内存Q-决号:I.偏卷#:2:;将理地址FIFO例度算法页表排序:。123149在内存中.块号 5:偏程置 56;物理地址FIF 0调度算法页表排序:。123猊四口妹-版哲弟的四号为:标至倍

19、强存快显 换入内存成功.块号 5一偏移髭 4口:的理地址:680. FlFCli寻度篁法班志排序节L 2 3坡更o游-娘.音投的页号.为:L页权宜超普企换入内存成功,表号 S.Mgfti 53:狗建地址:1酬7.FIF口询度算法贝方排序6i 2 J31 2AWmdciiA*5,L5Y5tern22Vcmd-exe!1得春成功,块号:8:: 53:树理地址:1077;FIFO遁境具法Jil怠排于6 42 J断春曳 内遍 页入西 尿换FI.裱音报衿页号为:J页拔直接替换 成功.块号:9:偏移通EM:物理地址:算法网云徘字6 45 J1177:走页中喻,被昔挂前页号为:3一页被直接苦方地 3门由,i

20、.块导1节移什::::1,理地电1砧;F 可遁境真法Jil怠排于6451威页中喻,裱音报衿页号为:6一页被直接替或 换人内在成功,块争讥1B移: 7册捌理地由718;HF。遍里算日网云徘序2 4 6 1在内存中,块号乱侑林L物理地址 1期5F【K诙度算法页定排44 ?、 1走页口至,被普挂前页号为: 三页被直接苦企提入内存成功.块号 3:偏移起叫:物理地址 1108:FIFO诙度莫法贝定排序26 三1酎HU*U CAWmdow5)teni22jcm(l.exe1- X最后运行完的贝表贝号匚|许志 0主存块号 0遇盆位置11修改徐志 0111121151300021000220-19230112

21、10仔同田瓦衣tiT下耳一但移量0701502153210弼640营位4535S3存13772?8416S4请按任意键娄建.思考题:(1)先进先出页面调度算法的思想?答:基本思想:先进入内存的页面先淘汰.后进入 内存的后淘汰(2)最近最少用(LRU)页面调度算法思想?答:基本思想:最近用的最少的最先淘汰。(3)比较两种调度算法的效率(哪种调度算法使产生缺页中断的次数少)?答:从作业题我感觉最近最少使用优于先进先出。(4)分析在什么情况下采用哪种调度算法更有利?答:如果页访问高度随机的话.不见得LRU好.LRU是根据最近最少使用的来决定哪个 页表被替换.但过去很多时候不能代表未来。/主文件目录/

22、文件名/是否可读可写可执行/文件长度/用户文件目录/用户名/打开文件目录.即运行文件目录/文件ID实验四文件系统实验题目:用高级语言编写和调试一个简单的文件系统.模拟文件管理的工作过程。数据结构及符号说明:struct TYPE_UFD (string File_Name;bool Read;bool Write;bool Execute;int Length_File;);struct TYPE_MFD (string User_Name;TYPE_UFD *Pointer;);struct TYPE_AFD (int File_ID;bool Read;bool Write;bool Ex

23、ecute;int Pointer;);class TYPE_FILE_SYSTEM文件系统类( public:void Initial(void); void Start(void);private:int_Number_Users;/用户数int_Number_Files;/文件数int_MaxNumber_Open_Files;/最大打开文件数TYPEMFD*_MFD;TYPEUFD*_UFD;TYPEAFD*_AFD;);流程设计:关键代码:void TYPE_FILE_SYSTEM:Start(void) (int User_ID;int i, temp_int;string tem

24、p;char choice;int Number_Open_Files;string User_Name;string Command;TYPE_UFD *UFD;do(do(cout 已创建指令有:create delete open dir diropen write read logout shutdown nn;cout User_Name;for (User_ID = 0; User_ID_Number_Users; User_ID+) (if (_MFDUser_ID.User_Name = User_Name) break;)if (User_ID = _Number_Users

25、)cout 用户名错误.请再次输入. endl; while (User_ID = _Number_Users);cout 欢迎登录, User_Name ! endl;UFD = _MFDUser_ID.Pointer;for (i = 0; i_MaxNumber_Open_Files; i+)(_AFDi.File_ID =-1;)Number_Open_Files = 0;do(cout C: User_Name ;cin Command;if (Command = dir)(cout endl;cout 打开用户 User_Name 的文件 endl;cout t Statet Le

26、ngtht File name endl;for (i = 0; i_Number_Files; i+) (if (UFDi.Length_File != -1) (cout t;if (UFDi.Read 二二 true) cout R;elsecout -;if (UFDi.Write = true) cout W;elsecout -;if (UFDi.Execute 二二 true)cout E;elsecout -;cout t;cout UFDi.Length_File;cout t;cout UFDi.File_Name endl;)cout endl;)else if (Com

27、mand 二=diropen)(cout endl;cout 打开用户 User_Name 的文件 endl;cout t Statet Open File name endl; for (i = 0; i_MaxNumber_Open_Files; i+) (if (_AFDi.File_ID != -1) (cout t;if (_AFDi.Read = true)cout R;elsecout -;if (_AFDi.Write 二二 true)cout W;elsecout -;if (_AFDi.Execute = true)cout E;elsecout -;cout t;cout

28、 UFD_AFDi.File_ID.File_Name endl; )cout endl;)else if (Command 二=create)(for (i = 0; i_Number_Files; i+)if (UFDi.Length_File =二-1)break;if (i 二二 _Number_Files)cout Error:已有名为 _Number_Files 的文件. endl; else (cout 请输入新文件信息: endl;cout temp;UFDi.File_Name = temp;cout 文件权限:;cout Read (y/n):;do(choice = ge

29、tch(); while (choice != y & choice != n);if (choice 二二y)UFDi.Read = true;elseUFDi.Read = false;cout endl;cout Write (y/n):;do(choice = getch(); while (choice != y & choice != n);if (choice =y)UFDi.Write = true;elseUFDi.Write = false;cout endl;cout Execute (y/n):;do(choice = getch(); while (choice !=

30、 y & choice != n);if (choice =y)UFDi.Execute = true;elseUFDi.Execute = false;cout endl;cout temp_int;if (temp_int 0)UFDi.Length_File = temp_int;cout 新文件 UFDi.File_Name 已建立! endl;)else if (Command 二=delete)(cout temp;for (i = 0; i_Number_Files; i+)if (UFDi.Length_File != -1) & (UFDi.File_Name 二二 temp

31、) break;if (i 二二 _Number_Files)cout 文件名错误.请再次输入. endl;else(UFDi.Length_File =-1;cout 文件 UFDi.File_Name 已删除. endl;)else if (Command 二=open)(if (Number_Open_Files =二 _MaxNumber_Open_Files)cout Error:你已经打开了 Number_Open_Files 文件. endl;else(cout temp;for (i = 0; i_Number_Files; i+)if (UFDi.Length_File !=

32、 -1) & (UFDi.File_Name = temp) break;if (i = _Number_Files)cout 文件名错误.请再次输入. endl;else(Number_Open_Files+;for (temp_int = 0; temp_int_MaxNumber_Open_Files; temp_int+) if (_AFDtemp_int.File_ID 二二-1)break;_AFDtemp_int.File_ID = i;_AFDtemp_int.Pointer = 0;cout 请定义打开方式: endl;if (UFDi.Read 二二 true)cout R

33、ead (y/n):;do( choice = getch(); while (choice != y & choice != n);if (choice 二二y)_AFDtemp_int.Read = true;else_AFDtemp_int.Read = false;cout endl;)else_AFDtemp_int.Read = false;if (UFDi.Write = true)(cout Write (y/n):;do( choice = getch(); while (choice != y & choice != n);if (choice =y)_AFDtemp_in

34、t.Write = true;else_AFDtemp_int.Write = false;cout endl;)else_AFDtemp_int.Write = false;if (UFDi.Execute 二二 true)(cout Execute (y/n):;do( choice = getch(); while (choice != y & choice != n);if (choice =y)_AFDtemp_int.Execute = true;else_AFDtemp_int.Execute = false;cout endl;)elseAFDtemp_int.Execute;

35、cout 文件 temp 已打开. endl;)else if (Command 二=logout)(cout 再见, User_Name ! endl;break;)else if (Command 二=close)(cout temp;for (i = 0; i_Number_Files; i+)if (UFDi.Length_File != -1) & (UFDi.File_Name 二二 temp) break;if (i 二二 _Number_Files)cout 文件名错误.请再次输入. endl;else(for (temp_int = 0; temp_int_MaxNumber

36、_Open_Files; temp_int+) if (_AFDtemp_int.File_ID 二二 i)break;if (temp_int = _MaxNumber_Open_Files)cout 文件 temp 未打开. endl;else(_AFDtemp_int.File_ID = -1;Number_Open_Files-;cout 文件 temp 已关闭. endl;)else if (Command 二=read)(cout temp;for (i = 0; i_Number_Files; i+)if (UFDi.Length_File != -1) & (UFDi.File_Name 二二 temp) break;if (i 二二 _Number_Files)cout 文件名错误.请再次输入. endl;else(for (temp_int = 0; temp_int_MaxNumber_Open_Files; temp_int+) if (_AFDtemp_int.File_ID 二二 i)break;if (temp_in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论