操作系统4_存储器管理

news/2024/7/20 17:08:18/文章来源:https://blog.csdn.net/Ausgelebt/article/details/139252752

操作系统4_存储器管理

文章目录

  • 操作系统4_存储器管理
    • 1. 存储器的管理功能
      • 1.1 地址映射/地址重定位
      • 1.2 主存分配与回收
      • 1.3 存储保护
      • 1.4 主存扩充/虚拟内存
    • 2. 存储器的层次结构
    • 3. 程序的接入与链接
      • 3.1 程序的链接
      • 3.2 程序的装入
    • 4. 分区存储管理
      • 4.1 单一连续分配
      • 4.2 固定分区分配
      • 4.3 可变分区分配
        • 4.3.1 顺序搜索
        • 4.3.2 索引搜索
      • 4.4 可重定位分区分配
      • 4.5 对换
      • 分区存储管理特点:连续、碎片
    • 5. 分页存储管理
      • 5.1 基本思想
      • 5.2 地址变换
        • 5.2.1 逻辑地址
        • 5.2.2 物理地址
        • 5.2.3 地址转换/地址变换
      • 5.3 多级页表
    • 6. 分段存储管理
    • 7. 段页式存储管理
      • 7.1 基本原理
      • 7.2 核心数据结构
      • 7.3 地址结构及转换
      • 7.4 缺点

1. 存储器的管理功能

1.1 地址映射/地址重定位

  • 基本概念
    • 内存地址:内存的每个存储单元都有一个编号,这种编号称为内存地址/物理地址/绝对地址
    • 内存空间:内存地址的集合称为内存空间/物理地址空间
    • 逻辑地址
      • 要求用户用内存地址编程是非常困难的,尤其是在多道程序设计的环境中
      • 用户编程所用的地址称为逻辑地址/程序地址/虚地址
      • 由逻辑地址组成的空间称为逻辑地址空间/程序地址空间
    • 地址映射:把用户程序装入内存时对有关指令的地址部分的修改定义为从程序地址到内存地址的地址映射/地址重定位
  • 地址映射的方式
    • 静态地址映射:程序被装入内存时由操作系统的连接装入程序完成程序的逻辑地址到内存地址的转换
      • 映射方法:假定程序装入内存的首地址为BR,程序地址为VR,内存地址为MR,则地址映射按下式进行:MR=BR+VR
        例如,程序装入内存的首地址为1000,则装配程序就按MR=1000+VR对程序中所有地址部分进行修改,修改后指令Load A,200就变为Load A,1200
      • 优点:不需要硬件的支持
      • 缺点:程序必须占用连续的内存空间;一旦程序装入后不能移动
    • 动态地址映射
      • 映射时刻:动态地址重定位是在程序执行的过程中,每次访问内存之前,将要访问的程序转换为内存地址
      • 映射实施:一般来说这种转换是由专门的硬件机构来完成的
      • 映射方法:最简单的硬件机构是重定位寄存器;在地址重定位机构(一个基地址寄存器BR、一个程序地址寄存器VR、一个内存地址寄存器MR);计算方法MR = BR + VR
      • 具体过程:
        • 程序装入内存后,它所占用的内存区的首地址由系统送入基地址寄存器BR中
        • 在程序执行的过程中,若要访问内存,将访问的逻辑地址送入VR中
        • 地址转换机构把VR和BR中的内容相加,并将结果送入MR中,作为实际访问的地址
      • 优点:程序占用的内存空间是动态可变的,当程序从某个存储区移到另一个区域时,只需要修改相应的寄存器BR的内容即可;一个程序不一定要求占用一个连续的内存空间;可以部分地装入程序运行;便于多个进程共享同一个程序的代码
      • 缺点:需要硬件的支持;实现存储管理的软件算法较为复杂

1.2 主存分配与回收

主要完成内存的分配和回收工作,要求设计者选择和确定以下几种策略和结构:

  • 调入策略
  • 放置策略
  • 置换策略
  • 分配结构
  • 引起内存分配和回收的原因

