认识存储管理

news2024/12/16 19:30:19

存储器是计算机系统中最重要的资源之一。因为任何程序和数据以及各种控制用的数据结构都必须占有一定的存储空间,因此,存储管理直接影响系统性能。
存储器由内存和外存组成。内存是由系统实际提供的存储单元(常指字节)组成的一个连续地址空间,处理器可直接存取。外存(辅存)是指软盘、硬盘、光盘和磁带等一些外部存储部件,常用来存放暂不执行的程序和数据。处理器不能直接访问外存,需通过启动 I/O(Input/Output,输入/输出)设备才能进行内存、外存交换,其访问速度慢,但价格便宜,常用作内存的后援设备。
内存大小由系统硬件决定,存储容量受到实际存储单元的限制。虚拟存储器(简称虚存)不考虑实际内存的大小和数据存取的实际地址,只考虑相互有关的数据之间的相对位置,其容量由计算机地址的位数决定。
系统中内存的使用一般分成两部分,一部分为系统空间,存放操作系统本身及相关的系统程序;另一部分为用户空间,存放用户的程序和数据。
存储管理主要是指对内存储器的管理,负责对内存的分配和回收、内存的保护和内存的扩充。存储管理的目的是尽量提高内存的使用效率。存储管理的机制经历了多次变迁,由以前的单一连续区管理到分区存储管理再发展为段页式管理。目前前两种技术已逐步被淘汰,下面我们将详细解读段页式存储管理。
1.页式存储管理
分页的基本思想是把程序的逻辑空间和内存的物理空间按照同样的大小划分成若干页面,并以页面为单位进行分配。在页式存储管理中,系统中虚地址是一个有序对(页号,位移)。系统为每一个进程建立一个页表,其内容包括进程的逻辑页号与物理页号的对应关系、状态等。
页式系统的动态地址转换是这样进行的:当进程运行时,其页表的首地址已在系统的动态地址转换机构中的基本地址寄存器中。执行的指令访问虚存地址(p,d)时,首先根据页号 p 查页表,由状态可知,这个页是否已经调入内存。若已调入内存,则得到该页的内存位置 p’,然后,与页内相对位移 d 组合,得到物理地址 r。如果该页尚未调入内存,则产生缺页中断,以装入所需的页,如图 2-5 所示。
逻辑地址,或虚地址 (页号||页内地址)
物理地址 (页帧号(物理块号)||页内地址)
逻辑地址<-转化->物理地址: 页内地址相同,页号和块号的对应关系可查询页表
在这里插入图片描述
页式虚拟存储管理是在页式存储管理的基础上实现虚拟存储器的。首先把作业信息作为副本存放在磁盘上,作业执行时,把作业信息的部分页面装入内存储器,作业执行时若所访问的页面已在内存中,则按页式存储管理方式进行地址转换,得到欲访问的内存绝对地址,若欲访问的页面不在内存中,则产生一个“缺页中断”,由操作系统把当前所需的页面装入内存储器中。
为此,在装入作业时,就应在该作业的页表中指出哪些页已在内存储器中,哪些页还没有装入内存。可用一个标志位指示对应页是否在内存储器,可假设标志位为 1 表示该页在内存,而标志位为 0 表示该页尚未装入内存。为了能方便地从磁盘上找到作业信息的副本,故在页表中还可指出每一页副本在磁盘上的位置。
当要装入一个当前需要的页面时,如果内存储器中无空闲块,则可选择一个已在内存储器中的页面,把它暂时调出内存。若在执行中该页面被修改过,则把该页信息重新写回到磁盘上,否则不必重新写回磁盘。当一页被暂时调出内存后,让出的内存空间用来存放
当前需要使用的页面。以后再使用被调出的页面时,可用同样的方法调出另一个页面而将其再装入内存。页面被调出或装入之后都要对页表中的相应表目做修改。
当内存中无空闲块时,为了装入一个页面而必须按某种算法从已在内存的页中选择一页,将它暂时调出内存,让出内存空间以存放所需装入的页面,这个工作称为“页面调度”。如何选择调出的页面是很重要的,如果采用了一个不合适的算法,就会出现这样的现象:刚被调出的页面又立即要用,因而又要把它装入,而装入不久又被选中调出,调出不久又被装入,如此反复,使调度非常频繁。这种现象称为“抖动”。一个好的调度算法应减少或避免抖动现象。常用的页面调度算法有:
(1)最优(OPT)算法。选择不再使用或最远的将来才被使用的页,这是理想的算法,但是难以实现,常用于淘汰算法的比较。
(2)随机(RAND)算法。随机地选择被淘汰的页,开销小,但是可能选中立即就要访问的页。
(3)先进先出算法。选择在内存驻留时间最长的页似乎合理,但可能淘汰掉频繁使用的页。另外,使用 FIFO 算法时,在未给予进程分配足够的页面数时,有时会出现给予进程的页面数增多,缺页次数反而增加的异常现象。FIFO 算法简单,易实现。可以把装入内存储器的那些页的页号按进入的先后顺序排成队列,每次总是调出队首的页,当装入一个新页后,把新页的页号排到队尾。
图:算例. 标题123为内存中的三个页面, 标题4321…为需要访问的页面(页号),表格正文为内存三个空间当前保存的内容.
在这里插入图片描述
(4)最近最少使用(Least Recently Used,LRU)算法。选择离当前时间最近的一段时间内使用得最少的页。这个算法的主要出发点是,如果某个页被访问了,则它可能马上就要被访问;反之,如果某个页长时间未被访问,则它在最近一段时间也不会被访问。
2.段式存储管理
段式存储管理与页式存储管理相似。分段的基本思想是把用户作业按逻辑意义上有完整意义的段来划分,并以段为单位作为内外存交换的空间尺度。
段表包含: 段号/ 段长/ 基址
虚(逻辑)地址: (段号, 位移量)
物理地址: 基址+位移量
在这里插入图片描述
一个作业是由若干个具有逻辑意义的段(如主程序、子程序、数据段等)组成。分段系统中,容许程序(作业)占据内存中许多分离的分区。每个分区存储一个程序分段。这样,每个作业需要几对界限地址寄存器,判定访问地址是否越界也就更困难了。在分段存储系统中常常利用存储保护键实现存储保护。分段系统中虚地址是一个有序对(段号,位移)。系统为每个作业建立一个段表,其内容包括段号、段长、内存起始地址和状态等。状态指出这个段是否已调入内存,即内存起始地址指出这个段,状态指出这个段的访问权限。
分段系统的动态地址转换是这样进行的:进程执行时,其段表的首地址已在基本地址寄存器中,执行的指令访问虚存(s,d)(取指令或取操作数)时,首先根据段号 s 查段表,若段已经调入内存,则得到该段的内存起始地址,然后与段内相对地址(段内偏移量 d)相加,得到实地址。如果该段尚未调入内存,则产生缺段中断,以装入所需要的段。段式存储与页式存储的地址转换方式类似,参看图 1-6。
段式虚拟存储管理仍然以段式存储管理为基础,为用户提供比内存实际容量大的虚拟空间。段式虚拟存储管理把作业中的各个分段信息都保留在磁盘上,当作业可以投入执行时,做如下操作:
(1)首先把当前需要的一段或几段装入内存。
(2)作业执行时,如果要访问的段已经在内存,则按照“段式存储管理”中的方式进行地址转换;如果要访问的段不在内存中,则产生一个“缺段中断”,由操作系统把当前需要的段装入内存。
因此,在段表中应增设段是否在内存的标志以及各段在磁盘上的位置,已在内存中的段仍要指出该段在内存中的起始地址和占用内存区长度。
作业执行要访问的段时,由硬件的地址转换机构查段表。若该段在内存中,则立即把逻辑地址转换成绝对地址;若该段不在内存中,则形成“缺段中断”,由操作系统处理这个中断。
处理的办法是,查内存分配表,找出一个足够大的连续区以容纳该分段,如果找不到足够大的连续区则检查空闲区的总和,若空闲区总和能满足该段要求,那么进行适当移动将分散的空闲区集中;若空闲区总和不能满足该段要求,可把内存中的一段或几段调出,然后把当前要访问的段装入内存中。段被移动、调出和装入后都要对段表中的相应表目做修改。新的段被装入后应让作业重新执行被中断的指令,这时就能找到要访问的段,也可以继续执行下去。
3.段页式存储管理
段页式管理是段式和页式两种管理方法结合的产物,综合了段式组织与页式组织的特点,根据程序模块分段,段内再分页,内存被分划成定长的页。段页式系统中虚地址形式是(段号、页号、页内偏移),如图 2-6 所示。系统为每个进程建立一个段表,为每个段建立一个页表。段页式管理采用段式分配、页式使用的方法,便于动态连接和存储的动态分配。这种存储管理能提高内存空间的利用率。
在这里插入图片描述
段式虚拟管理还是以段为单位分配内存空间,整段的调出、装入,有时还要移动,这些都增加了系统的开销。如果按段页式存储管理的方式,把每一段再分成若干页面,那么,每一段不必占用连续的存储空间;甚至当内存块不够时,可只将一段中的部分页面装入内存,这种管理方式称为“段页式虚拟存储管理”。
段页式虚拟存储管理为每一个装入内存的作业建立一张段表,还要为每一段建立页表。段表中指出该段的页表存放位置及长度,页表中应指出该段的各页在磁盘上的位置以及页是否在内存中,若在内存中则填上占用的内存块号。作业执行时按段号查段表,找到相应的页表再根据页号查页表,由标志位判定该页是否已在内存,若是,则进行地址转换;否则进行页面调度。地址转换过程如图 2-7 所示。
在这里插入图片描述
段页式虚拟存储管理结合了段式和页式的优点,但增加了设置表格(段表、页表)和查表等开销,段页式虚拟存储器一般只在大型计算机系统中使用。

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

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

