操作系统专业课程设计范本.doc
《操作系统专业课程设计范本.doc》由会员分享,可在线阅读,更多相关《操作系统专业课程设计范本.doc(47页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 合肥工业大学宣城校区 操作系统 课程设计报告 课程设计题目:动态分区别配存储管理 学生姓名: 方晨宇 学号: 217143 专业班级: 物联网1班 指引教师: 田卫东 院系名称: 信息工程系 12月23日一、课程设计概述41.1设计任务41.2设计规定41.3设计目4二、原理及算法描述42.1动态分区别配算法原理42.1.1 初次适应算法42.1.2 循环初次适应算法52.1.3 最佳适应算法52.1.4 最坏适应算法52.1.5 紧凑算法6三、开发环境6四、重要算法和设计思路描述64.1设计 初次适应算法64.2设计 循环初次适应算法64.3设计 最佳适应算法64.4设计 最坏适应算法74
2、.5设计分区回收算法74.6设计紧凑算法7五、程序实现-数据构造75.1空闲分区数据构造-循环双向链表75.2进程数据构造-单向循环队列8六、程序实现-程序清单9七、总结41一、课程设计概述1.1设计任务 动态分区别配存储管理1.2设计规定 1.建立描述内存分派状况数据构造; 2.建立描述进程数据构造; 3.使用两种方式产生进程:a 自动产生 b手动输入; 4.在屏幕上显示内存分派状况,每个进程执行状况; 5.建立分区别配和回收算法,支持紧凑算法; 6.时间流逝可用下面几种办法模仿:a按键盘,每按一次可以为过一种时间单位;b响应WM-TIMER; 7.将一批进程执行状况存入磁盘文献,后来可以读
3、出并重放; 8.支持算法:初次适应算法,循环初次适应算法,最佳适应算法,最坏适应算法;1.3设计目 旨在让咱们更好理解动态分区管理方面知识。二、原理及算法描述2.1动态分区别配算法原理2.1.1 初次适应算法 *算法概述:分派内存时,从链首开始顺序查找,找到满足空闲分区则划出空间分派,余下空闲空间仍保存在空闲链表中 *实现算法:分派时从空闲链表第一种空闲节点查找,若找到可以放下当迈进程空闲节点,则分派2.1.2 循环初次适应算法*算法描述:由初次适应算法演变,只是每次分派改为由上一次找到空闲分区开始查找适当空闲节点*实现算法:在初次适应算法基本上,将指针置为static,不必每次从头查找空闲分
4、区2.1.3 最佳适应算法*算法描述:每次为作业分派内存时,总是把能满足规定、又是最小空闲分区别配给作业*实现算法:每次为进程分派内存时,查找能放下该进程并且是最小空闲分区,避免了每次将空闲分区从小到大排序。2.1.4 最坏适应算法*算法描述:每次为作业分派内存时,总是挑选一种最大空闲分区别割给作业使用*算法实现:算法与最佳适应算法几乎相似,每次查找最大空闲分区节点,将其分派给进程。回收分区: 当进程运营完毕释放内存时,系统依照回收区首址,从空闲区链(表)中找到相应插入点,此时也许浮现如下四种状况之一; 1)回收区与插入点前一种空闲分区F1相邻接,此时应将回收区与插入点前一分区合并,不必为回收
5、区别配新表项,而只需修改其前一分区F1大小. 2)回收分区与插入点后一空闲分区F2相邻接,此时也可将两分区合并,形成新空闲分区,但用回收区首址作为新空闲区首址,大小为两者之和. 3)回收区同步与插入点前,后两个分区邻接,此时将三个分区合并,使用F1表项和F1首址,取消F2表项,大小为三者之和. 4)回收区既不与F1相邻接,又不与F2邻接.这时应为回收区单独建立一新表项,填写回收区首址和大小,并依照其首址插入到空闲链中恰当位置.2.1.5 紧凑算法 通过修改每个进程在内存中标志位status,虚拟将进程重新分派到内存中,此时分派满足紧凑,避免移动所有在内存中进程三、开发环境 此程序是本小组运用c
6、+语言在VS中实现四、重要算法和设计思路描述4.1设计 初次适应算法每次为进程分派内存时,都一方面从双向空闲链表第一种空闲节点开始查找,如果该空闲分区只比进程大一点点,则把该空闲分区全某些配给该进程,之后删除该空闲节点;如果空闲分区比进程大诸多,则按需分派,修改该空闲区起始位置和大小;运用循环依次查找各个节点,为进程分派内存。当指针指向头结点时,阐明空闲链表已经查找完毕,没有适当空闲分区为该进程分派,return FALSE。4.2设计 循环初次适应算法 与初次适应算法类似,只但是每次为进程分派内存时,不再指向空闲链表头部,设立指向头部指针是静态static,运营期间不再变化,则每次分派时从上
7、一次分派空闲分区下一种开始。4.3设计 最佳适应算法 依照最佳适应算法原理,每次从最小并且能放下该进程空闲分区开始分派,于是设计算法,每次查找空闲链表中最小并且能放下该进程空闲分区,避免了将空闲分区链表每次从小到大排序,提高效率。4.4设计 最坏适应算法 与最佳适应算法类似,每次查找空闲链表中最大空闲分区进行分派,避免了将空闲分区链表每次从大到小排序,提高效率。4.5设计分区回收算法设计一种函数,时刻检查进程运营状态,当进程已经运营完毕,则回收该进程所占用内存分区。对内存分区状态进行查找,若回收区与插入点前一种空闲分区F1相邻接,此时应将回收区与插入点前一分区合并,不必为回收区别配新表项,而只
8、需修改其前一分区F1大小.若回收分区与插入点后一空闲分区F2相邻接,此时也可将两分区合并,形成新空闲分区,但用回收区首址作为新空闲区首址,大小为两者之和.若回收区同步与插入点前,后两个分区邻接,此时将三个分区合并,使用F1表项和F1首址,取消F2表项,大小为三者之和.若回收区既不与F1相邻接,又不与F2邻接.这时应为回收区单独建立一新表项,填写回收区首址和大小,并依照其首址插入到空闲链中恰当位置。4.6设计紧凑算法 通过修改每个进程在内存中标志位status,虚拟将进程重新分派到内存中,此时分派满足紧凑,避免移动所有在内存中进程五、程序实现-数据构造5.1空闲分区数据构造-循环双向链表type
9、def struct fDataunsigned int size;unsigned int StartPosition;fdata;FreeList:FreeList()/建立头结点head = new fnode;head-prior = head;head-next = head;/在建立第一种结点并指向整个内存空间fnode *p,*s;p = head-next;s = new fnode;s-data.size = MEMORY_MAX;s-data.StartPosition = 0;s-next = p;s-prior = p-prior;p-prior-next = s;p-
10、prior = s;5.2进程数据构造-单向循环队列typedef struct pDataunsigned int ID;unsigned int size; /所占内存空间unsigned int execTime; /规定服务时间unsigned int usedTime=0; /已经运营时间bool status = 0; /0没有调入内存,1调入内存unsigned int StartPosition; /调入内存中始址unsigned int memSize = 0; /在内存中实际占用内存空间pdata;ProcessQueue:ProcessQueue()front = new
11、 pnode; /产生头结点,指针为front;rear = front;front-next = NULL;六、程序实现-程序清单#include #include #include #include #include ProcessQueue.h#includeFreeList.husing namespace std;/全局变量ProcessQueue processqueue;FreeList freelist;void CALLBACK TimerProc(HWND hwnd,UINT Msg,UINT idEvent,DWORD dwTime);void CALLBACK Time
12、rProcBF(HWND hwnd,UINT Msg,UINT idEvent,DWORD dwTime);int main(int argc,char* argv)out.open(out.txt,ios:out | ios:trunc); /打开日记文献out.close(); /关闭日记文献FreeList freelist1;/中间文献int nChoice = -1;/操作选取do/显示主菜单cout *动态分区测试程序* endl;cout * 0-退出 * endl;cout * 1-自动产生进程 * endl;cout * 2-进行一次分派 * endl;cout * 3-初次
13、适应算法 * endl;cout *-* endl;cout * 4-最佳适应算法 * endl;cout * 5-手动输入进程 * endl;cout * 6-键盘模仿时间 * endl;cout * 7-紧凑算法 * endl;cout * 8- * endl;cout * * endl;cout nChoice;switch (nChoice)case 0: /退出cout 当前选取操作:退出。 endl;cout endl; /选取退出break;case 1:system(cls); /清除屏幕int sum;cout sum;processqueue.autoCreatProces
14、s(sum);processqueue.showProcess();break;case 2:system(cls); /清除屏幕processqueue.assignMemory(freelist.getHead();processqueue.showProcess();break;case 3:system(cls); /清除屏幕/UINT timerId = 1;MSG msg;/ int n = GetMessage(&msg,NULL,NULL,NULL); /Wait for message,block the thread when getting no messageSetTi
15、mer(NULL,1,1000,TimerProc); /每间隔1000毫秒定期器发送 一条信息,并执行回调函数中代码int nTemp;while (nTemp = GetMessage(&msg,NULL,NULL,NULL) & (-1 != nTemp) & (0 != nTemp)if (WM_TIMER = msg.message)cout I got a message endl;TranslateMessage(&msg);DispatchMessage(&msg);break;case 4:system(cls); /清除屏幕SetTimer(NULL,2,1000,Time
16、rProcBF); /每间隔1000毫秒定期器发送 一条信息,并执行回调函数中代码while (nTemp = GetMessage(&msg,NULL,NULL,NULL) & (-1 != nTemp) & (0 != nTemp)if (WM_TIMER = msg.message)cout I got a message endl;TranslateMessage(&msg);DispatchMessage(&msg);break;case 5:system(cls); /清除屏幕unsigned int size,execTime;cout 进程大小和祈求服务时间: sizeexec
17、Time;processqueue.manualCreatProcess(size,execTime);processqueue.showProcess();break;case 6:system(cls); /清除屏幕char a5;cin.getline(a,10);while (a0!=0)processqueue.assignMemory(freelist.getHead();processqueue.timePassed(freelist.getHead();processqueue.showProcess();freelist.showFreeList();out.open(out
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 专业课程 设计 范本
限制150内