1.3 存储保护

  • 存储保护:保证内存中的多道程序只能在给定的存储区域内活动并不产生干扰(防止地址越界、防止越权(对共享区有访问权))

  • 硬件支持:界地址寄存器/界限寄存器

    界地址寄存器是被广泛使用的一种存储保护技术

    机制比较简单,易于实现

  • 实现方法

    • 在CPU中设置一对下限寄存器和上限寄存器,存放用户作业在主存中的下限和上限地址
    • 也可将一个寄存器作为基址寄存器,另一寄存器作为限长寄存器(指示存储区长度)
    • 每当CPU要访问主存,硬件自动将被访问的主存地址与界限寄存器的内容进行比较,以判断是否越界
    • 如果未越界,则按此地址访问主存,否则将产生程序中断/越界中断(存储保护中断)
  • 图示

    image-20240526114621124

1.4 主存扩充/虚拟内存

  • 主存扩充/虚拟内存:为了满足程序员在编程时不受内存结构和容量限制的需求,操作系统为用户提供了一种可以与内存结构不同的存储器,这种存储器被称为虚拟存储器;虚拟存储器是由虚拟内存构成的,这些内存空间被称为虚存空间;虚存空间可以扩展到实际内存之外,因此被形象地称为“虚拟”空间
  • 基本原理
    • 将程序正在使用的部分内容放在内存,而暂时不用的部分放在外存,在需要时由系统调入内存,并将不需要(或暂不需要)的部分调出内存
    • 由于程序在执行时,在一段时间内一般仅使用它的程序的一部分(或一小部分),所以程序仅有部分装入内存完全能够正确执行
    • 要由操作系统结合相关硬件来完成上述工作,这样计算机好像为用户提供了一个容量远大于内存的存储器,这个存储器称为虚拟存储器

2. 存储器的层次结构

  • (从上到下,容量增大,速度减慢)
  • CPU
    • 寄存器
  • 主存
    • 高速缓存SRAM
  • 主存
    • 主存储器SDRAM
  • 主存
    • 磁盘

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

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

相关文章

Mac软件打开时提示:已损坏,无法打开。你应该将它移到废纸娄。怎么解决?

Mac软件打开时提示:已损坏,无法打开。你应该将它移到废纸娄。怎么解决? 原文地址:https://blog.csdn.net/weixin_48311847/article/details/138325009

【Mongo】索引结构

结论 Mongo3.2版本开始,索引的结构默认是B树。 起因 面试的时候,面试官问为什么Mongo DB底层使用B树而不是B树? 面试完赶紧恶补,结果发现面试官好像给我埋了个坑。。。 MongoDB官方描述: 翻译一下就是&#xff1…

多线程JUC 第2季 BlockingQueue 阻塞队列

一 阻塞队列 1.1 阻塞队列介绍 阻塞队列(BlockingQueue)是一个在队列基础上又支持了两个附加操作的队列: put方法:当队列装满时,添加的线程则被阻塞,直到队列不满,则可用。 take方法&#x…

数据库查询——kettle开发20

一、数据库查询 数据库查询就是数据库里面的左连接,左连接就是两张表执行左关联查询,把左边的表数据全部查询出来。 如图所示我们在进行数据库查询操作时,我们首先需建立数据库连接,输入表名和查询需要的关键字,最后…

解析边缘计算网关的优势-天拓四方

随着信息化、智能化浪潮的持续推进,计算技术正以前所未有的速度发展,而边缘计算网关作为其中的重要一环,以其独特的优势正在逐步改变我们的生活方式和工作模式。本文将详细解析边缘计算网关的优势。 首先,边缘计算网关具有显著的…

Linux shell编程学习笔记50:who命令

0 前言 2024年的网络安全检查又开始了,对于使用基于Linux的国产电脑,我们可以编写一个脚本来收集系统的有关信息。比如,我们可以使用who命令来收集当前已登陆系统的用户信息,当前运行级别等信息。 1. who命令 的功能、格式和选项…

产品推荐-光学镜片镀膜自动上下料设备

随着现代化工业生产的浪潮,智能化和自动化已成为工业发展的必然趋势。在精密制造领域,高精度和高效率更是工艺流程中不可或缺的要素。为满足这一需求,富唯推出了引领行业潮流的智能设备——富唯智能镀膜上下料设备。 一、多功能操作&#xff…

mysql5.7允许root远程访问

