分页式存储管理及地址转换(网易笔试题)
昨天参加网易的笔试,被一个操作系统的分页式管理难住啦,本来就忘得差不多啦,地址给的还是16进制,真是就懵啦。就把分页式存储管理又看了一遍,记录下。
1.分页式存储管理基本原理:
分页式存储管理允许把进程分配到不相邻的分区中。首先将进程的逻辑地址空间划分为大小相等的块,且块相对比较小,每个块称为一页(Page),由页号和页内地址组成;
其次,将内存空间也划分为同样大小的块,每个块称为一页面(PageFrame)。
页:
页号 |
页内地址 |
|
|
假设逻辑地址为A,页面大小为L,则页号和页内地址为:
页号=A/L
页内地址=A%L
2.当进程将要运行时,操作系统会为进入内存的每个用户进程建立一张页表,记录进程逻辑地址空间的页号和内存物理地址空间中的页面号一一对应关系。同时系统还会建立一张作业表,将当前运行的作业的页表地址进行登记。
对应关系如图所示:
进程运行时,通过查找页表,就可以找到每页对应的物理页面号。页表就是实现从页号到物理块号的地址映射。
3.地址转换
地址转换时,先从页表控制寄存器中找到相应的页表,再以页号为索引去检索页表。查找操作由硬件执行。在执行检索之前,先将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间。于是,这一错误将被系统发现并产生一地址越界中断。若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样便完成了从逻辑地址到物理地址的变换。右图示出了分页系统的地址变换机构。
网易的笔试题:
23.有用户态进程A,其虚拟内存页为1KB,A占用了64页,内存大写为128KB,A进程将爱子到内存的页面和物理内存块的编号对应关系如下:
页面编号 物理内存块编号
0 4
1 9
2 5
3 8
请根据以上信息回答如下问题,并给出计算过程:
1)虚拟地址为015D对应的物理地址是多少?
2)物理地址为113C对应的虚拟地址为多少?
3)进程A有一作业长度为8页,试图访问虚拟地址2A3D并保存整型1到该地址对应的物理地址空间,之后又尝试从该地址读取保存的数据,请问A进程这两次内存访问过程能否正常执行?并解释原因。
解:
1)虚拟地址为015D对应的物理地址是 :
1KB=400H (转换成16进制)
页号: 015D/400=0
页内地址:015D%400=15D
查找页表:0->4
物理地址:4*400+15D=115D
2)物理地址为113C对应的虚拟地址为多少?
就是反过来,物理快号:113C/400 = 4
块内地址:113C%400 = 13C
虚拟地址:0*400+13C=013C
3)进程A有一作业长度为8页,试图访问虚拟地址2A3D并保存整型1到该地址对应的物理地址空间,之后又尝试从该地址读取保存的数据,请问A进程这两次内存访问过程能否正常执行?并解释原因。
不能。
页号:2A3D/400 = A
页内地址:2A3D%400=23D
A>8,超出进程A的页表长度。
**第三问不是很确定,如果有错,请指出,谢谢。第三问我也不太懂。
这个题麻烦的就是16进制的乘除。