操作系统课程设计报告
题目:一个小型的操作系统 学号:1213023075
班级:计122(杏) 姓名:贾苏
日期:2014/06/23
1.实验平台 (1)软件平台:
开发系统平台:Windows 7 (64) Microsoft visual c++ 6.0 测试系统平台:Windows 7 (64) (2)硬件平台:
cpu:AMD A6-3420 APU 内存:4GB 硬盘:500G
2.所需实现的功能及相应的阐述: (1)进程调度管理
为了贴切现实中的os,采用RR(轮转调度算法),且不提供用户显式的选择调度算法,即对用户是透明的。
现实中的处理器主频为1Ghz~3Ghz,选取中间点为1.5Ghz,得时间片大小为0.7ns ,为方便计算*10,则时间片大小定为7ns。 假设进程之间的调度和切换不耗费cpu时间。 (2)死锁的检测与处理
检测当然采用的是 银行家算法
处理:让用户选择kill一个进程,释放他所占有的所有资源。 (3)虚拟分页调度管理
虚拟分页:给出的是逻辑值 访问磁盘 将那个数据块放入到内存中 内存中的地址采用一定的算法相对应于磁盘的地址。
特规定 访存采用的是 按字节寻址 内存的大小 128KB 外存的大小 1MB
即整个系统可以提供1MB的逻辑地址空间供进程进行访问(在地址总线足够扫描内存的情况下)。 虚拟地址映射采用:直接映射法
规定的8kB为一个页面,故内存有16个页面,外存有128个页面。 如果产生了内存已满,便会产生缺页中断,淘汰采用FIFO算法,利用一个队列来做。
部分内外存的对应表
0 1 2 ??? ??? ??? 0,128,2*128+0....... 1,129,2*128+1....... 2,130,2*128+2....... ??? ??? ??? 16
(4)I/O中断处理 设中断来自两个方面:
1.DMA输送开始和结束时的中断
127,128+16,2*128+16......... 设定一个宏 定义为DMA一次传输的数据量的大小->DmaNum 假定为10kb每次
DMA开始:耗费1ns cpu时间进行中断处理
DMA结束:耗费2ns cpu时间进行中断处理
由操作系统课程知,DMA传输数据时不需要CPU的干预。 2.随机的中断
发生外部随机中断,cpu无条件的立即响应,并执行中断处理程序,同样的假设中断处理程序的调度和切换不耗费cpu时间。
(5)内存地址越界或内存不足
进程访问内存时超过了进程所要的最大值,此时发生中断,已达到内存保护的功能。
内存不足时即为当前的动态地址重定位寄存器中的值+进程所需的内存大小超过了内存的上限,此时进行内存紧凑,同时修改被移动的进程中的各个有关参数。 3.总体设计
4.程序所需的数据结构及其抽象过程
进程信息查看 死锁检测与解除 内存空间查看 查看cpu运行 外存空间查看 查看运行情况 开始运行 内存管理 开始 先定义本次操作系统外设的资源,假设有A类资源10个,B类资源5个,C类资源6个->NeedRescourse;
作业中的各个进程都需要一个代号->ProcessName,各个进程到来的时间不同,故需要记录一下->ArriveTime,每个进程所需要的cpu时间是不够的->NeedCpuTime,每个进程所需的内存空间大小是不一样的->NeedMem。
各个进程中的任务是不同的故需要预先设定本进程中所要执行的操作类型->OpKind,如果是计算型的直接给出所需要的cpu时间即可,如果是I/O型的还需要给出所传输的数据量的大小->NeedTranDataNum,在此可以给OpKind做一个union型的结构。 多道程序程序在运行的过程中需要对进程所需内存的地址进行动态地址重定位,故在系统之中需要设置一个动态地址重定位寄存器,其中的内容是下次进程可以使用的内存始址->DynReg。 抽象结果:
struct Process{ };
char ProcessName[10];//进程的名字 int ArriveTime; // ns级别
int NeedCpuTime; //此进程所需要的时间 int NeedMem; //所需要的cpu时间 FlagForOp OpKind; //用于指示是何种操作 int NeedTranDataNum; //给IO用的数据块
int OpCpus; //计算类型的操作所需的cpu时间
int NeedRescourse[3] ;//需要资源的数目 NULL代表不需要使用 Process *next;
5.详细设计 1.进程信息查看
依次遍历全部的链表,并将它们的信息依次打印出来。