操作系统:为什么一个页表项通常占用1Byte,1字节呢?页表项≠逻辑地址!常见OS内存管理误区辨析(计算机组成原理)
2^32,每个信息分配一个空间/可能性——幂
32位/8=4Byte,存信息——除法
地址&数据块:https://blog.csdn.net/bkdly9/article/details/107297461
原理复习(必看!!!):
eg:一条页表项32位
数值范围:0~2^32
存储32位需要占用空间:4Byte 00000000 00000000 00000000 00000000
eg2:一个300M的进程进入内存,4KB一块,一级页表需要( )连续的块,二级页表需要( )离散的块
由于页表本身能就存到内存中,问的是存这么多页表项,页表本身占内存的多少个块
一级页表75个连续块:
二级页表76个都离散块: 一级页表1块;二级页表都离散存储,每一个二级页表只存一条页表项,占用25个二级页表,占25块;
号:value
项: index
页框号 ≠ 页号
页表项 ≠ 逻辑地址
页表项大小 ≠ 页内偏移
20+12=32 | 默认值 | 有关 | 公式 | 计算 |
---|---|---|---|---|
内存分块数 | 2 |
逻辑32位 | 总内存÷编址方式 | 4GB÷1Byte(按字节编址) |
页号MAX+1 | 2 |
12位 | 总内存÷每块页面大小 | 页表项个数 |
每块页面大小 | 4KB | 12位 | 页内偏移量×编址方式 | 2 |
每条页表项大小 | 4Byte | 逻辑32位 | 内存分块数位数占用 |
32bit |
一张页表最大占用 | 4MB | 20位 | 页号MAX+1 ×每条页表项大小 |
每个页表项大小,仅与分多少个物理块号有关,即使只用到1.5Byte(12位),一条也得占用4Byte。(可能是4Byte对齐,查找更快)
ps1:程序分页以申请内存,内存分块以方便管理
ps2:框内是内存内容print(a)
,框外是内存地址print(&a)
,写成数组形式:
逻辑地址[变量名]={页号,页内偏移}
页表[页号]=物理块号
内存[块号]=页面内容
问题启发
一开始是做题的时候,为什么不是2^12 bit,而是2^12Byte
某计算机主存按节址,逻地址和物理地址都是 32位页表项大小为 4B。请回答下列问题。
1 若使用一级页表的分页存储管理方式,逻辑地址结构为:
页号(20位) | 页内偏移量(12位)
则页的大小是多少字节?页表最大占用多少字节?
(这就是某些题目)csdn答案:https://blog.csdn.net/syh666233/article/details/109295815
哈希+反置页表
分页、分段的区别
大小 | 决定 | 目的 | 若字段W溢出 | 结构 | |
---|---|---|---|---|---|
物理页 | 固定 | 系统 | 提高内存利用率 | 自动加入到页号 | 连续,仅页内地址偏移 |
逻辑段 | 可变 | 用户编程 | 易实现多进程的段共享/段保护 | 越界中断 | 离散,段号+段内地址偏移 |
分段管理实验源代码
记忆:单位转换(有时候以为是2 )
2
2
本文作者:Nolca
本文链接:https://www.cnblogs.com/nolca/p/17398949.html
版权声明:本作品采用 收益分享revenue sharing 许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理