收藏 分享(赏)

操作系统上机实验报告(13版).doc

上传人:dzzj200808 文档编号:2238928 上传时间:2018-09-07 格式:DOC 页数:45 大小:3.33MB
下载 相关 举报
操作系统上机实验报告(13版).doc_第1页
第1页 / 共45页
操作系统上机实验报告(13版).doc_第2页
第2页 / 共45页
操作系统上机实验报告(13版).doc_第3页
第3页 / 共45页
操作系统上机实验报告(13版).doc_第4页
第4页 / 共45页
操作系统上机实验报告(13版).doc_第5页
第5页 / 共45页
点击查看更多>>
资源描述

1、1编 者 说 明操作系统是计算机科学与技术专业的一门核心专业基础课。学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握软件和操作系统的原理与设计技巧。这些原理与技巧可以说是计算机界的前辈们一代接一代不停歇的努力所留下的知识与智慧的结晶,学习和掌握它们对于激发自己的创造力和想象力是很有帮助的。如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的方法就是在实践中练习,通过自己模拟设计操作系统的原理实验,可以培养程序设计的方法和技巧,提高编制和理解清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解。使自身更好的掌握操作系统的基本概念、基本原理

2、及基本功能,从而具有分析实际操作系统的基本能力,深入直观的理解操作系统使用的各类算法。操作系统实验指导书是针对这门课的实验编写的,书中设计了三个操作系统原理实验。三个实验难易层次分明,重点突出,其中实验一(Windows 操作系统) 和实验二(进程管理 )为验证性实验,重在验证教材中的理论原理,而实验三(虚拟存储管理)为设计性实验,重在培养理论原理应用于实践的设计能力。所有实验共 8 学时,采用 C 语言作为编程语言模拟设计完成相关程序。限于编者的水平,难免有疏漏与错误,敬请读者批评指正。编者:李 可2实验一 Windows 操作系统一、实验题目计算机管理、任务管理、察看了解注册表二、实验目的

3、Windows 是目前使用人数最多的操作系统,学习操作系统,对操作系统有更加深入的了解。三、实验内容1. Windows 提供了那些人机交互的界面?2. 观察 Windows 对应用程序运行的支持。 Windows 提供了几种方式启动应用程序? Windows 提供了几种方式让用户改变应用程序外观? Windows 提供了几种方式结束程序的运行?3. 了解 windows 对应用程序的运行时对 I/O 支持。系统中有多少个 I/O 设备?多少种I/O 控制方式?能否确信应用程序 I/O 需要操作系统支持?能体会到 “设备独立性”吗?4. 观察资源管理器,记录你使用的机器的资源情况:CPU、内存

4、、磁盘分区及容量、文件目录树及文件属性。5. 观察设备管理器,记录你使用机器的设备的配置情况(启动控制面板,到管理工具,再到计算机管理,进入设备管理器) 。346. 控制面板中看看系统还能让我们控制什么,特别了解“系统” 、 “显示” 、 “添加硬件”、 “添加/删除程序” 、 “语音控制 ”等。567. 启动“任务管理器” ,观察 Windows 对多任务管理列出的应用程序与启动的是否一致,系统中有多少进程?为什么会有那么多进程而都不是应用程序?78. 启动 Windows 的注册表,检查系统配置和设置,初步了解注册表的作用。9. 了解管理工具,为了帮助用户管理和监视系统, Windows

5、xp 提供了多种系统管理工具,其中最主要的有:计算机管理,事件查看器,性能监视,服务,数据源(ODBC)。请回答出这些工具的主要功能。10. 事件查看器中观察“应用程序日志” ,本地计算机中,共有_个应用程序日志事件。单击“查看”菜单中的“筛选”命令,查看系统日志包括的事件类型有哪些?11. 打开“服务”图标。 查看在你的本地计算机中,管理着_个系统服务项目。通过观察,选出你所感兴趣的 5 个系统服务项目,描述他们的名称和服务的内容。12. 查看 ODBC 数据源,找到系统为哪些数据源缺省安装了 ODBC 驱动程序。8实验二 进程控制一、实验题目模拟进程管理二、实验目的利用简单的结构和控制方法

6、模拟进程结构、进程状态和进程控制。三、实验内容用 PCB 表示整个进程实体,利用键盘控制方法模拟进程执行中产生的事件,或者利用基于图形界面的鼠标或者键盘操作控制进程管理内容。建立三个基本的队列:等待、执行、阻塞进行模拟。操作系统的进程管理,模拟进程的调度,模拟用户的创建、执行、阻塞、挂起、唤醒等操作。图 2.1 进程状态转换四、源程序1. 建立一个结点,即 PCB 块包括用户标识域、指针域等。 2. 建立三个队列(执行队列、就绪队列、等待队列) 3. 根据进程状态转换实现对三个队列的具体操作4. 用 switch 选择语句选择状态 #include “stdio.h“#include “dos

