操作系统实验报告
学生姓名
学
号
专业班级
指导教师
宋虹
学
院
信息科学与工程学院
完成时间
2018 年 5 月 20 日
目录
第一部分……………………………………………………………………………… 1
一、实验概述
(一)实验目的....................................................................................................1
(二)实验内容及要求........................................................................................1
1、操作系统实验一...........................................................................................................1
2、操作系统实验二...........................................................................................................2
二、需求分析
(一)基本原理....................................................................................................4
1、动态优先权调度算法.....................................................................................4
2、首次适应算法................................................................................................4
(二)基本功能....................................................................................................4
三、总体设计
(一)总体设计思路............................................................................................7
(二)总体工作流程图......................................................................................17
四、详细设计与实现
(一)数据结构设计……………………………………………………………10
(二)进程调度模块的设计与实现……………………………………………10
(三)内存管理模块的设计与实现……………………………………………21
五、实验运行结果…………………………………………………………………… 26
第二部分………………………………………………………………………………32
第三部分………………………………………………………………………………54
第四部分………………………………………………………………………………65
结束语..........................................................................................................................72
参考文献......................................................................................................................76
第一部分
一 实验概述
(一) 实验目的
本实验是操作系统原理课程的实践性锻炼环节。通过实验,帮助学生更好地掌
握操作系统在计算机软硬件资源管理中的地位和作用,掌握操作系统的基本概念、
原理和基本方法,锻炼学生应用高级编程语言完成进程管理和内存管理编程的能力,
初步培养学生系统层次软件分析、设计能力,使学生加深对操作系统本质的理解,
巩固课堂所学的理论知识。
(二) 实验内容及要求
操作系统实验一
1. 实验题目
支持多进程并发执行的简单模拟系统
2. 实验目的
(1)加深对进程概念及进程管理各部分内容的理解;
(2)熟悉进程管理中主要数据结构的设计及进程调度算法、进程控制机构和同步
机构的实现过程。
3. 实验内容
(1)设计进程管理中数据结构的内容;
(2)设计一个优先权调度算法,实现进程调度;
(3)设计至少两个临界资源的同步管理模拟。
4. 实验要求
(1)最好采用图形界面;
(2)可随时增加进程;
(3)规定道数,设置后备队列和阻塞状态。若内存中进程少于规定道数,可自动
第 1页 共 70 页
从后备队列中调度作业进入。被阻塞进程入阻塞队列,设置唤醒功能用于将指定阻塞进
程唤醒进入就绪队列;
(4)每次调度完成,显示各进程状态;
(5)设置至少两个临界资源阻塞队列和公共变量,模拟同步过程;
(6)设置时间片中断操作;
5. 提示
(1)PCB 内容:进程名/PID、要求运行的时间、优先数、状态、临界资源表、条件
表;
(2)可随时输入若干进程,并按优先权排序;
(3)从就绪队列首选进程运行:
优先数-1;要求运行时间-1;当要求运行时间=0 时,撤销该进程;
(4)重新排序,进行下轮调度;
操作系统实验二
1. 实验题目
主存空间的分配与回收
2. 实验目的
帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。
3. 实验内容
在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。
4. 实验提示和要求
(1)自行假设主存空间大小,预设操作系统所占大小并构造未分分区表;
表目内容:起址、长度、状态(未分/空表目)
(2)结合实验一,PCB 增加为:
{PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置,PCB 指针}
(3)采用最先适应算法分配主存空间。
第 2页 共 70 页
(4)进程完成后,回收主存,并与相邻空闲分区合并。
二 需求分析
第 3页 共 70 页
(一) 基本原理
1. 动态优先权调度算法
动态优先级调度算法是指在创建进程之初,先赋予其一个优先级,然后其值随
着进程的推进或等待时间的增加而改变,以便获得更好的调度性能。例如,可以规
定在就绪队列中的进程随其等待的时间的正常,使其优先级相应提高。若所有的进
程都具有相同的优先级初值,则最先进入就绪队列的进程会因为其优先级变得最高,
而优先获得处理机,这相当于 FCFS 算法。若所有的就绪进程具有各不相同的优先级
初值,那么对于优先级初值低的进程,在等待了足够的时间后,也可以获得处理机。
抢占式优先权调度算法
在这种方式下,系统把处理机分配给优先权最高的进程,使之执行。但在其执
行期间,只要又出现了另一个其优先权更高的进程,进程调度程序就立即停止当前
进程(原优先权最高的进程)的执行,重新将处理机分配给新到的优先权最高的进程。
因此,在采用这种调度算法时,是每当系统中出现一个新的就绪进程 i 时,就将其
优先权 Pi 与正在执行的进程 j 的优先权 Pj 进行比较。如果 Pi≤Pj,原进程 Pj 便
继续执行;但如果是 Pi>Pj,则立即停止 Pj 的执行,做进程切换,使 i 进程投入执
行。显然,这种抢占式的优先权调度算法能更好地满足紧迫作业的要求,故而常用
于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中。
2. 首次适应算法
首次适应算法(FF,first fit)是内存基于顺序搜索的动态分配分区算法,在
分配内存时,从链首开始顺序查找,直至找到一个大小能满足要求的空闲分区为止,
然后在按照作业的大小从该分区中划出一块内存空间,分配给请求者,余下的空闲
分区仍留在空闲链中。若从链首直至链尾都不能找到一个能满足要求的分区,则表
明系统中已没有足够大的内存分配给该进程,内存分配失败,返回等待。
该算法倾向于优先利用内存中低地址部分的空闲分区,从而保留了高地址部分
不断被划分。这为以后到达的大作业分配大的的内存空间创造了条件。其缺点是低
地址部分不断被划分,会留下许多难以利用的、很小的空闲分区,称为碎片。而每
次查找又都是从低地址部分开始的,这无疑又会增加查找可用空闲分区时的开销。
(二) 基本功能
1. 创建
第 4页 共 70 页
创建新进程,弹出新建进程的窗口。如果用户自己设置进程名称、运行时间用
优先级,则按用户的需要创建;否则,系统将随机为该进程生成名字、运行时间及
优先级。如果就绪队列表中的进程数目少于 4 个,那么就将新建的进程放入就绪队
列表中,分配内存,并按优先级的高低排列;否则该进程就进入到后备队列表中,
同样也会按优先级进行排列。
2. 运行
选择“运行”时,就绪队列表中的第一个进程的状态改为“运行”,并且开始
运行。按照初始优先权排序后分配内存,文本框中显示“某进程正在运行...”,优
先权-1,要求运行时间-1;按照动态优先权调度,运行的进程不断切换;随着时间
的推移,进程的剩余时间慢慢变小,直到 0;进度条按比例增长,到最大值后返回 0。
当第一个进程运行完后,移出就绪队列,如果后备队列表中有进程,那么将后备队
列中的第一行移到就绪表中并排序。修改排序后的第一个进程的状态然后运行。重
复这些,直到后备队列表和就绪队列表为空。
3. 挂起
选择“挂起”时,当就绪队列表不为空时,如果选择了表中的一项,那么将选
中的那一行移出就绪队列表,如果没有选择就绪表中的任意一行,那么将就绪队列
表中的第一行移出;在挂起队列表中添加移出了的这一行,并将状态改为“挂起”;
如果就后备队列表不为空,那么将此表中的第一行移到就绪队列表中并排序。
4. 解挂
选择“解挂”时,当挂起队列表不为空时,如果没有在挂起队列表中选择一行,
那么不能挂起;如果选择了,那么将选择了的这一行移出;如果就绪队列表中的行
数小于 4,在就绪队列表中添加移出了的这一行,并将状态改为“就绪”;如果就绪
队列表中的行数大于或等于 4,那就在后备队列表中添加这一行,并将状态改为“后
备”。
5. 清空
选择“清空”时,将内存和分配分配情况记录清空。
6. 退出
选择“退出”时,退出整个图形界面。
7. 唤醒
第 5页 共 70 页
用于将指定阻塞进程唤醒进入就绪队列。
三 总体设计
(一) 总体设计思路
根据实验一、二的任务要求将本程序分为两个模块:进程调度模块、内存分配
模块。进程调度模块使用动态优先权调度算法,内存分配模块使用最先适应算法。
通过 Swing 技术来实现用户友好的图形化界面,首先将主页面分成两部分:上
面小部分 p1 依次放置要用到的按钮(创建,运行,唤醒,挂起,解挂,清空,退出),
剩下一大部分 p2 用来放置表格,显示进程的详细信息。p2 又分成了四个部分,其
中前三个部分用来放置表格,分别为后备队列表、就绪队列表、挂起进程表、阻塞
队列表哦,最后一部分放置一个文本框(显示内存分配情况记录),进度条(显示正
第 6页 共 70 页