内存管理、分段、分页

news/2024/7/20 15:09:40 标签: 操作系统, 内存管理, 分段, 分页

内存管理">内存管理

内存管理">为什么要有内存管理

  多道程序操作系统中,进程的并发执行依赖于CPU调度。CPU能访问的存储器只有内存(处理器中的)寄存器(机器指令可以用内存地址作为参数)。
  寄存器价格昂贵且存储空间小,因此进程执行的指令以及指令使用的数据主要还是保存在内存上。(如果这些数据不在内存中,CPU在使用前也需要将数据移到内存中)。
  由上可见,CPU要执行的进程(指令和数据)需要存储在内存中,(而内存的空间也是有限), 那么如果进行内存的管理就是一个问题了。

内存管理">如何进行内存管理

  要让CPU执行的进程保存在内存中,其实有两个内存管理的方向

  • 1. 交换: 在进程要执行时(占有CPU)再移入内存,内存中的进程不在运行时就移出内存。 由于交换(进程的滚入和滚出)有较大的时间开销,因而标准的交换应用并不广泛。
  • 2. 在内存中保存多个进程: 现代系统大多会在内存中保存多个进程。

      我们知道操作系统本身保存在内核中,进行内存管理要保证用户进程不能访问内核空间。另外,不同进程之间也不能互相访问对方的内存空间,以免造成不合法的访问。 因此,每个进程都应该有自己独立的内存空间
      为了保证每个进程由自己独立的内存空间,要为每个进程分配一块内存空间,各个进程只能访问分配给自己的内存空间。

地址绑定

  进程在调入CPU运行时,系统会为其分配内存空间。进程在执行时,需要通过内存地址访问其要使用的数据。然而,我们并不知道系统为进程分配的内存地址空间是那一段,也就是说在程序运行之前,我们并不知道数据所保存的物理地址。 这样的话,程序如何使用自己内存空间的数据呢。 系统设计人员提出了逻辑地址地址绑定的概念。
  地址绑定的原理其实就是不再使用绝对物理地址, 而是以系统分配给进程的起始地址作为基地址,然后通过相对地址(逻辑地址)来访问数据。 这样在程序执行时,系统再将逻辑地址根据绑定的映射关系转化物理地址来访问内存了。

连续内存的分配

  CPU能并发执行多个进程,操作系统要为这些进程分配内核空间。进程执行结束后,操作系统需要回收内存空间。各个进程需要的空间大小不一致,如果要为每个进程分配连续的内存空间,那么就会产生许多内存浪费(碎片)。即每个空闲的空间都不足以保存要执行的进程,但是有许多比该进程所需空间小的内存,(这些内存的总和可能远大于要执行的进程所需的内存空间)。
  可以看出连续内存的分配有很大的局限性。(尽管可以通过算法进行一定的优化,但仍然不能满足需求)。因此,为了提高内存空间的利用率,更好的方式就是支持给进程分配物理地址不连续的内存空间。 分页分段是两种互补的(可合并的)用于分配不连续物理地址的内存空间的方法。

分页">分页

  分页的原理是,把进程的逻辑内存空间划分为许多个固定长度的小片(称之为页、page)。对应的,物理内存空间也分为许多个固定长度的小部分(称为帧 frame)。 每个页对应一个帧(帧不需要连续)。 这样,再内存管理时,一个进程最多也就产生最后一页的一部分的空间浪费。几乎不会到时大的碎片(空间开销)。
页表:
  分页内存管理的优化,最关键的就是使得分配给一个进程的内存不需要连续了,而是分配给进程一些不连续的帧。 既然如此,我们就需要为每个进程管理一张页表,用于告诉进程它的页分别对应到物理内存中的哪些帧。

分段">分段

  分段的基本思想是:将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。

分页与分段的主要区别">分页分段的主要区别

