2022年东北大学操作系统实验报告.pdf
《2022年东北大学操作系统实验报告.pdf》由会员分享,可在线阅读,更多相关《2022年东北大学操作系统实验报告.pdf(28页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、东北大学操作系统实验报告计算机科学与工程学院实验报告实验课程名称操作系统实验实验成绩专业计算机科学与技术班级1507班指导教师签字学号2 姓名罗艺博实验报告批改时间实验项目目录1.实验一熟悉 Linux 系统2.实验二进程状态3.实验三进程同步与通信4.实验四进程的管道通信5.实验五页面置换算法精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 1 页,共 28 页 - - - - - - - - - - 东北大学操作系统实验报告实验报告正文实验一熟悉 Linux 系统一、实验目的熟悉与掌握Linux 系统基
2、本命令 ,熟悉 Linux 编程环境 ,为以后的实验打下基础。二、实验原理基于 linux 系统的基础操作三、实验内容 (源码、注释、基础内容、扩展点等) 启动、退出、 ls(显示目录内容 )、cp(文件或目录的复制)、mv(文件、目录更名或移动)、rm(删除文件或目录 )、mkdir(创建目录 )、 rmdir(删除空目录 )、 cd(改变工作目录 )C 语言编辑、编译四、实验结果 (截图 ) ls mkdir: cd: rmdir: 实验二进程状态一、实验目的自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的 PCB 内容、组织的变化 ,理解进程与
3、其PCB 间的一一对应关系。二、实验原理1、 进程在内存中存在三种基本状态:就绪态、执行态、阻塞态2、 三种状态在满足某种条件时会发生转换: 就绪运行:调度程序选择一个新的进程运行运行就绪:运行进程用完了时间片运行进程被中断,因为一高优先级进程处于就绪状态运行阻塞:当一进程等待某一事件的发生时,如请求系统服务 ; 初始化 I/O 且必须等待结果; 无新工作可做 ; 等待某一进程提供输入(IPC) 阻塞就绪:当所等待的事件发生时三、实验内容 (源码、注释、基础内容、扩展点等) #include 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - -
4、 - - - - - - - -第 2 页,共 28 页 - - - - - - - - - - 东北大学操作系统实验报告#include #include #include /for sort in vector using namespace std; class Pro /process class public: char name; string status; ; vector ru,re,bl; /ru-running,re-ready,bl-blocked /function declaration int helloUI(); int iniQ(); int showPCB(
5、); int ruTOre(); int ruTObl(); int blTOre(); int neTOre(); int ruTOex(); int helloUI() /start UI cout Hello!Welcome to come back 、 endl; cout #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*# endl; cout endl; cout endl; return 0; int iniQ() /initialize the process int i; cout Please enter processes names and
6、their status、 endl; cout endl; for(i=0; i5; i+) /15 process a to o Pro process; char nam; string sta; cout Please enter i processes names 、 nam; process 、name = nam; cout Please enter processes status 、 endl; cout Status contains r1(running),r2(ready) and b(blocked)、 sta; process 、status = sta; if(s
7、ta = r1) /judge which status if(ru、size()1) ru、push_back(process); cout yes endl; else cout Error! endl; else if(sta = r2) re、push_back(process); else if(sta = b) bl、push_back(process); else cout Error! endl; cout endl; cout endl; showPCB(); return 0; int showPCB() int i; cout running:; for(i=0; iru
8、 、size(); i+) cout rui 、name ,; cout endl; cout ready:; for(i=0; ire 、size(); i+) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 4 页,共 28 页 - - - - - - - - - - 东北大学操作系统实验报告 cout rei 、name ,; cout endl; cout blocked:; for(i=0; ibl 、size(); i+) cout bli 、name ,; cout endl; return
9、 0; int ruTOre() if(!ru、empty() /runningQueue is being used 、 re、push_back(ru、front(); /runnings first process go to readylast ru、erase(ru 、begin(); /delete runnings first process ru、push_back(re、front(); re、erase(re 、begin(); else cout Error in ruTOre endl; showPCB(); return 0; int ruTObl() if(!ru、
10、empty() /runningQueue is being used 、 bl、push_back(ru、front(); ru、erase(ru 、begin(); if(!re、empty() ru、push_back(re、front(); re、erase(re 、begin(); else cout Error in ruTObl1、 endl; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 5 页,共 28 页 - - - - - - - - - - 东北大学操作系统实验报告 else c
11、out Error in ruTObl2、 running ru、push_back(re、front(); re、erase(re 、begin(); else cout Error in blTOre endl; showPCB(); return 0; int neTOre() int i; cout Please enter processes names and their status、 endl; cout endl; Pro process; char nam; string sta; cout Please enter processes names 、 nam; proce
12、ss 、name = nam; process 、status = r2; re、push_back(process); cout endl; cout endl; if(ru、empty() 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 6 页,共 28 页 - - - - - - - - - - 东北大学操作系统实验报告 ru、push_back(re、front(); re、erase(re 、begin(); showPCB(); return 0; int ruTOex() if(!ru、em
13、pty() /runningQueue is being used 、 ru、erase(ru 、begin(); if(!re、empty() ru、push_back(re、front(); re、erase(re 、begin(); else cout Error in ruTOex1、 endl; else cout Error in ruTOex2、 endl; showPCB(); return 0; int main() int act; /choose action helloUI(); cout Please initialize the process、 endl; ini
14、Q(); while(1) cout endl; cout Please select the action to take、 endl; cout ready endl; cout blocked endl; cout ready endl; cout ready endl; 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 7 页,共 28 页 - - - - - - - - - - 东北大学操作系统实验报告cout exit act; if(act = 2) ruTOre(); else if(act
15、 = 3) ruTObl(); else if(act = 4) blTOre(); else if(act = 5) neTOre(); else if(act = 6) ruTOex(); else cout Error in select 、endl; cout # endl; cout endl; return 0; 拓展点 :五状态模型四、实验结果 (截图 ) 创建进程 : 状态 runningready: 状态 runningblocked: 状态 blockedready: 创建新进程 : 情况一有进程正在运行情况二无进程正在运行终止进程 : 实验三进程同步与通信一、实验目的调试
16、、修改、运行模拟程序,通过形象化的状态显示,使学生理解进程的概念,了解同步与通信的过程,掌握进程通信与同步的机制,特别就是利用缓冲区进行同步与通信的过程。通过补充新功能,使学生能灵活运用相关知识,培养创新能力。精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 8 页,共 28 页 - - - - - - - - - - 东北大学操作系统实验报告二、实验原理假定、缓冲区可以容纳8 个数据 ; 因为缓冲区就是有限的,因此当其满了时生产者进程应该等待;当消费者取走一个数据后,应唤醒正在等待的生产者进程; 当缓冲区
17、空时 ,消费者进程应该等待;当生产者向缓冲区放入了一个数据时,应唤醒正在等待的消费者进程。这就就是生产者与消费者之间的同步三、实验内容 (源码、注释、基础内容、扩展点等) 基础内容 :编写程序使其模拟两个进程,即生产者 (producer)进程与消费者(Consumer)进程工作 ;生产者每次产生一个数据,送入缓冲区中 ;消费者每次从缓冲区中取走一个数据。每次写入与读出数据时 ,都将读与写指针加一。当指针到达缓冲区尾,重新将指针退回起点; /*/ /* PROGRAM NAME: PRODUCER_CONSUMER */ /* This program simulates two proces
18、ses, producer which */ /* continues to produce message and put it into a buffer */ /* implemented by PIPE, and consumer which continues to get */ /* message from the buffer and use it、*/ /* The program also demonstrates the synchronism between */ /* processes and uses of PIPE、*/ /*/ #include #includ
19、e /#include #define PIPESIZE 8 #define PRODUCER 0 #define CONSUMER 1 #define RUN 0 /* statu of process */ #define WAIT 1 /* statu of process */ #define READY 2 /* statu of process */ #define NORMAL 0 #define SLEEP 1 #define AWAKE 2 #include /Process Control block struct pcb char *name; 精品资料 - - - 欢迎
20、下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 9 页,共 28 页 - - - - - - - - - - 东北大学操作系统实验报告int statu; int time; ; /* times of execution */ /Buffer struct pipetype char type; /type int writeptr; /Write pointer int readptr; /Read pointer struct pcb *pointp; /* write wait point */ struct pcb *p
21、ointc; ; /* read wait point */ int pipePIPESIZE; /Buffer array struct pipetype pipetb; struct pcb process2; /number of producer - number of consumer,buffer、 count = 8:too many prodecers; number of times, ret-present status char in2; int runp(),runc(),prn(); pipetb、type = c; pipetb、writeptr = 0; pipe
22、tb 、readptr = 0; pipetb、pointp = pipetb 、pointc = NULL; processPRODUCER、name = Producer0; processCONSUMER、name = Consumer0; processPRODUCER、statu = processCONSUMER 、statu = READY; processPRODUCER、time = processCONSUMER 、time = 0; output = 0; printf(Now starting the program!n); printf( Press p1 to ru
23、n PRODUCER1, press p2 to run PRODUCER2 、n press c to run CONSUMER 、n); /PRODUCER1-product 1 new data, PRODUCER2-product 2 new data printf( Press e to exit from the program 、n); for(i=0;i1000;i+) in0=N; while(in0=N) scanf(%s,in); 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 10
24、 页,共 28 页 - - - - - - - - - - 东北大学操作系统实验报告if(in0!=e&in0!=p&in0!=c) /when not p,c,e continue in0=N; if(in0=p&processPRODUCER、statu=READY) /producer and ready if(in1 = 2) /producer2 int m; for(m=0;m 3) /the number of waitting producer over 4,waitqueue=4 printf(wrong!n); continue; if(countstatu=READY;
25、runc(process,pipe,&pipetb,CONSUMER); countr-; printf(countr=%dn,countr); if(countr=0) pipetb 、pointc=NULL; else if(in1 = 1) /producer1 if(countp 3) 精品资料 - - - 欢迎下载 - - - - - - - - - - - 欢迎下载 名师归纳 - - - - - - - - - -第 11 页,共 28 页 - - - - - - - - - - 东北大学操作系统实验报告 printf(wrong!n); continue; if(countsta
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022 东北大学 操作系统 实验 报告
限制150内