操作系统学习笔记---内存管理

目录

概念

功能

内存空间的分配和回收

地址转换

逻辑地址(相对地址)

物理地址(绝对地址)

内存空间的扩充

内存共享

存储保护

方式

源程序变为可执行程序步骤

链接方式

装入方式

覆盖

交换

连续分配管理方式

单一连续分配

固定分区分配

动态分区分配

非连续分配管理方式

基本分页存储管理方式

基本概念

地址结构

基本地址变换机构

具有快表的地址变换机构

两级页表

基本分段存储管理方式

分段

段表

地址变换机构

 分段和分页的对比

不同点

相同点

段页式管理

逻辑地址结构

地址变换机构 

虚拟内存管理

概念

特征

虛拟内存技术的实现

(1)请求分页存储管理方式

页表机制

​编辑

缺页中断机构

地址变换机构

(2)请求分段存储管理方式

(3)请求段页式存储管理方式

页面置换算法

(1)最佳(OPT)置换算法

(2) 先进先出 (FIFO)页面置换算法

(3)最近最久末使用(LRU)置换算法

(4)时钟(CLOCK) 置换算法/最近未用(NRU)算法

简单CLOCK 算法实现方法

改进型CLOCK算法

页面分配

驻留集

内存分配策略

何时调页

何处掉页

抖动(颠簸)现象

工作集 

内存映射文件

特性

优点


概念

操作系统对内存的划分和动态分配就是内存管理的概念。

功能

内存空间的分配和回收

由操作系统完成对主存的分配和回收

地址转换

使逻辑地址转换为真实的物理地址

逻辑地址(相对地址)

编译后,每个目标模块都从0号单元开始编址,这称为该目标模块的相对地址(或逻辑地址)。

物理地址(绝对地址)

物理地址空问是指内存中物理单元的集合,它是地址转换的最终地址,进程在运行时执行指令和访问数据,最后都要通过物理地址从主存中存取。

内存空间的扩充

利用虛拟存储技术或自动覆盖技术,从逻辑上扩充内存

内存共享

允许多个进程访问内存的同一部分

存储保护

保证各道作业在各自的存储空间内运行,互不干扰

方式

  • 设置上下限寄存器
  • 利用重定位寄存器、界地址寄存器

源程序变为可执行程序步骤

  • 编译:由编译程序将用户源代码编译成若千目标模块。
  • 链接:由链接程序将编译后形成的一组目标模块及所需的库函数链接在一起,形成一个完整的装入模块。
  • 装入:由装入程序将装入模块装入内存运行。

链接方式

  • 静态链接:装入前链接成一个完整装入模块
  • 装入时动态链接:运行前边装入边链接
  • 运行时动态链接:运行时需要目标模块才装入并链接

装入方式

  • 绝对装入:编译时产生绝对地址(单道程序阶段,无OS)
  • 可重定位装入:装入时将逻辑地址转换为物理地址(早期多道批处理阶段)
  • 动态运行时装入/动态重定位:运行时将逻辑地址转换为物理地址,需设置重定位奇存器(现代OS)

覆盖

基本思想:将程序分为多个段(多个模块)。常用的段常驻内存,不常用的段在需要时调入内存。

具体操作:把内存划分为一个固定区和若干个覆盖区,固定区存放用户程序经常活跃的部分,调入后就不再调出(除非运行结束);將即将访问的段放在覆盖区,在需要调用前,系统将其调入覆盖区,替换原有的段。必须由程序员声明覆盖结构,操作系统完成自动覆盖。

适用情况:同一个程序/进程内

缺点:对用户不透明,增加了用户编程负担,覆盖技术只用于早期的操作系统中

交换

基本思想:把处于等待状态的进程或者被CPU剥夺运行权限的进程从内存移出到外存,这一过程称为换出;把准备好竞争CPU的进程从外存移到内存,这一过程称为换入。

适用情况:不同进程/作业间

ps:一般将阻塞、优先级低的进程先换出到磁盘的对换区

连续分配管理方式

单一连续分配

内存被分为:系统区和用户区。

  • 系统区:通常位于内存的低地址部分,用于存放操作系统系统区
  • 用户区:用于存放用户进程相关数据。

特点:内存中用户区空间只能有一道用户程序

优点:实现简单;无外部碎片(分区外部不存在空间浪费);可以采用覆盖技术扩充内存;不一定需要采取内存保护(例:早期的PC 操作系统MS- DOS)。

