linux下内存管理简介

计算机中的存储器分为:主存和辅存。其中需要指明的是主存是可以被处理器直接访问的,而辅存是不能被处理器直接访问的。主存的容量一般相对于辅存而言是较小的,所以在现代的计算机体系中,通常使用的是耳机存储模式。利用辅存的大容量来提供较大的存储空间,存储准备运行的程序和数据,当需要时,在将其载入主存中。

计算机中的存储管理都是由操作系统来实现的。但是需要说明的是操作系统在实现存储管理时需要硬件的支持。比如说:用户程序使用的都是逻辑地址,而处理器在执行程序时需要使用的是绝对的地址来实现寻址的操作。于是操作系统大众存储管理模块就必须配合计算机中的硬件俩实现将逻辑地址向绝对地址的转换。

1程序的重定位

在多道程序设计中,主存中同时存放了多个用户的作业(可以粗略的认为是进程),操作系统根据内存的的使用情况来决定分配那些内存空间给应用程序。于是用户程序就不能使用绝对地址。为了方便用户每个用户都可以认为自己作业的程序和数据都是存放在一组以“0”地址开始的连续的空间中的。用户程序使用的是逻辑地址,由“逻辑地址”对应的存储空间成为“逻辑地址空间”。

为了保证每个作业的正确执行,必须根据分配给作业的主存储空间对作业中的指令和数据进行重定位,即是把0逻辑地址转换为绝对地址(物理地址)。重定位的方式有两种:静态重定位和动态的重定位。

静态重定位是比较简单,在装入该作业时,吧作业中的指令和数据同时转换为绝对地址,早作业执行的过程中不包含地址的转换。

动态的重定位,在作业执行的过程中,每一条指令都是由硬件的转换机构将指令的逻辑地址转换为绝对地址,它需要硬件的支持,即动态的重定位是计算机的软件和硬件共同执行的结果。在硬件线路上需要一个基址的寄存器和地址转换电路来实现。处理器没执行一条指令都会把指令中的逻辑地址与基址寄存器的值相加得到绝对地址,然后按照绝对地址来方位主存储器。

2页式存储管理和段式存储管理

操作系统之所以使用也是管理主要是为了在计算机上能够运行比计算机物理内存更大的用户程序。在物理上将实际的内存划分为一个个所谓的“块”,因此要求应用程序逻辑地址分页,也得大小和块的大小事相同的。这样就把作业的信息加载到内存中的“一块”上。也是管理程序的重定位是采用的是页表的方式来实现的。

采用页式管理时,提供给用户的逻辑地址都是连续的,用户在编写较大的程序时往往感到很不方便。用户希望他们的程序是由若干的段来组成的,例如:一个应用程序可以由一个主程序,若干个子程序,符号表,栈等若干段组成。每一段有自己的逻辑地址,每一段的逻辑地址都是从“0”开始,段内之间的地址是连续的,段与段之间的地址可以是不连续的,这主要是有操作系统来实现的。同时每一段可以独立的编写。

posted @ 2010-01-17 09:53  qiang.xu  阅读(568)  评论(0编辑  收藏  举报