0202-2-存储器管理

news2024/10/7 14:23:32

第四章:存储器管理

在这里插入图片描述

存储器的层次结构

多层结构的存储系统

  • 存储器的多层结构
    • CPU寄存器
    • 主存
    • 辅存
  • 可执行存储器
    • 寄存器和主存的总称
    • 访问速度快,进程可以在很少的时钟周期内用一条load或store指令完成存取。

主存储器与寄存器

高速缓存和磁盘缓存

程序的装入和链接

步骤

  • 编译
    • 源程序 ->目标模块(Object modules)--------Compiler
      • 由编译程序对用户源程序进行编译,形成若干个目标模块
  • 链接
    • 一组目标模块 ->装入模块 (Load Module)----------Linker
      • 由链接程序将编译后形成的一组目标模板以及它们所需要的库函数链接在一起,形成一个完整的装入模块
  • 装入
    • 装入模块 ->内存 --------Loader
      • 由装入程序将装入模块装入内存

程序的装入

  • 绝对装入方式
    • 在编译时,如果知道程序将驻留在内存中指定的位置。编译程序将产生绝对地址的目标代码。
  • 可重定位装入方式
    • 在可执行文件中,列出各个需要重定位的地址单元和相对地址值。当用户程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换(一般在装入内存时由软件完成)。
    • 优点:不需硬件支持,可以装入有限多道程序。
    • 缺点:一个程序通常需要占用连续的内存空间,程序装入内存后不能移动。不易实现共享。
  • 动态运行时的装入方式
    • 动态运行时的装入程序在把装入模块装入内存后,并不立即把装入模块中的逻辑地址转换为物理地址,而是把这种地址转换推迟到程序真正要执行时才进行
    • 优点:
      • OS可以将一个程序分散存放于不连续的内存空间,可以移动程序,有利用实现共享。
      • 能够支持程序执行中产生的地址引用,如指针变量(而不仅是生成可执行文件时的地址引用)。
    • 缺点:需要硬件支持,OS实现较复杂。
    • 它是虚拟存储的基础。

程序的链接

  • 静态链接方式(lib)
  • 装入时动态链接
  • 运行时动态链接(dll)

连续分配存储管理方式

连续分配

  • 单一连续分配(DOS)
  • 固定分区分配(浪费很多空间)
  • 动态分区分配

地址映射和存储保护措施

  • 基址寄存器:程序的最小物理地址
  • 界限寄存器:程序的逻辑地址范围
  • 物理地址 = 逻辑地址 + 基址

内碎片:占用分区之内未被利用的空间

外碎片:占用分区之间难以利用的空闲分区(通常是小空闲分区)

把内存划分为若干个固定大小的连续分区。固定式分区又称为静态分区。

  • 分区大小相等:只适合于多个相同程序的并发执行(处理多个类型相同的对象)。
  • 分区大小不等:多个小分区、适量的中等分区、少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。
  • 优点:无外碎片、易实现、开销小。
  • 缺点:
    • 存在内碎片,造成浪费
    • 分区总数固定,限制了并发执行的程序数目。
    • 通用Os很少采用,部分控制系统中采用

动态创建分区:指在作业装入内存时,从可用的内存中划出一块连续的区域分配给它,且分区大小正好等于该作业的大小。可变式分区中分区的大小和分区的个数都是可变的,而且是根据作业的大小和多少动态地划分。

  • 基于顺序搜索的动态分区分配算法
    • 首次适应算法(first fit,FF)
      • 顺序找,找到一个满足的就分配,但是可能存在浪费
      • 这种方法目的在于减少查找时间。
      • 空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序
    • 循环首次适应算法(next fit,NF)
      • 相对上面那种,不是顺序,类似哈希算法中左右交叉排序
      • 空闲分区分布得更均匀,查找开销小
      • 从上次找到的空闲区的下一个空闲区开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。
    • 最佳适应算法(best fit,BF)
      • 找到最合适的,但是大区域的访问次数减少
      • 这种方法能使外碎片尽量小。
      • 空闲分区表(空闲区链)中的空闲分区要按大小从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。
    • 最坏适应算法(worst fit,WF)
      • 相对于最好而言,找最大的区域下手,导致最大的区域可能很少,也造成许多碎片
      • 空闲分区按大小由大到小排序
  • 基于索引搜索的动态分区分配算法
    • 快速适应算法(quick fit)
    • 伙伴系统(buddy system)
    • 哈希算法
  • 动态可重定位分区分配
    • 紧凑
    • 动态重定位
      • 动态运行时装入,地址转化在指令执行时进行,需获得硬件地址变换机制的支持
      • 内存地址=相对地址+起始地址
    • 动态重定位分区分配算法
      • 1、在某个分区被释放后立即进行紧凑,系统总是只有一个连续的分区而无碎片,此法很花费机时。
      • 2、当“请求分配模块”找不到足够大的自由分区分给用户时再进行紧凑,这样紧缩的次数比上种方法少得多,但管理复杂。采用此法的动态重定位分区分配算法框图如下:
  • 优点:没有内碎片。
  • 缺点:外碎片。