相关文章

delphi android打开外部文件,报错android.os.FileUriExposedException解决方法

Android 7.0强制启用了被称作 StrictMode的策略&#xff0c;带来的影响就是你的App对外无法暴露file://类型的URI了。 如果你使用Intent携带这样的URI去打开外部App(比如&#xff1a;打开系统相机拍照)&#xff0c;那么会抛出FileUriExposedException异常。 Delphi 为Android…

spring集成mybatis简单教程

首先说下实现了什么效果&#xff0c;就是不用每次查询前手动创建 sessionFactory和添加datasource文件了。 整个工程结构是这样的 这次我也把代码放在了gitee上&#xff0c;方便大家更全貌的看到所有的实现细节。代码链接如下&#xff1a; Java: 一些Java代码 (gitee.com) …

交换机基本原理和配置

目录 一、数据链路层功能 二、交换机的工作原理 三、交换机的四大功能 一、数据链路层功能 位于网络层与物理层之间 数据链路的建立、维护与拆除帧包装、帧传输、帧同步帧的差错恢复流量控制 二、交换机的工作原理 交换机通过数据帧的源 MAC 地址&#xff0c;学习到交换机端…

生成模型 | 数字人类的三维重建(3D reconstruction)调研及总结【20231210更新版】

本文主要集中于图片到三维重建的算法模型&#xff0c;其中包含人体重建&#xff0c;人脸重建等 1.三维人体重建 1.1.2015_SMPL: A Skinned Multi-Person Linear Model 论文地址&#xff1a;SMPL2015.pdf (mpg.de) 代码地址&#xff1a;CalciferZh/SMPL: NumPy, TensorFlow an…

