32机的内存分页机制

Linux内存寻址之分段机制及分页机制 前言 最近在学习Linux内核,读到《深入理解Linux内核》的内存寻址一章。原本以为自己对分段分页机制已经理解了,结果发现其实是一知半解。于是,查找了很多资料,最终理顺了内存寻址的知识。现在把我的理解记录下来,希望对内核学习者有一定帮助,也希望大家指出错误之处。 分段到底是怎么回事 相信学过操作系统课程的人都知道分段分页,但是奇怪的是书上基本没提分段分页是怎么产生的,这就导致我们知其然不知 阅读详情

在实模式下寻址的时候,”段寄存器+偏移地址”进过转换计算以后得到的地址是“物理地址”,也就是在物理内存中的实际地址,而在保护模式下,“段选择器+偏移地址”转换后的地址被称为“线性地址”而不是“物理地址”,那么线性地址就是物理地址吗?

答案可能是,也可能不是,这取决于80386的内存分页机制是否被使用。

为什么有内存分页机制?

我们回顾一下,单任务的DOS系统中,一个应用程序可以使用所有的空闲内存,程序退出以后,操作系统回收所有的碎片并且合并出一个大块内存继续供下一个程序使用。由于TSR程序可能会使得内存碎片化,所以多任务系统中,碎片内存合并很重要。为了解决这个问题,分页机制应运而生。

在80386处理器中,除了和CR3寄存器(指定当前页目录的地址)相关的指令使用的是物理地址,其他所有指令都是用线性地址寻址的。

CR3:用于保存页目录表页面的物理地址的32寄存器,因此被称为PDBR。由于目录是页对齐的,所以仅高20位有效,低12位保留供更加高级的处理器使用。想CR3中装入一个新值时,低12位必须为0,从CR3中取值时,低12位被忽略。

是否启动分页机制是由80386处理器新增的CR0寄存器的31位(PG)决定的。

如果PG=0,不开启分页机制,这时所有指令寻址的地址(线性地址)就是系统中实际的物理地址

如果PG=1,开启分页机制,80386进入内存分页管理模式,所有的线性地址要经过页表才能映射到最后的物理地址。

一个xxxx:yyyyyyyy格式的虚拟地址(xxxx16位,yyyyyyyy32位),前面我们说过这个虚拟地址经过GDT/LDT转换为32位的线性的地址zzzzzzzz,当禁止分页的时候,线性地址就是物理地址;当开启分页的时候,得到的线性地址会经硬件转换为物理地址

内存寻址之分页机制 写在前面:分页机制完成线性地址到物理地址的转换 80x86 规定分页机制是可选的。分段和分页没有什么必然联系,分段可以说是 Intel 的 CPU 一直保持着的一种机制,而分页只是保护模式下的一种内存管理策略。想开启分页机制,CPU必须工作在保护模式,而工作在保护模式可以不开启分页。分页机制由控制寄存器 CR0 中的 PG 位启用,如PG=1则启用分页机制,把线性地址转换为物理地址;如果PG=0则直 阅读详情

相关推荐

Jetbrains IDE 配置上Gemini Code 插件,让你的的编程高效起飞~

Gemini Code Assist是 Google 家产品,基座模型为最新的Gemini 2.5 Pro。本篇实践了在 WebStrom 中Gemini Code Assist插件的高效编程。

2301_76993408的博客 4594

内核驱动---Win32下的内存分页机制

计算机的运行内存一般是8G、16G、32G不等,该内存称之为运行内存,与我们平常认识的磁盘这种硬物理内存不同,该片内存是计算机系统提供给各个进程进行运行的 “容器” ,各个进程都是在该片进程中运行的。可内存的大小一共就这么多(8G、16G),根本无法运行大量的进程,那怎么才能让多个进程在内存中互不干扰的独立运行呢,此时就引申出了这一概念,通过物理内存的映射,用物理内存的每一小段在虚拟内存映射出一大片的空间供多个进程运行,这就是为什么内存的大小非常少却能运行多个进程且进程间不相互影响的原因。

l729004的博客 2635

糖果【贪心】