对换(了解)

系统把所有的作业放在外存,每次只调用一个作业进入内存运行,当时间片用完时,将它调至外存后备队列上等待,在从后备队列调入另一个作业进入内存运行。

基本分页存储管理方式

分页存储管理的基本方式

  • 页面
    • 将一个进程的逻辑地址空间分成若干个大小相等的片
  • 页框(frame)
    • 内存空间分成与页面相同大小的存储块
  • 由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片”
  • 地址结构
    • 页号P+位移量W(0-31)
  • 页表
    • 在分页系统中,允许将进程的各个页离散地存储在内存在内存的任一物理块中,为保证进程仍然能够正确地运行,即能在内存中找到每一个页面所对应的物理块,系统又为每个进程建立了一张页面映像表,简称页表
    • 页表的作用是实现从页面号到物理块号的地址映射

地址变换机构

  • 基本的地址变换机构
    • 要访问两次内存
    • 页表大都驻留在内存中
    • 为了实现地址变换功能,在系统中设置页表寄存器(PTR),用来存放页表的始址和页表的长度。
    • 在进程未执行时,每个进程对应的页表的始址和长度存放在进程的PCB中,当该进程被调度时,就将它们装入页表寄存器。
  • 具有快表的地址变换机构
    • 提高了效率,此处会有计算题
    • 如果页表存放在内存中,则每次访问内存时,都要先访问内存中的页表,然后根据所形成的物理地址再访问内存。这样CPU存一个数据必须访问两次内存,从而使计算机的处理速度降低了1/2。
    • 为了提高地址变换的速度,在地址变换机构中增设了一个具有并行查询功能的特殊的高速缓冲存储器,称为“联想存储器”或“快表”,用以存放当前访问的那些页表项。
    • 地址变换过程为:
      • 1、CPU给出有效地址
      • 2、地址变换机构自动地将页号送入高速缓存,确定所需要的页是否在快表中。
      • 3、若是,则直接读出该页所对应的物理块号,送入物理地址寄存器;
      • 4、若快表中未找到对应的页表项,则需再访问内存中的页表
      • 5、找到后,把从页表中读出的页表项存入快表中的一个寄存器单元中,以取代一个旧的页表项。

两级和多级页表

  • 主要是有的时候页表太多了,要化简
  • 格式:外层页号P1+外层页内地址P2+页内地址d
  • 基本方法:将页表进行分页,每个页面的大小与内存物理块的大小相同,并为它们进行编号,可以离散地将各个页面分别存放在不同的物理块中。

反置页表

  • 反置页表为每一个物理块(页框)设置一个页表项,并按物理块排序,其内容则是页号和其所属进程的标识。

优点:

  • 没有外碎片,每个内碎片不超过页大小。
  • 一个程序不必连续存放。
  • 便于改变程序占用空间的大小。即随着程序运行而动态生成的数据增多,地址空间可相应增长。

缺点:程序全部装入内存。

分段存储管理方式

引入

  • 方便编程
  • 信息共享
  • 动态增长
  • 动态链接

在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段是一组完整的逻辑信息,每个段都有自己的名字,都是从零开始编址的一段连续的地址空间,各段长度是不等的。

内存空间被动态的划分为若干个长度不相同的区域,称为物理段,每个物理段由起始地址和长度确定

