课程设计要求: 设计并实现一个功能简单的操作系统。 至少包含进程管理、处理器调度(至少一种)、存储器的管理(请求页式)和输入输出中断请求的处理功能,有余力的同学,可以模拟实现设备管理和文件系统的功能。 最低要求: 1、有5个以上进程 2、进程至少执行四类指令:读内存,写内存,输入,输出 3、进程至少有三种状态之间的转换:运行、阻塞和就绪 4、进程至少访问10个页面,自行设计指令序列,产生5次以上缺页中断 5、程必须有页表,有能力的同学可以模拟快表 6、处理器调度算法可以是:抢占式优先级调度、多级反馈队列调度 7、页面调度算法可以是LRU或CLOCK。
- 系统实现
4.1界面
系统界面使用PyQT库进行实现。系统有初始化和运行两个按钮,通过QPushButton()方法分别实现初始化进程和运行两个功能。左侧通过QTableWidget()方法展示就绪队列、阻塞队列以及运行中的进程。右侧信息提示栏中可以显示内存分配情况以及当前进程所执行的指令等。并且显示运行进程的页表。如图4-1所示。
图4-1 系统界面
4.2进程管理模块实现
点击初始化按钮,系统自动读取PCB.yaml文件中类容,创建5个不同进程,并加入就绪队列。系统为新进程分配惟一的进程标识符、新进程的程序和数据,以及用户栈分配相应的主存空间及其他必要分配资源。系统初始化PCB中的相应信息,如进程名称、优先级、运行时间、阻塞时间等。如图4-2所示。
图4-2 初始化PCB
正在运行的进程由于提出系统服务请求(如I/O操作),但因为某种原因未得到操作系统的立即响应,或者需要从其他合作进程获得的数据尚未到达等原因,系统会将进程阻塞,等待阻塞时间结束后进程才被唤醒。如图4-3所示。
图4-3 进程阻塞
class PCB:
def __init__(self, id=0, name='p', priority=0, state=0, start_Block=0, cur_order=0,block_time=0, run_time=0):
self.id = id
self.name = name # 进程名称
self.priority = priority # 优先级
self.state = state # 0表示ready 1表示running 2表示block
self.run_time = run_time # 运行时间
self.block_time = block_time # 阻塞时间
self.cur_order = cur_order # 指令指针
self.start_Bolck = start_Block # 块号
self.page_Tab = [] # 页表
self.orders = [] # 指令集合