操作系统基础:内存管理概述【上】

在这里插入图片描述

在这里插入图片描述

🌈个人主页:godspeed_lucip
🔥 系列专栏:OS从基础到进阶


  • 🏕️1 内存管理基础概念
    • 🏡1.1 总览
    • 🏡1.2 内存管理应有的功能
      • 🏖️1.2.1 内存空间的分配和回收
      • 🏖️1.2.2 从逻辑上扩充内存
      • 🏖️1.2.3 地址转换
      • 🏖️1.2.4 内存保护
    • 🏡1.3 知识总结
  • 🏕️2 覆盖与交换
    • 🏰2.1 总览
    • 🏰2.2 覆盖技术
      • 🏖️2.2.1 覆盖技术的基本思想
      • 🏖️2.2.2 例子
      • 🏖️2.2.3 缺点
    • 🏰2.3 交换技术
      • 🏝️2.3.1 基本思想
      • 🏝️2.3.2 待解决的问题
    • 🏰2.4 总结
  • 🏕️3 连续内存分配
    • 🏠3.1 总览
    • 🏠3.2 单一连续分配
      • 🏖️3.2.1 思想
      • 🏖️3.2.2 优点
      • 🏖️3.2.3 缺点
    • 🏠3.3 固定分区分配
      • 🏝️3.3.1 基本思想
      • 🏝️3.3.2 分类
      • 🏝️3.3.3 特点
      • 🏝️3.3.4 如何管理固定分区
      • 🏝️3.3.5 优缺点
    • 🏠3.4 动态分区分配
      • 🏝️3.4.1 基本思想
      • 🏝️3.4.2 记录内存使用情况的数据结构
      • 🏝️3.4.3 空闲分区的分配
      • 🏝️3.4.4 分区的分配和回收
  • 🕮 4 总结


🏕️1 内存管理基础概念

🏡1.1 总览

image1

🏡1.2 内存管理应有的功能

🏖️1.2.1 内存空间的分配和回收

示意图:
image2

🏖️1.2.2 从逻辑上扩充内存

试想,随便下载一个大软件,其大小远远超过我们的内存大小,那么为什么这个软件可以运行呢?原因是操作系统采用了虚拟内存,即使物理空间较小,但是逻辑空间却可以很大。

🏖️1.2.3 地址转换

提供地址转换功能,负责程序的逻辑地址与物理地址的转换

image3
三种装入方式为:
image4

🏖️1.2.4 内存保护

提供内存保护功能,保证各进程在各自存储空间内运行,互不干扰。
使进程只可以访问属于自己的空间,不能去访问系统内核、其他进程的内存空间。那么,如何才可以实现内存保护呢?
以下图的进程1为例子
image5
(1)设置上下限寄存器。
image6
例如,进程1的实际物理地址为100-279,那么下限寄存器应该存放100,上限寄存器应该存放279。

(2)重定位寄存器、界地址寄存器
image7
重定位寄存器存放进程的实际物理地址的下限,界地址寄存器存放进程所需的最空间。例如,进程1的重定位寄存器存放100,界地址寄存器存放179-0=179。

🏡1.3 知识总结

image8

🏕️2 覆盖与交换

🏰2.1 总览

image1

🏰2.2 覆盖技术

🏖️2.2.1 覆盖技术的基本思想

image2

🏖️2.2.2 例子

image3
如图,这是一个程序的结构调用图。可以看到,A是程序运行所必须的代码段,因此放在固定区内;B、C不可能同时运行,因此可以分配同一个覆盖区,D、E、F同理。如图所示
image4
因此,本来应该将代码全部放入,但是操作系统只分配了一部分空间就实现了全部放入的结果,因此从逻辑上看,操作系统的内存大小是被拓展了的。

🏖️2.2.3 缺点

image5

🏰2.3 交换技术

🏝️2.3.1 基本思想

image6
比如说,假设内存中有进程1、2、3,如图
image7
此时内存紧张,进程1、2需要暂时换出外存,因此在内存保留它们的PCB后(方便操作系统的后续管理)将它们置于挂起队列,空出的内存空间给更为紧张的进程使用。

🏝️2.3.2 待解决的问题

image8
对于问题1:
image9
磁盘空间的示意图:
image10

对于问题2:
image11

对于问题三
image12

🏰2.4 总结

image13

🏕️3 连续内存分配

🏠3.1 总览

image1

🏠3.2 单一连续分配

🏖️3.2.1 思想

image2
如图:
image3

🏖️3.2.2 优点

image4
一个进程独占内存,就不会发生进程访问其他进程的内存空间的情况,且即使进程访问了操作系统的内核程序,通常也可以通过重启解决,所以这种方式下不一定需要采取内存保护?