分段系统的基本原理

  • 分段
    • 格式:段号+段内地址
  • 段表
    • 段表实现了从逻辑段到物理内存区的映射。
  • 地址变换机构

和分页的区别

  • 页是信息的物理单位
  • 页的大小固定且由系统固定
  • 分页的用户程序地址空间是一维的
  • 通常段比页大,因而段表比页表短,可以缩短查找时间,提高访问速度。
  • 分页是系统管理的需要,分段是用户应用的需要。一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。

信息共享

  • 这是分段最重要的优点

段页式存储管理方式

  • 基本原理
    • 格式:段号(S)+段内页号(P)+页内地址(W)
  • 地址变换过程
    • 需要三次访问过程
  • 在段页式系统中,为了获得一条指令或数据,需三次访问内存:第一次访问内存中的段表,从中取得页表始址;第二次访问内存中的页表,从中取出该页所在的物理块号,并将该块号与页内地址一起形成指令或数据的物理地址;第三次访问才是真正根据所得的物理地址取出指令或数据。

XMind: ZEN - Trial Version

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《金融时报》:直面“雪球”风波 究竟影响几何?

“他们给我推荐的时候说是只要市场不大跌,我就能按照年化20%获得收益,当时我看大盘走势,也认为跌那么多的概率不大。”李先生告诉《金融时报》记者,他当初被银行客户经理推荐“雪球”产品并头脑一热买了的时候,以为按照…

springboot集成 mysql快速入门demo

一、mysql环境搭建 采用docker-compose搭建,配置如下: docker-compose.yml version: 3 services:mysql:image: registry.cn-hangzhou.aliyuncs.com/zhengqing/mysql:5.7 # 原镜像mysql:5.7container_name: mysql_3306 …

C++入坑基础知识点

当学习了C语言之后,很多的小伙伴都想进一步学习C,但两者有相当一部分的内容都是重叠的,不知道该从哪些方面开始入门C,这篇文章罗列了从C到C必学的入门知识,学完就算是踏入C的大门了。 1. 命名空间 写C的时候&#xff…

LeetCode 热题 100 | 链表(上)

目录 1 基础知识 1.1 空指针 1.2 结构体 1.3 指针访问 1.4 三目运算符 2 160. 相交链表 3 206. 反转链表 4 234. 回文链表 菜鸟做题第三周,语言是 C 1 基础知识 1.1 空指针 使用 nullptr 来判断是否为空指针: if (headA nullptr) …

鸿蒙开发有必要学吗?看完这篇再决定吧

在科技的潮流中,每一次新操作系统的诞生都是对旧秩序的挑战与新机遇的孕育。鸿蒙操作系统的出现,无疑是近年来科技界最引人注目的事件之一。自华为于2019年正式推出鸿蒙系统以来,这一我们自主研发的操作系统不仅在国内引起巨大反响&#xff0…

常见的6种软件测试用例设计方法

常见的软件测试用例设计方法,个人认为主要是下面这6种: 流程图法(也叫场景法)等价类划分法边界值分析判定表正交法错误推测法 这6种常见方法中,我分别按照定义、应用场景、使用步骤、案例讲解这4个部分进行讲解。 所…

MySQL查询数据(十)

MySQL查询数据(十) 一、SELECT基本查询 1.1 SELECT语句的功能 SELECT 语句从数据库中返回信息。使用一个 SELECT 语句,可以做下面的事: **列选择:**能够使用 SELECT 语句的列选择功能选择表中的列,这些…

不一样的味觉体验:精酿啤酒与烤肉的绝妙搭配

在繁华的都市生活中,人们总是在寻找那份与众不同的味觉享受。当夏日的微风轻轻拂过,你是否想过,与三五好友围坐在一起,拿着Fendi Club啤酒与烤肉的绝妙搭配,畅谈生活点滴,感受那份惬意与自在? F…

2401Idea用GradleKotlin编译Java控制台中文出乱码解决

解决方法 解决方法1 在项目 build.gradle.kts 文件中加入 tasks.withType<JavaCompile> {options.encoding "UTF-8" } tasks.withType<JavaExec> {systemProperty("file.encoding", "utf-8") }经测试, 只加 tasks.withType<…

