概述
计算机基本硬件结构
CPU 内存, 设备
操作系统的内存管理功能
- 抽象
逻辑地址空间 - 保护
独立地址空间 - 共享
访问相同的内存 - 虚拟化
更多的地址空间
在等待的进程可以先放在硬盘上去(虚拟地址空间)
操作系统管理内存不同方法
程序重定位
分段
分页
虚拟内存
按需分页虚拟内存
实现高度依赖硬件
MMU
地址空间
物理地址空间,硬件支持的地址空间
主存,磁盘
逻辑地址空间-一个运行得程序所拥有的内存范围
逻辑地址空间的生成
- 编译 函数变量的名字就是地址
- 汇编 更加贴近于机器语言,用符号代替变量和函数的地址,通过汇编器可以转换为机器语言.o file程序
- 链接,把多个.o程序编程一个.exe程序
- 载入,偏移量程序在内存中
理想的存储器
更大、更快、更便宜和非易失性的存储器。
手动的覆盖和自动的交换。
如果想要在有限容量的内存中,以更小的页粒度为单位装入更多更大的程序,可以采用自动的虚拟存储技术。
覆盖技术
把程序按照其自身逻辑结构,划分为若干个功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后运行。
交换技术
多道程序在内存中,让正在运行的程序或需要运行的程序获得更多的内存资源。
方法:
可将暂时不能运行的程序送到外存,从而获得空闲内存空间。
操作系统把一个进程的整个地址空间的内容保存到外存中,而将外存这种某个进程的地址空间读入到内存中。换入换出内容的大小为整个程序的地址空间。
交换技术
何时需要发生交换,只当内存空间不够或有不够的危险时换出。
交换区的大小:必须足够大以存放所有用户进程的所有内存映像的拷贝:必须能对这些内存映像进行直接存取
程序换入时的重定位 : 换出后再换入的内存位置一定要在原来的位置上吗?最好采用动态地址映射的方法。
页表,动态地址映射。
覆盖发生在一个程序里面,由程序员负责操作,程序员手动指定。
交换直接交换暂时无法执行的程序,是操作系统完成的,对程序员是透明的。
虚存技术
在内存不够用的情形下,可以采用覆盖技术和交换技术,但是:
- 覆盖技术: 需要程序员自己把整个程序划分为若干个小的功能模块,并确定各个模块之间的覆盖关系,增加了程序员的负担。
- 交换技术: 以进程为单位,进行交换。开销较大。
虚存技术,像覆盖技术那样,不是把程序的所有内容都放在内存中,因而能够运行比当前的空间还要大的程序,但做得更好,由操作系统自动来完成,无须程序员的干涉。
像交换技术那样,能够实现进程在内存与外存之间的交换,因而获得更多的空闲内存空间。但做得更好,只对进程的部分内容在内存和外存之间交换。
虚拟技术-程序的局部性原理
时间局部性: 一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内:
空间局部性:当前指令和临近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小的区域内。
缺页中断。
虚拟技术-基本概念
可以在页式或段式内存管理的基础上实现。
在装入程序时,不必将全部装入内存中,而只需将当前需要执行的部分页面或段装入内存,就可让程序开始执行。
在程序执行过程中,如果需执行的指令或访问的数据尚未在内存(称为缺页或缺段),则由处理器通知操作系统将相应的页面或段调入到内存,然后继续执行程序。
把不常用页换出内存。
最后
以上就是单纯树叶为你收集整理的操作系统(二)内存地址空间与虚拟内存的全部内容,希望文章能够帮你解决操作系统(二)内存地址空间与虚拟内存所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复