1、操作系统课程设计操作系统课程设计 实验名称实验名称 CPU 进程调度和内存分配 实验内容实验内容 一、选择一个调度算法,实现处理机调度 二、处理机调度过程中,主存储器空间的分配和回收 实验目的实验目的 加深对 CPU 进程调度和内存分配的了解,进一步了解操作系统中各功能的实现, 了解在 不同的存储管理方式下,应怎样实现主存空间的分配和回收。 实验内容实验内容 一、 (1)设计一个按照优先权调度算法实现处理机调度的程序 (2)设计按时间片轮转实现处理机调度的程序 二、在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收; 实验过程及分析实验过程及分析 1.原理知识: (1)作业进入内存
2、中,由 CPU 分配产生 PCB 属性,并通过 PCB 记录进程状态,实验即 以 PCB 代表进程模拟调度过程; (2)在多道系统中,当就绪进程数大于处理机数时,须按照某种策略决定哪些进程优 先占用处理机,本设计采用优先级; (3) 进程调度时, 规定若就绪队列进程数少于 6 个, 则自动从后备队列调入一个作业; (4) 系统会将占有较多资源、 预期结果不符合要求的进程自动挂起, 并回收所占资源, 而本实验设置为手动挂起; (5)在适宜条件下,系统会将挂起的进程自动解挂,而且只解挂到就绪队列;本设计 为简化操作,设置为手动解挂,若解挂条件合适(即 CPU 各种资源可用) ,则解挂到就绪 队列,
3、并分配内存;若解挂条件不适宜,则解挂至后备队列,但不分配内存; 2、实验程序设计: (1)本实验采用 java 语言编程,并实现界面显示。 (2)为体现 java 语言面对对象程序设计的特点,实验设计为 ProcessPCB、MemoryItem 类封装 PCB 和所分配的内存各自的属性与方法;用 ProcessRecords、MemoryRecords 类封 装数组方法;用 SingleCPUScheduling 实现 GUI 界面显示; (3)ProcessPCB 类中,定义 PCB 的进程名、要求运行时间、优先级、状态、主存起始 位置、所需内存大小这 6 个属性,并定义各属性的 get
4、和 set 方法,定义 equals 方法用 于对比类的属性,定义 toString 方法得到类属性的字符串,定义 run 方法封装优先权-1/ 要求运行时间-1 的过程;MemoryItem 类中,定义可分分区表每一可分记录的主存起始位 置、内存大小及其 get 和 set 方法,定义 toString 方法得到可在界面显示的字符串; (4) ProcessRecords 封装 PCB 数组的添加元素 addItem 和删除元素 removeItem 方法, 并构造函数getItem通过参数ProcessPCB和String查找数组元素, 定义getNumberOfItems 取数组大小,定
5、义 getItemsPriorities 方法取所有数组元素的 toString 方法用于界面显 示,定义 iterator 方法取得数组的迭代器; (5)MemoryRecords 用同样的设计思想封装以 MemoryItem 为数组元素的各属性和方法; (6)SingleCPUScheduling 类继承 JFrame 类,实现界面化显示;与上面相对应,实例化 ProcessRecords(3 次)和 MemoryRecords(1 次)作为私有变量,分别作为后备队列、就 绪队列、挂起队列和内存可分分区表;在界面设计中,设计后备队列、挂起队列(附带解 挂 umount 按钮) 、就绪队列(
6、附带挂起 suspend 按钮)可分分区表列表显示框,设置 PCB 添加框,附带添加至后备队列(addToBackup) 、添加至就绪队列(addToReady)按钮,以 及 CPU 当前执行状态显示框、系统日志显示框,和开始调度(systemStart)按钮,优先 级和时间片单选按钮,以及时间片显示标签和文本编辑框; (7)界面设计详解;后备队列显示框用于显示已添加至后备队列的 ProcessRecords 属 性信息,其中主存起始位置默认为-1,表示未分配;挂起队列显示框用于显示从就绪队列 挂起的 PCB,其中属性“主存起始位置” (MemoryBase)将由非负数变为-1,表示挂起后收 回内存;就绪队列显示框中显示就绪队列属性,其中“主存起始位置”均为非负,表示一 分配内存;PCB 信息添加框分列 PCB6 个属性显示标签和可编辑文本框,和添加按钮,用于 添加 PCB;系统日志显示框附属时间片显示标签和可编辑文本编辑框,可由用户决定时间 片大小; (8)附属功能添加完善;最重要的是为程序添加线程,是程序能以停顿一段时间的 频率自动运行;