操作系统内存管理

操作系统之内存管理 内存的管理 一、单项选择题 1.2011年计算机联考真题】在虚拟内存管理中,地址变换机构将逻辑地址变换为物理地址,形成该逻辑地址的阶段是(C )。 A.编辑 B.编译 C.链接 D.装载 2.下面关于存储管理的叙述中正确的是( D)。 A.存储保护的目的是限制内存的分配 B.在内存为M,有N个用户的分时系统中,每个用户占用M/N的内存空间 C.在虚拟内存系统中,只要磁盘空间无限大,作业就能拥有任意大的编址空间 D.实现虚拟内存管理必须有相应硬件的支持 3.【2009年计算机联考真题】分区分配内存管理方 阅读详情

物理内存

Linux为了有效使用机器中的物理内存,在系统初始化阶段内存被划分成几个功能区域:


其中,Linux内核程序占据在物理内存的开始部分,接下来是供硬盘等块设备使用的高速缓冲区部分(其中要扣除显卡内存和ROM BIOS所占用的内存地址范围)

当一个进程需要读取块设备中的数据时,系统会首先把数据读到高速缓冲区中。当有数据需要写到块设备上去时,系统也是先将数据放到高速缓冲区中,然后由块设备驱动程序写到相应的设备上。

内存的最后部分是可供所有程序随时申请和使用的主内存区。内核在使用主内存区时,首先要向内核内存管理模块提出申请,并在申请成功后方能使用。

 

在Intel 80386及以后的CPU中提供了两种内存管理(地址变换)系统:内存分段系统和分页系统。其中分页管理系统是可选择的,由系统程序员通过编程来确定是否采用。Linux同时采用了分段和分页机制。

内存地址空间概念

在Linux内核中,在进行地址映射操作时,我们要分清3种地址的概念:进程的虚拟(逻辑)地址、CPU的线性地址、实际的物理地址。


虚拟地址

虚拟地址是指由程序产生的由段选择子和段内偏移地址两部分组成的地址。

(因为这两部分组成的地址并没有直接用来访问物理内存,而是需要通过分段地址变换机制或映射后才对应到物理内存地址上,故被称为虚拟地址。)

虚拟地址空间由GDT映射的全局地址空间和由LDT映射的局部地址空间组成。

【关于GDT和LDT,请移步-<CPU的实模式与保护模式>】

Intel 80x86 CPU可以索引16384个选择符。若每个段的长度都取最大值4GB,则最大虚拟地址空间范围是16384*4GB=64TB

CPU的内存管理给程序员提供了这样一个抽象的内存模型:


即程序员(无论是汇编的还是高级语言的)可以把内存分布看做是如上图所示,可以认为内存中只有自己的程序,自己独占CPU。

这是硬件和操作系统一起提供给程序员的简单抽象。

(底层的实现:地址变换、任务切换等对程序员是透明的)

逻辑地址是指由程序产生的与段相关的偏移地址部分。在Intel保护模式下即是指程序执行代码段限长内的偏移地址。

应用程序员仅需与逻辑地址打交道,而分段和分页机制对他来说完全透明的。(由加载器来设置分段)

Linux 0.12给每个进程都划分了容量为64MB的虚拟内存空间。因此出现的逻辑地址范围是0x0000000到0x4000000。(即设置一个LDT所管辖的范围为64MB)

(现在的操作系统给进程划定的虚拟内存是4GB,当然也可以更多。)

有些资料不区分逻辑地址和虚拟地址的概念,统称逻辑地址。

线性地址

线性地址是虚拟地址到物理地址变换之间的中间层,是CPU可寻址的内存空间中的地址。

程序代码会产生逻辑地址(或者说是段中的偏移地址),加上相应段的基地址就生成了一个线性地址。(一个段最大有4G的虚拟地址空间,在加载器把程序加载时,很容易选择一个空闲的段,填好GDT和LDT)

