内存治理的概念

内存治理(Memory Management)是操作零碎设计中最主要和最复杂的内容之一。固然盘算机硬件不断在飞速开展,内存容量也在不时增加,然则依然弗成能将一切用户过程和零碎所需求的全体程序和数据放入主存中,所以操作零碎必需将内存空间停止合理地划分和无效地震态分派。操作零碎对内存的划分和静态分派,就是内存治理的概念。
无效的内存治理在多道程序设计中十分主要,不只便利用户运用存储器、进步内存应用率,还可以经过虚拟技巧从逻辑上扩大存储器。
内存治理的功用有:

  • 内存空间的分派与收受接管:由操作零碎完成主存储器空间的分派和治理,使程序员解脱存储分派的费事,进步编程效力。
  • 地址转换:在多道程序情况下,程序中的逻辑地址与内存中的物理地址弗成能分歧,因而存储治理必需供给地址变换功用,把逻辑地址转换成响应的物理地址。
  • 内存空间的扩大:应用虚拟存储技巧或主动掩盖技巧,从逻辑上扩大内存。
  • 存储维护:包管各道功课在各自的存储空间内运转,.互不搅扰。

在停止详细的内存治理之前,需求理解过程运转的根本道理和请求。

程序装入和链接

创立过程起首要将程序和数据装入内存。将用户源程序变为可在内存中履行的程序,平日需求以下几个步调:

  • 编译:由编译程序将用户源代码编译成若干个目的模块。
  • 链接:由链接程序将编译后构成的一组目的模块,以及所需库函数链接在一同,构成一个完好的装入模块。
  • 装入:由装入程序将装入模块装入内存运转。

这三步进程如图3-1所示。


图3-1  对用户程序的处置步调

程序的链接有以下三种方法:

  • 静态链接:在程序运转之前,先将各目的模块及它们所需的库函数链接成一个完好的可履行程序,今后不再拆开。
  • 装入时静态链接:将用户源程序编译后所失掉的一组目的模块,在装入内存时,釆用边装入边链接的链接方法。
  • 运转时静态链接:对某些目的模块的链接,是在程序履行中需求该目的模块时,才对它停止的链接。其长处是便于修正和更新,便于完成对目的模块的共享。

内存的装入模块在装入内存时,异样有以下三种方法:
1) 相对装入。在编译时,假如晓得程序将驻留在内存的某个地位,编译程序将发生相对地址的目的代码。相对装入程序依照装入模块中的地址,将程序和数据装入内存。因为程序中的逻辑地址与实践内存地址完整相反,故不需对程序和数据的地址停止修正。
相对装入方法只实用于单道程序情况。别的,程序中所运用的相对地址,可在编译或汇编时给出,也可由程序员直接付与。而平日状况下在程序中釆用的是符号地址,编译或汇编时再转换为相对地址。
2) 可重定位装入。在多道程序情况下,多个目的模块的肇端地址平日多是从0开端,程序中的其他地址多是绝对于肇端地址的,此时应釆用可重定位装入方法。依据内存的以后状况,将装入模块装入到内存的恰当地位。装入时对目的程序中指令和数据的修正进程称为重定位,地址变换平日是在装入时一次完成的,所以又称为静态重定位,如图3-2(a) 所示。


图3-2  重定向类型

静态重定位的特色是在一个功课装入内存时,必需分派其请求的全体内存空间,假如没有足够的内存,就不克不及装入该功课。此外,功课一旦进入内存后,在全部运转时期不克不及在内存中挪动,也不克不及再请求内存空间。
3) 静态运转古装入,也称为静态重定位,程序在内存中假如发作挪动,就需求釆用静态的装入方法。装入程序在把装入模块装入内存后,并不立刻把装入模块中的绝对地址转换为相对地址,而是把这种地址转换推延到程序真正要履行时才停止。因而,装入内存后的一切地址均为绝对地址。这种方法需求一个重定位存放器的支撑,如图3-2(b)所示。
静态重定位的特色是可以将程序分派到不延续的存储区中;在程序运转之前可以只装入它的局部代码即可投入运转,然后在程序运转时期,依据需求静态请求分派内存;便于程序段的共享,可以向用户供给一个比存储空间大得多的地址空间。

