操作系统课程设计(小型的操作系统)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
操作系统课程设计报告
题目:一个小型的操作系统
班级:计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算法,利用一个队列来做。
部分内外存的对应表
(4)I/O中断处理
设中断来自两个方面:
1.DMA输送开始和结束时的中断
设定一个宏定义为DMA一次传输的数据量的大小->DmaNum 假定为10kb每次
DMA开始:耗费1ns cpu时间进行中断处理
DMA结束:耗费2ns cpu时间进行中断处理
由操作系统课程知,DMA传输数据时不需要CPU的干预。
2.随机的中断
发生外部随机中断,cpu无条件的立即响应,并执行中断处理程序,同样的假设中断处理程序的调度和切换不耗费cpu时间。(5)内存地址越界或内存不足
进程访问内存时超过了进程所要的最大值,此时发生中断,已达到内存保护的功能。
内存不足时即为当前的动态地址重定位寄存器中的值+进程所需的内存大小超过了内存的上限,此时进行内存紧凑,同时修改被移动的进程中的各个有关参数。
3.总体设计
4.程序所需的数据结构及其抽象过程
先定义本次操作系统外设的资源,假设有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.进程信息查看
依次遍历全部的链表,并将它们的信息依次打印出来。
实现函数名:void ShowProcessInfo()
2.死锁的检测和解除
假定本系统中的各个所需资源均是独占型资源,在进程运行的过程中不再释放,故只需要遍历链表将各个进程中所需的资源统计出来,只要不大于系统中预设的即可,一旦进程所需的资源大于系统中的最大量,给予用户选择kill一进程,已达到释放资源的目的。
死锁检测函数:void DeedLock()
void DeedLock_LookNeedRescourse()
死锁解除函数:void DeedLock_KillProcess()
3.内存空间查看
查看各个进程所占用的内存的空间,借助于DynReg这个全局变量实行内存空间的动态重定位。
实现函数:void LookMem()
4.查看CPU运行
以CPU的角度,查看作业的运行情况,
实现函数:void LookCpu()
void LookCpu_ShowRunningProcess()
5.外存空间查看
外存空间是用户的工作区间,故只要遍历整个进程链表,统计出所有进程占有的全部空间即可。
实现函数:void LookDiskMem()
6.查看运行