一些不重要的知识点:
存储器的三个条件:
①访问速度快
②容量大
③价格便宜
上面三个条件无法兼得。
存储器的多层结构:
寄存器 |
---|
高速缓存 |
主存储器 |
磁盘缓存 |
固定磁盘 |
可移动存储介质 |
程序需要先装入内存才能在系统中运行;
编译------>链接------>装入
对应的
源程序
目标程序(由源程序编译成的,无所需要的库函数)
可执行程序(链接形成的)
程序的装入
定义:将装入模块装入内存。
绝对装入方式
只能把目标木块装入到内存中事先指定的位置
只适用于单道程序环境
==可重定位装入方式(静态重定位)
重定位==:把目标程序中的指令和数据地址进行重新计算的过程(逻辑地址变为物理地址)
静态:地址变换在进程装入时一次性完成的,以后不再改变
动态运行时的装入方式
地址转换在程序执行时才进行
所以装入内存的地址仍是逻辑地址。
程序的链接
定义:将一组目标模块以及他们所需要的库函数装配成一个完整的装入模块。
静态链接方式
程序执行前,就完成链接,并不再拆开(静态)
//事先进行链接,以后不再拆开
装入时动态链接
边装入边链接
运行时动态链接
程序执行时,才链接
加快程序装入过程
节省内存空间
连续分配存储管理方式
即为用户程序分配一个连续的内存空间
四种连续分配方式:
单一连续分配
固定分区分配
动态分区分配
动态可重定位分区分配算法
单一连续分配
单道程序环境中
内存分为系统区和用户区
用户区的内存仅装有一道用户程序
固定分区分配
多道程序系统
用户空间划分为若干固定大小的区域,每个分区之装入一道作业
分区大小可相等可不相等。
动态分区分配(可变分区分配)
根据进程的实际需要,动态地为之分配内存空间
数据结构
空闲分区表
空闲分区链
起始部分:
前向指针和用于控制分区分配的信息
尾部:
后向指针
分区分配算法
顺序式搜索算法
首次适应算法—FF
每次都从链首顺序查找,直到找到一个大小满足的空闲分区
循环首次适应算法—NF
每次不从链首开始,从上次找到的空闲分区的下一个空闲分区开始查找
最佳适应算法—BF
空闲分区按容量小到大排列
找到的第一个合适的
最坏适应算法—WF
大到小排列
找到的第一个合适的
索引使搜索算法
快速适应算法
伙伴系统
哈希算法
分区的分配与回收
分配内存
按照分区分配算法从空闲分区链(表)中找到一块合适分区,判断是否要切割,要的话,划出一部分分配出去,余下部分仍留在空闲分区链(表)中。
回收内存
回收原则:保证连续的地址为同意表项
动态可重定位分区分配
紧凑:利用小碎片
硬件地址变换机构
动态重定位:地址变换过程是程序执行期间,随着对每条指令或数据的访问自动进行的