支持内存不连续分配.docVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
1. 多道程序设计是指允许多个作业(程序)同时进入计算机系统的主存并启动交替计算的方法。 操作系统引入多道程序设计的优点:一是提高CPU、主存和设备的利用率;二是提高系统的吞吐率,使单位时间内完成的作业数增加;三是充分发挥系统的并行性,设备与设备之间、CPU与设备之间均可并行工作。其主要缺点是延长作业的周转时间。 2. 为了解决CPU与设备之间速度不匹配的矛盾,及协调逻辑记录大小与物理记录大小不一致的问题,提高CPU和设备的并行性,减少I/O操作对CPU的中断次数,放宽对CPU中断响应时间的要求因此引入缓冲技术。 基本思想是:当进程执行写操作输出数据时,先向系统申请一个输出缓冲区,然后,将数据送至缓冲区,若是顺序写请求,则不断地把数据填入缓冲区,直到装满为止,此后,进程可以继续计算,同时,系统将缓冲区的内容写到设备上。当进程执行读操作输入数据时,先向系统申请一个输入缓冲区,系统将设备上的一条物理记录读至缓冲区,然后根据要求,把当前所需要的逻辑记录从缓冲区中选出并传送给进程。 2使用为试图实现主存的分配与回收 源码: #include iostream #include vector #include string #include memory.h using namespace std; bool block[8][8]; //位表 vectorint page; //页表 vectorvectorint work; //记录作业的页表 int sel; void init() //初始化 { int t; memset(block,0,sizeof(bool)); vectorint v; for(t=0;t6;t++) block[0][t]=1; block[1][1]=1; block[1][3]=1; block[1][5]=1; block[3][0]=1; block[3][7]=1; for(t=0;t64;t++){ if(block[t/8][t%8]) v.push_back(t); } work.push_back(v); } void screen(){ //操作提示函数 coutendl 1.调入作业endl 2.撤销作业endl 3.打印endl; cinsel; } void add_work(){ //作业调入,内存申请函数 cout请输入作业的大小endl; int length,sum,t; cinlength; vectorintnow; for(t=0,sum=0;t64;t++) //寻找内存剩余的块数 if(!block[t/8][t%8]) sum++; if(sumlength){ //如果剩余不够分配,输入溢出 cout内存溢出endl; exit(0); } for(t=0;t64length;t++) //将内存分配出去,并用页表记录。 if(!block[t/8][t%8]){ block[t/8][t%8]=1; length--; now.push_back(t); } work.push_back(now); //将页表存入作业记录表中 cout完成!endl; } void des_work(){ //作业撤销 if(work.size()==0){ cout无作业可供删除endl; exit(0); } cout请输入要删除的作业endl 最大是work.size()-1endl; int sel,num; cinsel; for(int i=0;iwork[sel].size();i++){ //通过作业表找到要删除作业的页表进行内存释放 num=work[sel][i]; block[num/8][num%8]=0; } work.erase(work.begin()+sel); cout完成!endl; } void print(){ //位视图打印函数 int i,j,sum(0); cout内存使用情况endl; for(i=0;i8;i++) { for(j=0;j8;j++){ cout block[i][j]; if(!block[i][j]) sum++; } coutendl; } cout当前空余块总数为:sumendl; for(i=0;iwork.size();i++){ //打印作业表中的每个页表 cout作业i:endl 页表 块表endl; for(j=0

文档评论(0)

bhl0572 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档