写在前面:
这一节主要总结关于操作系统对于内存管理方面的知识点。
内容:
程序的装入:
- 绝对装入方式
- 可重定位装入方式
动态运行时装入方式
绝对地址即物理地址
相对地址即逻辑地址
逻辑地址的作用是方便程序员思考 不用考虑将程序装入到那个具体的地址
只考虑任何一个小程序小模块都是从0开始编址的,至于程序到底加载到内存的那个地方程序员不考虑的 这是操作系统安排的!绝对装入方式:
逻辑地址和实际地址相同。
程序员必须熟悉内存的使用情况
编程序的时候直接用的就是物理地址
可重定位的装入方式: 又叫做静态装入方式 运行时不改变
- 目标模块从0开始编址 其他模块地址相对于起始地址计算
重定位:装入时对目标程序中指令和数据的修改过程 由逻辑地址转化成物理地址的过程。所以重定位又叫做地址映射。
动态运行时装入方式:
在程序执行的时候将相对地址转换成绝对地址
- 允许程序在内存当中移动
程序的链接 :三种方式
- 静态链接方式
- 装入时动态链接方式
- 运行时动态链接方式
静态链接方式:什么是静态的就是运行之前就确定了的 运行之后就再也不变的
执行前将目标模块和他们的库函数链接成一个完整的装配模块
对相对地址的修改
目标模块编址都是从0开始编址
装入的时候将独立的目标模块 连接成完整的模块
每个小的模块都是从0开始的相对地址
调用其他模块的地方要转换成跳转到对应模块的地址
运行的时候的动态链接:
将某些目标模块的额链接推迟到执行的时候才进行
在执行的过程中若发现一个调用模块尚未装入内存
则由操作系统去找到该模块并把它链接到调用者的模块上。
打破了静态链接的方式,静态链接方式是将所有的模块链接好之后再装入内存,装入完了之后再执行
各个独立的小模块必须连成一个整体的时候才能装入内存当中去。
运行时动态链接的方式是:把独立的小模块装入到内存当中去,只有马上要执行的时候才把小模块连到一起,在执行的过程中若发现一个调用模块尚未装入内存则由操作系统去找到该模块并把它链接到调用者的模块上。
内存的分配方式:
DOS 单用户单任务
Windows 单用户多任务
Linux Unix 多用户多任务
连续分配方式:
为一个用户程序分配一个连续的内存空间
分为四种
单一连续分配;
很难共享
固定分区方式:
- 分区大小想等 缺乏灵活性
- 分区大小不相等 可以根据大小为它分配适当的分区
将分区按照从小到大进行分配,建立分区使用表,表项包含分区的起始地址,大小,状态。