内存寻址主要任务:将逻辑地址转换为物理地址。
逻辑地址---通过分段单元--》线性地址----通过分页单元---》物理地址
注意三个方面:分段、分页、TLB。(都是基于保护模式)
Intel微处理器两种不同方式进行地址转换:实模式(real mode){用于开机加载时,兼容早期模型}、保护模式(protected model)。
分段和分页在某种程度上是有点多余。区别:分段可以给每一个进程分配不同的线性地址空间;分页可以把一个线性地址空间映射到不同的物理空间。
一、分段
段选择符(存放于段寄存器中)、段描述符。
1)段选择符 (和段寄存器)
段选择符Segment Selector(或者说:段标识符)16位:15-3,索引号;2,TI;1-0,RPL。
RPL(Request Privilege Level),TI(Table Indicator)
有6个段寄存器:cs,ss,ds,es,fs,gs。
其中cs 代码段寄存器,指向包含程序指令的段(一个进程中)
重要:两位字段CPL(Current Privilege Level),为0表示最高优先级,为3表示最低优先
级。Linux只用0级 和 3级,分别称为 内核态、用户态。
ss 栈段寄存器,指向包含当前程序栈的段(一个进程中)
ds 数据段寄存器,指向包含静态数据或任意的数据段(一个进程中)
其他三个寄存器做一般用途,可以指向任意的数据段。
2)段描述符
8个字节的Segment Descriptor。放在GDT(Global Descriptor Table)或LDT(Local Descriptor Table)中。
Linux中的段描述符类型:
代码段描述符、数据段描述符、任务状态段描述符(TSSD Task State Segment Descriptor)、局部描述符表描述符(LDTD Local Descriptor Table Descriptor)。
其中TSSD和LDTD只能出现在GDT中。其他两个可以出现在LDT或GDT中。
通常只定义一个GDT,每个进程除了存放在GDT中的段之外还需要创建附加的段,可以有自己的LDT。GDT在主存中的地址和大小存放在gdtr控制寄存器中,当前正被使用的LDT地址和大小放在ldtr控制寄存器中。
二、分页
1) 常规分页:
32位被分为3个域,Directory(高10位),Table(中间10位),Offset(最低12位)。
从80386起,Intel微处理器分页单元处理4Kb的页。
cr3寄存器:存放正在使用的页目录的物理地址。Directory和Cr3相加指向页目录表项、Talbe再相加指向 页表 表项,Offset再相加 指向 页 中的物理地址。
注意:0x2003ffff,Directory是0x080,因为高10位位 0010 0000 00,转为16进制,最高两位补0,为:0000 1000 0000, 0x080
2)扩展分页
允许页框大小是 4MB,(之前是4Kb)
Directory:高10位
Offset:低22位
PAE(physical Address Extend)。具体不详细列。
3)Linux中的分页
页全局目录(Page Global Directory)
页上级目录(Page Upper Directory)
页中间目录(Page Middle Directory)
页表(Page Table)
偏移(Offset)
进程页表:从0x0000 0000 到 0xbfff ffff,用户态、内核态都可以寻址
0xc000 0000 到 0xffff ffff,(3G~ 4G-1),只有内核态进程才能寻址。
0xc000 0000 (3G)这个值PAGE_OFFSET的值。进程在线性地址空间的偏移量。也是内核生存空间的开始之处。
Linux在初始化阶段一般是将896MB的RAM窗口 映射到 内核线性地址空间。(所以程序对RAM分4096Mb)
三、TLB
TLB(Translation Lookaside Buffer)用于加快线性地址转换。
L1_CACHE_BYTES在P4前的为32,P4上的为128。
Lazy TLB模式:只用于多核,多个CPU使用相同的页表,必须对这些CPU上的一个TLB表项刷新,在某些情况下,正在运行内核线程的那些CPU上的刷新可以延迟(只要不访问,下次切换就转到别的进程了)。
分享到:
相关推荐
《深入理解Linux内核中文第三版》是一部针对Linux 2.6内核的权威指南,其第8章专门探讨了“内存管理”这一核心主题。内存管理是操作系统中至关重要的一环,它涉及到如何分配、使用和回收系统内存,以确保程序高效、...
《深入理解Linux内核》是Linux系统开发领域的一本经典著作,中文第三版更是更新了大量与现代Linux内核相关的最新知识。这本书旨在帮助读者理解Linux内核的工作原理,为那些想要深入研究操作系统核心机制的人提供了...
深入理解linux内核,中文第三版,可随便复制粘贴,包含所有20章的内容
《深入理解Linux内核》是Linux系统开发领域的一本经典著作,中文第三版更是结合了最新的Linux内核版本,提供了全面且深入的内核解析。这本书涵盖了从内核设计哲学到具体实现细节的广泛主题,旨在帮助读者深入理解这...
《深入理解linux内核中文第三版》,高清晰扫描,真正中文第三版,对Linux 2.6内核进行了详细而细致的讲解。由于之前的压缩包分卷太多,现提供每一章的单独下载文件。100%高清晰第三版!
《深入理解Linux内核》和《Linux内核设计与实现》是两本经典的Linux内核研究书籍,旨在帮助读者从宏观到微观全面了解Linux操作系统的核心机制。这两本书结合阅读,可以为初学者提供一个系统而深入的学习路径。 ...
俺花了N个大洋买来的,现在免费提供给大家
深入理解Linux内核-内存篇,阅读笔记
通过阅读《深入理解Linux内核》第三版,读者不仅可以掌握Linux内核的基本原理,还能了解到最新的技术和最佳实践。书中的书签功能则可以帮助快速定位到特定主题,提升学习效率。对于想要在Linux领域深入发展的专业...
深入理解Linux内核(第三版 中文版).pdf 高清下载
《深入理解Linux内核》是Linux领域的经典之作,它的第三版中文版提供了全面而深入的Linux内核解析,对于想要深入了解Linux操作系统底层运作原理的读者来说,无疑是一本宝贵的参考资料。书中涵盖了从进程管理、内存...
深入理解linux内核第三版中文版,详细讲解linux内部运作机制,学习linux的经典教材。 目录: 前言 第一章绪论 第二章内存寻址 第三章进程 第四章中断和异常 第五章内核同步 第六章定时测量 第七章进程调度 第八章...
《深入理解Linux内核中文第三版》是一部专为想要深入了解Linux操作系统内核的读者准备的权威书籍。本书针对Linux 2.6内核进行了全面且深入的解析,旨在帮助读者理解这个复杂而高效的系统是如何工作的。第一章节"绪论...
深入理解linux内核 (第二版) 中文版 2004版
《深入理解Linux内核》是Linux领域的经典之作,中文第三版更是对原有的内容进行了更新和完善,以适应现代Linux内核的发展。这本书旨在帮助读者深入理解Linux操作系统的工作原理,特别是针对那些希望提升技术水平、...
《深入理解linux内核中文第三版》,高清晰扫描,真正中文第三版,对Linux 2.6内核进行了详细而细致的讲解。由于之前的压缩包分卷太多,现提供每一章的单独下载文件。100%高清晰第三版!
深入理解linux内核(第三版)高清pdf_第2章 内存寻址 涵盖2.6内核版本
深入理解Linux内核第3版.pdf 希望能对你有帮助
《深入理解Linux内核中文第三版》是一部针对Linux 2.6内核的权威指南,旨在帮助读者深入了解操作系统的核心机制。第二章“进程”是理解操作系统运作基础的关键部分,它涵盖了进程的概念、创建、调度、通信以及它们在...