当前位置:首页 » 服务存储 » 某虚拟存储器采用页式存储器管理
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

某虚拟存储器采用页式存储器管理

发布时间: 2022-08-17 05:21:10

㈠ 操作系统题目

1A.为内外存容量之和

㈡ 在一个采用页式虚拟存储器管理的系统中,有一个450字的程序的内存访问序列,10,79,110,17

o

㈢ 求页式虚拟存储技术的原理。

虚拟存储器是根据程序的逻辑地址转换来的,也称线性地址空间。一般每个进程,甚至每个段都有一个,以32位为例,则每个最大可达4G。 而主存目前一般为百M。因此程序中所指的存储单元并不能都放到主存中,也就是并不是每个程序所用的存储单元,都有具体的物理的存储器单元与之对应。 但由于程序的两个局部性原理,在一个时刻,程序只在一个比较小的范围内运行。所以我们把程序可能用到的整个存储空间分成一个个相同大小的页(按页管理硬件上容易实现),只把其中的一些页放在主存中,而其它的页则等需要时再建,或放在辅存(磁盘)中。同时建立一个页表,对应于每一页,如果该页在主存中,则页表记录它在主存中的地址;如果不在主存中,则在页表上作不在主存的标记。 这样,当程序需要调用某个存储单元的内容时,先根据它的线性地址,算出其所在的页。查页表,看是不是在主存中?如果在,则直接存取。如果查到页表上是不在的标记,那就是一个page fault。要把主存中的某一页(LRU策略)换到磁盘上,把要访问的那个单元所在的页调入主存,再进行存取。 就象一个预计有一万学生的学校,理论上每个学生都应有一个位子上课(一万个虚拟位子),而学校只有一千个(物理)位子。但实际上,学校也不会一万个人同时上课,只要让上课的同学有位子(在主存中),而其它同学只要留下联系方法能找到就好。为了降低管理的复杂性,我们采用按学号分班(页)管理。每个班要么一起上课(主存),要么一起呆在寝室(磁盘)。而在学校保留一个动态表(页表)表明每个班在哪儿(物理地址)上课,或者没上课(不在主存)。现在假设我们想按学号找一个同学,而且是女同学,只能在教室说话,呵呵。那么: 先算出来是哪个班的,查动态表,看该班是否在教室。在,直接按位置找到(hit);不在(page fault),要先找个不上课的班赶回寝室,把要找女生所在的班调到教室,再按位置找那个同学。 动态表(页表)的大小=表项数*每个表项所需的位数。 表项数=虚拟班数=虚拟人数(虚拟地址空间)/每班人数(每页大小) 每个表项的位数=Log(教室数)+适当控制位数

麻烦采纳,谢谢!

㈣ 采用页式虚拟存储管理方式页大小为8KB,主存块大小为64B,为什么物理地址的页内偏移量不等于主存块大小

物理地址的页偏移量等于对应虚拟地址的页偏移量,虚拟地址的页偏移量与页大小有关,这里页大小8KB,2的13次方,所以页偏移量为13位。

㈤ 在一个采用页式虚拟存储管理的系统中,有一用户作业,它依次要访问的字地址序列是:

分配给改作业的共3页,刚开始已经把第0页装进去了,按照FIFO算法,

第一次寻找的字地址为115,在第一页,但是他不在该作业的内存中,发生一次缺页中断,将第一页调入内存;

第二次访问228,所在的第二页也不在内存中,发生缺页中断,并把第二页调入内存;

第三次访问88所在0页在内存中,所以就没发生缺页中断;

第四次访问446,所在的4页不在内存中,发生缺页中断,并把最早装进去的0页淘汰,用第四页替换;

第五次访问102,第一页在内存中,所以就不发生缺页中断;

。。。。。。

共访问10次,发生了5次缺页中断,所以0.5的缺页中断率。

lru算法累似。。

㈥ 关于在一个采用页式虚拟存储管理的系统问题

需要完成先来先服务调度算法和LRU调度算法,痛苦在于下面的程序只有主体部分只把先来先服务调度算法和LRU调度算法以空函数形式出现,要求把这两个算法填入空函数中使得整个程序能实现这两个算法,小弟是菜鸟,晕了几天了,望前辈们能帮帮小弟,给出源代码,小弟感激不尽!

