1.数据存储
(1)程序的装入和链接:将一个用户源程序变成一个可在内存中执行的程序。通常经过三个步骤:
1)编译:由编译程序将用户源代码编译成若干个目标模块。
2)链接:由链接程序将编译后形成的一组目标模块,以及它们所需要的库函数链接到一起,形成一个完整的装入模块。
3)装入:由装入程序将装入模块装入内存。
(2)程序的装入方式:
绝对装入方式 | (1)绝对装入程序按照装入模块中的地址,将程序和数据装入内存。(2)装入模块被装入内存后,由于程序中的逻辑地址与实际内存地址完全相同,不需要对程序和数据的地址进行修改 |
可重定位装入方式 | (1)由装入程序将装入模块装入内存后,装入模块中的程序所访问的所有逻辑地址与实际装入内存的物理地址不同,必须进行变换 (2)把装入时对目标程序中指令和数据的变换过程称为重定位 (3)地址变换实在装入时一次完成的,以后不再改变称为静态重定位 |
动态运行时装入方式 | (1)装入程序将目标模块装入内存后,并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址变换推迟到程序执行时进行。 (2)在硬件地址变换机构的支持下,随着对每条指令或数据的访问自动进行地址变换,故称为动态重定位。 |
(3)程序的链接:源程序经过编译后,可得到一组目标模块,再利用链接程序将这组目标模块连接形成装入模块,根据链接时间不同可分类为:
静态链接方式 | (1)在程序运行之前,先将各目标模块和他们所需的库函数,链接成一个完整的装配模块,以后不再拆开 |
装入时动态链接 | (1)是指将用户源程序编译后得到的一组目标模块,在装入内存时采用边装入边链接的链接方式。 (2)分别装入各模块,并且在装入的过程中修改相对地址和外部引用地址 (3)便于修改和更新,实现对目标模块的共享 |
运行时动态链接 | (1)各模块被独立装入系统,而且也不进行链接,运行时发现引用地址是相对地址或者外部地址时,才发起链接,寻找正确的引用地址。 (2)凡在执行过程中未被用到的目标模块,都不会被调入内存和被链接到装入模块上,可以加快程序的装入过程,节省大量的内存空间 |
2.分区管理
(1)连续分配方式:是指为一个用户程序分配一个连续的内存空间。
(2)连续分配方式分类:
分类 | 内容 | 特点 |
单一连续分配 | 整个内存用户区只驻留一个用户的一个程序 | 简单、内存利用率低 |
固定分区分配 | (1)将内存用户空间划分为若干个固定大小的区域,每个区域称为一个分区,在每个分区中只装入一道作业 (2)采用分区描述记录每个分区的状态信息 (3)当有作业要装入内存时,内存分配程序检索分区描述表,从中找出尚未使用的最接近大小的分区分配给该作业,然后修改分区状态,如果找不到合适的就拒绝为该作业分配内存 | (1)可运行的多道程序的存储管理方式 (2)存在分区内没利用的部分【内零头】造成存储空间的浪费 |
动态分区分配 | (1)分区的数量和大小都不固定,根据进程的实际需要动态的为之分配内存 (2)分区分配数据结构:记录系统中各个空闲分区情况 (3)分区分配 (4)分区回收:当进程运行完毕释放内存时,合并相邻空闲分区。 (5)LINUX伙伴系统:采用二进制数的方式来分配和回收空间。提高回收空间时合并空闲分区的速度 | (1)分区分配算法: 1)首次匹配:空闲分区链以地址递增的次序链接 2)循环匹配:将所有空闲分区构成一个循环链表 3)最佳匹配:将空闲分区按照容量从小到大,从头开始查找 5)快速适应(分类搜索法):对于每一类相同容量的空闲分区单独设立一个空闲分区链表,设置管理索引表,每个表项对应一种空闲分区类型。 (2)伙伴系统:分配和回收内存速度快,且不会产生很多小碎片。内存利用率不高 |
动态重定位分区分配 | (1)引入紧凑技术:将内存中所有作业进行移动,使他们全部相邻接,可把原来分散的多个小分区合成一个大分区。 | 动态重定位机制需要硬件的支持,增加重定位寄存器,保存分区起始地址,当进行紧凑内存空间时候,只需移动分区内容,然后用新的分区起始地址重置分区首址寄存器。 |
(3)进程的对换:内存中暂时不能运行的进程或暂时不用的程序和数据调到外存上,以便腾出足够的内存空间,再把已具备运行条件的进程或进程所需要的程序和数据,调入内存。对换是提高内存利用率的有效措施。
(4)离散分配方式:为进程分配空间不要求连续的空间,可以是多个分离的空间为进程占用:
分类 | 内容 | 特点 |
分页存储管理 | (1)将一个进程的逻辑地址空间分为若干个大小相等的片,称为页面 (2)把内存空间分成与页面相同大小的若干个存储块,称为块或页框 (3)为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻的物理块中 | (1)彻底消除了外零头,仅存很少的内零头,提高内存利用率 (2)分页操作由系统自动进行,一个页面布恩那个实现某种逻辑功能 (3)采用分页技术不易于实现存储共享,也不便于程序的动态链接。 |
段式存储管理 | (1)程序由若干逻辑段组成,每个段有自己的名字和长度,程序的逻辑地址时由段名和段内偏移量决定。 (2)系统采用动态划分技术,将物理内存动态的划分成许多尺寸不相等的分区 (3)当一个进程被装入物理内存时,系统为该进程的每一段独立的分配一个分区。 | (1)有效消除了内零头,提高了存储利用率 (2)允许子程序独立编译和修改 (3)容易实现存储共享 (4)具有较高的安全保证 (5)很容易满足程序段的动态增长需要
|
段页式存储管理 | (1)采用分段的方法组织用户程序,采用分页方法分配和管理内存。 (2)先将用户程序分为若干段,再把每段分成若干页,并为每段赋予一个段名 | 结合两者的特点 |