实现一个模拟操作系统。\
课程设计具体内容和要求
一、文件管理和用户接口
文件管理和用户接口部分实现的主要是单用户的磁盘文件管理部分,包括文件的逻辑结构、物理结构、目录、磁盘分配回收、文件的保护和用户接口的实现。
⑴文件的逻辑结构
文件的逻辑结构采用流式结构;
文件均采用文本文件;
系统中有两种文件,一种是存放任意字符的文件,一种是可执行文件。可执行文件的内容就是模拟系统内进程的程序体。
文件中要有一种特定命令的“可执行”文件,文件中的命令非常简单,包括:
x=?;   给x赋值一位数
x++;   x加1
x--;    x减1
!??;   第一个?为A,B,C中某个设备,第二个?为一位数,表示使用设备的时间(由于没有实际设备,所以无法知道设备何时工作完成,所以假定一个数,这个数随着系统时间增加而递减,减到0时,认为是设备工作完成);
end.   表示文件结束,同时将结果写入文件out,其中包括文件路径名和x的值。
⑵磁盘模拟
用一个文件disk模拟磁盘,磁盘的每个盘块64字节,模拟磁盘共有128块。第0、1块存放文件分配表,第2块存放根目录,其余存放子目录和文件。
⑶目录结构
目录结构采用树型目录结构。
①目录项内容(8个字节):
目录名、文件名:3个字节;
扩展名:1个字节(可执行文件扩展名为e,目录没有扩展名);
目录、文件属性:1字节;
起始盘块号:1个字节;
文件长度:2字节(目录没有长度)。
②根目录
根目录位置固定,为磁盘第2块,大小固定,共8项,占用模拟磁盘第2块;
③子目录
位置不固定,大小不固定。
⑷磁盘分配
磁盘的分配采用链接结构(显式链接)的分配方式。系统采用文件分配表方式记录磁盘空间的使用情况和链接结构的指针。
因为磁盘有占用磁盘由128块,所以文件分配表中一项需要1字节,而磁盘由128块,因而需要128项,所以模拟磁盘空间中的第0、1块被用来存放文件分配表。
⑸用户接口
用户接口提供用户命令接口,要求实现以下命令:
创建文件:create
拷贝文件:copy 
删除文件:delete
移动文件:move
显示文件:type
编辑文件:edit
改变文件属性:change
磁盘格式化命令 format
建立目录:makdir
改变目录路径:chadir        
删除空目录:rdir
删除目录:deldir(既可删除空目录又可删除非空目录)
磁盘分区命令:fdisk
运行可执行文件:可执行文件的文件名(可创建创建进程)。
上述命令在实际系统中都是需要建立进程才可以实现的,这里由于模拟系统的能力达不到,所以除运行可执行文件需要建立进程外,其他指令执行不必在模拟系统中建立进程,可直接执行。
注意打开文件表。
⑹屏幕显示
如图2.28,屏幕显示要求包括:
用户命令接口,用于系统运行时用户输入命令;
磁盘目录显示,要求显示磁盘的树型目录结构;
磁盘使用情况,显示磁盘每一个磁盘块的空间是占用还是空闲。
二、存储管理
存储管理部分主要实现主存空间的分配和回收、存储保护。
⑴模拟系统中,主存部分分为两部分,一部分是系统区,这里只存放进程控制块和主存分配表,一部分是用户区,这里主要是对用户区的管理。
系统区包括pcb区域、主存空间分配表;
用户区用数组模拟,大小为512字节,存储管理采用可移动的动态分区存储管理方式。
⑵屏幕显示
如图2.28,屏幕显示要求包括:
主存使用情况示意图,哪些区域分配,哪些区域未分配,以不同的颜色表示(例如,红色表示已分配,蓝色表示未分配)。图2.28  课程设计屏幕显示内容三、设备管理
设备管理主要包括设备的分配和回收。
⑴模拟系统中有A、B、C三种独占型设备,A设备1个,B设备2个,C设备2个。
⑵采用死锁的预防方法来处理申请独占设备可能造成的死锁。
⑶屏幕显示
如图2.28,屏幕显示要求包括:每个设备是否被使用,哪个进程在使用该设备,哪些进程在等待使用该设备。
四、进程管理
    进程管理主要包括进程调度,进程的创建和撤销、进程的阻塞和唤醒,中断作用的实现。