分页分段有许多相似之处,比如两者都不要求作业连续存放.但在概念上两者完全不同,主要表现在以下几个方面:
(1)页是信息的物理单位,分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要.段是信息的逻辑单位,它含有一组意义相对完整的信息,分段的目的是为了更好地实现共享,满足用户的需要.
(2)页的大小固定,由系统确定,将逻辑地址划分为页号和页内地址是由机器硬件实现的.而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时根据信息的性质来划分.
(3)分页的作业地址空间是一维的.分段的地址空间是二维的.
 

小结

内存管理其实就是管理如何在内存中存储进程的信息。

  • 我们可以在内存中保存一个进程,也可以保存多个进程。 如果内存中,保存一个进程。那么就需要在另一进程要执行时,将该进程交换进内存。这显然要产生很多(进程滚入、滚出的)开销。 因此 标准的交换 已经很少被用到。 (在虚拟内存的管理中,会发现一些改进的交换有了很广泛的应用。)
  • 如果在内存中存储多个进程,那么进程的地址空间就不是从0地址开始了,而又可能发生变化。(不确定进程滚入时,进程的基地址)。这就有了地址绑定和逻辑地址的概念。
  • 多个进程如何在内存中存储呢?连续存储 开起来会产生很多碎片。 而分页分段则是优化内存管理的手段。

http://www.niftyadmin.cn/n/1078938.html

相关文章

curl、wget命令总结

一、curl : 数据传输命令 curl 是LInux下的数据传输工具,可以通过URL想服务器上传数据,或者从服务器下载数据。curl支持HTTP、FTP、SMTP、RSTP等应用层协议。   curl的用法很简单,后面直接跟选项和URL。 curl [options] [URL.…

如何使用Valgrind memcheck工具进行C/C++的内存泄漏检测

什么是valgrind: valgrind是一个构建动态分析工具的框架,它提供了一系列的工具用于检测和分析内存管理和线程的bug。 其中,最常用的工具就是Memcheck。 Memcheck能够检测出内存相关的,在C/C中常见的可能导致程序Crashes以及发生不…

libevent学习笔记【使用篇】——(零)异步IO简介

本文翻译自:http://www.wangafu.net/~nickm/libevent-book/01_intro.html 异步IO简介 大多数的初级编程者都是从阻塞IO调用开始网络编程的。阻塞(同步)IO调用指的是:调用会一直阻塞,不会返回,直到发生下面…

活,何为?

活,何为?——知己著于涕零成与败,烟云也,亦或兴,亦或悲,稍纵即逝。人生何为?非权高,非位重,非钱财满堂。得之,谓之福?失之,谓之祸&…

[分析]百度对域名故障的应对措施

[分析]百度对域名故障的应对措施ugmbbc发布于 2010-01-12 12:17:06| 12284 次阅读 字体:[urljavascript:fontZoomB();]大[/url] [urljavascript:fontZoomA();]小[/url] 打印预览[url/topics/261.htm][/url] 感谢匿名人士的投递新闻来源:原创大概总结了一下baidu在今…

checkbox垂直居中

在checkbox上加vertical-align:middle <div><input type"checkbox" value"全部" id"checkAll" style"vertical-align: middle;"/> 全选</div>转载于:https://www.cnblogs.com/byayn/p/4123406.html

游戏编程中的人工智能技术

游戏编程中的人工智能技术 转自http://blog.csdn.net/aifuture/article/details/1852030 分类&#xff1a; 神经网络 2007-10-28 17:44 652人阅读 评论(0) 收藏 举报 <神经网络入门>. (连载之一)用平常语言介绍神经网络(Neural Networks in Plain English)因为我们没有很…

libevent学习笔记【使用篇】——Connection listeners.md

本文整理自libevent官方手册 libevent 提供了一种用于监听和接受TCP连接的便捷方式——evconnlistener机制 创建和释放 evconnlistener 的接口 下面接口用于创建和释放evconnlistener struct evconnlistener *evconnlistener_new(struct event_base *base,evconnlistener_c…