【操作系统】五分钟读懂内存管理

内存管理(mmu/smmu)/内存分配原理/多级页表 在没有内存管理的时代,物理空间只能连续的使用,一个进程要用多少存储,在进程开始就确定好了,但是进程在运行过程中由于程序局部性的原理,在一段时间内可能只使用了分配好的内存的一部分,其余大部分时间都是空闲的;另外一个问题由于地址对齐的需求,在给同时调度的多个进程分配物理空间的时候,有很多小的地址段(这个内存管理的需求也是慢慢发展而来,早期总线上的master是直接使用物理地址,再到发展出对CPU进行内存管理的MMU,到现在给SOC内部的各个具有DMA功能的模块进行内存管理的IOMMU或者叫做SMMU。 阅读详情

🔥 博客主页: 我要成为C++领域大神
🎥系列专栏:【C++核心编程】 【计算机网络】 【Linux编程】 【操作系统】
❤️感谢大家点赞👍收藏⭐评论✍️

本博客致力于分享知识,欢迎大家共同学习和交流。

计算机系统结构

什么是内存

内存(Memory),通常指计算机内存,是计算机系统中的一种存储设备,用于临时存储数据和指令,以便处理器能够快速访问和处理。内存是计算机系统的重要组成部分,主要用于存储正在运行的程序和操作系统的数据,确保系统能够高效地执行任务。内存通常分为两大类:随机存取存储器(RAM)和只读存储器(ROM)。

内存的分类

随机存取存储器(RAM)

动态随机存取存储器(DRAM):需要周期性刷新以维持数据,常用于主内存。

静态随机存取存储器(SRAM):不需要刷新,速度快,但成本高,通常用于缓存(Cache)。

只读存储器(ROM)

存储永久性数据,通常包含系统引导程序和固件,不易修改。

内存的功能

存储操作系统、应用程序和数据:内存提供一个临时存储区域,存储当前正在使用的数据和程序。

高速访问:内存的读取和写入速度远快于硬盘等存储设备,因此系统能更快地响应用户操作和执行任务。

数据交换:内存用于在CPU和其他硬件设备之间传输数据,确保高效的数据处理和系统运行。

内存的工作原理

  1. 加载数据:当程序或操作系统需要处理数据时,这些数据会从较慢的存储设备(如硬盘)加载到内存中。
  2. 执行指令:CPU从内存中读取指令和数据进行处理,执行操作。
  3. 临时存储:处理中间结果和临时数据存储在内存中,以便快速访问和修改。
  4. 数据交换:内存与CPU、硬盘、输入/输出设备之间进行数据交换。

内存的主要特性

易失性:RAM是易失性的,当电源关闭时,存储在其中的数据会丢失。

容量和速度:内存的容量和速度决定了系统的性能和多任务处理能力。更多的内存容量和更快的速度可以显著提高系统性能。

存取时间:内存的存取时间通常以纳秒(ns)为单位,表示读取或写入数据所需的时间。

内存结构

内存通常以层次结构组织,包括以下层次:

  1. 寄存器:CPU内部的高速存储单元,存取速度最快,但容量有限。
  2. 缓存(Cache):位于CPU和主内存之间,分为L1、L2、L3等不同级别,用于加速数据访问。
  3. 主内存(RAM):主要用于存储正在执行的程序和数据,容量较大,但存取速度相对较慢。

内存的应用

操作系统运行:操作系统核心及其服务和驱动程序运行在内存中。

应用程序执行:应用程序及其数据加载到内存中执行。

数据缓存:临时存储常用数据和指令,提高系统响应速度。

内存管理

连续分配管理(工业使用较多)

单一连续分配

只能用于单用户单任务操作系统。作业一旦进入内存,要等结束之后释放。无法实现多个进程共享主存

固定分区分配

将内存分成若干区,不同区可以放不同程序。

要先确定,运行就不能改变。通常采用静态重定位方式装内存。

动态分区分配

是可变分区分配。根据作业大小动态分配创建分区

非连续分配管理

页式存储

物理内存空间分为块(不一定连续),块大小与页大小相同,从0开始编号

逻辑空间等分为页,从0开始编号,页面大小为4KB

逻辑地址结构:页号,位移量(页内地址)

地址长度为32位,0~11位为页内地址,即,每页大小为4KB;12~31位为页号,最多220页

逻辑地址/212=页号%212=页内地址

物理地址=块号*块大小+偏移量

缺页中断与页面置换算法
OPT:最优页面置换算法

当发生缺页中断时,对于保存在内存中的每个逻辑页,计算在它的下一次访问之前,还需要等待多长时间,从中选择一个等待时间最长的页,作为被置换的页。

FIFO:先进先出算法

选择在内存中驻留时间最长的页面作为被置换页

LRU:最近最久未使用算法

选择最久未使用的页面,作为被置换页

页式存储优缺点
优点:

很好的解决外部碎片问题,只会产生内部碎片

打破内存分配的连续性需求

提高主存的利用率

缺点:

程序需要全部装入内存,需要有相应的硬件支持

会有内部碎片产生

动态的地址变化、方案实施需要耗用额外的系统资源

存储扩展问题没有解决一一进程大小受限制,可用块数小于进程需要的块数时需要等待

段式存储

段式存储基本原理:

用户编制的程序是由若干段组成的:

一个程序可以由一个主程序、若干子程序、符号表、栈以及数据等若于段组成。

每一段都有独立、完整的逻辑意义,每一段程序都可独立编制,且每一段的长度可以不同。

每一段都可从“0”编址,段与段之间地址不连续,但段内地址是连续的。

分段式存储管理为作业的每一个段分配一个连续的内存区域,用来存放该段信息。

段式管理的数据结构

逻辑地址结构:段号,位移量(段内地址)

段内地址 16位 即段最大大小64KB

逻辑地址/216=段号%216=段内地址

物理地址=基址+段内地址

段式存储优缺点

优点:

没有内部碎片

可以以段为单位编写和编译,隔断程序修改互相不影响

可以针对不同类型的段采取不同的保护

可以以段为单位进行共享,包括通过动态链接进行代码共享

缺点:

会产生外部碎片,不过由于进程被分为多个小块,所以外部碎片也会很小

段页式存储

段页式存储原理

用户程序先分段,每个段内部再分页 (内部原理同基本的分页、分段相同)

段页式存储总结

1、结合了段式和页式的优点;但是增加了表 (存储表和查询表)开销,只在大型计算

机系统中使用

2、段页式存储会产生外部碎片,还会产生内部碎片

段式和页式和段页式存储的比较

页式存储 就是说将程序分页时,页的大小是固定的,只根据页面大小强硬的将程序切割开而分段时比较灵活,只有一段程序有了完整的意义才将这一段切割开

分页式作业的地址空间是一维的,页间的逻辑地址是连续的,而分段式作业的地址空间则是二维的,段间的逻辑地址是不连续的

在页式、段式存储管理中,为获得一条指令或数据,须两次访问内存而段页式则须三次访问内存

内存碎片

内存碎片主要分为,内部内存碎片和外部内存碎片。

内存分页由于内存空间都是预先划分好的,页与页之间是紧密排列的,所以不会有外部碎片。

但是,因为内存分页机制分配内存的最小单位是一页,即使程序不足一页大小,我们最少只能分配一个页,所以页内会出现内存浪费,所以针对内存分页机制会有内部内存碎片的现象。

内存分段管理可以做到段根据实际需求分配内存,所以有多少需求就分配多大的段,所以不会出现内部内存碎片。

但是由于每个段的长度不固定,所以多个段未必能恰好使用所有的内存空间,会产生了多个不连续的小物理内存,导致新的程序无法被装载,所以会出现外部内存碎片的问题。

内存管理(程序员必备知识) 越是怕指针,就越要使用指针。不会正确使用指针,肯定算不上是合格的程序员。必须养成“使用调试器逐步跟踪程序”的习惯,只有这样才能发现问题的本质。 阅读详情

相关推荐

计算机系统-内存与CPU

内存(Memory),通常指随机存取存储器(RAM, Random Access Memory),是计算机系统中的一种高速存储器,用于临时存储当前正在使用的数据和程序。同样,硬盘或SSD存储计算机中的所有文件和程序,但它们访问速度较慢,需要时才加载到内存中。内存(RAM)可以类比为一个办公桌或工作台,它在计算机中起到的作用类似于你在工作时用来放置和处理当前工作资料的地方。总结来说,内存相当于计算机的工作空间,它决定了你在工作时可以同时处理多少文件和信息,以及处理这些信息的效率。

m0_58717895的博客 2087

内存管理 (Memory Management)

内存管理 (Memory Management) 页式存储段式存储段页式存储

u010249118的博客 1万+

华科操作系统实验+课程设计.zip:进程调度与内存管理实战包

操作系统课程设计常涉及进程调度、内存页面置换等核心机制,其原理基于PCB、时间片轮转、LRU等经典算法。掌握这些技术能提升系统编程与性能调优能力,广泛应用于嵌入式、服务器及云计算场景。本文以华科操作系统实验+课程设计.zip为例,提供可编译运行的工程文件,涵盖进程调度与内存管理模块,并分享编译排错、参数调整及结果解读的实战经验,帮助读者快速完成课设并转化为简历项目。

weixin_31155097的博客 297

第 3 章:内存管理

基于局部性原理,在程序装入时,仅须将程序当前要运行的少数页面或段先装入内存,而将其余部分暂留在外存,便可启动程序执行。在程序执行过程中,当所访问的信息不在内存时,由操作系统将所需要的部分调入内存,然后继续执行程序。另一方面,操作系统将内存中暂时不使用的内容换出到外存上,从而腾出空间存放将要调入内存的信息。这样,系统好像为用户提供了一个比实际内存容量大得多的存储器,称为虚拟存储器。

知一的博客 1574

操作系统实验验收通关指南:进程调度、内存管理与文件系统实现

操作系统实验常面临理论到实践的断层,进程调度、内存管理和文件系统等核心模块的实现与验收成为关键挑战。理解进程调度算法(如时间片轮转)、页面置换算法(如LRU)及同步机制的原理,能有效提升代码质量和系统性能。这些技术不仅用于课程设计,更是底层开发的基础。通过可运行代码和调试技巧,可应对验收中的参数调整与原理追问。本文基于杭电资料,分享从环境搭建到避坑的完整实现记录,助你顺利通过操作系统实验验收。

weixin_33483304的博客 265

Python爬虫实战:5分钟搞定Web of Science文献批量导出与解析(附完整代码)

本文提供了一套利用Python爬虫技术,快速实现Web of Science文献批量提取与解析的完整方案。通过解析官方导出的HTML文件,结合BeautifulSoup和pandas库,可将文献数据自动转换为结构化的Excel/CSV表格,帮助科研人员高效管理文献信息,节省大量手动整理时间。

weixin_29050513的博客 1162

图解操作系统知识总结之内存管理

点击上方“五分钟学算法”,选择“星标”公众号重磅干货,第一时间送达转自小林coding前言之前有不少读者跟我反馈,能不能写图解操作系统?既然那么多读者想看,我最近就在疯狂的复习操作系统的...

程序员吴师兄的博客 1085

技术美术个人笔记(十六)——Houdini到UE的大地形

文章目录关于地形白模制作关于PDG流程 关于地形白模制作 用heightfield noise和笔刷刷出合适的mask做山形叠加: 用remap可快捷反转mask ,用来做平原地区的小型丘陵: 接着用clip切平最低处,用distort制造侵蚀等,对部分地区用笔刷进行微调拓宽峡谷: 用经过sweep打平的曲线以及裁切的各种多面体用heightfield_project投影制作河道和水池,用blur mask并remap的方法拓宽河道 用distort、erode制造合适的弯曲和侵蚀,同理可挖出月牙形

小谁的博客 3178

五分钟带你了解 计算机操作系统——内存管理(万字详解·图文)

内存 (随机访问存储器,RAM) 是计算机中一种需要认真管理的重要资源。不管存储器有多大,程序都能把它填满。经过多年的探索,我们有了(memory hierarchy) 的概念,即计算机拥有若干 MiB 快速、昂贵且易失性的 Cache,数 GiB 速度与价格适中的易失性内存,以及数 TiB 快速、廉价但非易失性的磁盘存储。计算机中管理分层存储器体系的部分被称为它的任务是有效地管理内存,记录哪些内存正在使用,哪些内存是空闲的,在进程需要时为其分配内存,在进程使用完后释放内存。

感谢您的关注! 6694

告别迷茫!手把手教你用Altova XMLSpy编写EtherCAT从站ESI文件(附避坑指南)

本文详细介绍了如何使用Altova XMLSpy高效编写EtherCAT从站ESI文件,涵盖核心架构、通信通道配置、过程数据映射等关键步骤,并提供了常见问题排查与性能优化建议。通过实战案例和避坑指南,帮助工程师快速掌握EtherCAT从站开发技巧,提升工作效率。

weixin_42570484的博客 393

VSCode里玩转AvaloniaUI:手把手教你搭建跨平台桌面应用开发环境(附.NET 7配置避坑)

本文详细介绍了如何在VSCode中搭建AvaloniaUI跨平台桌面应用开发环境,包括.NET 7配置避坑指南。从环境准备、项目创建到调试优化,手把手教你利用VSCode和Avalonia实现高效开发,特别解决了.NET 7依赖等常见问题,助力开发者快速上手跨平台应用开发。

weixin_28826545的博客 576

五分钟了解操作系统内核

一文了解内核是什么。

GitChat 1724

深入解析SOC芯片设计中DFT OCC与ATPG的协同优化策略

本文深入探讨了在复杂SOC芯片设计中,DFT(可测试性设计)的核心组件OCC(片上时钟控制器)与ATPG(自动测试向量生成)的协同优化策略。文章从基本原理出发,分析了OCC作为测试时钟管理者的关键作用,以及ATPG作为故障检测引擎的工作机制,并重点阐述了二者在测试架构选择、参数对齐、低功耗测试等场景下的协同方法与实战技巧,旨在实现更高的测试覆盖率与更低的测试成本。

efc123456的博客 1033

操作系统内存管理_图解操作系统知识总结之内存管理

点击上方“五分钟学算法”,选择“星标”公众号重磅干货,第一时间送达转自小林coding前言之前有不少读者跟我反馈,能不能写图解操作系统?既然那么多读者想看,我最近就在疯狂的复习操作系统的知识。操作系统确实是比较难啃的一门课,至少我认为比计算机网络难太多了,但它的重要性就不用我多说了。学操作系统的时候,主要痛苦的地方,有太多的抽象难以理解的词语或概念,非常容易被劝退。即使怀着满腔热血的心情...

weixin_39860975的博客 166

2015年全国大学生电子设计大赛综合测评题

2015年全国大学生电子设计大赛综合测评题 题目如下: 一、555产生可调方波 555定时器是一种集成电路芯片,常被用于定时器、脉冲产生器和振荡电路。555可被作为电路中的延时器件、触发器或起振元件。 555定时器可组成单稳态电路、多稳态电路和无稳态电路。产生方波其实就是制造一个无稳态电路。 555定时器的引脚功能: 其中: DIS引脚与OUT脚电平一致 TRIG: 当此引脚电压降至1/3VCC(或由控制端决定的阈值电压)时输出端给出高电平。 THR:当此引脚电压升至2/3VCC(或由控制端决定的阈值电压

m0_47066484的博客 3万+

ctfshow WEB web4

ctfshow WEB web4

weixin_68416970的博客 720

五分钟学编程:当初我要是这么学习操作系统就好了!

学习编程,操作系统是你必须要掌握的基础知识,那么操作系统到底是什么呢? 这还用说么,操作系统不就是Windows、Linux、Mac、IOS、Android、IOS这类我们天天都在用的东西么? 此话不假,但是操作系统作为计算机科学里的一门基础学科,肯定不能这么接地气对不对,总的来点高大上的概念,震慑一下你们吧。 根据百度百科的介绍,操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、

HUYA69的博客 343

【控制模块算法】控制理论的进修之路

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、(经典)自动控制理论【本科阶段】二、现代控制理论【本科阶段】三、最优控制理论【硕士阶段】总结 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对对控制理论的理解做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章 提示:以下是本篇文章正文内容 一、(经典)自动控制理论【本科阶段】 一般控制工程、自动化相关的考研专业课就是自动

qq_35635374的博客 1447

内存分段分页机制理解_图解操作系统知识总结之内存管理

点击上方“五分钟学算法”,选择“星标”公众号重磅干货,第一时间送达转自小林coding前言之前有不少读者跟我反馈,能不能写图解操作系统?既然那么多读者想看,我最近就在疯狂的复习操作系统的知识。操作系统确实是比较难啃的一门课,至少我认为比计算机网络难太多了,但它的重要性就不用我多说了。学操作系统的时候,主要痛苦的地方,有太多的抽象难以理解的词语或概念,非常容易被劝退。即使怀着满腔热血的心情...

weixin_39786850的博客 364

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

UEFI规范到底规定了什么?五分钟读懂核心概念

如果你去搜"UEFI 规范",会找到一本 2800 多页的 PDF: 这本"天书"是 UEFI Forum(统一可扩展固件接口论坛)发布的官方标准文档。Intel、AMD、微软、苹果、ARM 等几十家公司共同参与制定。但你真的需要读完 2800 页吗?不需要。 今天我们用五分钟,把它的核心概念提炼出来。UEFI 规范本质上就是一份合同,规定了三方之间的接口: 这意味着:2800 页的规范,其实核心就这五大块: 我们一个一个来看。Boot Services 是操作系统启动之前,固件提供给所有 UEFI 模块

2301_76957858的博客 276

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

五分钟粗略了解Linux内核

很多时候数据是操作的内存的数据,计算机不会频繁的将数据刷到磁盘。你可以把内核看做一个Manager, 这个Manager管理资源的共享和隔离,例如给每个进程分配多大的资源。你可以把内核看作一个库,例如read write这些函数,内核提供了许多系统调用,供我们的应用程序使用。进程之间操作资源的时候,不能相互持有对方的资源而不释放,所以还需要有锁的机制。我们的电脑为什么可以连接usb和手机,是因为我们的内核有设备驱动驱动。当你使用微信的时候,你的第一想法是不是摇一摇,先找下好友哈哈。是不是也是需要管的呀。

番茄的博客 301

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

delphi 调用浏览器内核_五分钟了解操作系统内核

操作系统和内核关于操作系统是这样定义的: 操作系统(英语:Operating System,缩写:OS)是管理计算机硬件与软件资源的系统软件,同时也是计算机系统的内核与基石。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。对我们来说,操作系统最直观的感受就是桌面系统,以及上层的应用程序...

weixin_39625864的博客 291

写时复制技术:操作系统内存管理的高效实践

写时复制(Copy-on-Write)是现代操作系统中一种高效的内存管理技术,其核心原理是通过延迟物理内存的复制操作来优化性能。当父进程创建子进程时,操作系统并不立即复制整个地址空间,而是让父子进程共享相同的物理页框,并将这些页面标记为写时复制。只有在某个进程尝试修改共享页面时,才会触发页错误异常,内核此时才真正分配新页面并复制内容。这种技术显著减少了进程创建时的内存开销,尤其适用于频繁执行fork-exec操作的场景,如Shell进程创建和容器技术(如Docker)。在Linux系统中,写时复制技术的引入

weixin_32075843的博客 309

我和面试官之间关于操作系统的一场对弈!写了很久,看完你就可以盘面试官了...

点击关注上方“五分钟学算法”,设为“置顶或星标”,第一时间送达干货。来源JavaGuide,作者Guide哥很多读者抱怨计算操作系统的知识点比较繁杂,自己也没有多少耐心去看,但是面...

程序员吴师兄的博客 482
上一篇: 【Linux】虚拟文件系统
下一篇: 【数据库】SQL函数|变量
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值