7、.h“#include “stdlib.h“#include “conio.h“#include “windows.h“#define SEC 3#define NULL 0/*定义结构体*/typedef struct PCBint PID; /进程控制号int UID;/内部 ID 号struct PCB * next;PCB;9PCB *really , *excute , *wait;/*create queue header */*queue operation 入队*/int enqueue(PCB *head , PCB *node)PCB *p;p = head;if(p -

8、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;elsep = p - next;head - next = p - next;p - next = NULL;return p;/*head to next*/*dequeue*/10/

9、*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“,if(enqueue(really , p)printf(“create a process: PID = %d UID = %dn“, p - PID , p - UID);elseprintf(“create Failedn“);/*create*/*执行 fexcute*/int fexcute()P

10、CB *p = dequeue(really);if(p = NULL)printf(“NO process in queue n“);return 0;elseenqueue(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;11el

11、seenqueue(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;elseenqueue(really , p);printf(“add a process into wait really process: PID = %d UID= %d n“ ,p-PID

12、 , p-UID);return 1;int block()PCB *p = dequeue(excute);if(p = NULL)printf(“NO process in queue n“);return 0;elseenqueue(wait , p);printf(“add a process into wait queue process: PID = %d UID= %d n“ ,p-PID , p-UID);return 1;12/*block*/*输出队列 outputqueue*/int outputqueue(PCB *head)PCB *p;if(head - next

13、= 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)

14、;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;13printf(“_PROCESS SECHUDLE_n“);printf(“now initing.

15、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“,if(p - PID = 0 elseif(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 = excu

16、te;int s = SEC;if(excute - next = NULL)printf(“no process in excute queue n“);return 0;elsep = 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 successedn“ , p - PID , p - UID );excute - next = p - n

17、ext;free(p);14/*离开*/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 = N

18、ULL;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“);15printf(“t-w WAKE wake a process in wait queuen“);printf(“t-e EXCUTE excute a process

19、 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 COM

20、MAND = NULL;if( init() != 1)printf(“init falied ! n “);getch();exit(0);elseprintf(“init.OKn“);output();help();while(1)/*当三队列都不空 执行调度 */printf(“);scanf(“%c“,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:16case w: wake();

21、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.唤醒一个进程1819实验三 虚拟存储管理页面置换算法一、实验目的1通过模拟实现几种基本页面置换的算法,了解虚拟存储技术的特点。2掌握虚拟存储请求页式存储管理中几种基本页面置换算

22、法的基本思想。3通过对几种置换算法页面的比较,来对比他们的优缺点,并通过比较更换频率来对比它们的效率。二、实验内容通过编程实现一个虚拟存储区和内存工作区,并使用下述算法来模拟实现页面的置换:1. 先进先出的算法(FIFO)2. 最近最久未使用算法(LRU)3. 最佳置换算法(OPT)四、设计思路1先进先出(FIFO)置换算法该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按照先后次序连接成一个队列,并设置一个替换指针,使它总指向最老的页面。2最近久未使用(LRU)置换算法最近久未使用置换算法的替换规则,是根据页面调入内

23、存后的使用情况来进行决策的。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间,当需淘汰一个页面的时候选择现有页面中其时间值最大的进行淘汰。3.最佳(OPT)置换算法其所选择的被淘汰的页面,是以后不使用的,或者是在未来时间内不再被访问的页面,采用最佳置换算法,通常可保证获得最低的缺页率。五、测试数据假设分给一作业的物理块数为 3 ,页面数为 20 个。页面号为(20 个):7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1202122六、源代码#include #include /*全局变量*/int mSIZE; /*物理块数*/int

24、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();23system(“cls

25、“);system(“color 0B“);printf(“请输入物理块的个数(M10)printf(“输入有误,请重新输入“);scanf(“%d“,printf(“请输入页面号引用串的个数(P100)printf(“输入有误,请重新输入“);scanf(“%d“,puts(“请依次输入页面号引用串( 连续输入,中间用空格隔开 ):“);for(i=0;i“);getchar();while (code!=4);getchar();void print(unsigned int t)int i,j,k,l;int flag;for(k=0;k=j)printf(“ |%d|“,tempij)

26、;elseprintf(“ | |“);for(i=mSIZE+20*k;(i=next1?0:1;for(m=2;mnextmax)max=m;/*下一次访问时间都为 pSIZE,则置换物理块中第一个*/memerymax=pagei;for(j=0;j#include /使用 timer()函数#include /时间延迟#define DELAY 100/时间片#define SJP 4/*全局变量声明*/unsigned short TIME=0; /时间进程名 优先级 到达时间 服务时间P1 1 0 4P2 2 1 3P3 3 2 430unsigned short NUM=0; /

27、进程数量char TYPE=1; /模拟类型/PCB 结构体定义typedef struct PCBchar name16;char state; /RRun,FFinish,PPause,NNewunsigned short priority; /数字越大,优先级越高,最小为 1unsigned short t_arrive; /到达时间unsigned short t_start; /开始时间unsigned short t_finish; /完成时间unsigned short t_service; /服务时间unsigned short t_run; /运行时间unsigned sho

28、rt 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);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报