分页与分段

前面我们分析了虚拟地址和物理地址

我们这里进行一个简单的分析

这个是程序运行时的地址映射

那么这些碎片,我们现在的操作系统究竟如何处理呢?

我们再引入一个实际问题

我们如何把右边的进程p塞入左边的内存空间里面

有一种方法将p5kill掉,那么p就可以插入,但这种方法绝对不是首选。

我们可以将p进程分为几块塞入内存空间里面

但是如果我们需要运行这个进程需要有一个记录,记录p进程的各个碎片是怎样分布在内存里面的。

这样就引出了我们的分页和分段机制了

1.解决内存碎片,将进程分片存放

因为我们写程序的时候是分段(函数、变量、数组等)写的

我们可以将这些东西分段存放

我们对于分段的寻址是需要段id+段内位移地址

那么我们怎么将逻辑地址转化为物理地址

我们分段表内存储段id+段内偏移+段内最大长度

先拿出段内位移然后根据所在的段号进行判断,判断失败报错;成功,用基址加上短萼你位移取出物理内存地址。

我们看例题

第一题解题方法:

main那条语句为pc寄存器存储的地址,我们可以看到0x240为此地址的虚地址

那么我们可以画出

0x0240填入逻辑地址二进制为

0000 0010 0100 0000

又物理地址等于基址+逻辑地址

最前面的2bits 00 代表段号,那么我们可以得到段号为code(0)基址为0x4000

根据等式可以得到0x4000+0x0240=0x4240

第二题第一步我们可以大致判断是将一个地址存入一个变量或一个寄存器里面(目前来看没啥用)。我们根据pc+4,且前面2bits的段号并没有变(基址还为0x4000)可以得到0x4000+0x0240+0x0004=0x4244

第三题第一步也是存储了一个地址,但他这里注释了是返回地址(对这题来说也没啥用)

,move 0x0360转换

0000 0000 0011 0110 0000

这里可以得到段号还是0,也就是说基址还是0x4000

那根据前面的算是可以得到0x4000+0x0360=0x4360

第四题大家可以自行判断

答案为:0x4364

最后一题,我们发现这个是将a0的地址读一个byte并写入t0,第一题我们知道了a0里的内容为 0x4050

0x4050转化为二进制

0100 0000 0101 0000

这是一个虚拟地址,这个区间是属于段号1的(也可以根据段号判断这里是01)

我们得到段号

01(舍掉)00 0000 0101 0000 舍掉的补0(因为前两个bits代表段号)

偏移量等式逻辑地址减去前面两位bits补0

0000 0000 0101 0000 得到偏移地址0x050

那么我们要得到真实地址需要0x4800 + 0x0050 = 0x4850

其实我们可以分析这段代码是读取一个字符串,当然后面还有很多大家可以自己看下这个代码

分页机制

因为段的大小是不等的,只不过是分的更小一些,那么产生的碎片肯定是会更小的

所以分段对于外部碎片问题并没有完全解决

这里有个基本单元叫做帧也有叫页框的,内存划分的固定大小的区块(注意这里是固定大小不是大小不等),但里面可以离散存放。将进程分成一条一条的整个叫做页面

我们将页面内的每条存入内存中任意空闲的页框(帧)当中

再将他们记录下来

存这个记录的叫做page table 页表

原理和分段是差不多的

那么我们如何得到物理地址呢?

根据下面图我们算下要找page号为0的进程条的物理地址

查页表发现page号为0的这条数据存入了帧号为5的区域

我们根据frame no——5来从内存中查找定位到一块区域(这里可以看到每个页大小为4bytes),注:帧大小和页大小一样

我们再根据页内位移定位物理位置

这里我们可以得到实际的参与运算的参数为 frame no. * page size + 页内位移 = 物理地址

第一个|0|3|我们可以得到5*4+3=23 因为是从0开始的所以这里要减1

第二个|2|3|我们可以得到2*4+3=11-1=10

第三个|1|3|我们可以得到0*4+3=3-1=2