基于单片机的智能燃气灶控制系统设计

摘要&#xff1a;针对传统燃气灶存在不能防干烧、不能进行温度检测、不能进行火力自动调节等问题&#xff0c;设计了一种基于单片机控制的智能燃气灶&#xff0c;它通过单片机进行控制&#xff0c;由开关模块、测温模块、语音播报模块、火力控制模块和防空烧模块五个模块组成&a…

Lazysysadmin

信息收集 # nmap -sn 192.168.1.0/24 -oN live.port Starting Nmap 7.94 ( https://nmap.org ) at 2024-01-30 21:10 CST Nmap scan report for 192.168.1.1 (192.168.1.1) Host is up (0.00075s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nma…

Flutter解析后台发来的jwt字段数据,了解jwt是否过期

前言 了解JWT是什么可以看这一篇博文 JWT&#xff08;JSON Web Token&#xff09;详解以及在go-zero中配置的方法-CSDN博客 流程 采用jwt_decoder库 添加至pubspec.yaml jwt_decoder: ^2.0.1 解析字段 查看是否过期 获取过期时间和token颁发的年龄

面试八股文(2)

文章目录 1.ArrayList和LinkedList区别2.HashMap和HashTable区别3.线程的创建方式4.Java中异常处理5.Java序列化中某些字段不想进行序列化&#xff1f;6.Java序列化7.静态方法和实例方法8.List、Set、Map三者区别9.ArrayList和Vector区别10.HashMap和HashSet区别 1.ArrayList和…

【C++】 C++入门— 基于范围的 for 循环

C 基于范围的for循环1 使用样例2 使用条件3 完善措施 Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;下一篇文章见&#xff01;&#xff01;&#xff01; 基于范围的for循环 1 使用样例 使用for循环遍历数组&#xff0c;我们通常这么写&#xff1a; …

博云科技与中科可控全面合作,探索前沿金融科技新机遇

2024年1月26日&#xff0c;博云科技与中科可控在昆山高新区成功举办合作签约仪式。昆山市委常委、昆山高新区党工委书记孙道寻、中科可控董事长聂华、博云科技董事长花磊等领导出席了本次签约仪式。 中科可控将利用其在先进计算和智造领域的优势&#xff0c;为博云科技提供有关…

el-table添加(取消,确认)

点击添加输入添加项&#xff0c;但是不想添加了&#xff0c;就点击取消&#xff0c;但是在打开之前输入的数据还在&#xff0c;在点击取消的时候数据清空 页面 数据没有清空的时候&#xff0c;点击取消之后&#xff0c;在打开数据还在 数据清空之后&#xff0c;在打开数据是没…

寒假作业2月2号

第一章 命名空间 一&#xff0e;选择题 1、编写C程序一般需经过的几个步骤依次是&#xff08;C &#xff09; A. 编辑、调试、编译、连接 B. 编辑、编译、连接、运行 C. 编译、调试、编辑、连接 D. 编译、编辑、连接、运行 2、所谓数据封装就是将一组数据和与这组数据有关…

为期 90 天的免费数据科学认证(KNIME)

从 2 月 1 日开始&#xff0c;KNIME 官方将免费提供 KNIME 认证 90 天。 无论您是刚刚迈入数据科学领域、已经掌握了一些技术&#xff0c;还是正在构建预测模型&#xff0c;都可以参加为期 90 天的 KNIME 认证挑战赛&#xff0c;完成尽可能多的认证并获得数据科学技能免费认证。…

嵌入式系统学习(一)

嵌入式现状&#xff08;UP经历&#xff09;&#xff1a; 大厂的招聘要求&#xff1a; 技术栈总结&#xff1a; 产品拆解网站&#xff1a; 52audio 方案查询网站iotku,我爱方案网&#xff0c; 主要元器件类型&#xff1a;

二分查找------蓝桥杯

题目描述&#xff1a; 请实现无重复数字的升序数组的二分查找 给定一个元素升序的、无重复数字的整型数组 nums 和一个目标值 target&#xff0c;写一个函数搜索 nums 中的target&#xff0c;如果目标值存在返回下标 (下标从0 开始)&#xff0c;否则返回-1 数据范围: 0 < l…