操作系统(3) -- 内存管理
3.1 内存管理概念
内存管理的基本原理和要求
为什么要进行内存管理?
虽然内存容量在不断增长,但是仍然不可能将所有用户进程和系统所需要的全部程序与数据放入主存,于是操作系统需要对内存空间进行合理的划分和动态分配
内存管理的功能:
内存空间的分配与回收
地址转换
内存空间的扩充
存储保护
程序装入和链接
创建进程首先把程序和数据装入内存,分几个步骤:
编译
链接
链接方式:静态链接、装入时动态链接、运行时动态链接
装入
装入方式:绝对装入、可重定位装入、动态运行时装入
逻辑地址和物理地址:
逻辑地址:编译后每个目标模块都从0号单元开始编址
物理地址:地址转换的最终地址。
地址重定位:装入程序将可执行代码装入内存时,必须把逻辑地址转换为物理地址
内存保护:
CPU中设置上、下限寄存器,存放作业在主存中的下限和上限地址
用重定位寄存器(或基址寄存器)和界地址寄存器,重定位含最小的物理地址值,界地址存逻辑地址最大值。每个逻辑地址值必须小于界地址寄存器的值,未发生越界,加上重定位寄存器的值后映射成物理地址。
覆盖与交换:
用来扩充内存的两种技术
覆盖;用户空间分一个固定区和若干覆盖区。经常活跃的部分放固定区,其余部分按调用关系分段。先将即将要访问的调入覆盖区。
交换:把处于等待态的程序从内存移到辅存,把内存腾出来。把准备好竞争CPU运行的程序从辅存调到主存。
交换技术主要在不同进程之间,覆盖在同一个程序或进程中。
连续分配方式
单一连续分配:内存中永远只有一道程序,不会越界。比较简单,无外部碎片,可以采用覆盖技术,但只能用于单用户、单任务的操作系统中,有内部碎片,存储器利用率低。
固定分区分配:将用户内存空间划分若干固定大小的鹊羽,每个分区只装入一道作业。无外部碎片,不能实现多进程共享一个内存区,存储利用率低。
动态分区分配:不预先划分内存,在进程装入内存时,根据进程大小动态建立分区。动态分区分配策略:
首次适应,按地址递增链接,最简单且最好和最快的
最佳适应,按容量递增链接
最坏适用:按容量递减
邻近适应
非连续分配管理方式
允许一个程序分散地装入不相邻的内存分区。按分区大小是否固定,分分页和分段:
基本分页存储管理方式
思想:主存划分若干大小相同且固定的块,作为主存的基本单位。每个进程也以块为单位进行划分,进程执行时,以块为单位逐个申请主存中的快空间
概念:
页面和页面大小:进程中的块称页,内存中的块称页框,外存直接称块。
地址结构:页号P+页内偏移量W,长32位。
页表:很多页表项的集合。页号+物理内存中的块号
页表项的第二部分和地址的第二部分共同构成物理地址
基本地址变化机构
在系统中设置页表寄存器,存放页表在内存的始址F和页表长度M。设页面大小L,逻辑地址A到物理地址E的变换过程如下:(逻辑地址,页号,每页长度都是十进制)
计算页号P(P=A/L)和页内偏移量W(W=A%L)
比较页号P和页表长度M,若P>=M,产生越界,否则继续
页表中页号P对应的页表项地址=页表始址F+页号P*页表项长度,取出该页表项内容b,即物理块号
计算E=b*L+W,即为物理地址
具有快表的地址变换机构
若页表全部放在内存中,存取一个数据访存2次,第一次访问页表,第二次访问数据。有点慢,于是在地址变换机构中增设一个具有并行查找能力的cache——快表(TLB),存放当前访问的若干页表项,加速地址转换。
两级页表
基本分段存储管理方式
分页是从计算机的角度考虑设计,目的是提高内存的利用率,提升计算机性能;分页通过硬件实现,对用户完全透明。分段是考虑用户和程序员而提出。
分段:按用户进程中的自然段划分逻辑空间,逻辑地址:段号S与段内偏移量W
段表:进程有自己的一张逻辑空间与内存空间映射的段表,每个段表项对应进程一段,记录该段在内存中的起始地址和长度。段表:段号+段长+本段在内存中地址
地址转换机构:设置段表寄存器,存段表始址F和段表长度M
段的共享与保护
段页式管理方式
作业的地址空间被分成若干逻辑段,每段有自己的段号,然后将段分成若干固定大小的页。
作业的逻辑地址:段号S+页号P+页内偏移量W
3.2 虚拟内存管理
虚拟内存的基本概念:
传统存储管理方式的特征:前面所述内存管理策略都是为了同时将多个进程保存在内存中,以便多道程序设计。特征:一次性(作业一次性装入内存才能运行)、驻留性(除非进程运行结束,否则作业一直驻留在内存中)
局部性原理:
时间局部性:执行过的指令、访问过的数据不久后又继续执行
空间局部性:访问某个存储单元,该存储单元附近的单元也会被访问。
虚拟存储器的定义和特征
定义:程序装入时,先将一部分装入内存,程序就可以执行。在运行过程中,所访问信息不在内存中时,由OS调入内存,继续执行程序。另一方面,将内存中暂时不使用的内容换到外存上,腾出空间。这样,系统好像提供了一个比实际内存大得多的存储器。
特征:
多次性
对换性
虚拟性
虚拟内存技术的实现
虚拟内存的实现建立在离散分配的内存管理方式的基础上。实现方式如下:
请求分页
请求分段
请求段页式
不管哪种,需要以下硬件支持:
一定容量的内外存
页表机制
中断机构
地址变换机构
请求分页管理方式
请求分页建立在基本分页系统基础上,为支持虚拟存储器增加了请求调页功能和页面置换功能。
页表机制
请求分页中的页表项:
页号 物理块号 状态位P(是否已调入内存) 访问字段A(记录访问次数) 修改位M 外存地址
缺页中断机构
当所访问的页面不在内存中时,产生一个缺页中断,请求OS调入页面。此时将缺页的进程阻塞,若内存有空闲块,则分配块,将页面装入,并修改页表中的页表项。若没有,按淘汰算法淘汰某页、
地址变换机构
页面置换算法
选择调出页面的算法叫做页面置换算法。
最佳置换算法(OPT)
被淘汰的页面是以后永不使用的页面,或是最长时间内不再被访问的页面,以便保证获得最低的缺页率。然而该算法无法实现,因为无法预知进程的若干页面哪个未来最长时间不被访问。
先进先出(FIFO)
优先淘汰最先进入内存的页面。FIFO算法会产生所分配的物理块数增大而页故障树不增反减的现象,此现象叫做Belady异常。
最近最久未使用(LRU)
选择最近最久未访问过的页面予以淘汰。该算法为每个页面设置一个访问字段,记录页面自上次被访问以来所经历的时间,淘汰页面时选择现有页面中值最大的淘汰。
时钟(CLOCK),最近未用算法(NRU)
给每帧关联一个使用位。当某页首次装入主存时,将该帧的使用位设置为1;当该页随后再被访问到时,使用位也被置1。对页替换算法,用于替换的候选帧集合视为一个循环缓冲区。当需替换一页时,顺序扫描循环缓冲区,查找使用位为0的帧,遇到使用位为1的帧重新置为0.
页面分配策略
驻留集大小:给一个进程分配的物理页框的大小就是这个进程的驻留集,策略如下:
固定分配局部置换
可变分配全局置换
可变分配局部置换
调入页面的时机
预调页策略:一次调入若干相邻的页比一次调入一页更高效
请求调页策略:
从何处调入页面
系统拥有足够的兑换区空间,可以全部从对换区调入所需页面,提高调页速度。
系统缺少足够的对换区空间。对可能修改的部分调入对换区,不变的页面直接从文件调入。
UNIX方式,与进程有关的文件放在文件夹。
抖动
刚刚被换出的页面又要换入主存,刚刚换入的页面马上又要换出主存。
工作集
某段时间间隔内,进程要访问的页面集合。可以用最近访问过的页面来确定工作集。工作集反映了进程在接下来的一段时间内很可能会频繁访问的页面集合。
操作系统(3) -- 内存管理相关推荐
- 操作系统之内存管理:4、基本地址变换机构(段氏、页式、段页式)
4.基本地址变换机构 页式 1.页式 硬件实现流程 地址变化步骤 例 问题 2.页式+快表 什么是快表? 引入快表后地址变换步骤 引入快表后的硬件实现 快表无法装入完整的慢表,达到高命中率的基础原理是 ...
- 操作系统之内存管理:2、内存管理的功能(内存分配回收、扩充、地址转化、存储保护)
2.内存管理的功能 功能1:内存空间的分配与回收 连续分配管理: 方法1:单一连续分配 方法2:固定分区分配 方法3:动态分区分配 1.什么是动态分区分配? 2.系统用什么样的数据结构记录内存使用情况 ...
- 操作系统之内存管理:3、基本分页存储管理
3.基本分页存储管理 思维导图 页框(页帧.内存块.物理块.物理页面)与页面(页) 如何确定进程的每个页面在内存中存放的位置?--------->页表 每个页表项多大?占几个字节?i号页表项的起 ...
- 操作系统内存管理_操作系统6内存管理基础
引言 花了一段时间才把之前的笔记整理了一部分,平时太忙也没啥时间.今天开始整理内存管理部分的,内存管理部分大致分为三部分笔记,第一部分就是本篇内存管理基础,第二部分是虚拟内存,第三部分高速缓存. 一个 ...
- 操作系统--03内存管理
内存管理 第三章:内存管理(存储器管理) 3.内存保护的两种办法: 3.1 覆盖与交换 3.2 连续分配管理方式 3.3 动态分区分配算法 1.首次适应算法: 2.最佳适应算法: 3.最坏适应算法: ...
- 【操作系统】内存管理
简介 内存是计算机中最重要的资源之一,通常情况下,物理内存无法容纳下所有的进程.虽然物理内存的增长现在达到了N个GB,但比物理内存增长还快的是程序,所以无论物理内存如何增长,都赶不上程序增长的速度 ...
- 操作系统:内存管理(概念)
对于计算机系统而言,操作系统充当着基石的作用,它是连接计算机底层硬件与上层应用软件的桥梁,控制其他程序的运行,并且管理系统相关资源,同时提供配套的系统软件支持.对于专业的程序员而言,掌握一定的操作系统 ...
- 408 知识点笔记——操作系统(内存管理)
文章目录 3 内存管理 3 内存管理 [虚拟存储器] 在程序装入时,可以只将程序的一部分装入内存,而将其余部分留在外存,就可以启动程序执行.采用连续分配方式时,会使相当一部分内存空间都处于暂时或 &q ...
- 【操作系统】30天自制操作系统--(8)内存管理
搞定了鼠标和键盘这两个外设的处理,终于走到了内存管理这一步.平时写上层应用的时候,就是malloc.free.memset这几件套,较少关注内存多少.内存能不能用等底层细节,但是要制作操作系统,对于内 ...
- 一步一步学linux操作系统: 21 内存管理_小内存分配与页面换出
slub 分配器工作原理 相关函数与结构体 进程创建的do_fork中会调用copy_process函数,这个函数会调用 dup_task_struct 函数 \linux-4.13.16\kerne ...
最新文章
- Linux安装卸载mysql
- C++11 lambda表达式、function类模板、bind函数适配器
- Lock锁的简单使用
- 【原码, 反码, 补码的基础概念和计算方法】
- 电脑重启桌面 计算机图标消失,电脑重启桌面图标不见了怎么办
- 本科课程【数字图像处理】实验1 - 腐蚀与膨胀
- h3c防火墙服务器ip修改,H3C防火墙常用配置命令
- 光线cms,如何增加像百度一样的智能提示
- 多种消息提醒系统的设计模式、实现方案(附功能截图+表结构)
- 自动控制理论开环与闭环思考(从飞行控制角度)
- 修复打不开计算机管理,win10系统设备管理器打不开的修复技巧
- 杯中悬佳酿,唇齿香气浓
- 用c语言编写kcl方程,求助各位大手子 求了好多次都不对 用kvl kcl求出电容c
- php spry文本域_spry菜单栏(二)
- 大前端时代的挑战与机遇(深圳场)正式开放报名
- 单枪匹马年赚一个亿?靠的是任务管理做得漂亮!
- centos6.9安装Panoply
- 海力士芯片 HY57V561620FTP-H 的内存容量问题
- Eclipse-sdcc学习(fedoar 14)
- 全国计算机等级考试超级模拟软件答案,全国计算机等级考试超级模拟软件app