概述
页式存储管理是现代操作系统中常用的一种管理方式。它将程序的地址空间划分成等大小的页,使得程序的不同部分可以被分别装入不同的物理内存中。当程序执行时,需要将逻辑地址转换成物理地址。本文将以一个例题为背景,从多个角度分析页式存储管理中的地址转换过程。
例题
假设页大小为4KB,则一个32位地址将被划分成以下三个部分:
| Tag | Page | Offset |
|:---:|:----------------------:|:--------:|
| 22 | 9 | 11 |
其中Tag表示页在磁盘上的位置,Page表示页内偏移量,Offset表示页内偏移量。现有一个虚拟地址0x00EA1C64,问对应的物理地址是多少?
方案
首先需要将32位虚拟地址分成三个部分,即Tag、Page和Offset。由于页大小为4KB=2^12 B,所以Page需要占用12位。那么将EA1C64转换成二进制后,可以得到以下三个部分:
| Tag | Page | Offset |
|:--------:|:------------------------:|:------------------------:|
|0010111000|000000001110|100001100100|
根据Tag和Page来查询对应的物理页框,具体可参考操作系统可用的页表实现。假设查询得到的物理页框号为PMMU:
| Tag | Page | Offset |
|:--------:|:------------------------:|:------------------------:|
|0010111000|000000001110|100001100100|
| 22 | 9 | 11 |
|xxxxxxx | yyyyyyy | xxxxxxxxxxxxx |
| PMMU | yyyyyyy | 100001100100 |
由于页表查询时需要写操作,需要进行锁住,同时也要防止线程冲突,具体锁住的资源包括页表项、页表等。
根据查询得到的PMMU和Offset,可得到物理地址:
| Physical Address |
|:---------------------------------:|
| PMMU:yyyyyyy << 12 | 100001100100 |
扫码咨询 领取资料