缺点:只能用于单用户、单任务的操作系统中有内部碎片(分区内部不存在空间浪费)存储器利用率极低

固定分区分配

固定分区分配是最简单的一种多道程序存储管理方式,它将用户内存空问划分为若干个固定大小的区域,每个分区只装入一道作业

两种方法:

  • 分区大小相等:缺乏灵活性,只适合用一台计算机控制多个相同对象的场合。
  • 分区大小不等:增加了灵活性,可以满足不同大小的进程需求。

为便于内存分配,通常將分区按大小排队,建立一张分区说明表。

优点:实现简单,无外部碎片

缺点:当用户程序太大时,可能所有的分区都不能满足需求,此时不得不采用覆盖技术来解决,降低性能;会产生内部碎片,内部利用率低

动态分区分配

在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。

动态分区分配算法

  1. 首次适应 (First Fit) 算法。空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
  2. 最佳适应(Best Fit) 算法。空闲分区按容量递增的方式形成分区链,找到第一个能满足要求的空闲分区。
  3. 最坏适应(Worst Fir) 算法。又称最大适应 (Largest Fit) 算法,空闲分区以容量递减的次序链接,找到第一个能满足要求的空闲分区,即挑选出最大的分区。
  4. 邻近适应 (Next Fit) 算法。又称循环首次适应算法,由首次适应算法演变而成。不同之处是,分配内存时从上次查找结束的位置开始继续查找。

特点:无内部碎片,有外部碎片

非连续分配管理方式

基本分页存储管理方式

基本概念

  • /页面进程中的块
  • 页框/页帧/内存块/物理页面/物理块:内存中的块
  • 页框号/页帧号/内存块号/物理块号/物理页号:每个页框有一个编号,从0开始
  • 页表:为了便于在内存中找到进程的每个页面所对应的物理块,系统为每个进程建立一张页表。由页表项组成的,页表项由页号和物理内存中的块号组成。

ps:页号不占空间。

地址结构

每页大小为4KB;地址空间最多允许2的20次方页

页号=逻辑地址/页面长度(取除法的整数部分)

页内偏移量=逻辑地址 % 页面长度(取除法的余数部分)

基本地址变换机构

地址变换机构的任务是将逻辑地址转换为内存中的物理地址。地址变换是借助于页表实现的。

设页面长度为L

  1. 计算页号P(P=A/L)、页内偏移量比(W=A%L)
  2. 比较页号P和页表长度M,若P>M,则产生越界中断,否则继续执行。
  3. 页表中页号P对应的页表项地址=页表始址F+页号P*页表项长度,取出该页表项肉容b,即为物理块号。页表长度的值是指一共有多少页,页表项长度是指页地址占多大的存储空间。
  4. 计算E=b*L+W,用得到的物理地址区去访问内存。

具有快表的地址变换机构

快表,又称联想奇存器(TLB),是一种访问速度比内存快很多的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程。快表命中,只需一次访存快表末命中,需要两次访存。

两级页表

二级页表实际上是在原有页表结构上再加上一层页表

基本分段存储管理方式

分段

其逻辑地址由段号S与段内偏移量W两部分组成。

  • 段号的位数决定了每个进程最多可以分几个段
  • 段内地址拉数决定了每个段的最大长度是多少

段表

每个段表项对应进程的一段,段表项记录该段在内存中的始址和长度。

地址变换机构

在系统中设置了段表寄存器,用于存放段表始址下和段表长度川。

从逻辑地址A到物理地址E之间的地址变换过程如下

  

  1. 从逻辑地址A 中取出前几位为段号 S,后几位为段内偏移量W
  2. 比较段号S和段表长度M,若S>M,则产生越界中断,否则继续执行。
  3. 段表中段号S对应的段表项地址=段表始址下+ 段号S*段表项长度,取出该段表项的前儿位得到段长C。若段内偏移量 ≥C,则产生越界中断,否则继续执行。
  4. 取出段表项中该段的始址b,计算E=b+W,用得到的物理地址五 去访问内存。

 分段和分页的对比

不同点

  1. 分页对用户不可见,分段对用户可见
  2. 分页的地址空间是一维的,分段的地址空间是二维的

相同点

访问一个逻辑地址都需要两次访存

ps:若分页引入快表则仅需一次访存

段页式管理

将分页存储管理方式和分段存储管理方式

逻辑地址结构

地址变换机构 

 

ps:每个进程一张段表,每个段一张页表​​​​​​​

虚拟内存管理

