- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)