1、操作系统实验指导书操作系统实验指导书 北京城市学院信息学部2013年8月实验一 进程管理1目的和要求通过实验理解进程的概念,进程的组成(PCB结构),进程的并发执行和操作系统进行进程管理的相关原语(主要是进程的创建、执行、撤消)。2实验内容用C语言编程模拟进程管理,至少要有:创建新的进程;查看运行进程;换出某个进程;杀死运行进程以及进程之间通信等功能。3实验环境Windows操作系统、VC+6.0C语言4实验提示PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程所占用的CPU时间,进程的状态,当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删。主体程序 #incl
2、ude conio.h#include stdio.h#include stdlib.hstruct PCB_type int pid; int priority; int cputime; ;struct PCB_type neicun20;int shumu=0,pid_l;main() int n,m,i; char a; n=1; while(n=1) clrscr(); printf(n*); printf(n* 进程演示系统 *); printf(n*); printf(n 1.创建新的进程 2.查看运行进程 ); printf(n 3.换出某个进程 4.杀死运行进程 ); pri
3、ntf(n 5.进程之间通信 6.退出系统 ); printf(n*); printf(n请选择(16)); a=getchar(); switch(a) case1: create( ); break; case2: run( ); /* 自定义过程 */ break; case3: huanchu(); /*自定义过程*/ break; case4: kill( ); break; case5: tongxun( ); /*自定义过程*/ break; case6: exit(0); default: n=0; create( ) /* 创建一个进程的示例(不完整的程序) */ if(sh
4、umu=20) printf(n内存已满,请先结束或换出进程n); else printf(n请输入新进程的pidn); scanf(%d,&neicunshumu-1.pid); printf(n请输入新进程的优先级n); scanf(%d,&neicunshumu-1.youxian); printf(n请输入新进程的大小n); scanf(%d,&neicunshumu-1.daxiao); shumu+; 5实验运行结果 * * 进程演示系统 * * 1.创建新的进程 2.查看运行进程 3.换出某个进程 4.杀死运行进程 5.进程之间通信 6.退出系统 * 请选择(16)然后根据你选择
5、的不同,出现不同的结果。6. 实验要求:1) 上机前认真使用C语言编写好程序,采用Visual C+6.0作为编译环境;2) 上机时独立调试程序3) 根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、设计思想、源程序、实例运行结果、总结)。实验二 进程调度1目的和要求通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。2实验内容阅读教材计算机操作系统第二章和第三章,掌握进程管理及调度相关概念和原理。编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的
6、调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。程序要求如下:1)输出系统中进程的调度次序;2)计算CPU利用率。3实验环境Windows操作系统、VC+6.0C语言4实验提示用C语言实现提示:1) 程序中进程可用PCB表示,其类型描述如下: struct PCB_type int pid ; /进程名int state ; /进程状态 2表示“执行”状态 1表示“就绪”状态 0表示“阻塞”状态 int cpu_t
7、ime ; /运行需要的CPU时间(需运行的时间片个数) 2) 设置两个队列,将处于“就绪”状态的进程PCB挂在队列ready中;将处于“阻塞”状态的进程PCB挂在队列blocked中。 队列类型描述如下: struct QueueNode struct PCB_type PCB; Struct QueueNode *next;并设全程量:struct QueueNode *ready_head=NULL, /ready队列队首指针*ready_tail=NULL , /ready队列队尾指针*blocked_head=NULL, /blocked队列队首指针*blocked_tail=NUL
8、L; /blocked队列队尾指针3)设计子程序: start_state(); /读入假设的数据,设置系统初始状态dispath(); /模拟调度 calculate(); /计算CPU利用率5. 实验要求:1) 上机前认真使用C语言编写好程序,采用Visual C+6.0作为编译环境;2) 上机时独立调试程序3) 根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、设计思想、源程序、实例运行结果、总结)。4) 测试用数据: n=2 m=3 t=5 ready_head blocked_headdispath()算法流程图: /*use_cpu中记录CPU 运行时间 /*u
9、nuse_cpu中记录CPU空闲时间 否 是是 否 是 否 是 是否 是实验三 可变分区存储管理1目的和要求通过这次实验,加深对内存管理的认识,进一步掌握内存的分配、回收算法的思想。2实验内容阅读教材计算机操作系统第四章,掌握存储器管理相关概念和原理。编写程序模拟实现内存的动态分区法存储管理。内存空闲区使用自由链管理,采用最坏适应算法从自由链中寻找空闲区进行分配,内存回收时假定不做与相邻空闲区的合并。假定系统的内存共640K,初始状态为操作系统本身占用64K。在t1时间之后,有作业A、B、C、D分别请求8K、16K、64K、124K的内存空间;在t2时间之后,作业C完成;在t3时间之后,作业E
10、请求50K的内存空间;在t4时间之后,作业D完成。要求编程序分别输出t1、t2、t3、t4时刻内存的空闲区的状态。3实验环境Windows操作系统、VC+6.0C语言4实验提示用C语言实现提示:1.程序中自由链队列的结点类型可描述如下: struct freelinkint len, address; /* len为分区长度 /* address为分区起始地址 struct freelink *next; 内存占用区用链表描述,其结点类型描述如下: struct busylinkchar name; /* 作业或进程名 name=S 表示OS占用int len , address;struct
11、 busylink *next; 并设全程量:struct freelink *free_head=NULL; /自由链队列(带头结点)队首指针 struct busylink *busy_head=NULL, /占用区队列队(带头结点)首指针 *busy_tail=NULL; /占用区队列队尾指针2.设计子函数: void start(void); /* 设置系统初始状态*/ struct freelink * p; struct busylink *q; free_head=(struct freelink*)malloc(sizeof(struct freelink); free_hea
12、d-next=NULL; / 创建自由链头结点busy_head=busy_tail=(struct busylink*)malloc(sizeof(struct busylink); busy_head-next=NULL; / 创建占用链头结点 p=( struct freelink *)malloc(sizeof(struct freelink); p-address=64; p-len=640-64; (OS占用了64K) p-next=NULL; free_head-next=p; q=( struct busylink *)malloc(sizeof(struct busylink
13、); q-name=S; /* S表示操作系统占用 */ q-len=64; q-address=0; q-next=NULL; busy_head-next=q; busy_tail=q; void requireMemo(char name, int require); /*模拟内存分配*/ void freeMemo(char name); /* 模拟内存回收*/ void past(int time); /* 模拟系统过了time 时间*/ void printlink(); /* 输出内存空闲情况(自由链的结点) */ 3.设计主函数:main() start(); past(t1)
14、; requireMemo(A,8); requireMemo(B,16); requireMemo(C,64); requireMemo(D,124); printlink(); past(t2); freeMemo(C); printlink(); past(t3); requireMemo(E,50); printlink(); freeMemo(D ); printlink();5. 实验要求:1) 上机前认真使用C语言编写好程序,采用Visual C+6.0作为编译环境;2) 上机时独立调试程序3) 根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、设计思想、源程
15、序、实例运行结果、总结)。requireMemo(char name, int require)流程图如下: 否 freeMemo(char name)流程图如下: 否 是 否 是实验四 页式虚拟存储管理页面置换算法1目的和要求存储管理的主要功能之一是合理的分配空间。请求页式管理是一种常用的虚拟存储管理技术。本实验的目的是:通过编写和调试请求页式存储管理中页面置换算法的模拟程序以加深对存储管理方案的理解,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换方法。2实验内容阅读教材计算机操作系统第四章,掌握存储器管理相关概念和原理。编写程序模拟实现页式虚拟存储管理的最佳页面置换算法。前提:(1
16、)页面分配采用固定分配局部置换。(2)作业的页面走向和分得的物理块数预先指定。可以从键盘输入也可以从文件读入。(3)置换算法的置换过程输出可以在显示器上也可以存放在文件中,但必须清晰可读,便于检验。 3实验环境Windows操作系统、VC+6.0C语言4实验提示(1)数据结构要模拟实现某一个置换算法,有如下一些对象需要用相关的数据结构来描述: 作业的页面走向(执行过程中对页面的访问顺序)。可以用数组也可以用字符串。如果用数组,则页面走向的长度受数组长度限制,如果用字符串,则需要将字符串进行解析,将字符串经过解析处理后变成一个页面的排列顺序。考虑最佳置换算法(“向前看”)和其他置换算法(“向后看
17、“)的特点。 页框(作业分得的物理块)。由于作业分得的物理块数在置换算法执行之前已经确定,可以用一些比较简单的数据结构实现。在综合置换算法的原理,可以灵活采用相应的数据结构(如队列、数组、堆栈),尽可能使程序的时间复杂度最低。采用不同的数据结构还要配合在数据结构上的相应操作才行。 (2)功能模块划分 大体上可以将整个程序的模块划分成如下几个部分:1)主模块:主要是初始化、界面和模块调用。2)页面走向输入模块。(从键盘读入数据结构或将页面走向写入文件)3)置换算法模块。 * 判断模块。决定换出哪一块。每一种置换算法对应一种判断算法。* 调整模块。根据判断模块的结果,调整作业分得物理块集合中逻辑页
18、面的情况。 * 置换过程输出模块(在显示器上显示或写入文件)。该模块每发生一次置换,由置换算法模块调用一次。*.除此之外,有些反复执行的操作考虑用过程或函数实现。总而言之,整个程序应该结构清晰,界面友好,可读性好,易调试,易扩充,易维护。 5. 实验要求:1) 上机前认真使用C语言编写好程序,采用Visual C+6.0作为编译环境;2) 上机时独立调试程序3) 根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、设计思想、源程序、实例运行结果、总结)。实验五用户接口实验1目的和要求通过上机操作的实践理解操作系统的作业级接口,着重理解shell的作用和工作过程,通过编写程序,
19、在程序中调用操作系统的系统调用来加深对程序级接口的理解,着重理解系统调用的实现。2实验内容选做任意一个: 能够熟练使用Linux系统的键盘命令和X-window图形界面,熟悉shell编程语言,编写一个简单的shell程序。指导学生在内核文件中添加一个自定义的系统调用(或者利用现有操作系统的系统调用),编程来调用自己设计(选定)的这系统调用。 练习使用DOS的键盘命令,熟悉批处理编程的语法,编写带参数的简单批处理程序,通过使用DOS的作业级接口(键盘命令)和WINDOWS的作业级接口(图形界面)来分别理解二者的shell工作原理。理解C和IE在操作系统中的作用。编写汇编语言程序,调用21号软中断,理解系统调用的作用和功能,具体体会其实现。编写程序,调用windows的API,理解windows的系统调用作用和功能。3实验环境安装有多个操作系统的PC机(DOS、Windows、Linux)4实验要求:1) 上机前认真使用C语言编写好程序,采用Visual C+6.0作为编译环境;2) 上机时独立调试程序3) 根据具体实验要求,填写好实验报告(包括目的和要求、实验内容、实验环境、源程序、运行结果、总结)。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1