概念

虚拟内存:在操作系统的管理下,在用户看来似乎由一个比实际内存大得多得内存

特征

  1. 多次性。多次性是指无须在作业运行时一次性地全部装入内存,而允许被分成多次调入内存运行。
  2. 对换性。对换性是指无须在作业运行时一直常驻内存,而允许在作业的运行过程中,进行换进和换出。
  3. 虚拟性。虚拟性是指从逻辑上扩充内存的容量,使用户所看到的内存容量远大于实际的内存容量。

虛拟内存技术的实现

(1)请求分页存储管理方式

请求分页存储管理建立在基本分页存储管理基础之上,为了支持虛拟存储器功能而增加了请求调页功能和页面置换功能。请求分页是目前最常用的一种实现虛拟存储器的方法。

页表机制

请求分页中的页表项

状态位P。用于指示该页是否已调入内存,供程序访问时参考。

访问字段A。用于记录本页在一段时问内被访问的次数,或记录本页最近已有多长时间末被访间,供置换算法换出页面时参考。

修改位M。标识该页在调入内存后是否被修改过。

外存地址。用于指出该页在外存上的地址,通常是物理块号,供调入该页时参考。

缺页中断机构

在请求分页系统中,每当要访问的页面不在内存时,便产生一个缺页中断(内中断),然后由操作系统的缺页中断处理程序处理中断。此时缺页的进程阻塞,放入阻塞队列,调页完成后再将其唤醒,放回就绪队列。

  • 若内存中有空闲块,则为进程分配一个空闲块,将所缺页面装入该块,并修改页表中相应的页表项。
  • 若内存中无空闲块,则由页面置换算法选择一个页面淘汰,若该页面在内存期间被修改过,则要将其写回外存。未修改过的页面不用写回外存。
地址变换机构

(2)请求分段存储管理方式

(3)请求段页式存储管理方式

页面置换算法

(1)最佳(OPT)置换算法

算法思想:选择以后永不使用的页面淘汰或者在最长时间内不再被访问的页面,以保证获得最低的缺页率

(2) 先进先出 (FIFO)页面置换算法

算法思想:优先淘汰最早进入内存的页面,即在内存中驻留时间最久的页面。

Belady 异常:当为进程分配的物理块数增大时,缺页次数不减反增的异常现象。

只有FIFO 算法会产生Belady 异常。

(3)最近最久末使用(LRU)置换算法

算法思想:选择最近最久时间末访问过的页面予以淘汰。

(4)时钟(CLOCK) 置换算法/最近未用(NRU)算法

算法要循环扫描缓冲区,像时钟的指针一样转动

简单CLOCK 算法实现方法
  1. 第一轮将访问过的标志位置为0;
  2. 第二轮将标志位为0的页面置换出
改进型CLOCK算法

利用(访问位,修改位)的形式表示各页面状态。

  1. 第一轮:从当前位置开始扫描到第一个(0,0)的帧用于替换。本轮扫描不修改任何标志位
  2. 第二轮:若第一轮扫描失败,则重新扫描,查找第一个(0,1)的帧用于替换。本轮将所有扫描过的帧访问位设为0
  3. 第三轮:若第二轮扫描失败,则重新扫描,查找第一个(0,0)的帧用于替换。本轮扫描不修改任何标志位
  4. 第四轮:若第三轮扫描失败,则重新扫描,查找第一个(0,1)的帧用于替换

详细过程讲解请观看“王道考研-操作系统”:3.2_3_页面置换算法_哔哩哔哩_bilibili

页面分配

驻留集

指请求分页存储管理中给进程分配的物理块的集合。

内存分配策略
  • 固定分配:操作系统为每个进程分配一组固定数目的物理块,在进程运行期问不再改变。即驻留集大小不变
  • 可变分配:先为每个进程分配一定数目的物理块,在进程运行期问,可根据情况做适当的增加或减少。即驻留集大小可变
  • 局部置换:发生缺页时只能选进程自己的物理块进行置换。
  • 全局置换:可以将操作系统保留的空闲物理块分配给缺页进程,也可以将别的进程持有的物理块置换到外存,再分配给缺页进程。
  • 固定分配局部置换:进程运行前就分配一定数量物理块,缺页时只能换出进程自己的某一页
  • 可变分配局部置换:频繁缺页的进程,多分配一些物理块;缺页率很低的进程,回收一些物理块。直到缺页率合适
  • 可变分配全局置换:只要缺页就分配新物理块,可能来自空闲物理块,也可能需换出别的进程页面
