
内存是什么
内存是存放数据的硬件,程序执行前需要先放到内存中才能被CPU处理
内存中有一个一个的小房间,每个房间就是一个**“存储单元”**
如果计算机按字节编址则每个存储单元大小为1字节 即1B 即8个二进制位
如果字长为16位的计算机按字编址,则每个存储单元大小为1个字,每个字的大小为16个二进制位
逻辑地址和物理地址
假如宿舍四个人一起出去旅行 四个人的学号的尾号分别是0 1 2 3
住酒店给四个人安排了四个房间相连的房间 四人按次序依次进入
比如0 1 2 3依次进入了 5 6 7 8号房间
四个人的编号0 1 2 3其实就是一个相对位置,而各自入住的房间相当于是绝对位置
也就是说 知道各个同学的相对位置 和房间起始号 就可以得到每个同学的绝对位置
指令中的地址也可以采用这种思想工作,编译时产生的指令只关心相对地址实际放入内存中时在想办法根据其实位置得到绝对地址
相对地址又称逻辑地址 绝对地址又称物理地址
**编译:**由编译程序将用户源代码编译成若干个目标模块(把高级语言翻译成机器语言)
**链接:**由链接程序将变异之后形成的一组目标模块,以及所需的库函数链接到一起,形成一个完整的模块装入
由装入程序将装入模块装入内存中运行
装入的三种方式(逻辑地址转化为物理地址)
绝对装入
在编译时,如果知道程序放在内存哪个位置,编译程序将产生绝对地址的目标代码
装入程序按照装入模块的地址,将地址和数据装入内存。
灵活性低 只适合于单道程序环境
程序中使用的绝对地址,可以在编译或汇编时给出,也可由程序员直接赋予,通常情况下都是编译或汇编时在转换为绝对地址
静态重定位
编译链接之后的装入模块的地址都是从0开始的,指令中使用的地址,数据存放的地址都是相对于起始地址而言的逻辑地址
可根据内存的当前情况,将装入模块装入到内存的适当位置,装入时对地址进行重定位将逻辑地址变为物理地址
静态重定位的特点是一个作业装入内存中时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业
作业一旦进入内存,就不能再移动,也不能再申请内存空间
动态重定位
编译,链接之后的装入模块的地址都是从0开始的,装入程序把装入模块装入内存之后,并不会立即把逻辑地址转换为物理地址
而是把地址转换推迟到程序真正要执行的时候,因此装入内存的地址依然是逻辑地址,这需要一个重定位寄存器支持
采用动态重定位时允许程序在内存中发生移动
链接的三种方式
静态链接:
在程序运行之前,现将各个目标模块及他们所需的库函数连接成一个完整的执行文件(装入模块) 之后不再拆开
装入时动态连接
将各个目标模块装入内存时,边装入边链接的链接方式
动态链接
在执行时需要该模块的时候,才对他进行链接,优点是便于修改和更新,便于实现对目标模块的共享
内存空间的分配和回收
1.操作系统负责内存空间的分配和回收
2.操作系统需要提供某种技术从逻辑上对内存空间进行扩充
3.操作系统需要提供地址转换功能,负责程序的逻辑地址和物理地址的切换

4.操作系统需要提供内存保护的功能,保证各个进程在各自存储空间内运行,互不干扰
内存保护有两种可以采取的方法
1.在CPU上设置一对上,下限寄存器,存放进程的上,下限地址,进程指令要访问某个地址时,CPU检查是否越界

2.采用重定位寄存器和界地址寄存器进行越界检查。
重定位寄存器存放的是进程的起始物理地址,界地址寄存器存放的是进程的最大逻辑地址

内存管理
1136

被折叠的 条评论
为什么被折叠?