如果启用了分页机制,那么线性地址可以再经变换产生一个物理地址。若没有启用分页机制,那么线性地址直接就是物理地址。

Intel 80386的线性地址空间容量为4GB。

物理地址

物理地址是指出现在CPU外部地址总线上的寻址物理内存的地址信号,是地址变换的最终结果地址。

内存分段机制

在实模式下,寻址一个内存地址主要是使用段基址和偏移值,段基址被存放在段寄存器中(如ds),并且段的长度被固定为64KB。段内偏移地址存放在任意一个可用于寻址的寄存器中(如si)。


在保护模式下,段寄存器中存放的不再是被寻址段的基地址,而是一个段描述符表中某一描述符项在表中的索引值。索引值指定的段描述符项中含有需要寻址的内存段的基地址、段的长度值、段的访问特权级等信息。(这样通过段描述符访问段中的信息,可检查安全性,则就是所谓的保护模式) 

这样,在保护模式下寻址一个内存地址就需要比实模式下多一个环节,即需要使用段描述符表。

注意,如果你不在一个段描述符中定义一个内存线性地址空间区域,那么该地址区域就完全不能被寻址,CPU将拒绝访问该地址区域。


保存描述符项的描述符表有3种类型,每种用于不同目的。

IDT中断描述符表(Interrupt Descriptor Table),该表保存了定义中断或异常处理过程的段描述符。IDT表直接替代了8086系统中的中断向量表。(使得在跳转到中断程序时也进行权限检查。)

GDT全局描述符表(Globle Descriptor Table),该表可被所有程序用于引用访问一个内存段。

LDT局部描述符表(Local Descriptor Table),通常每个任务使用一个LDT表。每个LDT表为对应任务提供了更多的可用描述符项,因为也为每个任务提供了可寻址内存空间的范围。 

这些表可以保存在线性地址空间的任何地方。为了让CPU能定位GDT表、IDT表和当前的LDT表,需要为CPU分别设置GDTR、IDTR和LDTR三个特殊寄存器。


可以看出,每个任务的局部描述符表LDT本身也是由GDT中描述符定义的一个内存段,在该段中存放着对应任务的代码段和数据段描述符,因此LDT段很短。同样,每个任务的任务状态段TSS也是由GDT中描述符定义的一个内存段。(TSS用于在任务切换时CPU自动保存或恢复相关任务的当前执行上下文)

内存分页管理

内存分页管理机制的基本原理是将CPU整个线性地址内存区域划分成4KB为1页的内存页面。程序申请使用内存时,系统就以内存页为单位进行分配。

为了在80x86保护模式下使用分页机制,需要把控制寄存器CR0的最高位置位。


对于Intel 80386系统,其CPU可以提供多达4GB的线性地址空间。

操作系统的内存管理(以下为一家之言,仅供参考)

有两套对内存管理的方式:

一、以Linux 0.12 内核为例(点我)
二、以Linux 2.x 内核为例(点我)

ADS基础教程12 - 参数扫描 在硬件设计、仿真以及调试阶段,很多时候需要找到一个合理的参数来使设计处于最优状态。前面所讲的调优方式是其中的最直接的手段。因此,本文将介绍ADS中如何指定元器件的参数为变量,并可以对变量设置相应的约束条件,来实现的变量进行多组参数的仿真结果的展示。在图形显示界面,添加一个Plot,并添加参数结果。此时,结果中会显示出所有的扫描结果。参数扫描的要素包含:新建变量、变量参数设置、扫描模型设置三个方面。如果找不到该图标,在菜单栏单击右键,弹出的对话框将。,弹出的选项卡中,将添加两个变量。点击菜单栏的仿真按钮。 阅读详情

相关推荐

R语言实战:非正态数据下的Scheirer–Ray–Hare检验全流程解析