何时调页
  • 预调页策略:一般用于进程运行前
  • 请求调页策略:进程运行时,发现缺页再调页
何处掉页
  • 对换区——采用连续存储方式,速度更快;文件区——采用离散存储方式,速度更慢。
  • 对换区足够大:运行将数据从文件区复制到对换区,之后所有的页面调入、调出都是在内存与对换区之间进行
  • 对换区不够大:不会修改的数据每次都从文件区调入;会修改的数据调出到对换区,需要时再从对换区调入
  • UNIX方式:第一次使用的页面都从文件区调入;调出的页面都写回对换区,再次使用时从对换区调入
抖动(颠簸)现象

页面频繁换入换出的现象。主要原因是分配给进程的物理块不够

工作集 

在某段时间间隔里,进程实际访问页面的集合。驻留集大小一般不能小于工作集大小

内存映射文件
特性
  • 进程可使用系统调用,请求操作系统将文件映射到进程的虚拟地址空间
  • 以访问内存的方式读写文件
  • 进程关闭文件时,操作系统负责将文件数据写回磁盘,并解除内存映射
  • 多个进程可以映射同一个文件,方便共享
优点
  • 程序员编程更简单,已建立映射的文件,只需按访问内存的方式读写即可
  • 文件数据的读入/写出完全由操作系统负责,I/O效率可以由操作系统负责优化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/233300.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot3-集成mybatis

1、pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.…

接口测试-Jmeter使用

一、线程组 1.1 作用 线程组就是控制Jmeter用于执行测试的一组用户 1.2 位置 右键点击‘测试计划’-->添加-->线程(用户)-->线程组 1.3 特点 模拟多人操作线程组可以添加多个&#xff0c;多个线程组可以并行或者串行取样器(请求)和逻辑控制器必须依赖线程组才能…

Linux:进程优先级与命令行参数

目录 1.进程优先级 1.1 基本概念 1.2 查看系统进程 1.3 修改进程优先级的命令 2.进程间切换 2.1 相关概念 2.2 Linux2.6内核进程调度队列&#xff08;了解即可&#xff09; 3.命令行参数 1.进程优先级 1.1 基本概念 cpu资源分配的先后顺序&#xff0c;就是指进程的优…

【vtkWidgetRepresentation】第八期 vtkImplicitCylinderRepresentation

很高兴在雪易的CSDN遇见你 前言 本文分享vtkImplicitCylinderRepresentation&#xff0c;主要从源码解析、和实际应用方面展开&#xff0c;希望对各位小伙伴有所帮助&#xff01; 感谢各位小伙伴的点赞关注&#xff0c;小易会继续努力分享&#xff0c;一起进步&#xff01; …

软件设计不是CRUD(7):低耦合模块设计实战——组织机构模块(中)

接上文《软件设计不是CRUD&#xff08;6&#xff09;&#xff1a;低耦合模块设计实战——组织机构模块&#xff08;上&#xff09;》 组织机构功能是应用系统中常见的业务功能之一&#xff0c;但是不同性质、不同行业背景、不同使用场景的应用系统对组织机构功能的要求可能完全…

Sprint Boot 3.0

1. 简介 视频教程特点&#xff1a; Spring Cloud带动了Spring BootSpring Boot成就了Spring Cloud

“创未来,享非凡“ 昇腾AI开发者创享日广州站圆满成功

在羊城广州的科技新风潮中&#xff0c;一个以创新为核心、以智能为驱动的盛会在这座南国明珠城市如火如荼地展开。这不仅是一场技术的盛宴&#xff0c;更是人工智能产业发展动力的一次集结。 12月9日&#xff0c;在广州市工业和信息化局的倡导下&#xff0c;一场主题为“创未来…

大数据Doris(三十五):Unique模型(唯一主键)介绍

文章目录 Unique模型(唯一主键)介绍 一、创建doris表 二、插入数据

为 Compose MultiPlatform 添加 C/C++ 支持(2):在 jvm 平台使用 jni 实现桌面端与 C/C++ 互操作

前言 在上篇文章中我们已经介绍了实现 Compose MultiPlatform 对 C/C 互操作的基本思路。 并且先介绍了在 kotlin native 平台使用 cinterop 实现与 C/C 的互操作。 今天这篇文章将补充在 jvm 平台使用 jni。 在 Compose MultiPlatform 中&#xff0c;使用 jvm 平台的是 An…

