操作系统(3)——内存管理

news2024/9/20 18:51:01

目录

  • 小程一言
    • 专栏链接: [link](http://t.csdnimg.cn/6grrU)
    • 内存管理
      • 无存储器抽象
      • 存储器抽象
        • 实现以下几方面
        • 小结
      • 虚拟内存
        • 实现以下方面
        • 总结
      • 页面置换算法
        • 概述
        • 常见的页面置换算法
        • 先进先出(FIFO)算法
        • 最近最少使用(LRU)算法
        • 总结

小程一言

本操作系统专栏,是小程在学操作系统的过程中的第一步,是在学习操作系统的笔记的前提下,加上自己的心得,以及资料的搜集,共同整合而成。小程在学习过程中,难免疏漏,希望各位前辈批评指正。

主要参考书籍:现代操作系统
书中内容有些生硬,so小程参考其他书籍内容进行了一些加工
这本书饱受诟病的原因是流传思想有些过时,但是计算机有过时的思想吗?,底层逻辑的稳定是整个计算机的基石。现在的所有思想都是在基石之上。

面向群体:在校大学生,想要补齐基础知识短板的在职人员

专栏链接: link

内存管理

在这里插入图片描述

无存储器抽象

在早期简单的操作系统中,可能没有存储器抽象的概念。这意味着程序需要直接操作物理存储器地址,而不是通过虚拟地址空间来访问存储器。这种情况下,程序员需要自行管理存储器的分配和释放,而操作系统不提供存储器管理的功能。

在没有存储器抽象的操作系统中,程序员需要了解存储器的物理结构和地址分配情况,以确保程序正确地访问和操作存储器。程序员需要手动分配存储器空间,并在使用完毕后手动释放这些空间。这种方式需要程序员更加谨慎地管理存储器资源,以避免内存泄漏或存储器冲突等问题。

没有存储器抽象的操作系统通常比较简单,适用于一些资源有限或对存储器管理要求不高的场景。然而,随着计算机系统的发展,大多数现代操作系统都引入了存储器抽象的概念,以提供更好的存储器管理和更高的程序灵活性。存储器抽象使得程序员可以更加方便地使用存储器资源,而操作系统可以更好地管理和优化存储器的使用。
在这里插入图片描述

存储器抽象

存储器抽象是操作系统中的一个重要概念,它提供了一种虚拟化的存储器管理机制,使得程序员可以使用虚拟地址空间来访问存储器,而不需要关心物理存储器的具体细节。

实现以下几方面
  1. 虚拟地址空间:操作系统为每个进程提供了一个独立的虚拟地址空间,使得每个进程可以认为自己拥有整个存储器空间。程序员在编写程序时可以使用虚拟地址来访问存储器,而不需要知道实际的物理地址。

  2. 地址映射:操作系统通过地址映射机制将程序中的虚拟地址映射到物理存储器的实际地址上。这样,程序在访问虚拟地址时,操作系统会将其转换为对应的物理地址,从而实现对存储器的访问。

  3. 内存保护:存储器抽象还提供了内存保护机制,可以防止程序越界访问存储器空间或者访问未经授权的存储器区域。操作系统可以通过页表等机制来管理内存保护。

  4. 虚拟内存:存储器抽象还包括了虚拟内存的概念,即将部分存储器内容暂时存储在硬盘上,以便在需要时进行换入换出操作。这种机制可以有效扩展可用的存储器空间,并提高程序的运行效率。

小结

通过存储器抽象,操作系统可以更好地管理存储器资源,提高存储器的利用率和性能,同时也提供了更高的程序灵活性和安全性。存储器抽象是现代操作系统中的重要特性之一,对于程序员和系统设计者来说都具有重要意义。
在这里插入图片描述

虚拟内存

这是一个重要概念,提供了一种抽象的存储器管理机制,使得程序可以访问比实际物理存储器更大的地址空间。

实现以下方面
  1. 虚拟地址空间:每个进程都有自己的虚拟地址空间,从0开始递增,直到最大虚拟地址。程序员编写程序时使用的地址都是虚拟地址,而不是实际的物理地址。

  2. 分页机制:虚拟内存通过分页机制来管理存储器。将虚拟地址空间和物理存储器空间划分为固定大小的页(通常为4KB或8KB),并通过页表来映射虚拟地址和物理地址之间的对应关系。

  3. 页面置换:当物理存储器不足时,操作系统会将部分不常用的页面暂时存储在硬盘上,这个过程称为页面置换。当需要访问这些页面时,操作系统会将其换入物理存储器,同时将其他页面换出到硬盘上。

  4. 虚拟内存管理:操作系统负责管理虚拟内存的分配、释放和页面置换等操作。通过虚拟内存管理,操作系统可以更好地控制存储器资源的分配和利用,提高系统的性能和稳定性。

  5. 内存保护:虚拟内存还提供了内存保护机制,可以防止程序越界访问存储器或者访问未经授权的存储器区域。操作系统可以通过页表等机制来管理内存保护。

总结

虚拟内存的引入使得程序可以使用比实际物理存储器更大的地址空间,同时也提高了系统的稳定性和性能。通过虚拟内存,操作系统可以更好地管理存储器资源,提高存储器的利用率,并提供更高的程序灵活性和安全性。虚拟内存是现代操作系统中的一个重要特性,对于系统设计和性能优化都具有重要意义。
在这里插入图片描述

页面置换算法

概述

页面置换算法是虚拟内存管理中的重要组成部分,用于在物理存储器不足时选择哪些页面被置换到硬盘上。

常见的页面置换算法
  1. 先进先出(FIFO):最简单的页面置换算法,按照页面进入物理存储器的顺序进行置换。即最先进入的页面最先被置换出去。但是这种算法可能会导致Belady异常,即在增加物理存储器时,缺页次数反而增加。
  2. 最近最少使用(LRU):根据页面最近被访问的时间来置换页面,即最长时间未被访问的页面被置换。LRU算法相对较为复杂,需要维护一个访问时间的记录表,但通常具有较好的性能。
  3. 最不常用(LFU):根据页面被访问的频率来进行置换,即访问次数最少的页面被置换。LFU算法可能存在一些问题,如对于一些周期性访问的页面可能无法得到正确的置换决策。
  4. 时钟(Clock)算法:采用类似于时钟的方式来维护页面的访问位,当页面被访问时,将访问位设置为1;当需要置换页面时,选择第一个访问位为0的页面进行置换。
  5. 最佳置换(OPT):理论上最优的页面置换算法,即置换未来访问时间最长的页面。但是由于无法预知未来的访问模式,实际中很难实现。
先进先出(FIFO)算法

该调度算法是页面置换算法中最简单的一种,它的核心思想是按照页面进入物理存储器的顺序进行置换,即最先进入物理存储器的页面最先被置换出去。下面对FIFO算法进行详细的讲解和分析:

  1. 工作原理

    • 当一个新的页面需要载入物理存储器时,操作系统选择最早进入物理存储器的页面进行置换。
    • FIFO算法维护一个页面队列,当需要置换页面时,选择队列中最先进入的页面进行置换。
    • 当队列已满时,新页面进入队列时,最先进入的页面被置换出去。
  2. 优点

    • 实现简单,易于理解和实现。
    • 适用于系统资源较为充足的情况下,不需要考虑性能优化。
  3. 缺点

    • 可能导致Belady异常:Belady异常是指增加物理存储器容量反而增加缺页次数的现象。由于FIFO算法只考虑页面进入的顺序,不考虑页面的使用频率,可能会导致Belady异常的出现。
    • 不考虑页面的访问频率:FIFO算法不关心页面的使用频率,可能会导致一些经常被访问的页面被置换出去,影响系统性能。
  4. 适用场景

    • 适用于对性能要求不高,且系统资源充足的情况下。
    • 适用于简单的应用场景,不需要考虑复杂的页面置换策略。
  5. 改进和优化

    • 可以结合其他算法进行优化:FIFO算法可以和其他页面置换算法结合使用,如LRU算法的近似算法,以提高性能。
    • 可以考虑引入缓冲区:引入缓冲区可以减少FIFO算法的缺点,提高系统性能。
  6. 总结
    FIFO算法虽然简单易实现,但由于其可能导致Belady异常等问题,通常在实际应用中并不是最佳选择。在实际应用中,可以根据系统的特点和需求选择更为适合的页面置换算法。
    在这里插入图片描述

最近最少使用(LRU)算法

最近最少使用(LRU)算法是一种常用的页面置换算法,其核心思想是根据页面的使用历史来进行页面置换。具体来说,LRU算法会置换最近最少被访问的页面,以期望保留那些最近被频繁访问的页面。下面对LRU算法进行详细的讲解和分析:

  1. 工作原理

    • LRU算法维护一个页面访问历史记录,当一个页面被访问时,将其移动到历史记录的最近位置。
    • 当需要置换页面时,选择历史记录中最久未被访问的页面进行置换。
  2. 实现方式

    • 可以使用一个数据结构(如双向链表)来维护页面的访问历史记录,每次访问一个页面时,将该页面移动到链表头部。
    • 当需要置换页面时,选择链表尾部的页面进行置换。
  3. 优点

    • 考虑了页面的使用频率,更有可能保留那些最近被频繁访问的页面。
    • 相对于FIFO算法,LRU算法更能够减少Belady异常的发生,提高系统性能。
  4. 缺点

    • 实现相对复杂:LRU算法需要维护页面的访问历史记录,实现相对复杂一些。
    • 可能存在缓存污染问题:当系统中存在一些周期性访问的页面时,LRU算法可能无法得到正确的置换决策,导致缓存污染问题。
  5. 适用场景

    • 适用于对性能要求较高的场景,需要尽可能减少缺页次数。
    • 适用于系统资源较为充足的情况下,可以承担一定的实现复杂度。
  6. 改进和优化

    • 近似LRU算法:由于实现LRU算法的代价较高,可以考虑使用近似LRU算法来降低实现复杂度。
    • 自适应置换算法:结合LRU算法和其他算法,如FIFO算法,根据系统的实际情况动态选择最适合的置换策略。
  7. 总结
    LRU算法是一种较为常用且有效的页面置换算法,能够在一定程度上提高系统性能。在实际应用中,可以根据系统的需求和特点选择合适的页面置换算法,或者结合多种算法进行优化。

总结

不同的页面置换算法适用于不同的场景,具有不同的性能特点。在实际应用中,通常会根据系统的特点和需求选择合适的页面置换算法。同时,还可以结合多种算法进行优化,如使用LRU算法的近似算法或者自适应置换算法等。

在这里插入图片描述

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

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

相关文章

idea如何让包结构分层

文章目录 前言1.选中前项目包结构2.取消后项目包结构3.情况二 前言 在大型项目中,代码的分层管理至关重要。IDEA编辑器提供了强大的package分层结构功能,帮助开发者更好地组织和管理代码。通过合理配置,我们可以清晰地看到各个package之间的…

Stable Diffusion 使用详解(1)---- 提示词及相关参数

目录 背景 提示词 内容提示词 人物及主体特征 场景 环境光照 画幅视角 注意事项及示例 标准化提示词 画质等级 风格与真实性 具体要求 背景处理 光线与色彩 负向提示词 小结 常用工具 另外几个相关参数 迭代步数 宽度与高度 提示词引导系数 图片数量 背景…

MongoDB教程(十三):MongoDB覆盖索引

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 文章目录 引言什么是覆盖…

开放式牙耳机选哪种?2024五大新晋爆卖机型精选!

开放式蓝牙耳机不会因为耳机与耳朵的贴合度不够而影响音质。此外,开放式蓝牙耳机的外形设计更加时尚,更加符合现代人的审美需求。开放式蓝牙耳机的出现不仅解决了传统入耳式蓝牙耳机佩戴不适的问题,还具有更加舒适、健康、自然、时尚等多重优…

小白可用超稳定内网穿透工具——natapp全方位使用教程(合法合规)

本篇博客仅供学习参考使用!!! 2021年11月14日,国家网信办发布《网络数据安全管理条例(征求意见稿)》,《条例》第41条第2款规定,任何个人和组织不得提供用于穿透、绕过数据跨境安全网关的程序、工具、线路等…

实验07 接口测试postman

目录 知识点 1 接口测试概念 1.1为什么要做接口测试 1.2接口测试的优点 1.3接口测试概念 1.4接口测试原理和目的 2 接口测试内容 2.1测什么 2.1.1单一接口 2.1.2组合接口 2.1.3结构检查 2.1.4调用方式 2.1.5参数格式校验 2.1.6返回结果 2.2四大块 2.2.1功能逻辑…

降低物联网开发门槛的TuyaOS操作系统重磅更新:AI赋能设备升级,配网速度10倍提升,改变传统开发方式

作为降低智能解决方案开发门槛的 TuyaOS 操作系统,此次又迎来了重大更新(点击查看 TuyaOS 完整介绍)! 本次 TuyaOS 3.10.0 版本发布了超丰富的开发框架,覆盖多种协议连接和平台,可供开发者更快速便捷地接入…

直播领夹式麦克风哪个品牌好?直播麦克风十大排行榜推荐

​在这个充满活力与创意的时代,无线领夹麦克风成为了我们捕捉声音的得力助手。无论是在熙熙攘攘的美食街探店,还是在安静的书房进行录制,还是在嘈杂的户外采访,无线领夹麦克风都能出色地完成任务。很多朋友都曾为麦克风的选择而烦…

数据字典的解释

一、没有数据字典的时候,一般通过备注来标明,数据项不同数值所代表的不同含义。 如下图所示,但这样不够灵活。 二、引入数据字典的形式 数据字典由两张表组成,分别是字典类型表和字典数据表。 字典类型表中的字段都是存在多个值…

【初阶数据结构】掌握二叉树遍历技巧与信息求解:深入解析四种遍历方法及树的结构与统计分析

初阶数据结构相关知识点可以通过点击以下链接进行学习一起加油!时间与空间复杂度的深度剖析深入解析顺序表:探索底层逻辑深入解析单链表:探索底层逻辑深入解析带头双向循环链表:探索底层逻辑深入解析栈:探索底层逻辑深入解析队列:探索底层逻辑深入解析循环队列:探索…

部分功能的实现和算法

目录 1.雪花算法 2.MD5加密 3.小眼睛显示密码 4.发送验证码 5.倒计时 1.雪花算法 SnowFlake 中文意思为雪花,故称为雪花算法。最早是 Twitter 公司在其内部用于分布式环境下生成唯一 ID。在2014年开源 scala 语言版本 雪花算法的原理就是生成一个的 64 位比特…

探索XEX数字资产交易的优势与操作指南

随着数字资产市场的快速发展,越来越多的投资者开始关注并参与其中。XEX交易所作为一个新兴的数字资产交易平台,以其用户友好的界面和高效的交易服务,迅速吸引了大量用户。本文将介绍XEX数字资产交易的主要特点和优势,帮助新手更好…

昇思25天学习打卡营第18天|munger85

DCGAN生成漫画头像 首先肯定是下载训练数据,而这些训练数据就是一些卡通头像。后来我们会看到这个具体的头像 就像其他的数据集目录一样,它是由一些目录和这个目录下面的文件组成的数据集。 有相当多的图片。所以可以训练出来比较好的效果。 图片的处理…

Python应用开发——30天学习Streamlit Python包进行APP的构建(20):配置

Configuration配置 config.toml config.toml 是一个可选文件,你可以为工作目录或全局开发环境定义它。当 config.toml 文件同时在全局和工作目录中定义时,Streamlit 会合并配置选项,并优先使用工作目录配置。此外,你还可以使用环境变量和命令行选项来覆盖其他配置选项。更…

PySide(PyQt),使用 QGraphicsOpacityEffect 设置小部件的整体显示透明度

基本的demo 在 PySide6 中,可以使用 QGraphicsOpacityEffect 类来实现整体显示透明度。下面是一个简单的示例,演示了如何为 QLabel 设置透明度: from PySide6.QtWidgets import QApplication, QLabel, QGraphicsOpacityEffect, QVBoxL…

Java--接口

目录 语法规则 例子 实现多个接口 接口之间的继承 抽象类和接口的区别 接口使用实例--Comparable接口 Clonable接口 浅拷贝 深拷贝 在现实生活中,接口的例子比比皆是,比如:电源插座,主机上的USB接口等。这些插口中可以插…

【C++】位运算:两整数之和

1.题目 2.算法思路 本题不能只用 -,那大概率用到位运算符。 异或的作用是无进位相加,所以需要通过异或运算(^)来替代加法运算,但是我们无法确定进位的信息。所以需要与运算(&)来得到进位的…

【数据结构与算法 经典例题】翻转二叉树

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法 经典例题》C语言 期待您的关注 ​ 目录 一、问题描述 二、解题思路 三、C语言实现代码 一、问题描述 给你一…

golang 字符编码 gbk/gb2312 utf8编码相互转换,判断字符是否gbk编码函数, 字符编码转换基础原理解析, golang默认编码utf8

虽然golang里面的默认编码都是统一的unicode utf8编码, 但是我们在调用外部系统提供的api时,就可能会遇到别人的接口提供的编码非 utf8编码,而是gbk/gb2312编码, 这时候我们就必须要将别人的gbk编码转换为go语言里面的默认编码ut…

2024国内AI公司50强榜单。。。

你好,我是郭震 近日,2024国内AI公司50强榜单发布。 1 AI公司50强榜单 AI公司排名前五分别是:百度,阿里,华为,腾讯,科大讯飞。 6-10名分别是:小米,商汤,字节跳…