分页式存储

离散分配方式

连续分配容易造成很多碎片,虽然可以通过紧凑的算法来将碎片拼接成可用的大块空间,但必须付出很大的开销。如果允许一个进程直接分散的装入很多不相邻的分区,则无需紧凑,即离散分配方式。如果离散分配的基本单位是页,称为分页储存管理方式;如果离散分配及基本单位是段,称为分段存储管理方式。本文主要讨论分页存储。

分页式存储

将程序与内存均划分为同样大小的块,以页为单位将程序调入内存。

分页储存管理方式

分页存储管理是解决存储碎片的一种方法。
动态重定位是解决存储碎片问题的一种途径,但要移动大量信息从而浪费处理机时间,代价比较高,这是因为这种分配要求把作业必须安置在一连续存储区内的缘故,而分页存储管理正是要避开这种连续性要求。

页面与页表

页面

相对物理块来说,页是逻辑地址空间(虚拟内存空间)的划分,是逻辑地址空间顺序等分而成的一段逻辑空间,并依次连续编号。页的大小一般为 512B~8KB。

例如:一个 32 位的操作系统,页的大小设为212 = 4KB,那么就有页号从 0 编到220的那么多页逻辑空间。

物理块

物理块则是相对于虚拟内存对物理内存按顺序等大小的划分。物理块的大小需要与页的大小一致。

例如:231=2Gb 的物理内存,按照 4Kb/页的大小划分,可以划分成物理块号从 0 到 219的那么多块的物理内存空间。

逻辑地址结构

页式存储管理中,逻辑地址可以解读成页号+地址偏移量(页内地址)。如下图所示:

这是一个 32 位的逻辑地址,页大小设为 212=4Kb。高 20 位则是页号,低 12 位则是页内地址。逻辑地址为 A,页面大小为 L,则页号 P 和页内地址 d 计算公式如下:

页表

页表是记录逻辑空间(虚拟内存)中每一页在内存中对应的物理块号。但并非每一页逻辑空间都会实际对应着一个物理块,只有实际驻留在物理内存空间中的页才会对应着物理块。
页表是需要一直驻留在物理内存中的(多级页表除外),另外页表的起址和长度存放在 PCB(Process Control Block)进程控制结构体中,物理块号也叫作页帧号

逻辑地址到物理地址的变换过程

进程访问某个逻辑地址时,分页地址机构自动将逻辑地址分为页号和页内地址

页号大于页表长度,越界错误

页表项的地址 p = 页表起始地址 F + 页号 P * 表项大小 S,从而得到对应的物理块号 B

页和物理块的大小是一致的,所以 页内地址=块内地址

然后 物理地址 = 物理块号 B * 页大小 L + 页内地址

根据物理地址读取数据

例:某系统采用分页式存储管理,页大小为 2KB。已知进程 A 的逻辑地址空间为 4 个页,内存分配如下页表所示,求逻辑地址 4832 的物理地址。(所有数据都是十进制)

解:

2KB=2048B

页号 P=逻辑地址/页大小=4832/2048=2

页内地址 F=逻辑地址%页大小=4832%2048=736

根据页表查得 2 号页对应着 25 号物理块

物理地址 A=物理块号*页大小 + 页内地址=25*2048+736=51936

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