操作系统:为什么一个页表项通常占用1Byte,1字节呢?页表项≠逻辑地址!常见OS内存管理误区辨析(计算机组成原理)

2^32,每个信息分配一个空间/可能性——幂
32位/8=4Byte,存信息——除法

地址&数据块:https://blog.csdn.net/bkdly9/article/details/107297461

原理复习(必看!!!):

  1. 页目录、页表和页三者的关系详解
  2. 每个页表项占用一个字节是怎么来的?
  3. 页表项≠逻辑地址
  4. 页与块之间的关系,不同教材的叫法不同
  5. 了解计算机三种编址方式(按位编址、字节编址、字编址)

eg:一条页表项32位
数值范围:0~2^32
存储32位需要占用空间:4Byte 00000000 00000000 00000000 00000000


eg2:一个300M的进程进入内存,4KB一块,一级页表需要( )连续的块,二级页表需要( )离散的块
由于页表本身能就存到内存中,问的是存这么多页表项,页表本身占内存的多少个块
一级页表75个连续块:\(\frac{300×2^{10}KB}{4KB}\)$=300*2^8=内存中约75K块 $,75K个页表项占用\(75000×4Byte/4KB=300KB/4KB=75\)
二级页表76个都离散块: 一级页表1块;二级页表都离散存储,每一个二级页表只存一条页表项,占用25个二级页表,占25块;

号:value
项: index

页框号 ≠ 页号
页表项 ≠ 逻辑地址
页表项大小 ≠ 页内偏移

20+12=32 默认值 有关 公式 计算
内存分块数 2\(^{32}\) 逻辑32位 总内存÷编址方式 4GB÷1Byte(按字节编址)
页号MAX+1 2\(^{12}\) 12位 总内存÷每块页面大小 页表项个数
页面大小 4KB 12位 页内偏移量×编址方式 2\(^{12}\)×1Byte
每条页表大小 4Byte 逻辑32位 内存分块数位数占用 32bit
一张页最大占用 4MB 20位 页号MAX+1×每条页表项大小 $ {2^{20}}×4 $Byte

每个页表项大小,仅与分多少个物理块号有关,即使只用到1.5Byte(12位),一条也得占用4Byte。(可能是4Byte对齐,查找更快)
image

ps1:程序分页以申请内存,内存分块以方便管理
ps2:框内是内存内容print(a),框外是内存地址print(&a),写成数组形式:
逻辑地址[变量名]={页号,页内偏移}
页表[页号]=物理块号
内存[块号]=页面内容

image
image

image

问题启发

一开始是做题的时候,为什么不是2^12 bit,而是2^12Byte

某计算机主存按节址,逻地址和物理地址都是 32位页表项大小为 4B。请回答下列问题。
1 若使用一级页表的分页存储管理方式,逻辑地址结构为:
页号(20位) | 页内偏移量(12位)
则页的大小是多少字节?页表最大占用多少字节?

(这就是某些题目)csdn答案:https://blog.csdn.net/syh666233/article/details/109295815

哈希+反置页表

分页、分段的区别

大小 决定 目的 若字段W溢出 结构
物理页 固定 系统 提高内存利用率 自动加入到页号 连续,仅页内地址偏移
逻辑段 可变 用户编程 易实现多进程的段共享/段保护 越界中断 离散,段号+段内地址偏移

分段管理实验源代码


记忆:单位转换(有时候以为是2\(^8\)

2\(^3\)=8bit=1Byte
2\(^{10}\)=1024B=1kB

posted @ 2023-05-14 11:17  Nolca  阅读(541)  评论(0编辑  收藏  举报