操作系统:内存管理基础


内存管理:

OS的内存管理主要负责内存的分配和回收(malloc、free),
同时地址转换等功能也由OS内存管理来做。

常见内存管理机制:

连续性分配管理方式:块式管理。

非连续性分配管理方式:页式管理、段式管理、段页式管理。

1.块式管理
将内存分为几个固定大小的块,每个块只包含一个进程。当程序运行需要内存时,就分配给它一块。
这种分配方式非常容易出现内存碎片。

2.页式管理
将内存分为大小相等的一页一页的形式,每一页的大小较小(比块小),相比于块式存储提高了内存利用率,减少了内存碎片。
页式管理通过页表查找逻辑地址和物理地址。

3.段式管理
页式管理的页无实际意义,段式管理将内存分为若干段,每一段的大小更小(比页小)。
段是有意义的,每个段是一组逻辑信息,例如主程序段Main,数据段D,栈段S等。
段式管理通过段表查询逻辑地址和物理地址。

4.段页式管理
结合了页式和段式的有点。将内存分为若干段,每个段又分成若干页。段页式管理的段与段之间、段内部都是离散的。

多级页表和快表:

1.多级页表:
为了提高内存利用率,减少内存碎片,页的大小应该变小。页小,页的数量变多,页表就会变大。

为了避免把全部页表一直放在内存中占用过多空间(特别是一部分页表实际用不上),因此产生了多级页表。

多级页表属于典型的时间换空间。

2.快表(页表缓冲):
又称联想寄存器。

为了加快逻辑地址到物理地址的转化速度,OS在页表管理机制的基础上引入了快表,用于加快地址映射速度。

快表可以看作是一种特殊的高速缓存,内容是页表的一部分或全部内容。

快表就是存放在高速缓冲存储器的部分页表。作为页表的Cache,它的作用与页表相似,但是提高了访问速率。由于采用页表做地址转换,读写内存数据时CPU要访问两次主存。有了快表,有时只要访问一次高速缓冲存储器,一次主存,这样可加速查找并提高指令执行速度。

3.对两者的总结:
多级页表是为了提升内存性能,但用的是时间换空间。为了提高时间性能,引入了快表(TLB)。
多级页表和快表都利用了程序的局部性原理。

地址转换流程:
1)按照逻辑地址中的页号查快表
2)若该页已存在快表中,则由页架号和单元号形成绝对地址
3)若该页不在快表中,则再查主存页表,与单元号形成绝对地址,同时将该页登记到快表中
4)当快表填满后,又要登记新页时,则需要按照一定替换策略淘汰一个旧的登记项

分页机制和分段机制的对比:

相同点:
1.分页和分段都是为了提高内存利用率,减少内存碎片

2.页和段都是离散存储的,但页内和段内是连续存储的。

不同点:
1.页的大小是固定的,由操作系统决定。段的大小不固定,由运行的程序决定。

2.分页满足了OS的内存管理需求,而分段是逻辑信息的单位,在程序中体现为代码段,数据段等,更能满足用户需要。

逻辑地址和物理地址:

逻辑地址是指由程序产生的与段相关的偏移地址部分。逻辑地址是由操作系统决定。

物理地址指的是真实物理内存中的地址,更具体的说就是内存地址寄存器中的地址。

虚拟地址空间:

1.虚拟地址空间:

在没有虚拟地址空间时,程序都是直接访问和操作物理内存。
直接暴露物理地址的做法有以下缺点:
1)用户程序可以访问任意内存,容易破坏操作系统,造成操作系统崩溃。
2)运行多个程序比较困难,多个程序同时运行,一个程序容易覆盖其他程序做的修改,容易造成被覆盖程序的崩溃。

通过虚拟地址访问内存的好处:
1)程序可以使用一系列相邻的虚拟地址来访问物理内存中不相邻的大内存缓冲区。
2)程序可以使用一系列虚拟地址来访问大于可用物理内存的内存缓冲区。当物理内存的供应量变小时,内存管理器会将物理内存页(通常大小为4KB)保存到磁盘文件。数据或代码页会根据需要在物理内存与磁盘之间移动。
3)不同进程使用的虚拟地址彼此隔离。一个进程中的代码无法修改正在被其他进程或操作系统使用的物理内存。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值