操作系统课程设计报告内存管理算法模拟内容摘要:

实现 程序使用的 变量: int choice。 //选项,用于实现主函数对不同函数的调用 int t=1。 //循环条件与退出标识 long address。 //作业区链 表地址 double length。 //作业区链表长度 int flag。 //标识作业名 ftable p = freetable。 //为 p 申请 空闲分区表 utable x = new uarea。 //为 x 新建分区 与定义 本程序中用到的函数: void jobrequest()。 //作业请求函数 函数 代码如下: void jobrequest() { int jobname。 int jobsize。 cout请输入进程名 :。 cin jobname。 cout请输入进程长度 :。 cin jobsize。 if( allot( jobname , jobsize ) == 4 ) printf(该进程已成功获得所要求内存空间 \n)。 else printf(该进程没有成功获得所要求空间 \n)。 } int allot( jobname , jobsize ) //分配空间给作业 函数代码如下: int allot( int jobname , double jobsize ) 7 { //判断是否 有空闲区 if( freetable == NULL ) return 1。 ftable p = freetable。 ftable q = p。 //找首次适应算法分配空闲区 while( p != NULL amp。 amp。 plength jobsize ) { q = p。 p = pnext。 } //如果找不到有足够空间的分区 if( p == NULL ) return 2。 utable x = new uarea。 xaddress = paddress。 xlength = jobsize。 xflag = jobname。 xnext = NULL。 //如果该分区大于作业需求,空间大小减去作业大小 if( plength jobsize ) { plength = jobsize。 paddress += (long)jobsize。 } //如果该分区等于作 业大小,删除该分区 else { if( p == freetable ) freetable = NULL。 else qnext = pnext。 delete p。 8 } //作业加入“作业表”中 utable r = usedtable。 utable t = r。 while( r != NULL amp。 amp。 raddress xaddress ) { t = r。 r = rnext。 } if( usedtable == NULL ) usedtable = x。 else { xnext = r。 tnext = x。 } return 4。 } Init()。 //空闲分区表初始化函数 代码如下: int Init() { freetable = new farea。 freetableaddress = 0。 freetablelength = 1024。 freetablenext = NULL。 return 1。 } void statePrint() //显示内存状态函数 代码如下: void statePrint() { ftable p = freetable。 utable q = usedtable。 int x , y。 9 while( p || q ) { if( p ) x = paddress。 else x = 0x7fffffff。 if( q ) y = qaddress。 else y = 0x7fffffff。 if( x y ) { coutpaddressendl已分配 (上 )endl。 cout空闲 (下 )endlplengthendl。 p = pnext。 } if( x y ) { q = qnext。 } } } void jobcallback()。 //作业回收函数 代码如下: void jobcallback() { int jobname。 cout请输入要回收的进程名 :。 cin jobname。 int result = callback( jobname )。 if( result == 4 ) printf(该进程已回收成功 \n)。 else if( result == 2 || result == 1 ) printf(系统没有进程或该进程不存在 \n)。 10 } int callback( int jobname ) //通过作业名回收作业函数 代码如下: int callback( int jobname ) { if( usedtable == NULL ) return 1。 utable p = usedtable。 utable q = p。 while( p != NULL amp。 amp。 pflag != jobname ) { q = p。 p = pnext。 } //如果没有该作业 if( p == NULL ) return 2。 //回收后的空间加入到空闲区 ftable r = freetable。 ftable t = r。 ftable x。 while( r != NULL amp。 amp。 raddress paddress ) { t = r。 r = rnext。 } x = new farea。 xaddress = padd。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。