欢迎来到天天文库
浏览记录
ID:18779175
大小:297.18 KB
页数:13页
时间:2018-09-21
《os课程设计报告new》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、操作系统课程设计--基本分段机制内存管理模拟--专业计算机科学与技术授课班号279201学年学期10-11学年第二学期目录1.设计目的及设计要求:12.任务分配13.设计思想24.数据结构设计25.函数设计36.我的任务47.主要代码68.测试文档89.总结11摘要:存储器是计算机系统的重要组成部分,虽然存储器的容量在不断的增大,但仍不能满足软件发展的需要,对存储器的管理不仅直接影响到存储器的利用率,而且对系统的总体性能有很大影响,存储管理的最要对象是内存,存储管理主要有基本分页存储管理方式、基本分
2、段存储方式、请求分页存储管理方式以及请求分段存储管理方式。引入分段存储管理的目的是为了满足用户在编程和使用上多方面的要求,其中有些要求是其他几种存储管理方式难以满足的,基本分段存储管理方式已成为所有存储管理方式的基础。因此,对基本分段存储管理的研究有重要的意义。1.设计目的及设计要求:设计目的:在多道程序和多任务系统中,内存中存放多道作业。在基本分段机制中,逻辑上程序分为若干段,物理上采用动态内存分配,要求设计一个模拟动态内存管理的系统,以巩固和加深对内存管理的理解。设计要求:1)随机创建进程(作业
3、),包括进程的内部标识,进程的大小和执行时间,对各类资源的最大需求等等信息写入PCB。2)进程空间分为若干段,在创建进程时候指定多少段,每段的大小;进程调度算法采用FCFS。3)因为是基本分段,进程运行需要完全装入,内存管理分别采用BF,FF,WF,C-(或称NextFit)。采用动态重定位机制,即有程序紧凑功能。4)内存不够分配则进程阻塞,进程结束要删除进程。5)内存资源满足时候要唤醒等待进程。6)执行时在主界面选择内存分配算法,进入子界面后输入进程数,进程所需运行时间,各类资源数等,执行,显示各
4、进程中每段所占的内存空间范围。2.任务分配3.设计思想本次设计中,我们准备采取线程同步的方式来模拟基本分段机制的内存管理。一个线程用于模拟CPU调度,另一个线程用于模拟创建进程。内存分配方式采用FF、BF、WF以及C_FF4种方式。如果所有资源满足并且内存足够,则创建进程并进入就绪队列,等待CPU调度。如果资源不足则进入阻塞队列,等待资源满足11时唤醒。CPU调度采用FCFS方式,根据系统时间及进程需要时间进行模拟运行。当进程执行完后释放资源并消亡,然后对阻塞队列进行资源测试,如果有满足的进程则分配
5、相应资源并进入就绪队列。在测试资源是否满足时,我们用到了内存紧凑方法,如果总空间够用,则对每段空闲块进行紧凑,以便分配内存空间。另外,程序中用到了2个互斥量,一个是用于内存访问的互斥,一个是用于输出结果的互斥,使之不输出乱码。4.数据结构设计设计二个结构体PCB与stor,一个PCB一个进程控制块的基本信息,如进程标识符、进程状态、大小、所需要的运行时间等属性;stor包含存储PCB时所需要的属性,如地址、长度等信息。structPCB{intname;//进程标识符,唯一标识该进程intstate
6、;//进程状态intsize;//进程总大小inttime_Sum;//进程运行所需总时间,单位Sintresource_Max[5];//进程对各类资源的需求intsegment_Sum;//进程分段总数intsegment_Addr[5];//各分段所在内存地址intsegment_Size[5];//各分段大小11PCB*next;};structstor{intaddr;intaddr_Len;intPCB_Name;intPCB_Part;stor*next;};变量设计:externin
7、tresource_Available[5];//可利用的资源数(规定一个进程需要5类资源)externPCB*Readya;//就绪队列externPCB*Block;//阻塞队列externstor*memory_Use;//已分配的内存externstor*memory_Free;//空闲内存externstor*last_point;//调用循环首次适应算法时用于记录上一次找到的空闲分区intmemory_Size;//内存总大小2GintPCB_Mark[1000];//PCB.name状
8、态,用于申请PCBdoubleProcess_sub[5];//创建随机数使用intcount;5.函数设计voidinsert_Readya(PCB*A)//将进程插入到就绪队列voidinsert_Block(PCB*A)//将进程插入到阻塞队列PCB*del(PCB*into,intPCB_Name)voidinsert_Stor_Use(PCB*A,inti)voiddelete_Stor_Use(PCB*A,inti)voidinsert_Stor_Free
此文档下载收益归作者所有