东北大学操作系统实验-绝对自创-实验报告-含可执行源代码-linux环境可运行-有截图_第1页
东北大学操作系统实验-绝对自创-实验报告-含可执行源代码-linux环境可运行-有截图_第2页
东北大学操作系统实验-绝对自创-实验报告-含可执行源代码-linux环境可运行-有截图_第3页
东北大学操作系统实验-绝对自创-实验报告-含可执行源代码-linux环境可运行-有截图_第4页
东北大学操作系统实验-绝对自创-实验报告-含可执行源代码-linux环境可运行-有截图_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

计算机科学与工程学院实验报告实验课程名称操作系统实验实验成绩专业班级指导教师签字学号姓名实验报告批改时间实验项目目录1. 实验一 1-7页2. 实验二 8-11页3. 实验三 12-15页4. 实验四 16-23页实验报告正文实验一 进程的状态转换及PCB的变化一、 实验目的这是一个设计型实验。要求自行设计、编制模拟程序,通过形象化的状态显示,加深理解进程的概念、进程之间的状态转换及其所带来的PCB组织的变化,理解进程与其PCB间的一一对应关系。二、 实验内容#include #include #include using namespace std;queue ready;queue running;queue block;void print();void f1();void f2();void f3();void f4();int main() ready.push(A); ready.push(B); ready.push(C); running.push(D); block.push(E); block.push(F); print(); int p; while(scanf(%d,&p)!= EOF) switch(p) case 2: f2();break; case 3: f3();break; case 4: f4();break; default:break; return 0;void f1() char c = ready.front(); ready.pop(); running.push(c); print();void f2() char c = running.front(); running.pop(); ready.push(c); print(); f1();void f3() char c = running.front(); running.pop(); block.push(c); print(); if(!ready.empty() f1(); void f4() char c = block.front(); block.pop(); ready.push(c); print(); if(running.empty() f1(); void print() int n1,n2,n3; char ch; n1 = ready.size(); n2 = running.size(); n3 = block.size(); cout _ endl; cout ready: ; for(int i = 0;i n1;i+) ch = ready.front(); cout ch; ready.push(ch); ready.pop(); cout endl; cout running: ; for(int i = 0;i n2;i+) ch = running.front(); cout ch; running.push(ch); running.pop(); cout endl; cout block: ; for(int i = 0;i n3;i+) ch = block.front(); cout ch; block.push(ch); block.pop(); cout endl;三、 实验结果实验二 进程同步和通信棗生产者和消费者问题模拟一、 实验目的这是一个验证型实验。通过对给出的程序进行验证、修改,进一步加深理解进程的概念,了解同步和通信的过程,掌握进程通信和同步的机制,特别是利用缓冲区进行同步和通信的过程。通过补充新功能,加强对知识的灵活运用,培养创新能力。二、 实验内容#include #include #include #include using namespace std;void producer();/生产者void print();/显示缓冲区void consumer();/消费者queue buffer;/缓冲区queue blockp;/等待进入缓冲区的数据int data = 0;/生产者生产的数据int num = 0;/缓冲区元素个数int np = 0;/正在等待的生产者int nc = 0;/正在等待的消费者int main()print();char c;while(scanf(%c,&c)!=e)switch(c)case p: producer();print();break;case c: consumer();print(); break;case e: exit(0);void producer()/生产者if(num 0)data+;printf(ttttt正在等待的消费者数量为:%dn,-nc);elsebuffer.push(data+);num+;elseblockp.push(data+);printf(ttttt正在等待的生产者数量为:%dn,+np);void consumer()/消费者if(num 0)buffer.pop();num-;if(np 0)buffer.push(blockp.front();num+;blockp.pop();printf(ttttt正在等待的生产者数量为:%dn,-np);elseprintf(ttttt正在等待的消费者数量为:%dn,+nc);void print()/显示缓冲区int ch;int n = buffer.size();printf(ttttt缓冲区状态%d:ttttt,num);for(int i = 0;i n;i+)ch = buffer.front();printf(%dt,ch);buffer.push(ch);buffer.pop();printf(n);三、 实验结果实验三 进程的管道通信一、实验目的加深对进程概念的理解,明确进程和程序的区别。学习进程创建的过程,进一步认识进程并发执行的实质。分析进程争用资源的现象,学习解决进程互斥的方法。学习解决进程同步的方法。掌握Linux系统中进程间通过管道通信的具体实现。二、实验内容#include #include #include #include #include #include #include #include #include using namespace std;char child_120 = This is process 1;char child_220 = This is process 2;char child_320 = This is process 3;char father20 ;int main()int fd2;int re = pipe(fd);pid_t p1,p2,p3;int *status = NULL;p1 = fork();if(p1 = 0)lockf(fd1,1,0);printf(子进程一正在写入,prd = :%dn,getpid();write(fd1,child_1,17);lockf(fd1,0,0);exit(0);else if(p1 0)p2 = fork();if(p2 = 0)lockf(fd1,1,0);printf(子进程二正在写入,pid = :%dn,getpid();write(fd1,child_2,17);lockf(fd1,0,0);exit(0);else if(p2 0)p3 = fork();if(p3 = 0)lockf(fd1,1,0);printf(子进程三正在写入,prd = :%dn,getpid();write(fd1,child_3,27);lockf(fd1,0,0);exit(0);else if(p3 0)wait(status);read(fd0,father,17);cout father endl;wait(status);read(fd0,father,17);cout father endl;wait(status);read(fd0,father,17);cout father endl;return 0;三、实验结果实验四 页面置换算法一、实验目的 进一步加深理解父子进程之间的关系及其并发执行。理解内存页面调度的机理。 掌握页面置换算法及其实现方法。 培养综合运用所学知识的能力。二、实验内容#include #include #include #include using namespace std;int main()int flag_f = 0;int flag_l = 0;float fifo_ok = 0;/fifo命中数float fifo_miss = 0;/fifo缺页数float lru_ok = 0;/lru命中数float lru_miss = 0;/lru缺页数intframe_num;/内存中分配页面个数cout frame_num; int M_Frameframe_num = 0;int total_instruction;/随机数组长度cout total_instruction;int Acess_Seriestotal_instruction;int Acess_Num;/页程序个数cout Acess_Num;srand(time(NULL);/初始化随机数组cout 访问页的顺序为:;for(int i = 0;i total_instruction;i+)Acess_Seriesi = rand() % Acess_Num+1;cout Acess_Seriesi ;cout 0)int p2 = fork(); /创建子进程二if(p2 = 0)/子进程二 LRUcout 这里是子进程二:LRU算法 endl;for(int i = 0;i total_instruction;i+)for(int j = 0;j frame_num;j+)if(Acess_Seriesi = M_Framej)/命中cout 子程序2 命中: ;lru_ok+;int t;t = M_Frameframe_num-1;M_Frameframe_num-1 = M_Framej;M_Framej = t;for(int n = 0;n frame_num;n+)cout M_Framen ;cout endl;flag_l = 1;/表示命中break;else flag_l = 0;if(flag_l = 0)cout 子程序2 缺页: ;lru_miss+;/缺页for(int k = 0;k frame_num-1;k+)M_Framek = M_Framek+1;M_Frameframe_num-1 = Acess_Seriesi;for(int n = 0;n frame_num;n+)cout M_Framen ;cout endl;cout LRU: 命中数: lru_ok 缺页数: lru_miss 命中率: lru_ok/(lru_ok+lru_miss) endl;else if(p1 = 0)/子进程一 FIFOcout 这里是子进程一:FIFO算法 endl;for(int i = 0;i total_instruction;i+)for(int j = 0;j frame_num;j+)if(Acess_Seriesi = M_Framej)/命中cout 子程序1 命中: ;fifo_ok+;for(int n = 0;n frame_num;n+)cout M_Framen ;cout endl;flag_f = 1;/表示命中break;else flag_f = 0;if(flag_f = 0)cout

温馨提示

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

最新文档

评论

0/150

提交评论