操作系统
实验指导书
前言
操作系统是计算机系统中的核心系统软件,负责控制和管理整个系统的资源并组织用户协调使用这些资源,使计算机高效的工作。操作系统课程是计算机科学与技术专业核心课程。
由于操作系统是最优秀、最复杂和最庞大的软件之一,所以,真正领会操作系统课程所介绍的原理、方法和技巧等是十分困难的。经验表明,学习尤其是真正体会和掌握操作系统的最好方式是对它进行充分的实验。为此,培养计划中为操作系统课程安排了10学时实验。
为了更好地发挥实验深入理解课程知识的学习作用及知识应用的实践方法,将课程中重要知识点设计成四个实验,另外,增加了课外实验和选做实验。通过这些实验有助于学生全面、透彻的理解操作系统原理中的核心知识。
目录
第一章 概述
第二章 实验要求及注意事项 第三章 实验项目
实验一:进程创建与撤消 实验二:进程调度 实验三:死锁避免 实验四:请求页式存储管理 课外实验一:磁盘文件操作
课外实验二:使用WINDOWS 2000/XP注册表屏蔽桌面上的“回收站” 课外实验三:熟悉windows操作系统 课外实验三:分区式存储管理
第四章 参考文献 附录A 实验报告规范
第一章 概述
操作系统课程是计算机科学与技术专业核心课程。《高级语言程序设计》、《数据结构》等课程为其前趋课程。该课程理论性强,难以理解。通过课程的实验,能帮助学生深透理解并真正领会操作系统课程所介绍的原理、方法和技巧等。
实验学时为10,共分四个实验分别进行。实验一:进程创建与撤消、实验二:进程调度、实验三:死锁避免、实验四:请求分页存储管理等,其中实验四需4学时,其余均为2学时。这几个实验对操作系统原理中的进程管理、存储器管理、文件系统等重要知识进行训练。
实现语言为Visual C++ 6.0,系统平台为Windows。
第二章 实验要求及注意事项
实验环境要求:
硬件:普通PC386以上微机;
软件:windows操作系统;
开发语言:Visual C++ 6.0;
实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告、实验中认真调试所编代码并进行必要的测试、记录并分析实验结果,实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。
第三章、实验项目
实验一:进程创建与撤消
一.实验目的
(1) 加深对进程概念的理解和进程创建与撤消算法; (2) 进一步认识并发执行的实质。
二.实验属性
该实验为验证性+设计性实验。
三.实验仪器设备及器材
普通PC386以上微机
四.实验要求
本实验要求2学时完成。
本实验要求完成如下三个层次的任务:
2
(1)系统级—以普通用户身份认识windows的进程管理。通过windows的“任务管理器”观察进程的状态,进行进程的创建、切换和撤销。
(2)语言级—以普通程序员身份认识高级语言VC++的进程创建与撤销工具。 (3)模拟级—以OS设计师身份编程模拟实现进程创建与撤销功能,并在屏幕上观察进程活动的结果。 实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告;实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。
五. 实验提示--模拟级编程 1、数据结构定义:
结构体PCB:进程名、ID、运行时间、优先级等,队列的排序按创建时间或优先级排序。 PCB空间—结构体PCB数组 就绪队列指针 空队列指针 2、函数
CREATE()—进程创建:从PCB空间申请一个空PCB,填入进程参数,插入就绪队列; KILL()—进程终止:将指定的就绪进程移出就绪队列,插入空队列;
就绪队列输出函数—输出就绪队列中的进程信息,以便观察创建或撤消活动的结果;
主函数—功能选择、输入新进程参数、调用创建函数、输出就绪队列;输入进程名称、调用终止函数、输出就绪队列;
3、主界面设计:进程创建、进程撤销、就绪队列显示菜单;数据输入和就绪队列显示区。 4、功能测试:从显示出的就绪队列状态,查看操作的正确与否。
实验二: 进程调度
一.实验目的
加深理解并模拟实现进程调度算法。
1)熟悉常用的进程调度算法,如FCFS、SPF、FPF
2)结合所学的数据结构及编程知识,选择一种进程调度算法予以实现。
二.实验属性
该实验为设计性实验。
三.实验仪器设备及器材
普通PC386以上微机
四.实验要求
本实验要求2学时完成。 本实验要求完成如下任务:
1) 编程实现单处理机系统中的进程调度,要求从FCFS、SPF、FPF、时间片轮转算法中至少选择一
个;
2) 最后编写主函数对所做工作进行测试。
3
实验前应复习实验中所涉及的理论知识和算法,针对实验要求完成基本代码编写并完成预习报告、实验中认真调试所编代码并进行必要的测试、记录并分析实验结果。实验后认真书写符合规范格式的实验报告(参见附录A),并要求用正规的实验报告纸和封面装订整齐,按时上交。
五. 实验提示
1、本实验在实验一的基础上进行设计。
2、数据结构用实验一中的进程就绪队列,并在此基础上进行调度,如果队列排序与算法要求不一致则编写一个排序函数。
3、进程调度算法:选择一种进程调度算法实现。
4、主界面设计:在实验一的界面上增加一个进程调度按钮或菜单项、被调进程的PCB显示、显示调前掉后的就绪队列。
5、功能测试:从显示出的就绪队列状态和被调进程的PCB,查看操作的正确与否。
实验三 死锁避免----银行家算法的模拟实现
一、实验目的:
1、了解进程产生死锁的原因,了解为什么要进行死锁的避免。
2、掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。 二、实验内容:
实现银行家算法的模拟。 三、实验要求: 在完成有难度的情况下,可以简化成单资源的银行家算法。 四、实验提示:
1、整个银行家算法的思路。 先对用户提出的请求进行合法性检查,再进行预分配,利用安全性检查算法进行安全性检查。 2、算法用到的主要数据结构和C语言说明。 (1)、可利用资源向量 INT AVAILABLE[M] M为资源的类型。 (2)、最大需求矩阵 INT MAX[N][M] N为进程的数量。 (3)、已分配矩阵 INT ALLOCATION[N][M] (4)、还需求矩阵 INT NEED[N] 3、银行家算法 (主程序) (1)、系统初始化。 (2)、输入用户的请求三元组(I,J,K),为进程I申请K个J类资源。 (3)、检查用户的请求是否小于还需求的数量,条件是 K<=NEED[I,J]。 (4)、检查用户的请求是否小于系统中的可利用资源数量,条件是K<=AVALIABLE[I,J]。 (5)、进行资源的预分配,语句如下:
AVALIBLE[I][J]= AVALIBLE[I][J]-K;
ALLOCATION[I][J]= ALLOCATION[I][J]+K; NEED[I][J]=NEED[I][J]-K; (6)、系统调用安全性检查算法(子程序)进行检查,如果检查通过,则不用回收,否则进行回收。
4、安全性检查算法(子函数) (1)、设置两个临时变量。
4
FINISH[N]记录进程模拟模拟执行的结束状态,初值为0,如果可以模拟执行结束,则可设为1,也可设为其它非零值以表示执行的先后次序。
WORK[M]记录模拟执行中资源的回收情况,初值为AVAILABLE[M]的值。 (2)、在进程中查找符合以下条件的进程。 条件1:FINISH[I]=0
条件2:NEED[I][J]〈=WORK[J] (3)、如果查找成功则进行资源的模拟回收,语句如下:
WORK[J]=WORK[J]+ALLOCATION[I][J]; FINISH[I]=1 或查找到的顺序号 (4)、如果查找不成功,则检查所有进程的FINISH[],如果有一个为0,则系统不为0,返回不成功标志。否则返回成功标志。
实验四:请求页式存储管理
一.实验目的
深入理解请求页式存储管理的原理,重点认识其中的地址变换、缺页中断、置换算法等实现思想。
二.实验属性
该实验为综合性、设计性实验。
三.实验仪器设备及器材
普通PC386以上微机
四.实验要求
本实验要求4学时完成,其中2个学时实现基本分页,2个学时实现请求分页功能。 本实验要求完成如下任务:
(1) 建立相关的数据结构:存储块表、页表等;
(2) 实现基本分页存储管理,如分配、回收、地址变换; (3) 在基本分页的基础上实现请求分页存储管理; (4) 给定一批作业/进程,选择一个分配或回收模拟; (5) 将整个过程可视化显示出来。 实验原理
分页存储管理将一个进程的逻辑地址空间分成若干大小相等的片,称为页。
在进程运行过程中,若其所要访问的页面不在内存而需把它们调入内存,但内存已无空闲空间时,为了保证该进程能正常运行,系统必须从内存中调出一页程序或数据,送磁盘的对换区中。但应将哪 个页面调出,须根据一定的算法来确定。通常,把选择换出页面的算法称为页面置换算法(Page_Replacement Algorithms)。
一个好的页面置换算法,应具有较低的页面更换频率。从理论上讲,应将那些以后不再会访问的页面换出,或将那些在较长时间内不会再访问的页面调出。 LRU(Least Recently Used)置换算法的描述
最近最久未使用(LRU)置换算法,是根据页面调入内存后的使用情况进行决策的。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次
5