我的隐私计算学习——隐私集合求交(1)

笔记内容来自多本书籍、学术资料、白皮书及ChatGPT等工具&#xff0c;经由自己阅读后整理而成。 &#xff08;一&#xff09;PSI的介绍 隐私计算关键技术&#xff1a;隐私集合求交&#xff08;PSI&#xff09;原理介绍 隐私计算关键技术&#xff1a;隐私集合求交&#xff08…

利用Node.js和cpolar实现远程访问,无需公网IP和路由器设置的完美解决方案

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…

Python开发运维:Python垃圾回收机制

目录 一、理论 1.Python垃圾回收机制 一、理论 1.Python垃圾回收机制 &#xff08;1&#xff09;引⽤计数器 1&#xff09;环状双向链表 refchain 在python程序中创建的任何对象都会放在refchain链表中。 name "david" age 20 hobby ["篮球",游泳…

【链表Linked List】力扣-114 二叉树展开为链表

目录 题目描述 解题过程 官方题解 题目描述 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应…

渗透测试——十、渗透列举及命令详解

渗透测试 一、协议配置与分析1、HTTPS 的定义2、HTTPS的验证 二、Kali Linux 常用工具三、Windows 命令详解 一、协议配置与分析 1、HTTPS 的定义 HTTPS (Hyper Text Transfer Protocol over Secure Socket Layer&#xff0c;超文本传输安全协议)是以安全为目标的 HTTP 通道。…

IDEA Maven 配置国内源

基本步骤 分别设置下图的两个&#xff0c;一个是对当前项目的设置&#xff0c;一个是对以后创建的项目设置&#xff0c;这样以后就不用重新配置了。 将下面的两个勾选上 注意&#xff0c;两个地方&#xff0c;Settings 和 Settings for New Projects 的勾都要勾上。 前往 User…

【C语言基础】嵌入式面试经典题(C语言篇)----有新的内容会及时补充、更新!

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

WorkPlus即时通讯app,支持私有化部署的企业IM

当企业面临复杂的协同、业务和生态场景时&#xff0c;多个繁琐的应用和系统常常让员工头疼不已。然而&#xff0c;WorkPlus作为企业数字化转型的超级APP&#xff0c;以其一站式全能解决方案&#xff0c;为企业带来了颠覆性的便利与高效。本文将深入探讨WorkPlus的特点和优势&am…

JavaScript系列-数据类型

ES6变量类型 JavaScript编程语言中&#xff0c;变量类型分为基本变量类型和引用类型&#xff0c;两种变量类型的区别在于 基本类型变量值存放于栈中&#xff0c;引用类型变量值存放于堆中基本类型赋值给其他变量&#xff0c;是将其值复制过去引用类型赋值给其他变量&#xff…

MyString:string类的模拟实现 1

MyString&#xff1a;string类的模拟实现 前言&#xff1a; 为了区分标准库中的string&#xff0c;避免编译冲突&#xff0c;使用命名空间 MyString。 namespace MyString {class string{private:char* _str;size_t _size;size_t _capacity;const static size_t npos -1;// C标…

解锁MySQL的威力:针对常见问题的快速解决指南

数据库和表的创建 创建数据库&#xff1a; CREATE DATABASE IF NOT EXISTS MyDatabase; USE MyDatabase;案例&#xff1a; 想象您要开始一个博客项目。首先&#xff0c;您需要一个地方来存储所有的文章和用户信息。上述命令帮助您创建了这样一个存储空间&#xff0c;名为MyDa…

人力资源服务展示网站作用有哪些

就业劳务问题往往是不少人群关注的问题&#xff0c;每个城市都聚集着大量求业者&#xff0c;而人力资源管理公司每年也会新增不少&#xff0c;对求业者来说&#xff0c;通过人力资源公司可以快速便捷的找到所需工作&#xff0c;而对公司来说&#xff0c;市场大量用户可以带来收…

python/matlab图像去雾/去雨综述

图像去雾和去雨是计算机视觉领域的两个重要任务&#xff0c;旨在提高图像质量和可视化效果。本文将综述图像去雾和去雨的算法、理论以及相关项目代码示例。 一、图像去雾算法 基于暗通道先验的方法&#xff1a; 这是广泛应用于图像去雾的经典算法之一。该方法基于一个观察&…

Aloha 机械臂的学习记录2——AWE:AWE + ACT

继续下一个阶段&#xff1a; Train policy python act/imitate_episodes.py \ --task_name [TASK] \ --ckpt_dir data/outputs/act_ckpt/[TASK]_waypoint \ --policy_class ACT --kl_weight 10 --chunk_size 50 --hidden_dim 512 --batch_size 8 --dim_feedforward 3200 \ --n…

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

目录 概念 功能 内存空间的分配和回收 地址转换 逻辑地址&#xff08;相对地址&#xff09; 物理地址&#xff08;绝对地址&#xff09; 内存空间的扩充 内存共享 存储保护 方式 源程序变为可执行程序步骤 链接方式 装入方式 覆盖 交换 连续分配管理方式 单一连…

self-attention|李宏毅机器学习21年

来源&#xff1a;https://www.bilibili.com/video/BV1Bb4y1L7FT?p1&vd_sourcef66cebc7ed6819c67fca9b4fa3785d39 文章目录 引言self-attention运作机制b1是如何产生的怎么求关联性数值 α \alpha α 从矩阵乘法的角度再来一次从A得到Q、K、V从Q、K得到 α \alpha α矩阵由…