操作系统(六)

来源:互联网 发布:mac ui设计软件 编辑:程序博客网 时间:2024/05/16 14:19

内存管理

 

内存管理是操作系统的一个重要功能,内存接收的读写请求可能来自CPU和DMA。内存不仅接受来在CPU的读写请求,有些情况下还要接受从外设来的DMA请求。但内存看到的仅仅是一个内存地址(还有操作类型及要写的数据等其他参数)形成的地址流并不太重视或知道这些地址是哪里来的。是怎样产生的。

 整个内存可以看作是一个大的字节数组,每个字节或字有自己的地址(最小寻址单位即是字节),形成一个内存地址空间,简称内存空间。

在程序的编译阶段, 有编译程序(compiler)或汇编程序(assembler)将用高级语言编写的程序转换成机器语言组成的目标程序或目标模块,其中主要包括两个转换:将高级语言或汇编语句转换为机器指令,将符号地址(编译前源程序中是符号地址)转换为内存地址。但是要注意两点:

1,在这个阶段中,转换后的内存地址(在大多数系统中)并不是程序执行时的真正所在和所用的地址(物理地址或绝对地址),即不是实际送往物理内存的地址,而是一种相对地址,是相对于本目标模块地址(通常为0)的相对位移。真正的目标地址,在连接和装入的阶段产生,甚至在程序中动态产生,当然,也就可能在编译或汇编的阶段中产生。

2,此时可能并不是所有符号都能转换为内存地址,因为外部子程序调用或外部变量引用所导致的外部地址可能还未知。

在程序的连接阶段。由连接程序将各目标模块连接起来形成一个可执行目标程序。其主要的工作是:

1)将各目标模块中 的相对地址统一转换成相对于程序起址(而非各自相对于各模块起址的位移)。2)将所有或部分未转换的符号转换为内存地址(需外部符号表)

连接后,程序中的地址可能仍然是相对地址(相对于可执行目标程序的地址,而不是相对于各目标模块)。

3,每当要执行一个程序是,都需要将该程序和其所要处理的数据装入内存,如果在此之前连接时所假设的程序起址与此时装入的实际起址不一致。在装入前可能需要重定位。值得注意的是,此时可能未能完成所有的连接。

4,在执行阶段,亦即当该可执行目标程序执行时,可能需要动态重定位与动态地址映射,甚至动态链接与装入。

5,最后,当程序执行完毕后,释放所有的内存空间。在连接阶段产生的可执行目标程序在不运行时,通常以一个二进制可执行文件的形式驻留在硬盘上。

操作系统在用户程序执行过程中进行动态地址映射(translation,mapping,bind)

 

内存管理的连续模式

无管理模式、覆盖技术和动态装入技术

1,无管理模式

在无管理模式中,内存不划分系统区与用户区,用户程序进入内存前内存为空。用户程序在运行过程中,一方面它对整个内存空间及整个计算机有完整的、任意的控制,提供给用户最大的灵活性;另一方面它对内存和其它任何资源的使用,均得不到操作系统或其他软件的帮助和支持。必须接触内存物理细节,必须自己采用覆盖或动态装入技术来解决装不下的问题。

2,覆盖技术

覆盖技术是针对大程序,小空间的问题提出的。其思想是对一个程序,仅将其中在执行期间的任何时刻都需要的过程和数据,在该程序开始执行时装入并一直保存在内存中,而该程序中的其他代码和数据只在需要的时候装入,且不同时执行的代码或数据相互覆盖。

3,动态(连接与)装入技术

动态装入技术与覆盖技术的区别在于,采用覆盖的用户程序的所有子程序地址和位置在执行前都固定且连接好了,而采用动态装入的用户程序中的子程序位置和地址是在装入时才确定内存位置、连接并装入内存。并未做连接、未定位置。

单一分区模式和交换技术

单一分区模式:单一分区模式是指内存分为系统区和用户区,系统区存放操作系统本身代码和数据,用户区存放用户程序代码和数据。用户区在任一时刻至多只存放一个用户程序,且为完整连续存放。

交换技术:单一分区模式主要用于单任务,在单一分区模式下实现多任务,需要采用交换技术。交换技术保证在某一特定时刻系统只有一个任务在用户分区中运行。交换技术需要硬盘上一个独立的分区,叫做交换分区。用来存放所有换出进程的代码、数据和栈。

固定分区模式和多道技术

固定分区模式或静态分区模式是在开机时将用户区固顶划分为几个区域,在系统运行过程中,每个区域任一时刻只存放一个程序,且为连续完整存放。固定是指各分区的大小与位置都是固定的。

多道技术:

多道技术是指内存用户区可以同时有多个用户程序。多道是以多任务为前提的,多任务可以是单道(但必须使用交换技术),但通常是多道的。多道技术的目的是在多任务下面避免进程切换时的交换工作,保证CPU要访问的内容能在内存中找到。

原创粉丝点击