【问题描述】 有N(1≤N <100,000)N(1≤N~<100,000)N(1≤N <100,000)种不同类型的糖果,每种糖果数量无限多。第i种糖果每颗的价格是Pi(1≤Pi≤1018),有Ci(1≤Ci≤1018)P_i(1≤P_i≤10^{18}),有C_i (1≤C_i≤10^{18)}Pi​(1≤Pi​≤1018),有Ci​(1≤Ci​≤1018)头牛想吃这种糖果。 FarmerJohnFarmer JohnFarmerJohn拥有金钱BBB元(1≤B≤1

算法小猪的博客 794

从0实现32位操作系统-实现分页机制

我们的系统运行在内存上,内存上很容易出现一些内存碎片,当我们需要一个很大的内存空间时,一般是不能利用这些内存碎片,这就使得内存的利用率降低。而分页机制则可以很好的解决这个问题,分页机制是计算机系统的一项关键技术,它将整个内存空间划分成固定大小的页面,通常为4KB或更大。这种划分使得操作系统能够更灵活地管理内存资源。每个进程的地址空间也被划分为相同大小的页面,操作系统通过一个称为页表的数据结构来维护逻辑地址到物理地址的映射关系。分页机制还可以简化内存管理操作,可以更高效的进行内存分配和释放。

qq_49340792的博客 1258

ANSYS APDL实战:手把手教你搞定电磁-热耦合分析(附完整命令流)

本文通过一个工业感应加热线圈的实战案例,手把手教你使用ANSYS APDL完成电磁-热耦合分析。内容涵盖从几何建模、材料定义、网格划分到加载求解及后处理的完整流程,重点讲解了使用PLANE13单元进行双向耦合场分析的方法与命令流调试技巧,助力工程师快速掌握这一核心仿真能力。

weixin_29284201的博客 419

别再手动算频谱了!用这个在线FFT工具,5分钟搞定JSON/CSV数据分析

本文介绍了一款高效的在线FFT工具,帮助用户快速分析JSON/CSV格式的时域数据,5分钟内完成频谱分析。通过傅里叶变换(FFT)算法,大幅提升计算效率,解决传统手动计算的痛点,适用于工业振动分析、设备故障诊断等场景。

weixin_29172201的博客 258

27 - x86系统上的内存分页

27 - x86系统上的内存分页

嵌入式wu 644

图像配准方法之灰度信息法

这系列文章是5年前的,也是从自己的QQ(632846506)日志中移过来的。https://user.qzone.qq.com/632846506/infocenter。      图像配准的方法主要有三种:基于灰度信息方法;基于空间变换域方法;基于图像特征的方法。 一、灰度信息法。     灰度信息法直接利用两幅图像之间灰度度量的相似性,以图像内部的信息为依据,采用搜索方法寻找相似度最大或

月秀明竹的专栏 1万+

深入理解计算机系统-之-内存寻址(五)--页式存储管理

前景回顾前面我们讲解了操作系统段式存储管理的主要内容。 32位,在保护方式下,其能够访问的线性地址空间可达4GB,而且允许几乎不受存储空间限制的虚拟存储器程序。虚拟存储器地址空间能够可达64TB。它还提供了复杂的存储管理和硬件辅助的保护机构和增加了支持多任务操作系统的特别优化的指令。实际上,64TB的虚拟地址空间是有磁盘等外部存储器的支持下实现的。在编写程序是可以放在磁盘存储器上,但在执行时,必须把

OSKernelLAB(gatieme) 1万+

simulink中MIL测试简单理解

输入信号设置如下:选中New Test Case1 ---INPUT。5、新建(选择New,Test from Spreadsheet)6、可以新建也可以导入(Use existing test)Source:Output为自己预测结果。3、右键子系统(Create)打开生成表格,可以自己调试。4、创建测试用例表格。保存路径为模型路径。保存路径在模型路径。8、运行测试设h置。

lingdianhuat的博客 1783

从手机到单片机:聊聊ARM Cortex家族那些事,A、R、M系列到底有啥不同?

本文深入解析ARM Cortex家族的A、R、M三大系列处理器,揭示它们在性能、实时响应和能效方面的核心差异。从智能手机到汽车电子和物联网设备,Cortex-A、R、M各司其职,分别应对复杂运算、实时控制和超低功耗场景。通过技术指标对比和典型应用案例,帮助开发者理解如何根据DMIPS/MHz等关键参数选择适合的处理器架构。

weixin_31574149的博客 350

32位操作系统-内存管理之32位分页模式 实现

A logical processor uses 32-bit paging if CR0.PG = 1 and CR4.PAE = 0. 32-bit paging translates 32-bit linear  addresses to 40-bit physical addresses.1 Although 40 bits corresponds to 1 TByte, linear a...

lo106258的博客 1073

PCL 三维重建 泊松曲面重建算法

本文介绍了基于泊松曲面重建算法的三维重建过程。泊松重建是一种利用点云数据生成三维表面的算法,它基于点云的法线估计和泊松方程的求解,能够生成光滑且连续的曲面模型。该方法适用于复杂形状和细节的表面重建。

纵马踏花向自由 1089

操作系统-物理内存和虚拟内存

https://blog.youkuaiyun.com/qq_40840459/article/details/81054164 物理内存就是物理上,真实的内存有多少;物理地址,地址对应的是总线,所以物理地址的大小跟总线的宽度相关。比如10根地址线则代表最大物理地址是2的10次方,1K的物理地址; 正在运行的一个进程,他所需的内存是有可能大于内存条容量之和的,比如你的内存条是256M,你的程序却要创建一个...

haigand的专栏 952

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

linux下的malloc申请的是虚拟还是物理的,关于malloc申请内存

自学笔记(一)个人理解linux内存采用分页的内存管理,而32位pc机还采用了段式内存管理,它的地址关系为:逻辑地址--->虚拟地址(也叫线性地址)--->物理地址。linux所有段基地址都为0,所以可以看做linux并没有采用段式的内存管理,linux的地址关系:虚拟地址--->物理地址因为,linux会为每个进程分配独立的进程地址空间(大小为3GB),这里的地址指的是虚拟地址...

weixin_29419279的博客 1384

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

32位Linux内核空间地址映射--------总结

对于32位机,总的来说物理内存被分为高端和地段内存两部分。我们可以使用virt_to_phys() 和 phys_to_virt() 方法用于896MB以下低端内存的虚拟地址和物理内存地址之间换算关系,高端内存的虚拟地址和物理内存地址之间不存在如此简单的换算关系。内核将高端内存划分为3部分:VMALLOC_START ~ VMALLOC_END、KMAP_BASE ~ FIXADDR_START和FIXADDR_START ~ 4G。对于高端内存的3部分,内存映射有三种方式:

katerdaisy的博客 1920

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

关于malloc申请内存

自学笔记(一) 个人理解 linux内存采用分页的内存管理,而32位pc机还采用了段式内存管理,它的地址关系为:逻辑地址--->虚拟地址(也叫线性地址)--->物理地址。 linux所有段基地址都为0,所以可以看做linux并没有采用段式的内存管理,linux的地址关系:虚拟地址--->物理地址 因为,linux会为每个进程分配独立的进程地址空间(大小为3GB),这里的地址指的是虚拟地址并

1285

进程的最大工作集和最小工作集----虚拟内存---物理内存----内存分页机制

物理内存 顾名思义,真实的插在计算机主机上的内存是多大就是多大了。而在CPU中的概念,物理内存就是CPU的地址线可以直接进行寻址的内存空间大小。比如8086只有20根地址线,那么它的寻址空间就是1MB,我们就说8086能支持1MB的物理内存,及时我们安装了128M的内存条在板子上,我们也只能说8086拥有1MB的物理内存空间。同理我们现在大部分使用的是32位的机子,32位的386以上CPU就可以

oQiXiLaoTou的专栏 2882

虚拟内存和物理内存的理解

前一段时间在面试总监的时候,总监问了我这样的一个问题:你个我说说物理内存和虚拟内存到底是怎么一回事? 其实之前我看过这个问题,据我理解的,当时是这么回答的“进程在运行的时候,操作系统都为其分配一个4GB的地址空间,即所谓的虚拟地址空间,一般情况下,当我们的程序很大的时候,实际的物理内存根本不能满足我们的需求的时候,这个时候操作系统就会借助磁盘空间来做虚拟的内存空间,把当前进程不需要的数据放在磁盘

happyguys12345的博客 417

内存分页机制

为什么要分页 在保护模式中,内存访问使用分段机制——即&amp;quot;段基址:段内偏移地址&amp;quot;的方式,为加强段内存的安全性和可管理性还引入了段描述符的概念对段内存加强管理。但仅仅这样还是不够的,如果应用程序过多,或者内存碎片过多,又或者曾经被换出到硬盘的内存段需要再重新装载到内存,可内存中找不到合适大小的区域,要如何解决? 内存置换 当下大部分操作系统的方案是,将一些进程不常用的内存段换出到硬盘中,腾出内存空间...

程序人生 2万+

Linux 内存管理(三)之分页机制

在早期的操作系统中,分段机制被广泛采用,但随着技术的发展,分页机制逐渐成为主流选择。接下来,我们将深入探讨分页机制的原理、工作方式以及与其他内存管理机制的比较。

Projectsauron 的博客 5万+

虚拟内存、分页机制

目录1. 虚拟内存1.1 linux进程内存布局内核空间(kernel space)(1G)用户空间(3G)1.2 分页1.3 页表页表项的结构1.4 加速分页过程转换检测缓冲区软件TLB管理1.5 针对大内存的页表多级页表倒排页表 1. 虚拟内存 虚拟内存的基本思想:每个程序都有自己的地址空间,这个空间被分割成多个块,每一个块被称作一页或页面。每一页有连续的地址范围。这些页被映射到物理内存,但并...

你又来看我了,一起学习吧 1万+

11.4、内存分页机制、内存共享

关于虚拟地址和物理地址的映射有很多思路,可以假设以程序为单位,把一段与程序运行所需要的同等大小的虚拟空间映射到某段物理空间。例如:

融码一生:专注 Python、C/C++、Linux、机器学习 & 深度学习、NLP、算法领域分享 1308

内存分段分页机制理解

现代操作系统,计算机内存是按照先分段再分页的方式管理的。 注意: 以下描述都是基于32位计算机进行描述的。 1. 分段 1) 程序直接使用物理地址的问题 考虑最原始,最直接的情况,程序中访问的地址都直接对应于物理地址。 这种方式有以下几个问题: 1)两个使用的地址有交集的程序没法同时动行。 2)写代码时,必须考虑到要运行的计算机内存大小。比如说,程序要在两台机器上运行,但是一台内存为4G,一台内存...

copbint 4510
上一篇: 32位机内存管理(下)
下一篇: x86 32位机的特权保护
OS技术解密
博客等级 码龄16年 3760粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值