🏖️3.2.3 缺点

image5

🏠3.3 固定分区分配

🏝️3.3.1 基本思想

image6

🏝️3.3.2 分类

根据分配的空间相等与否可以分为以下两类
image7
如图
image8

🏝️3.3.3 特点

image9

🏝️3.3.4 如何管理固定分区

可以通过分区说明表进行管理,其具体内容如图:
image10
这种数据结构可以通过数组或链表实现
image11

🏝️3.3.5 优缺点

image12

🏠3.4 动态分区分配

🏝️3.4.1 基本思想

image13

🏝️3.4.2 记录内存使用情况的数据结构

可以采取空闲分区表、空闲分区链表示
(1)空闲分区表
例子:
image14
image15
(2)空闲分区链
例子:
image16

🏝️3.4.3 空闲分区的分配

分配算法在下一小节进行详细描述
image17

🏝️3.4.4 分区的分配和回收

假设操作系统采用空闲分区表管理分区(使用空闲分区链同理)
(1)分配操作
假设起始表内容如下:
image18
①假如一个空闲分区的大小大于进程申请的空间,那么直接修改内容和即可。 假设一个4MB的进程进入,需要分配到分区1中,那么分区表应该修改如下:
image19

②假如一个空闲分区的大小等于进程申请的空间,那么需要删除该内容。假设一个4MB的进程进入,需要分配到分区3中,那么分区表应该修改如下:
image20

(2)回收操作
①回收分区的后面(后面)有空闲分区
直接修改表项内容
image21

②回收分区的后面没有空闲分区
增加一个表项内容
image22

③回收分区的前后均为空闲分区
合并表项内容
image23

注意:各表项的排序不一定按照分区地址的大小进行排序

🕮 4 总结

操作系统,如默默守护的守夜者,无声地管理硬件与软件的交流,为计算机创造和谐秩序。

它是无形的引导者,让复杂的任务变得井然有序,为用户提供无忧体验。

操作系统的巧妙设计,让计算机变得更加智能高效,让人与科技之间的交流更加顺畅。

在每一次启动中,它如信任的伙伴,带领我们进入数字世界的奇妙旅程。

渴望挑战操作系统的学习路径和掌握进阶技术?不妨点击下方链接,一同探讨更多操作系统的奇迹吧。我们推出了引领趋势的💻OS专栏:《OS从基础到进阶》 ,旨在深度探索OS的实际应用和创新。🌐🔍

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

设计模式学习笔记04(小滴课堂)

1.创建基础类: 调用它进行类对象的复制: 但是如果属性都是基本数据类型确实像这样很简单,但是如果属性中也包含复杂的数据类型呢? 再去测试一下: 我们发现person1和person2的list属性值的内容是同步的,这显…

动态微信小程序码和开发者工具解析小程序码

一、动态生成微信小程序码 1、方式一 微信官方网站,对已发布的小程序,提供了一个快捷的入口,输入微信小程序的page页面即可。 page页面可以通过右侧开启入口获取 也可以通过开发者工具左下角的页面地址和参数地址那里获取到 二、生成的小…

王道考研复试机试学习

机试 绪论第一章枚举和模拟1.1枚举问题简介1.2 abc1.3代码调试 绪论 1.把讲解的都做会 2.不要贪多,要弄懂一类题目 3.要常回顾和总结 第一章枚举和模拟 1.1枚举问题简介 列出问题所有情况,一个一个去试。 1.2 abc 链接:abc问题 设a、b、…

大模型运行成本对比:GPT-3.5/4 vs. 开源托管

在过去的几个月里,生成式人工智能领域出现了许多令人兴奋的新进展。 ChatGPT 于 2022 年底发布,席卷了人工智能世界。 作为回应,各行业开始研究大型语言模型以及如何将其纳入其业务中。 然而,在医疗保健、金融和法律行业等敏感应用…

nosql数据库期末考试知识点总结

目录 1、什么是nosql数据库,它包括哪些 文档数据库 建数据 哪一种是最简单的 2、什么是文档数据库 3、创建mongodb时默认会建造三个数据库,是哪三个 4、mongodb支持的数据类型有哪些 5、它的常规语句有哪些 6、副本集和分片集有什么作用 复制 …

FPGA高端图像处理开发板:鲲叔1号,寄托了未来的一块开发板

前言 在CSDN写博客传播FPGA开发经验已经一年多了,帮助了不少人,也得罪了不少人,有的人用我的代码赢得了某些比赛、得到了心仪的offer,也有的人天天骂我,anyway,哪怕只要还能帮助一个即将毕业的学生找到工作…

