操作系统上机实验报告(13版).doc_第1页
操作系统上机实验报告(13版).doc_第2页
操作系统上机实验报告(13版).doc_第3页
操作系统上机实验报告(13版).doc_第4页
操作系统上机实验报告(13版).doc_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

编 者 说 明操作系统是计算机科学与技术专业的一门核心专业基础课。学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。这些原理与技巧可以说是计算机界的前辈们一代接一代不停歇的努力所留下的知识与智慧的结晶,学习和掌握它们对于激发自己的创造力和想象力是很有帮助的。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法就是在实践中练习,通过自己模拟设计操作系统的原理实验,可以培养程序设计的方法和技巧,提高编制和理解清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。使自身更好的掌握操作系统的基本概念、基本原理及基本功能,从而具有分析实际操作系统的基本能力,深入直观的理解操作系统使用的各类算法。操作系统实验指导书是针对这门课的实验编写的,书中设计了三个操作系统原理实验。三个实验难易层次分明,重点突出,其中实验一(Windows操作系统)和实验二(进程管理)为验证性实验,重在验证教材中的理论原理,而实验三(虚拟存储管理)为设计性实验,重在培养理论原理应用于实践的设计能力。所有实验共8学时,采用C语言作为编程语言模拟设计完成相关程序。限于编者的水平,难免有疏漏与错误,敬请读者批评指正。 编者:李 可实验一Windows操作系统一、实验题目计算机管理、任务管理、察看了解注册表二、实验目的Windows是目前使用人数最多的操作系统,学习操作系统,对操作系统有更加深入的了解。三、实验内容1. Windows提供了那些人机交互的界面?2. 观察Windows对应用程序运行的支持。l Windows提供了几种方式启动应用程序?l Windows提供了几种方式让用户改变应用程序外观?l Windows提供了几种方式结束程序的运行?3. 了解windows对应用程序的运行时对I/O支持。系统中有多少个I/O设备?多少种I/O控制方式?能否确信应用程序I/O需要操作系统支持?能体会到“设备独立性”吗?4. 观察资源管理器,记录你使用的机器的资源情况:CPU、内存、磁盘分区及容量、文件目录树及文件属性。 5. 观察设备管理器,记录你使用机器的设备的配置情况(启动控制面板,到管理工具,再到计算机管理,进入设备管理器)。6. 控制面板中看看系统还能让我们控制什么,特别了解“系统”、“显示”、“添加硬件”、“添加/删除程序”、“语音控制”等。 7. 启动“任务管理器”,观察Windows对多任务管理列出的应用程序与启动的是否一致,系统中有多少进程?为什么会有那么多进程而都不是应用程序?8. 启动Windows的注册表,检查系统配置和设置,初步了解注册表的作用。9. 了解管理工具,为了帮助用户管理和监视系统,Windowsxp提供了多种系统管理工具,其中最主要的有:计算机管理,事件查看器,性能监视,服务,数据源(ODBC)。请回答出这些工具的主要功能。10. 事件查看器中观察“应用程序日志”,本地计算机中,共有_个应用程序日志事件。单击“查看”菜单中的“筛选”命令,查看系统日志包括的事件类型有哪些?11. 打开“服务”图标。查看在你的本地计算机中,管理着_个系统服务项目。通过观察,选出你所感兴趣的5个系统服务项目,描述他们的名称和服务的内容。12. 查看ODBC数据源,找到系统为哪些数据源缺省安装了ODBC驱动程序。实验二 进程控制一、实验题目模拟进程管理二、实验目的利用简单的结构和控制方法模拟进程结构、进程状态和进程控制。三、实验内容用PCB表示整个进程实体,利用键盘控制方法模拟进程执行中产生的事件,或者利用基于图形界面的鼠标或者键盘操作控制进程管理内容。建立三个基本的队列:等待、执行、阻塞进行模拟。操作系统的进程管理,模拟进程的调度,模拟用户的创建、执行、阻塞、挂起、唤醒等操作。图2.1 进程状态转换四、源程序1. 建立一个结点,即 PCB 块包括用户标识域、指针域等。 2. 建立三个队列(执行队列、就绪队列、等待队列) 3. 根据进程状态转换实现对三个队列的具体操作4. 用 switch 选择语句选择状态 #include stdio.h#include dos.h#include stdlib.h#include conio.h#include windows.h#define SEC 3#define NULL 0/*定义结构体*/typedef struct PCB int PID; /进程控制号 int UID;/内部ID号 struct PCB * next;PCB;PCB *really , *excute , *wait;/*create queue header */*queue operation 入队*/int enqueue(PCB *head , PCB *node) PCB *p; p = head; if(p - next = NULL)head - next = node;return 1; while(p) if(p - next = NULL)p - next = node;return 1;else p = p - next; /*enquue*/*dequeue 出队列 */PCB * dequeue(PCB *head) PCB *p; p = head; if(p - next = NULL) return NULL; else p = p - next; head - next = p - next; p - next = NULL; return p; /*head to next*/*dequeue*/*PCB operate*/*新建进程*/void create()PCB *p;p = (PCB*)malloc(sizeof(PCB);p - next = NULL;printf(input PID and UID to a new processn);scanf(%d %d,&p - PID,&p - UID);if(enqueue(really , p)printf(create a process: PID = %d UID = %dn, p - PID , p - UID);elseprintf(create Failedn);/*create*/*执行 fexcute*/int fexcute() PCB *p = dequeue(really); if(p = NULL) printf(NO process in queue n); return 0; else enqueue(excute , p); printf(add a process into excute queue process: PID = %d UID= %d n ,p-PID , p-UID); return 1; /*excute*/int suspend()PCB *p = dequeue(excute);if(p = NULL) printf(NO process in queue n);return 0; else enqueue(really , p); printf(add a process into really queue process: PID = %d UID= %d n ,p-PID , p-UID); return 1; int wake() PCB *p = dequeue(wait); if(p = NULL) printf(NO process in queue n); return 0; else enqueue(really , p); printf(add a process into wait really process: PID = %d UID= %d n ,p-PID , p-UID); return 1; int block()PCB *p = dequeue(excute);if(p = NULL)printf(NO process in queue n);return 0; else enqueue(wait , p); printf(add a process into wait queue process: PID = %d UID= %d n ,p-PID , p-UID); return 1; /*block*/*输出队列 outputqueue*/int outputqueue(PCB *head) PCB *p; if(head - next = NULL) /*队列为空*/ printf(queue is null n); return 1; p = head - next; /*node pointer*/ while(p) /*打印process id UID*/ printf(PID = %d UID = %d n , p - PID , p - UID); p = p - next; return 0;/*output输出*/int output() printf(REALLLY QUEUE:n); outputqueue(really); printf(EXCUTE QUEUE: n); outputqueue(excute); printf(WAIT QUEUE: n); outputqueue(wait);/*output*/*init 初始化*/int init() PCB *p; /clrscr(); really = (PCB*)malloc(sizeof(PCB); really - next=NULL; excute = (PCB*)malloc(sizeof(PCB); excute - next=NULL; wait = (PCB*)malloc(sizeof(PCB); wait - next = NULL; printf(_PROCESS SECHUDLE_n); printf(now initing.n); printf(input PID and UID as integer , 0 0 as overn); while(1) p = (PCB*)malloc(sizeof(PCB); p - next = NULL; scanf(%d %d,&p - PID , &p - UID); if(p - PID = 0 & p - UID = 0) break; else if(enqueue(really , p) printf(new process PID = %d UID = %d added!n,p - PID , p - UID); else return 0; return 1;/*init*/*运行一个process*/int run() PCB *p = excute; int s = SEC; if(excute - next = NULL) printf(no process in excute queue n); return 0; else p = excute - next; printf(system will sleep %ds as process runningn,s); Sleep(3);/*sleep as process runing time*/ printf(process: PID = %d UID= %d excute successed.n , p - PID , p - UID ); excute - next = p - next; free(p); /*离开*/void leave() PCB *p,*t; while(really-next | excute-next | wait-next) p = really - next;while(p)t = p - next;free(p);p = t;really - next = NULL;p = wait - next;while(p)t = p - next;free(p);p = t;wait - next = NULL;p = excute - next;while(p)t = p - next;free(p);p = t;excute - next = NULL; exit(0);/*leave*/void help() printf(_HELP MENU_n); printf(t-h HELP show help optionn); printf(t-c CREATE create a new process , and put to really queuen); printf(t-b BLOCK block a process in excute queuen); printf(t-w WAKE wake a process in wait queuen); printf(t-e EXCUTE excute a process in really queuen); printf(t-s SUSPEND suspend a process in excute queuen); printf(t-o OUTPUT output all processes in queuesn); printf(t-r RUN excute a process in excute queuen); printf(t-x EXIT exit this programn); printf(_n); printf(t type H will show this menun);/*help*/void main() char COMMAND = NULL; if( init() != 1) printf(init falied ! n ); getch(); exit(0); else printf(init.OKn); output(); help(); while(1) /*当三队列都不空 执行调度 */ printf(); scanf(%c,&COMMAND); switch(COMMAND) case n: break; case H: case h: help(); break; case C: case c: create(); break; case B: case b: block(); break; case W: case w: wake(); break; case S: case s: suspend(); break; case E: case e: fexcute(); break; case O: case o: output(); break; case X: case x: leave(); break; case R: case r: run(); break; /*main*/五、实验运行结果(截图)1.运行主界面2.创建几个进程3.执行一个进程4.阻塞一个进程5.唤醒一个进程实验三 虚拟存储管理页面置换算法一、实验目的1通过模拟实现几种基本页面置换的算法,了解虚拟存储技术的特点。2掌握虚拟存储请求页式存储管理中几种基本页面置换算法的基本思想。3通过对几种置换算法页面的比较,来对比他们的优缺点,并通过比较更换频率来对比它们的效率。二、实验内容通过编程实现一个虚拟存储区和内存工作区,并使用下述算法来模拟实现页面的置换:1. 先进先出的算法(FIFO)2. 最近最久未使用算法(LRU)3. 最佳置换算法(OPT)四、设计思路1先进先出(FIFO)置换算法该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按照先后次序连接成一个队列,并设置一个替换指针,使它总指向最老的页面。2最近久未使用(LRU)置换算法最近久未使用置换算法的替换规则,是根据页面调入内存后的使用情况来进行决策的。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间,当需淘汰一个页面的时候选择现有页面中其时间值最大的进行淘汰。3.最佳(OPT)置换算法其所选择的被淘汰的页面,是以后不使用的,或者是在未来时间内不再被访问的页面,采用最佳置换算法,通常可保证获得最低的缺页率。五、测试数据假设分给一作业的物理块数为3 ,页面数为20个。页面号为(20个):7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1六、源代码#include #include /*全局变量*/int mSIZE; /*物理块数*/int pSIZE; /*页面号引用串个数*/static int memery10=0; /*物理块中的页号*/static int page100=0; /*页面号引用串*/static int temp10010=0; /*辅助数组*/*自定义置换算法函数*/void FIFO(); void LRU();void OPT();/*自定义函数*/void print(unsigned int t);/*主函数*/void main() int i,k,code;system(color 0A);printf(请按任意键进行初始化操作. n);getchar();system(cls);system(color 0B);printf(请输入物理块的个数(M10)printf(输入有误,请重新输入);scanf(%d,&mSIZE);printf(请输入页面号引用串的个数(P100)printf(输入有误,请重新输入);scanf(%d,&pSIZE);puts(请依次输入页面号引用串(连续输入,中间用空格隔开):);for(i=0;ipSIZE;i+) scanf(%d,&pagei);system(cls);system(color 0E); do puts(输入的页面号引用串为:);for(k=0;k=(pSIZE-1)/20;k+)for(i=20*k;(ipSIZE)&(i);getchar(); while (code!=4);getchar();void print(unsigned int t)int i,j,k,l;int flag;for(k=0;k=(pSIZE-1)/20;k+)for(i=20*k;(ipSIZE)&(i20*(k+1);i+)if(i+1)%20=0)|(i+1)%20)&(i=pSIZE-1)printf(%dn,pagei);elseprintf(%d ,pagei);for(j=0;jmSIZE;j+)for(i=20*k;(imSIZE+20*k)&(i=j)printf( |%d|,tempij);elseprintf( | |);for(i=mSIZE+20*k;(ipSIZE)&(i20*(k+1);i+)for(flag=0,l=0;lmSIZE;l+)if(tempil=tempi-1l)flag+;if(flag=mSIZE)/*页面在物理块中*/printf( );elseprintf( |%d|,tempij);/*每行显示20个*/if(i%20=0)continue;printf(n);printf(-n);printf(缺页次数:%dtt,t+mSIZE);printf(缺页率:%d/%dn,t+mSIZE,pSIZE);printf(置换次数:%dtt,t);printf(访问命中率:%d%n,(pSIZE-(t+mSIZE)*100/pSIZE);printf(-n);/*先进先出页面置换算法*/void FIFO() int memery10=0; int time10=0; /*记录进入物理块的时间*/ int i,j,k,m; int max=0; /*记录换出页*/ int count=0; /*记录置换次数*/*前mSIZE个数直接放入*/ for(i=0;imSIZE;i+) memeryi=pagei; timei=i; for(j=0;jmSIZE;j+)tempij=memeryj; for(i=mSIZE;ipSIZE;i+) /*判断新页面号是否在物理块中*/ for(j=0,k=0;jmSIZE;j+) if(memeryj!=pagei) k+; if(k=mSIZE) /*如果不在物理块中*/ count+;/*计算换出页*/ max=time0time1?0:1;for(m=2;mmSIZE;m+)if(timemtimemax)max=m; memerymax=pagei; timemax=i; /*记录该页进入物理块的时间*/ for(j=0;jmSIZE;j+)tempij=memeryj; else for(j=0;jmSIZE;j+)tempij=memeryj; print(count);/*最近最久未使用置换算法*/void LRU() int memery10=0; int flag10=0; /*记录页面的访问时间*/ int i,j,k,m; int max=0; /*记录换出页*/ int count=0; /*记录置换次数*/*前mSIZE个数直接放入*/ for(i=0;imSIZE;i+) memeryi=pagei; flagi=i; for(j=0;jmSIZE;j+)tempij=memeryj; for(i=mSIZE;ipSIZE;i+) /*判断新页面号是否在物理块中*/ for(j=0,k=0;jmSIZE;j+) if(memeryj!=pagei) k+; else flagj=i; /*刷新该页的访问时间*/ if(k=mSIZE) /*如果不在物理块中*/ count+;/*计算换出页*/ max=flag0flag1?0:1;for(m=2;mmSIZE;m+)if(flagmflagmax)max=m; memerymax=pagei; flagmax=i; /*记录该页的访问时间*/ for(j=0;jmSIZE;j+)tempij=memeryj; else for(j=0;jmSIZE;j+)tempij=memeryj; print(count);/*最佳置换算法*/void OPT() int memery10=0; int next10=0; /*记录下一次访问时间*/ int i,j,k,l,m; int max; /*记录换出页*/ int count=0; /*记录置换次数*/*前mSIZE个数直接放入*/ for(i=0;imSIZE;i+) memeryi=pagei; for(j=0;jmSIZE;j+)tempij=memeryj; for(i=mSIZE;ipSIZE;i+) /*判断新页面号是否在物理块中*/ for(j=0,k=0;jmSIZE;j+) if(memeryj!=pagei) k+; if(k=mSIZE) /*如果不在物理块中*/ count+;/*得到物理快中各页下一次访问时间*/for(m=0;mmSIZE;m+)for(l=i+1;l=next1?0:1;for(m=2;mnextmax)max=m;/*下一次访问时间都为pSIZE,则置换物理块中第一个*/memerymax=pagei;for(j=0;jmSIZE;j+)tempij=memeryj; else for(j=0;jmSIZE;j+)tempij=memeryj; print(count);七、实验结果(截图)1、运行程序输入数据2、算法选择界面3、FIFO算法演示结果(需要算法分析)4、LRU算法演示结果(需要算法分析)5、OPT算法演示结果(需要算法分析)45实验四 进程(作业)调度算法一、实验目的1、通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调度算法,进一步掌握进程调度的概念和算法,加深对处理机分配的理解。2、了解Windows系统的进程(作业)的调度机制。二、实验内容编写程序实现进程或作业先来先服务、优先权、按时间片轮转和短作业优先调度算法。三、设计思路1、先来先服务算法FCFS就是每次调度是从就绪队列中选择最先进入就绪队列的进程,把处理机分配给它,使它投入运行。一直执行到完或者是发生事件使之中断而阻塞,才放弃处理机。2、时间片轮转法就是系统将所有就绪进程按FCFS原则,排成一个队列,每次调度时把CPU分配给队首进程,执行一个时间片。当执行的时间片用完时,停止该进程的执行,并送到就绪队列的末尾,等待下一次执行;然后把处理机分配给就绪队列中新的队首进程,也让它执行一个时间片。按一定时间片轮番运行各个进程。如果时间片是一个定值,则时间片轮转法是一种对各进程机会均等的调度方法。3、优先权调度的基本思想就是把当前处于就绪队列中优先级最高的进程投入运行,而不管这个进程的下一个CPU周期的长短和其他因素。4、短作业优先(SPF)就是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它一直执行到完成,或发生某个事件而被阻塞放弃处理机时,再重新调度。四、测试数据进程名优先级到达时间服务时间P1104P2213P3324五、源代码#include #include /使用timer()函数#include /时间延迟#define DELAY 100/时间片#define SJP 4/*全局变量声明*/unsigned short TIME=0; /时间unsigned short NUM=0; /进程数量char TYPE=1; /模拟类型/PCB结构体定义typedef struct PCB char name16; char state; /RRun,FFinish,PPause,NNew unsigned short priority; /数字越大,优先级越高,最小为1 unsigned short t_arrive; /到达时间 unsigned short t_start; /开始时间 unsigned short t_finish; /完成时间 unsigned short t_service; /服务时间 unsigned short t_run; /运行时间 unsigned short t_wait; /等待时间 struct PCB *next; pcb;pcb *now=NULL, /现在运行的pcb *head=NULL; /pcb链头部指针/*函数声明*/void fcfs(); /先到先服务void sjf(); /短作业优先void gyxb(); /高优先比void sjplz(); /时间片轮转void init(); /初始化,完成pcb录入pcb *sort(pcb*); /对init()录入的pcb按到达时间排序void timer(); /定时器,每一个延迟自我调用一次void result(); /打印结果/先到先服务算法void fcfs() if(now-t_arriveTIME) printf(时间:%dt无进程运行n,TIME); return; if(now-state=N) now-state=R; now-t_start=TIME; printf(时间:%dt进程:%s 首次运行n,TIME,now-name); else if(now-state=R) (now-t_run)+; if(now-t_run=now-t_service) now-state=F; now-t_finish=TIME; printf(时间:%dt进程:%s 任务完成n,TIME,now-name); now=now-next; if(now!=NULL) fcfs(); else printf(时间:%dt进程:%s 正在运行,已运行时间:%dn,TIME,now-name,now-t_run); /短作业优先算法void sjf() pcb *p=head,*p_mi

温馨提示

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

评论

0/150

提交评论