逻辑地址空间与物理地址空间

编译后,每一个目的模块多是从0号单位开端编址,称为该目的模块的绝对地址(或逻辑地址)。当链接程序将各个模块链接成一个完好的可履行目的程序时,链接程序次序顺次按各个模块的绝对地址组成一致的从0号单位开端编址的逻辑地址空间。用户程序和程序员只需晓得逻辑地址,而内存治理的详细机制则是完整通明的,它们只要零碎编程人员才会触及。分歧过程可以有相反的逻辑地址,由于这些相反的逻辑地址可以映射到主存的分歧地位。
物理地址空间是指内存中物理单位的聚集,它是地址转换的最终地址,过程在运转时履行指令和拜访数据最初都要经过物理地址从主存中存取。当装入程序将可履行代码装入内存时,必需经过地址转换将逻辑地址转换成物理地址,这个进程称为地址重定位。

内存维护

内存分派前,需求维护操作零碎不受用户过程的影响,同时维护用户过程不受其他用户过程的影响。经过釆用重定位存放器和界地址存放器来完成这种维护。重定位存放器含最小的物理地址值,界地址存放器含逻辑地址值。每一个逻辑地址值必需小于界地址存放器;内存治理机构静态地将逻辑地址与界地址存放器停止比拟,假如未发作地址越界,则加上重定位存放器的值后映射成物理地址,再送交内存单位,如图3-3所示。
当CPU调剂程序选择过程履行时,差遣程序会初始化重定位存放器和界地址存放器。每个逻辑地址都需求与这两个存放器停止查对,以包管操作零碎和其他用户程序及数据不被该过程的运转所影响。


图3-3  重定位和界地址存放器的硬件支撑

时间: 2024-11-05 22:48:18

内存治理的概念的相关文章

内存和外存概念的严格解析

这篇文章我想针对平时我们所说的内存和外存做一个简单的澄清. 我们经常会听到这样的一段对话: A说:我刚买了个新手机. B说:多大的内存? A说:32G的. 其实A说的32G指的是我们严格意义上的外存.人们经常会把外存简单地说成是内存,其实内存和外存是两个概念. CPU能直接访问的存储器称为内存储器,它包括cache和主存器.反之,CPU不能直接访问的就是外存储器.值得注意的是:CPU不能直接访问外存储器,外存储器的信息必须调入内存储器后才能为CPU进行处理.就拿你的电脑上的qq来举个栗子,当你没

Linux内存管理基本概念

1. 基本概念 1.1 地址 (1)逻辑地址:指由程序产生的与段相关的偏移地址部分.在C语言指针中,读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址.(2)线性地址:段中的偏移地址(逻辑地址),加上相应段的基地址就生成了一个线性地址.(3)物理地址: 放在寻址总线上的地址.(4)虚拟地址:保护模式下段和段内偏移量组成的地址,而逻辑地址就是代码段内偏移量,或称进程的逻辑地址. 1.2 内存 (1) 虚拟内存:计算机系统内存管理的一种技术.它使得应用程序认为它

内存治理常识点总结

分页治理方法和分段治理方法在许多中央类似,比方内存中多是不延续的.都有地址变 换机构来停止地址映射等.但两者也存在着很多差别,表3-20列出了分页治理方法和分段治理方法在各个方面的比照.表3-20 分页治理方法和分段治理方法的比拟   分  页 分  段 目 的 页是信息的物理单元,分页是为完成团圆分 配方法,以消减内存的外零头,提髙内存的利 用率.或许说,分页仅权是因为零碎治理的需求而不是用户的需求 是信息的逻辑单元,它含有一组其意义绝对 完好的信息.分段的目标是为了能更好地知足 用户的需求