#include "conio.h"
#include "iostream.h"
#include "fstream.h"
//---------------------Menu---------------------
#define KEY_EXIT '-'
typedef struct {
char ch ;
char *label;
void (*pfunc)();
} MenuItemDef ;
void clearscr() { cout<<"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n";}
int waitakey() {return getch();}
class MenuDef {
public:
int nCount ;
MenuItemDef menu[24] ;
public:
MenuDef() { nCount=0 ;}
public:
void display()
{ for ( int i=0 ; i< nCount; i++)
cout << " "<< menu[i].ch << ". " << menu[i].label << endl ;
cout << " " << KEY_EXIT << ". " << "Exit" << endl ;
}
void run()
{ int ch ;
do {clearscr();
display();
ch = waitakey() ;
for ( int i=0; i < nCount ; i++)
if ( menu[i].ch == ch )
menu[i].pfunc() ;
} while ( ch != KEY_EXIT) ;
}
void add( char ch0, char *plabel,void ( * func)())
{ menu[nCount].ch = ch0 ;
menu[nCount].label = plabel ;
menu[nCount].pfunc = func ;
nCount ++ ;
}
} ;
//----------------Page---------------------------------------
class Page {
public:
Page() { SetNull(); }
public:
enum { kLFU=0, kFCFS, kLRU } ; //调度算法ID的定义
int nCurPage ; //当前页面指针
int nAlgID ; //调度算法ID
int nCountPage ; //页面序列长度
int pages[128] ; //进程页面序列
int nCountFrame ; //进程分到的物理页个数
int nEmpty ; //进程分到的物理页中空闲数
int frames[32] ; // 物理页,最多32个
int counters[32] ; //页面计数器
int nCount1 ; //缺页中断次数
int nCount2 ; //缺页中断后页面调度次数
public:
void Input() ;
void Run() ;
int IsFinish() { return nCurPage >= nCountPage ; }
void SetAlgorithm( int kAlgId ) { nAlgID=kAlgId; }
void SetNull()
{ nCurPage=nCountPage=nCountFrame=nCount1=nCount2=nEmpty=0 ; nAlgID=kLRU; }
double IPercent() { return nCount1*1.0/nCurPage ; } //缺页中断率
double EPercent() { return nCount2*1.0/nCurPage ; } //缺页置换率
void FCFS(){}; //先来先服务调度算法
void LRU(){}; //LRU调度算法
void Display(){}; //系统状态
void DisplayAlg(){}; //算法执行状态
public:
friend istream& operator>> ( istream& stream, Page & p )
{ return stream ; }
friend ostream& operator<< ( ostream& stream, Page & p )
{ return stream ; }
} ;
void Page::Input()
{ cout << "Count of page-frames:" ;
cin >> nCountFrame ;
nEmpty = nCountFrame ;
cout << "Count of page:" ;
cin >> nCountPage ;
for ( int i=0;i<nCountPage;i++)
cin >> pages[i] ;
nCurPage = 0 ;
}
void Page::Run()
{ while ( ! IsFinish() ) {
waitakey();
if ( nAlgID == kFCFS)
FCFS() ;
else
LRU();
DisplayAlg();
nCurPage ++ ;
}
}
//-------------------global variables-----------------------------------------------------------------
//-
MenuDef menu ;
Page page ;
//-------------------call-back functions for menu-------------------------------------------------
void input()
{ clearscr();
page.SetNull();
page.Input();
}
void display()
{ clearscr();
page.Display();
}
void setalg1()
{ page.SetAlgorithm( Page::kFCFS );
}
void setalg2()
{ page.SetAlgorithm( Page::kLRU );
}

void run()
{ clearscr();
page.Run() ;
}
void load()
{ char fname[128] ;
cout << "\nLoad From file:" ;
cin >> fname ;
ifstream inFile ;
inFile.open( fname ) ;
page.SetNull() ;
inFile >> page ;
}
void save()
{ char fname[128] ;
cout << "\nSave to file:" ;
cin >> fname ;
ofstream outFile ;
outFile.open( fname ) ;
outFile << page ;
}
void main( int args, char *argv[] )
{ menu.add('1', "Input from keyboard" , input ) ;
menu.add('3', "Set Algorithm 2: FCFS", setalg1 ) ;
menu.add('4', "Set Algorithm 3: LRU", setalg2 ) ;
menu.add('5', "Display", display ) ;
menu.add('6', "Run", run ) ;
menu.add('7', "Load from file", load ) ;
menu.add('8', "Save to file", save ) ;
menu.run();
}

㈦ 为什么说请求页式管理可以实现虚拟存储器

请求分页式存储管理的基本思想是:操作系统按照存储块的尺寸,把用户作业地址空间划分成页,全部存放在磁盘上。作业运行时,只先装入若干页。运行过程中遇到不在内存的页时,操作系统就把它从磁盘调入内存。这样一来,用户的作业地址空间无需顾及内存的大小。这与虚拟存储器的思想是完全吻合的。所以,请求分页式存储管理能够向用户提供虚拟存储器。

㈧ 是虚拟存储器,在页式系统中如何实现虚拟存

由操作系统和硬件相配合完成主存和辅存之间的信息的动态调度,这样的计算机好像为用户提供了一个其存储容量比主存大得多的存储器,这个存储器称为虚拟存储器。
(实现虚拟存储技术需要有如下物质基础,相当容量的主存,一定容量的辅存,地址变换机构)
在页式系统中采用预调方式实现虚拟存储。(也就是说,只需将作业的一部分页面装入内存即可运行,并且当运行过程中需要的页面不在内存中再将其调入。)

㈨ 某虚拟存储器系统采用页式内存管理,假定内存容量为3个页面,开始时是空的,虚拟页面访问地址流

解答:

㈩ 请求页式管理是一种常用的虚拟存储管理技术。

14、虚拟存储器:是由主存、辅寸、存储管理单元及操作系统中存储管理软件组成的存储系统。 分类: 页式虚拟存储器(以页为信息传送单 优点:页表硬件少,