京东数据运营(京东API接口):10月投影仪店铺数据分析

鲸参谋监测的京东平台10月份投影仪市场销售数据已出炉&#xff01; 10月份&#xff0c;环同比来看&#xff0c;投影仪市场销售均上涨。鲸参谋数据显示&#xff0c;今年10月&#xff0c;京东平台投影仪的销量为16万&#xff0c;环比增长约22%&#xff0c;同比增长约8%&#xff1…

免费分享一套Springboot+Vue前后端分离的在线商城系统,挺实用的

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringbootVue前后端分离的在线商城系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringbootVue在线商城系统 毕业设计 Java毕业设计_哔哩哔哩_bilibili【免费】springbootvue在线商城系统 毕业设计 …

六何分析法分析uniApp

一、什么是 uniApp&#xff08;What&#xff09; uni-app 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;开发者编写一套代码&#xff0c;可发布iOS、Android、H5、以及各种小程序( 微信/支付宝/百度/头条/00/钉钉/淘宝)、快应用等多个平台。uni-app 在手&#xff0c;…

【蜗牛到家】获南明电子信息产业引导基金战略投资

智慧社区生活服务平台「蜗牛到家」已于近期获得贵阳南明电子信息产业引导基金、华科明德战略投资。 贵阳南明电子信息产业引导基金属于政府旗下产业引导基金&#xff0c;贵州华科明德基金管理有限公司擅长电子信息产业、高科技产业、城市建设及民生保障领域的投资&#xff0c;双…

TCP的滑动窗口机制

网络的错误检测和补偿机制非常复杂。 一、等待超时时间&#xff08;返回ACK号的等待时间&#xff09; 当网络繁忙时会发生拥塞&#xff0c;ACK号的返回变慢&#xff0c;较短的等待时间会导致频繁的数据重传&#xff0c;导致本就拥塞的网络雪上加霜。如果等待时间过长&#xf…

如何一个例子玩明白GIT

一个例子玩明白GIT GIT的介绍和教程五花八门&#xff0c;但实际需要用的就是建仓、推送、拉取等操作&#xff0c;这儿咱可以通过一个例子熟悉这些操作&#xff0c;一次性搞定GIT的使用方法学习。下面这个例子的内容是内容是建立初始版本库&#xff0c;然后将数据复制到 "远…

【Linux】第二十七站:内存管理与文件页缓冲区

文章目录 一、物理内存和磁盘交换数据的最小单位二、操作系统如何管理内存三、文件的页缓冲区四、基数树or基数&#xff08;字典树&#xff09;五、总结 一、物理内存和磁盘交换数据的最小单位 我们知道系统当中除了进程管理、文件管理以外&#xff0c;还有内存管理 内存的本质…

【数据结构】面试OJ题———栈|队列|互相实现|循环队列|括号匹配

目录 1. 有效的括号 思路&#xff1a; 2.用队列实现栈 思路&#xff1a; 3.用栈实现队列 思路&#xff1a; 4.设计循环队列 思路&#xff1a; 1. 有效的括号 20. 有效的括号 - 力扣&#xff08;LeetCode&#xff09; 给定一个只包括 (&#xff0c;)&#xff0c;{&…

Gazebo 跟踪8字形和U形轨迹(1) — 错误处理

Gazebo 跟踪8字形和U形轨迹(1) — 错误处理 整个过程还是比较曲折的&#xff0c;主要都是一些细小的问题&#xff0c;跑了很多遍模型才发现 参考轨迹生成问题不大&#xff0c;主要是参考横摆角和参考曲率部分有问题 atan和atan2 首先看下两者的区别 atan 函数&#xff1a;…

Electron[4] Electron最简单的打包实践

1 背景 前面三篇已经完成通过Electron搭建的最简单的HelloWorld应用了&#xff0c;虽然这个应用还没添加任何实质的功能&#xff0c;但是用来作为打包的案例&#xff0c;足矣。下面再分享下通过Electron-forge来将应用打包成安装包。 2 依赖 在Electron[2] Electron使用准备…

CF1898C Colorful Grid(构造)

题目链接 题目大意 n 行 m 列 的一个矩阵&#xff0c;每行有m - 1条边&#xff0c;每列有 n - 1 条边。 问一共走 k 条边&#xff0c;能不能从 &#xff08;1&#xff0c; 1&#xff09;&#xff0c;走到&#xff08;n&#xff0c; m&#xff09;&#xff0c;要求该路径上&am…