操作系统之分页分段

操作系统之分页分段

写在前面

分页和分段是共同进行的吗?

不是分段存储是不同于分页管理的另外一种管理方式

分页存储和分段存储 - katachi - 博客园 (cnblogs.com)

什么是内存碎片

空闲的空间比申请的空间小,导致小内存块不能被利用

什么是内存碎片 - 蒋闯 - 博客园 (cnblogs.com)

分页管理

逻辑地址分页 物理地址分块

大小是相等的

从0开始编号

页面大小选取过大或过小

过小:进程占据更多页面,从而花费更多的时间来换页

过大:容易造成内存碎片化

一般选取为4KB

假设32位系统,后12位为页内逻辑地址,前20为页号

页表-逻辑地址到物理地址的映射

页表也需要占据内存

它们占据连续内存,存储页号和块号(由于页号是连续的,因此这一维删除)

页表寄存器-存放页表物理地址的寄存器

存放页表始址和页表长度

默认想一想从逻辑地址求出物理地址
  1. 取出页号和页内偏移
  2. 访问页表寄存器,判断页表长度是否小于页号,是中断,否继续
  3. 拿到页表始址+页号*页表项的长度,得到该页对应的块号,
  4. 块号+页内偏移就是真正的物理地址
页表项的长度

就是页表中一项所占的内存

教科书上是4B

但不一定是4B,有些页表项还会存储控制位,比如读写控制只要1个bit

分段管理

分段比分页的好处

可能页表过大(页表项过多)没有那么大的一块连续的内存来存储该页表

分段存储是不固定每一段的大小

段号+段内偏移的组合,各占16bit

因此一个段最多就是4KB * 16的大小

段内偏移也是从0开始编号

同样映射有自己的段表,段表寄存器

默写分段存储下逻辑地址到物理地址的过程
  1. 拿到段号和段内偏移
  2. 去访问段表寄存器,拿到段表寄存器始址和长度
  3. 比较段表寄存器的长度是否小于短号,是中断,否继续
  4. 计算对应的段表项的内存地址 = 段表始址 + 段号 * 段表项长度
  5. 得到内存中该段的长度和始址
  6. 如果内存段长度小于段内偏移中断,否继续
  7. 计算具体内存地址 = 段号 + 段内偏移

分页管理和分段管理的区别

  1. 段页的大小是不固定的
  2. 段表是二维的,页表是一维的,不能理解
  3. 段内没有内部碎片,有外部碎片,页没有外部有内部

它们都需要两次访问内存

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值