这里可以看出这个帧(页)的大小和磁盘的block块有异曲同工之妙

这里地址

页数2^(m-n),页尺寸为2^n,整个地址长度为m

页和段分区的特点对比,大家自信分析一下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 分页分段都是计算机内存管理技术中的重要概念,它们的作用是将物理内存划分成多个逻辑块,以便更加有效地管理内存。它们的区别如下: 1. 分页是将物理内存划分成固定大小的页面,而分段是将物理内存划分成不同大小的逻辑段。 2. 分页中,页面大小是固定的,通常为512字节、1KB或4KB,而分段中,段的大小可以不同,每个段可以包含不同类型的数据。 3. 分页是以页面为单位进行内存分配和管理,而分段是以段为单位进行内存分配和管理。 4. 在分页中,每个页面都有一个唯一的页面号,用于标识该页面。而在分段中,每个段都有一个唯一的段号。 5. 分页的实现比较简单,但可能会造成内存浪费。而分段的实现比较复杂,但可以更加灵活地使用内存。 总体来说,分页分段都是内存管理中的重要技术,它们各有优缺点,应根据实际情况选择合适的方式来进行内存管理。 ### 回答2: 在存储管理中,分页分段是两种常见的存储管理方式,它们有以下区别。 首先,分页是将主存储器划分为固定大小的页面,通常大小为2的幂次,与之相对应,进程的逻辑地址空间被分为相同大小的页。而分段则是将主存储器和进程的地址空间划分为逻辑上不同大小的段,每个段可以有不同的长度。 其次,分页的基本单位是页面,管理的是主存储器的物理页面,每个页都是连续的虚拟地址段,不同的页可以存放在不同的物理页面中。而分段的基本单位是段,管理的是进程的逻辑地址空间,将地址空间划分为不同长度的地址段。 另外,分页方式下,每个页面都有对应的页表,用于记录页与物理页的映射关系。分段方式下,每个段都有对应的段表,用于记录段与物理地址的映射关系。 此外,分页方式下,地址转换是通过页表来进行的,需要进行两次内存访问,一次是访问页表本身,另一次是根据页表的结果访问物理页面。而分段方式下,地址转换是通过段表来进行的,只需要进行一次内存访问,即可获得对应的物理地址。 总的来说,分页是按照固定大小的页面进行划分,管理的是物理页面,地址转换需要两次内存访问;而分段是按照不同长度的段进行划分,管理的是逻辑地址空间段,地址转换只需要一次内存访问。 ### 回答3: 在存储管理中,分页(paging)和分段(segmentation)是两种常用的存储管理方式,它们主要有以下区别。 首先,分页将主存储器和辅助存储器划分为大小相等的固定长度的页框和页,而分段将主存储器和辅助存储器划分为不定长的段和段表。每个页面的大小相同,但每个段的长度可以不同。 其次,分页带来了等长分割的好处,使得页面能够更好地调度。而分段可以按照逻辑上相关的数据进行分割,提供了更灵活的存储管理。 此外,分页是以页为单位进行地址映射,因此程序的各个逻辑部分被存储在不同的页上,可能导致程序的不连续执行和分散的存储。而分段则是以段为单位进行地址映射,可以更好地保持程序的连续性和紧凑性。 再者,分页通过页表来进行地址转换,将逻辑地址转化为物理地址。而分段则通过段表来实现地址转换。在分页中,页表中的每个表项都指向一个物理页框,而在分段中,段表的每个表项指向一个段的起始地址。 最后,分页适用于处理大小固定的作业,无法满足用户灵活的要求,而分段则更适合处理大小不确定或不等长的作业,可以满足用户对存储管理的灵活性要求。 总而言之,分页分段是不同的存储管理方式。分页将主存储器和辅助存储器等长划分为页框和页,提供了等长分割和更好的调度;而分段以不定长的段和段表来划分主存储器和辅助存储器,提供了灵活的存储管理和更好的连续性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白帽小丑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值