操作系统学习笔记:存储管理

类似进程线程是对CPU的抽象。存储管理,是操作系统对存储器(内存)的抽象。

读书时对分页,分段,这些概念一知半解。很重要的原因是我没有去思考,为什么要有这些概念?它们是为了解决什么问题?技术的本质是分解问题,抽象问题,乃至解决问题。

而分页,分段这些抽象,就是为了解决一些具体的问题而建立的。


问题1:用户程序直接访问物理地址,破坏其它程序(操作系统)内存。

解决方案:保护与重定位。

保护:防止程序A访问其它进程的内存,修改内存中的代码(分段保护)。

重定位:提供虚拟线性地址,将程序A对虚拟线性地址的访问映射到绝对物理地址(如基址寄存器,对程序A中所有的地址访问都需要加上基址寄存器中的值)。


问题2,内存不足以容纳所有运行中进程的问题。

解决措施1:交换技术

将一个运行进程完整调入内存,将空闲进程存储在磁盘上,需要时再调入。

交换技术的主要问题在于:

1、进程占用的空间不是一成不变,需要在不同进程间为增长预留空间,浪费大量内存空间。

2、进程整体换入换出存在巨大的浪费:从磁盘中存取不需要使用的数据,过于频繁的内存整理。

如:假设有512M内存,进程A需要占用500M的内存,进程B需要200M,进程C需要占用100M,那么只要进程A激活时,必须将进程B、C都存入磁盘。

3、不能运行大于物理内存的程序。


解决措施2:虚拟内存抽象

具体解决方案:分页

每个程序拥有自己的地址空间,空间被分割为很多块(页)。每一页有连续的地址范围,这些页被映射到物理内存。所以,不需要所有页在内存中才能运行程序。

从本质上说,也是构建地址空间抽象,对内存的访问做重定位,相对基址寄存器的重定位,分页的机制更为复杂,由于进程的空间被分割为很多块,控制得更为细致,分页换入换出相对整体换入换出更有效率。

如:交换时只需要将被修改过的页面写入磁盘。


问题3:程序中存在多个独立的动态逻辑实体(代码,文字常量,初始化数据,堆,栈),需要管理这些逻辑实体的扩张与收缩,截获非法的访问,如对栈中的数据执行,或者对代码内存进行写入。

解决措施:段抽象。

段抽象是另一种地址空间的抽象,是比进程更低,比分页更高层的分割。使程序和数据被划分为逻辑上独立的地址空间,有助于共享和保护。

相对于分页,有着类似的根据索引查找内存偏移量。

主要的不同在于:

1、抽象层次不同,分页对程序员是透明的,程序员对进程的抽象线性空间进行操作,无需理会索引寻址的细节,而段对程序员是不透明的,程序员直接对段的抽象线性空间进行操作。

2、分页的大小是固定的(修改需要重新启动),而段的大小是浮动的。


总结:

分段跟分页都是对内存的抽象方式,是操作系统利用内存的技术,两种技术可以协同或单独使用(一般是协同)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值