操作系统课程设计实验报告-可变分区存储管理和多级队列调度算法模拟实现内容摘要:
p。 (ns != NULL)) { //前后两个分区都与之合并 if (nslast == NULL) { //若 ns 为头结点,则 fl 链表直接指向其下一个结点 fl = nsnext。 } else if (nsnext == NULL) { //若 ns 为尾结点,则直接将该结点删除 nslastnext = NULL。 } else { nslastnext = nsnext。 nsnextlast = nslast。 } lssize = lssize + tsize + nssize。 delete ns。 } } void defragment() //碎片整理,进行碎片拼接 { int sum = 0。 //记录已分配空间的总大小 for (aNode * i = al。 i next != NULL。 i = inext) { istartAddress = i next size + i nextstartAddress。 //更改已分配分区的起始地址,将这些分区的地址移到内存的低址部分 sum = sum + isize。 } if (fl != NULL) //fl 不为空表示还存在空闲空间,否则不存在空闲空间 { flnext = NULL。 //将剩余的空闲分区合并 为一个分区 flstartAddress = sum。 flsize = userMemory sum。 } printf(\n 碎片拼接完成。 \n)。 } void reload()//重新装入作业链中未装入内存的作业 { for (jNode * i = jl。 i != NULL。 i = inext) { if (istatus == 0) { doFitAlgorithm()。 //在进行内存分配之前需执行适应算法 if (allocateMemory(i) == 0) //开始内存分配 { printf(\n 没有足够的内存空间分配給 %d 号作业。 \n, iid)。 } else { istatus = 1。 printf(\n %d 号作业成功得到内存分配。 \n, iid)。 } } } } void showFList() //显示当前空闲分区链的信息 { printf(\n)。 printf( 当 前 空 闲 分 区 链 信 息\n)。 printf( 分区起始地址 分区大小 \n)。 for (fNode * i = fl。 i != NULL。 i = inext) { printf( %10d, istartAddress)。 printf( )。 printf(|%10d, isize)。 printf(\n)。 } printf(\n)。 printf(\n)。 } void showAList() //显示当前已分配分区链的信息 { printf(\n)。 printf( 当前已分配分区链信息\n)。 printf( 分区起始地址 分区大小 分区作业号 \n)。 for (aNode * i = al。 i != NULL。 i = inext) { printf( %10d, istartAddress)。 printf( )。 printf(|%10d, isize)。 printf( )。 printf(|%10d, ijid)。 printf(\n)。 } printf(\n)。 printf(\n)。 } void showJList() //显示当前作业链的信息 { printf(\n)。 printf( 当前作业链信息\n)。 printf( 作业 ID 作业编号 作业大小 作业状态 \n)。 for (jNode * i = jl。 i != NULL。 i = inext) { printf( %10d, iid)。 printf( )。 printf(|%10d, inum)。 printf( )。 printf(|%10d, isize)。 printf( )。 if (istatus == 0) { printf(| 未装入内存 )。 } else { printf(| 已装入内存 )。 } printf(\n)。 } printf(\n)。 printf(\n)。 } void mainpage() //主界面 { int i = 0。 printf(\n)。 printf( 主界面\n)。 printf( 1初始化(设置物理内存中用户区的大小,选取适应算法) \n)。 printf( 2作业进入内存(内存分配) \n)。 printf( 3作 业完成(内存回收) \n)。 printf( 4显示当前空闲分区链的信息 \n)。 printf( 5显示当前已分配分区链的信息 \n)。 printf( 6显示当前作业链的信息 \n)。 printf( 7碎片整理(碎片拼接) \n)。 printf( 8重新装入未装入内存的作业 \n)。 printf( 9显示所有链的信息 \n)。 printf( 10设置适应算法 \n)。 printf( 0退出 \n)。 printf(\n)。 int main(void) { mainpage()。 return system(pause)。 } 六 丶 实验截图: 进行初始化 : 选 择 最 佳 适 应 算 法 : 添加 3 个 作 业 : 显示空闲分区: 显示当前已分配分区链信息: 显 示 当 前 作 业 链 信 息 : 完成作业 1 和 2: 显示当 前 空 闲 分 区 : 进行拼接后显示分区: 操作系统 课程设计报告 1 七 丶实验小结 通过本次课程设计,自己的编程能力有所提高,对操作系统内存的分配,存储空间的回收,以及碎片的拼接都有了全新的认识。 在这次操作系统的课程设计我使用了 C 语言编写系统软件,对 OS 中可变分区存储管理有了更深刻的理解。 通过验证,可以说是做出结果。 但是过程中遇到很多困难,只能边做边查资料,问同学。 也许是程序的某个边界的设计不合理。 在教案中提供了双向链表的实现方法,但是感觉对于性能提升影响不大,但是对于编程复杂度提高较多,实际做下来感觉这个方法比较鸡肋。 通过试验 ,对于 C 的语句有了比较多的了解,我们原来学的是 C++,但是发现 C 的 I/O 比于 C++的似乎更为简便一些。 任何输入而正常结束。 很遗憾的是因为时间问题,没有把这个模拟程序写成动画形式,还可以加几句代 码后实现动态的增加作业。 总而言之,究其原因还是自己平时没学牢固。 希望 在以后的学习中可以学到更多 知识。 操作系统 课程设计报告 2 实验 二:多级队列调度算法模拟实现 • 在熟练掌握计算机处理机调度原理的基础上,利用一种程序设计语言模拟实现多级反馈队列进程调度算法,一方面加深对原理的 理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。 • 调度算法中采用至少 4 级队列,每级队列的时间片大小预先指定。 • 由于只是模拟实现,调度的对象 — 进程实际上并不包括程序和数据,而仅仅包括一个 PCB 数据结构,用 PCB 来代表一个进程,调度算法调度的对象只包括进程的 PCB在运行指针和就绪队列之间进行移动来实现。 又因为进程的组成只有 PCB,没有程序和数据,因而进程只有运行和就绪两种状态,没有等待状态。操作系统课程设计实验报告-可变分区存储管理和多级队列调度算法模拟实现
相关推荐
人民币 20,(大写:贰万元整) 2020年 月 至 2020年 月, 每月 租金:人民币 6, (大写: 陆仟 元整 ) 2020年 月至 2020年 月, 每 年 租金:人民币 80,000元 (大写:陆仟元整 ) 三、管理方式 乙方委托甲方统一管理租 赁 物,产权属乙方。 四、甲方责任 (一)提供车辆所需燃油; (二)提供操作该设备操作员,负责操作人员工资; (三)视同甲方设备、严格管理
***读写系统超级块信息***********************************/ void Read_Boot() //读取磁盘超级块数据 信息 { rewind(fsPtr)。 fread(amp。 FsSupBlk,sizeof(struct Super_Block),1,fsPtr)。 return。 } void FileBoot() //超级块数据信息存盘 {
时屏幕出现的现象,并分析原因。 如果在程序中使用调用 lockf()来给每一个子进程加锁,可以实现进程之间的互斥,观察并分析出现的现象。 〈程序 代码 〉 include main() { int p1,p2,i。 if(p1=fork()) { for(i=0。 i500。 i++) printf(parent%d\n,i)。 wait(0)。 /* 保证在子进程终止前,父进程不会终止 */
)在 △ ABC中,内角 A、 B、 C的对边分别 是 a, b, c,若 a2b2= bc, sin C=2 sin B,则 A=________. 3 33 3分析:由 sin C=2 sin B和正弦定理可求得 c=2 由此运用余弦定理可求得 cos A的值,进而求出 A. b, 2 2 2 2 2 2 322b c a b c b b cb c b c 223
(1) sin( ) – sin( ) 1810(2) cos( ) cos( ) 523 417解: 218102 又 y=sinx 在 上是增函数 ]2,2[ sin( ) sin( ) 1810 即: sin( ) – sin( )0 1810解: 5340 cos cos 453 即: cos
= 1( m 0 , n 0 且 m ≠ n ) . ③ 找关系:依据已知条件,建立关于 a , b , c 或 m ,n 的方程组 . ④ 得方程:解方程组,代入所设方程即为所求 . 自我挑战 1 根据下列条件,求椭圆的标准方程 . ( 1) 坐标轴为对称轴,并且经过两点 A ( 0, 2 ) 和 B (12,3 ) ; ( 2) 经过点 (2 ,- 3) 且与椭圆 9 x2+ 4 y2=