没有合适的资源?快使用搜索试试~ 我知道了~
一个小型操作系统的设计与实现
3星 · 超过75%的资源 需积分: 50 25 下载量 65 浏览量
2015-07-09
15:17:56
上传
评论 8
收藏 1.92MB DOC 举报
温馨提示
试读
26页
进程调度管理 死锁的检测与处理 虚拟分页调度管理
资源推荐
资源详情
资源评论
操作系统课程设计报告
题目:一个小型的操作系统
班级:计 122(杏)
学号:1213023075
姓名:贾苏
日期: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
0,128,2*128+0.......
1
1,129,2*128+1.......
2
2,130,2*128+2.......
16
127,128+16,2*128+16.........
(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;
开始
进
程
信
息
查
看
死
锁
检
测
与
解
除
内
存
空
间
查
看
查
看
cpu
运
行
外
存
空
间
查
看
开
始
运
行
查
看
运
行
情
况
内
存
管
理
作业中的各个进程都需要一个代号->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()
剩余25页未读,继续阅读
资源评论
- IxxoxxI2019-07-09还行,谢谢楼主
sinat_29681767
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功