深入了解键盘:分类、工作原理与操作指南

键盘 键盘是计算机使用的主要输入设备之一,键盘主要由创建字母、数字和符号并执行附加功能的按钮组成,通常用于向计算机或其他数字设备输入文本、命令和各种控制信号。 键盘是计算机中最重要的字符输入设备,其基本组成元件是按键开关&#…

Python算法题集_矩阵置零

Python算法题集_矩阵置零 题73:矩阵置零1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【三层循环】2) 改进版一【纵横计数器】3) 改进版二【原地算法】 4. 最优算法 本文为Python算法题集之一的代码示例 题73:矩阵置零…

JAVAEE初阶 网络编程(十)

http协议 一.HTTP协议简介二. HTTP捕获工具的使用三. 请求和响应包含的部分四. 认识URL 一.HTTP协议简介 HTTP协议最主要的应用场景就是网站,在浏览器和服务器之间,传输数据, 所谓网页,就是用超文本标记语言HTML和CSS,…

废品上门回收小程序搭建全过程

随着人们对环境保护意识的不断增强,废品回收成为了一项重要的社会活动。为了方便废品回收的顾客和回收者之间的联系,废品上门回收小程序成为了一种流行的解决方案。然而,如何选择一款合适的废品上门回收小程序搭建平台呢?下面将为…

如何衡量代码的复杂度

圈复杂度概要 最近的培训中了解到了一个概念,叫做圈复杂度。 圈复杂度(Cyclomatic Complexity)是一种衡量程序复杂度的度量方法。它由美国计算机科学家 Thomas J. McCabe 在 1976 年提出。圈复杂度通过统计程序的控制流图中的决策结构&…

Centos Cron设置定时任务

这本是很简单的问题,但是我服务器重装系统两次,遇到的问题都不一样,所以记录一下 1.首先要确保服务器上有 cron 服务 sudo systemctl status crond2.设置时区 sudo timedatectl set-timezone Asia/Shanghai3.重启crond 服务使crond服务的时…

CentOS 8最小安装和网络配置

文章目录 简介下载地址VMware 17创建虚拟机最小化安装拥有的外部命令yum源有问题网络配置开启SSH Server服务关闭防火墙(目前这个地方还是有问题-加上端口依然不能访问)设置host配置JDK环境完整参考 简介 CentOS 8的IOS如果下载DVD版本至少有10G 这里我们直接选择最小安装&…

CSS常用属性

CSS常用属性 1. 像素的概念 概念:我们的电脑屏幕是,是由一个一个“小点”组成的,每个“小点”,就是一个像素(px)。规律:像素点越小,呈现的内容就越清晰、越细腻。 注意点&#xff…

YOLOv8-Segment C++

YOLOv8-Segment C https://github.com/triple-Mu/YOLOv8-TensorRT 这张图像是运行yolov8-seg程序得到的结果图,首先是检测到了person、bus及skateboard(这个是检测错误,将鞋及其影子检测成了滑板,偶尔存在错误也属正常),然后用方…

Vue 环境准备

1.安装vscode https://code.visualstudio.com/ 2.安装开发vue所需插件: Vetur —— 语法高亮、智能感知、Emmet等 包含格式化功能, AltShiftF (格式化全文),CtrlK CtrlF(格式化选中 代码,两…

分库分表原则

分库分表原则 单表数据到达千万级别或者20存储空间 优化已经解决不了问题一 IO瓶颈导致性能问题 拆分策略 垂直分库 以表为依据,根据业务将不同的表拆分到不同库中,有点像微服务 垂直分表 以字段为依据,根据字段属性将不同字段拆分到不同…

App ICP备案获取iOS和Android的公钥和证书指纹

依照《工业和信息化部关于开展移动互联网应用程序备案工作的通知》,向iOS和安卓平台提交App时需要先提交ICP备案信息。 iOS平台: 1、下载appuploader工具:Appuploader home -- A tool improve ios develop efficiency such as submit ipa to…

Tencent Tinker:移动应用热修复的未来之路

Tencent Tinker:移动应用热修复的未来之路 1 引言 移动应用热修复是一项在移动应用开发领域中日益重要的技术,它可以帮助应用程序开发者快速修复线上应用的bug、漏洞和功能问题,而无需重新发布整个应用。这种能力对于提高用户体验、降低用户…

Pymysql将爬取到的信息存储到数据库中

爬取平台为电影天堂 获取到的数据仅为测试学习而用 爬取内容为电影名和电影的下载地址 创建表时需要建立三个字段即可 import urllib.request import re import pymysqldef film_exists(film_name, film_link):"""判断插入的数据是否已经存在""&qu…
最新文章