⑴硬件工作的模拟:
①中央处理器的模拟
用函数CPU(  )(该函数不能有参数)模拟中央处理器。
该函数主要负责解释“可执行文件”中的命令。
x=?;   给x赋值一位数
x++;   x加1
x--;    x减1
!??;   第一个?为A,B,C中某个设备,第二个?为一位数,表示使用设备的时间;
end.   表示文件结束。
CPU只能解释指令寄存器IR中的指令。一个进程的运行时要根据进程执行的位置,将对应的指令存放到指令寄存器中。
②主要寄存器的模拟
用全局变量模拟重要寄存器,如cpu重要寄存器,程序状态寄存器PSW、指令寄存器IR,程序计数器PC,数据缓冲寄存器DR等。
③中断的模拟
I.中断的发现应该是硬件的工作,这里在函数CPU中加检测PSW的方式来模拟
在CPU()函数中,每执行一条指令之前,先检查PSW,判断有无中断,若有进行中断处理,然后再运行解释指令。
CPU函数应该不断循环执行的。
Ⅱ.模拟中断的种类和中断处理方式:
程序结束(执行指令end形成的中断,软中断):将结果写入文件out,其中包括文件路径名和x的值,调用进程撤销原语撤销进程,然后进行进程调度;
时间片到(当相对始终寄存器值减到0时):将正在运行进程的CPU现场保存在进程控制块中,然后进行进程调度;
I/O中断(设备完成输入输出):将输入输出完成的进程唤醒,将等待该设备的一个进程同时唤醒。
  ④时钟的模拟。
  系统中的绝对时钟和相对时钟用全局变量模拟。系统时钟用来记录开机以后的时间,相对时钟用来存放进程可执行的时间片,在进程调度时设置初值,随系统时间的增值1而减值1,减到0时,发出时钟中断。
这里的系统时钟并不是计算机的真正的时钟,这里所说的时间只是一个单位,例如使用vb中的时钟控件实现,每触发一次timer事件,绝对时钟增1,表示增加一个时间单位,绝对时钟减1,表示时间片消耗一个。
⑵进程控制块
进程控制块内容包括进程标识符、主要寄存器内容、进程状态、阻塞原因等等。本模拟系统最多容纳10个进程块。
pcb区域用数组模拟。
进程控制块根据内容的不同组成不同的队列,空白进程控制块链、就绪队列和阻塞队列,正在运行的进程只有一个,系统初始时只有空白进程控制块链。
⑶进程调度
①采用时间片轮转调度算法时间片为5。
②进程调度函数的主要工作是:
将正在运行的进程保存在该进程对应进程控制块中;
从就绪队列中选择一个进程;
将这个进程中进程控制块中记录的各寄存器内容恢复到CPU各个寄存器内。
③闲逛进程
建立一个闲逛进程,当就绪对列为空时,系统调用该进程运行。当有进程就绪时,就调度就绪进程运行。
闲逛进程什么也不做,只是起到系统能正常运转的作用。例如windows中的idle进程。
⑷进程控制
建立四个函数模拟进程创建、撤销、阻塞和唤醒四个原语。
①进程创建create
进程创建的主要工作是:
第一步,申请空白进程控制块;
第二步,申请主存空间,申请成功,装入主存;
第三步,初始化进程控制块;
第四步,将进程链入就绪队列。
②进程撤销destory
进程撤销的主要工作是:
第一步,回收进程所占内存资源;
第二步,回收进程控制块;
第三步,在屏幕上显示进程执行结果,进程撤销
③进程阻塞block
进程阻塞的主要工作是:
第一步,保存运行进程的CPU现场;
第二步,修改进程状态;
第三步,将进程链入对应的阻塞队列,然后转向进程调度。
④进程的唤醒
进程唤醒的主要工作是将进程由阻塞队列中摘下,修改进程状态为就绪,然后链入就绪队列。
⑷屏幕显示
如图2.28,屏幕显示要求包括:显示系统时钟;
显示正在运行的进程的进程名、运行的指令、中间结果、相对时钟寄存器内容;
显示就绪队列中进程名;
显示阻塞队列中进程名。