本文详细解析了在R语言中执行Scheirer–Ray–Hare检验的全流程。当实验数据不符合正态分布时,该非参数检验是分析两因素设计(包括主效应和交互效应)的有效工具。文章从原理、环境配置、数据导入、核心代码到结果解读与报告撰写,提供了完整的实战指南,并附有常见的避坑建议。

weixin_29061465的博客 398

操作系统_内存管理(一)

12 位,页号部分为 20 位,若不采用分级页表,则仅页表就要占用 220x4B/4KB = 1024 页,这大大超过了许多进程自身需要的页面,对于内存来说是非常浪费资源的,而且查询页表工作也会变得十分不便、试想若把这些页表放在连续的空间内,查询对应页的物理页号时可以通过页表首页地址+页号x4B的形式得到,而这种方法查询起来虽然相对方便,但连续的1024 页对于内存的要求实在太高,并且上面也说到了其中大多数页面都是不会用到的,所以这种方法并不具有可行性。下图是一个进程在内存中的映像。

light_2025的博客 1897

Gemini 2.5 Pro国内免魔法直连教程:5分钟搞定专业级PPT图表(附折线图/柱状图案例)

本文详细介绍了如何利用Gemini 2.5 Pro快速生成专业级PPT图表,包括折线图和柱状图等常见商业图表。通过自然语言交互和智能图表生成功能,用户可以在5分钟内完成数据可视化,大幅提升工作效率。文章还提供了实战案例和高级技巧,帮助用户轻松应对各种商业场景需求。

weixin_30733003的博客 460

Windows管理内存的3种方式——堆、虚拟内存、共享内存

本文主要介绍了Windows管理内存的3种方式——堆、虚拟内存、共享内存

Tandy12356_的博客 5750

告别迷茫!手把手教你用Synopsys VC USB VIP搭建验证平台(附UVM分层序列实战解析)

本文详细介绍了如何使用Synopsys VC USB VIP搭建验证平台,并深入解析UVM分层序列的实战应用。通过Step-by-Step的操作指南和关键配置示例,帮助验证工程师高效集成USB VIP,掌握从环境搭建到测试用例开发的全套技能,特别适合处理复杂协议验证的挑战。

weixin_42520573的博客 553

手把手教你完成YOLOv10 PySide6目标检测界面搭建,使用Qt6设计YOLOv10检测系统,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

手把手教你完成YOLOv10 PySide6目标检测界面搭建,使用Qt6设计YOLOv10检测系统,前台系统+后台管理系统开发实战,可用于大论文凑工作量或毕设必备,全网最详细教程

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1733

【学习总结】操作系统(内存布局)

内存如何布局

王同学的博客 2041

别再让 AI 瞎写 SAP 代码了!这套 Claude Code Skill 的验证机制才是关键

本文深入解析了专为SAP CAP开发设计的AI辅助工具sap-cap-capire的技术架构。该工具采用四层设计:协议层集成MCP和LSP实现实时模型访问与语法检查;智能层通过4个专业化Agent(数据建模、服务开发等)分工协作;验证层确保代码质量;知识层存储文档模板。这种工程化设计解决了通用AI在CAP开发中面临的上下文不足、专业性缺失和代码质量保证等核心问题,通过本地化服务和实时反馈机制显著提升了开发效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 882

Windows操作系统存储管理——实存管理和虚存管理

Windows操作系统存储管理——实存管理和虚存管理

荔园微风的博客 2983

fbx bip互转 测试OK

fbx bip互转

jacke121的专栏 516

V90伺服 EPOS模式下回原(详细配置+SCL源代码)

/ 输出上限 100.0%rSetPoint : Real;// 设置目标值工程量。// 通道转换参考值。Td : Real;

RXXW_Dor的博客 2665

操作系统-内存管理