Linux内存管理--基本概念【转】

转自:http://blog.csdn.net/myarrow/article/details/8624687 1. Linux物理内存三级架构 对于内存管理,Linux采用了与具体体系架构不相关的设计模型,实现了良好的可伸缩性.它主要由内存节点node.内存区域zone和物理页框page三级架构组成.     • 内存节点node 内存节点node是计算机系统中对物理内存的一种描述方法,一个总线主设备访问位于同一个节点中的任意内存单元所花的代价相同,而访问任意两个不同节点中的内存单元所花的代价

操作系统:内存管理(概念)

对于计算机系统而言,操作系统充当着基石的作用,它是连接计算机底层硬件与上层应用软件的桥梁,控制其他程序的运行,并且管理系统相关资源,同时提供配套的系统软件支持.对于专业的程序员而言,掌握一定的操作系统知识比不可少,因为不管面对的是底层嵌入式开发,还是上层的云计算开发,都需要使用到一定的操作系统相关知识. 内存管理有哪几种方式 分段和分页的区别是什么 什么是虚拟内存 什么是内存碎片什么是内碎片什么是外碎片 虚拟地址逻辑地址线性地址物理地址有什么区别 Cache替换算法有哪些 内存管理有哪几种方式

Java千百问_01基本概念(017)_内存物理地址在CPU中如何形成

点击进入_更多_Java千百问 1.什么是内存的物理地址 我们通过8086CPU来说明内存地址是如何形成的. 首先我们要了解物理地址,当CPU需要访问一个内存单元时,需要给出内存单元的地址,而每一个内存单元在物理内存空间中都有一个唯一的地址,即可以通过这个地址定位到内存单元,而这个地址即为物理地址. CPU通过地址总线将一个内存单元的物理地址送入存储器,而后CPU便可以通过这个物理地址来访问这个物理地址所指向的内存单元了. 2.内存物理地址在CPU中如何形成 首先,我们知道8086CPU的地址总

(二)程序中的内存&&栈

一.程序运行为什么需要内存?基本概念? 内存是程序运行的立足之地,程序需要用内存来存储一些变量. 内存管理最终是由操作系统完成的,内存在本质上是一个硬件器件,由硬件系统提供:内存由操作系统统一管理,为了管理内存方便,操作系统提供了很多机制来让我们应用程序使用内存.这些机制彼此不同,各有各的特点,我们程序根据自己的实际情况来分配内存(暂时获得内存的使用权),使用内存,释放内存(向操作系统归还内存使用权限).在C语言中获得内从的方法为栈.堆.数据区 二.栈 在C语言中,局部变量是存在于栈中的,栈是一

JVM--Java内存相关

Java内存模型,Java内存管理,Java堆和栈,垃圾回收 本文是<成神之路系列文章>的第一篇,主要是关于JVM的一些介绍. 持续更新中 Java内存模型 细说Java多线程之内存可见性(视频)(推荐)(如果嫌视频讲的慢,建议使用1.5倍速度观看) JSR 133: JavaTM Memory Model and Thread Specification Revision(JMM英文官方文档) Java内存模型FAQ 深入理解Java内存模型(一)——基础 深入理解Java内存模型(二)——

Linux的内存管理机制

内存管理的一些基本概念: 地址 1)逻辑地址:指由程序产生的与段相关的偏移地址部分.在C语言指针中,读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址. 2)线性地址:段中的偏移地址(逻辑地址),加上相应段的基地址就生成了一个线性地址. 3)物理地址:放在寻址总线上的地址. 4)虚拟地址:保护模式下段和段内偏移量组成的地址,而逻辑地址就是代码段内偏移量,或称进程的逻辑地址. 内存管理主要解决以下问题: 进程的地址空间隔离: 提高内存的使用效率: 程序运行时重