mysql客户端工具配置完成后,测试联通失败,客户端真正连接mysql时,也报错不允许rootip连接。 这是由于mysql的root用户默认禁止远程访问,可以通过两种方式改表或者授权的方式开启远程访问。本文中使用改表的方法。按照如下操作即可…

【leetcode 141】环形链表——快慢指针(龟兔赛跑)

给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(…

LVGL圆弧、线条、图片、色环、按钮矩阵、文本区域、键盘部件

目录 LVGL圆弧部件 LVGL线条部件 LVGL图片部件 LVGL色环部件 LVGL按钮矩阵部件 LVGL文本区域部件 LVGL键盘部件 LVGL圆弧部件 圆弧部件以弧形滑动的形式来调节、显示某个参数的值。 圆弧部件组成部分: 背景弧(LV_PART_MAIN) 前景弧&am…

现代 c++ 三:移动语义与右值引用

移动语义很简单,但它相关联的术语很复杂。本文尝试从历史的角度解释清楚这些乱七八糟的术语及其关联: 表达式 (expression)、类型(type)、值类别 (value categories); 左值 (lvalue)、右值 (rvalue)、广义左值 (glval…

UI问题 --- CardView和其它的控件在同一布局中时,始终覆盖其它控件

原本代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"40dp"android:layout_height"wrap_content"andr…

代码随想录——最大二叉树(Leetcode654)

题目链接 递归 二叉树 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode rig…

ssh远程连接的相关配置

连接同一个局域网下&#xff1a; 正好这里来理解一下计算机网络配置中的ip地址配置细节&#xff0c; inet 172.20.10.13: 这是主机的IP地址&#xff0c;用于在网络中唯一标识一台设备。在这个例子中&#xff0c;IP地址是172.20.10.13。 netmask 255.255.255.240: 这是子网掩码…

Laravel和ThinkPHP框架比较

一、开发体验与易用性比较 1. 代码可读性&#xff1a; - Laravel以其优雅的语法和良好的代码结构著称&#xff0c;使得代码更加易读易懂。 - 相比之下&#xff0c;ThinkPHP的代码可读性较为一般&#xff0c;在一些复杂业务场景下&#xff0c;可能会稍显混乱。 让您能够一站式…

刷题记录5.22-5.27

文章目录 刷题记录5.22-5.2717.电话号码的字母组合78.子集131.分割回文串77.组合22.括号生成198.打家劫舍---从递归到记忆化搜索再到递推动态规划背包搜索模板494.目标和322.零钱兑换牛客小白月赛---数字合并线性DP1143.最长公共子序列72.编辑距离300.最长递增子序列状态机DP12…

自动化您的任务——crewAI 初学者教程

今天&#xff0c;我写这篇文章是为了分享您开始使用一个非常流行的多智能体框架所需了解的所有信息&#xff1a;crewAI。 我将在这里或那里跳过一些内容&#xff0c;使本教程成为一个精炼的教程&#xff0c;概述帮助您入门的关键概念和要点 今天&#xff0c;我写这篇文章是为了…

机器学习实验----逻辑回归实现二分类

目录 一、介绍 二、sigmoid函数 &#xff08;1&#xff09;公式&#xff1a; &#xff08;2&#xff09;sigmoid函数的输入 预测函数&#xff1a; 以下是sigmoid函数代码&#xff1a; 三、梯度上升 &#xff08;1&#xff09;似然函数 公式&#xff1a; 概念&#xff…

fpga系列 HDL 00 : 可编程逻辑器件原理

一次性可编程器件&#xff08;融保险丝实现&#xff09; 一次性可编程器件&#xff08;One-Time Programmable Device&#xff0c;简称 OTP&#xff09;是一种在制造后仅能编程一次的存储设备。OTP器件在编程后数据不可更改。这些器件在很多应用场景中具有独特的优势和用途。 …

python中import的搜索路径

文章目录 前言 一 python中import的搜索路径1. python中import的搜索路径先判断是否内置模块根据sys.path查找1.1 脚本当前目录和所属项目目录1.2 环境变量1.3 标准库1.4 .pth 文件1.5 第三方库 2. 解决ModuleNotFoundError 前言 码python时经常会遇到找不到包或者找不到模块的…