内存抖动通常发生在系统内存不足时,导致操作系统频繁地将页面从物理内存中换出到磁盘(页面置换),而后又需要将其重新调入内存,这样频繁的置换操作会消耗大量的计算资源和时间,影响系统的性能。通常,操作系统会被加载到计算机的物理内存中,并占用一定的地址空间。通过这种方式,双向链表可以根据页面的访问顺序进行排序,最近访问的页面始终位于链表的头部,而最久未使用的页面位于链表的尾部。内存管理是操作系统中一个非常重要的功能,它主要负责管理计算机系统中的内存资源,包括内存的分配、回收、保护和共享等。

captain 3080

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

操作系统之内存管理详解

1 内存管理概念 1.1 基本原理和要求 内存管理: 操作系统对内存的划分和动态分配 内存管理的功能有: 内存空间的分配与回收 由操作系统完成主存储器空间的分配和管理,使程序员摆脱存储分配的麻烦,提高编程效率。 地址转换 在多道程序环境下,程序中的逻辑地址与内存中的物理地址不可能一致因此存储管理必须提供地址变换功能,把逻辑地址转换成相应的物理地址。 内存空间的扩充 利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存 存储保护 保证各道作业在各自的存储空间内运行,互不干扰 程序的装

weixin_46640184的博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

操作系统的内存管理

操作系统内存管理:总的来说,操作系统内存管理包括物理内存管理和虚拟内存管理 物理内存管理: 包括程序装入等概念、交换技术、连续分配管理方式和非连续分配管理方式(分页、分段、段页式) 虚拟内存管理: 虚拟内存管理包括虚拟内存概念、请求分页管理方式、页面置换算法、页面分配策略、工作集和抖动。 一、 计算机的存储体系 内存是计算机很重要的一个资源,因为程序只有被加载到内存中才可以运行;此外,CPU所需要的指令与数据也都是来自内存的。可以说,内存是影响计算机性能的一个很重要的因素 分层存储器体系 在介绍内存管理的细

qq_40813329的博客 3178

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

【操作系统内存管理】

内存管理是操作系统中的核心功能之一,它负责为进程分配和回收内存,同时提供内存保护与共享机制。本文将介绍内存管理的主要内容,包括内存分配、内存保护、地址映射、分页与分段机制,以及虚拟内存等内容。

武帝为此的博客 925

操作系统——内存管理策略

解决方法是采用两层分页算法,即将页表再分页,具体过程是:每个页面大小与内存物理块大小相同,并为它们进行编号,可以离散地将各个页面分别存放在不同物理块中,为此再建立一张页表,称为外层页表(页表目录),即第一级页表,其中的每个表目是存放某个页表的物理地址。若有,则可分配给新进程。交换时间的主要部分是转移时间,总的转移时间直接同交换的内存的数量成比例,例如用户进程大小为100MB,并且备份存储是传输速度为50MB/s的标准硬盘,则100MB进程传入或传出内存的时间为2s,总交换时间为4s(忽略磁盘性能问题)。

天問*的后花园 884

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

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

weixin_39860975的博客 166

操作系统——内存管理(一文搞懂操作系统的内存管理)

操作系统——内存管理(一文搞懂操作系统的内存管理)

xdx_dili的博客 1万+

【操作系统】内存管理

期待您的一键三连!欢迎指正!

Guiat的博客 1147

操作系统——内存管理篇

快表,又称联想寄存器(TLB,translation lookaside buffer),是一种访问速度比内存快很多的高速缓存(TLB不是内存!),用来存放最近访问的页表项的副本,可以加速地址变换的速度。与此对应,内存中的页表常称为慢表。基于局部性原理,在程序装入时,可以将程序中很快会用到的部分装入内存,暂时用不到的部分留在外存,就可以让程序开始执行在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。

m0_63596031的博客 1139

操作系统:内存管理

操作系统:内存管理

xike1024的博客 1882

万字长文!非常详细!操作系统【内存管理】

推荐关注博主!随时获取更多关于操作系统的最新技术分享!

m0_51574586的博客 7081
上一篇: 操作系统对内存的管理
下一篇: Linux 2.x 内核对内存的管理
coo1fish
博客等级 码龄14年 22粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值