Linux内核--读书笔记之内存寻址_第1页
Linux内核--读书笔记之内存寻址_第2页
Linux内核--读书笔记之内存寻址_第3页
Linux内核--读书笔记之内存寻址_第4页
Linux内核--读书笔记之内存寻址_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、学习好资料欢迎下载深入理解Linux内核读书笔记-内存寻址题记:最近在看深入理解linux内核这本书,看的时候记了些笔记,主要是书上一些重要知识点的音商录 还有就是自己的一些个人理解,其实一些地方我也没大看懂,还需要继续研究,先把东西记在这,一些地 方记的也有点乱,主要是为以后自己再回去学习这方面知识做一些线索指导,也希望对大家学习这方面只 是有些帮助,有什么不正确的地方还请指正三种地址逻辑地址(logical address):包含机器语言指令中用来指定一个操作数或一条指令的地址每一个逻辑地址都由一个段(segment)和偏移量(ofset)组成线性地址(又称虚拟地址):是一个32位的无符号

2、整数,可以用来表示高达4G的地址通常用十六进制数字表示,值的范围从0x00000000到0xffffff物理地址:与从微处理器的地址引脚发送到内存总线上的电信号有关内存寻址的转换过程:逻辑地址-(分段单元)-> 线性地址-(分页单元)-> 物理地址硬件分段:GDT:全局描述符LDT:局部描述符逻辑地址由一个16位长的段选择符和 32位的偏移量组成为了快速方便的找到段选择符,处理器提供了段寄存器,段寄存器的 目的是存放段选择符每个段由1个8字节的段描述符表示,它表述了段的特征,存放在 GDT或LDT中我们在寻址的时候,一般是从段选择符找到段描述符,然后从段描述符中取得段基址加上偏移量

3、就形成了我们要访问的地址段选择符(16位)用来表示指向哪个段描述符,即用来在段描述符表(GDT,LDT)中寻址,前13位是地址,能寻从 0到2A13-1 ,因此段描述符表的大小是 8192,后三位是一些特权级的限制 段描述符是用来表示这个段的一些属性,如段基址和段长之类的段选择符的后三位:index,TI,RPL逻辑机制转换成线性地址的流程:1)先检查段选择符的TI字段,以决定段描述符保存在哪一个描述符表中。TI字段(0或1)指明描述符是在 GDT中还是在LDT中2)从段选择符的index字段计算段描述符的地址,index字段的值乘以 8(一个段描述符的大小),这个结果在与gdtr或ldtr寄

4、存器中的内容相加3)把逻辑地址的偏移量与段描述符Base字段的值相加就得到了线性地址gAorkh线性地址Linux中的分段分段可以给每一个进程分配不同的线性地址空间,而分页可以把同一线性地址空间映射到不同的物理空间,与分段相比,linux更喜欢使用分页,因为:1)当所有进程使用相同的段寄存器值时,内存管理变得更简单,也就是说它们能共享同样的一组线性地址2)Linux设计目标之一是可以把他移植到绝大多数流行的处理器平台上。然而 ,RISC体系结 构对分段的支持有限Linux下所有段都是从 0x00000000开始的,所以在linux下逻辑地址和线性地址是一致的(是一致,不是相同工即逻辑地址的偏移

5、量字段的值和相应的线性地址的值是一致的。硬件分页机制分页是将线性地址转换成物理地址。为了效率起见,线性地址被分成以固定长度为单位的组,称为页(page),在一个页面上的连续的地址也被映射到连续的物理地址上分页单元把所有的 RAM分成固定程度的页框(也叫物理页,每个页框包含一个页(page)。页和页框是有区别的,前者只是一个数据块,可以存放在任何页框或磁盘中,而后者是一个存储区域常规分页:从80386起,Intel处理器的分页单元处理4KB(2人12)的页32位的线性地址被分成Directory(目录10位),Table(页表,10位),Offset(偏移量12位).线性地址的转换主要就是2种表

6、的转换,页目录表 (page directory)和页表(page table).另外,每个活动的进程必须有一个分配给它的页目录,正在使用的页目录的物理地址存放在控制寄存器的CR3中,也就是说不同的进程 CR3的值是不同的。PAE(物理地址扩展)分页机制和64位的分页,原理上和常规分页是类似的,只是他们通过增加地址线使访问范围要大一些,还有就是一些页表和offset之类的设置不一样,由于用的也不多,我也没咋深入看,感兴趣的话,可以去网上找这方面的资料为了缩小 CPU和RAM 之间的速度不匹配,引入了硬件高速缓存内存(hardware cachememory),它是基于著名的局部性原理的除了硬件

7、高速缓存(cache)外,80x86处理器还包含了另外一个称为转换后援缓冲器 (TLB)的 高速缓存用于加快线性地址的转换, 加速页表的查找。当一个线性地址被第一次使用时, 通 过慢速访问的 RAM中的页表计算出相应的物理地址。同时,物理地址被存放在一个TLB表项中,以便以后对同一个线性地址的引用可以快速的得到转换Linux的分页Linux采用了一种同时适用于 32位和64位系统的普通分页模型,在 2.6.11之前,采用三级 分页,2.6.11开始采用四级分页模型:页全局目录,页上级目录,页中间目录,页表。线件地址通过设置一些目录是否为全0,来对应32位或是64位系统。Linux定义了很多宏和

8、函数来做这方面的处理,在这就不多说了,有兴趣的话可以去看原书或是去网上找这方面的资料 物理地址布局:在初始化阶段,内核必须建立一个物理地址映射来指定哪些物理地址范围对内核来说是可用 的。Linux内核一般被加载在物理地址0x00100000开始的地方,即第二个 MB开始的地方,因为之前1MB的空间需要留给BIOS之类的程序。内核询问BIOS并了解内存的大小。随 后, 内 核 执 行 machine_specific_memory_setup(void)函 专(include/asm-i386/mach-default/setup_arch_post.h 中),该函数建立物理地址映射。setup

9、_memory()在 machine_specific_memory_setup(void)之后被调用,它分析物理内存区域表并初始化一些变量来描述内核的物理内存布局 进程页表:进程的线性地址空间被分为两个部分:从 0x00000000 到 0xbfffffff(3GB)的用户态线性地址,0XC00000000 到 0xffffffff(1GB) 内核态线性地址。宏 PAGE_OFFSET值是0xc0000000,这就是进程在线性地址空间的偏移量, 也是内核空间的开始之处。内核页表:内核维持着一组自己使用的页表,驻留在所谓的主内核页全局目录中。内核在刚刚被装入内存后,CPirn然运行在实模式,所

10、以分页功能没有被启用。内核初始化页表分为两个阶段:第一个阶段:内核创建一个有限的地址空间,包括内核的代码段和数据段,初始化页表和用于动态数据结构的共 128KB大小的空间,该空间仅够将内核装入 RAMF口对其初始化的核心数 据结构。第二个阶段:内核充分利用剩余的 RA所适当的建立分页表。临时页全局目录是在内核编译过程中静态初始化的,而临时页表是由startup_32()汇编语言函数(arch/i386/kernel/head.S)初始化的,此时的页上级目录和页中间目录相当于页全局目录项临时页全局目录放在 swapper_pg_dir变量中,临时页表放在pg0变量处开始存放,为简单起 见,我们假

11、设内核使用的段,临时页表和128KB的内存范围能容纳于RAM的前8M空间里分页第一个阶段的目标是允许在实模式和保护模式下都能很容易的对这 8MB寻址,因此, 内核创建一个映射,把 0x000000000x007fffff (8M)和 0xc00000000xc07fffff (8M)的线 性地址映射到0x000000000x007fffff的物理地址。汇编语言函数startup_32()也启用分页单元,通过向cr3控制寄存器装入 swapper_pg_dir的地址及设置cr0控制寄存器的PG标志来达到这一目的 对不同RAM的内核页表1),当RAM 小于896MB的时的最终内核页表(注:这个89

12、6MB是用内核空间的1024MB减去128MB得来的,这128MB有别的用处,如非连续空间的物理映射,高端内存页框映射等,在以后的内存管理部分会继续讲)由内核页表所提供的最终映射必须把从0XC0000000开始的线性地址转换为从 0开始的物理地址。宏_pa用于把从 PAGE_OFFSE(0xc0000000)开始的线性地址转换成相应的物理地址,而.va做相反的转化(千万要注意,这个转换只适用于内核空间,用户空间有另外的转换方式 )2),当RAM 大小在896MB和4096MB之间时的最终内核页表这种情况下,并不把 RAM全部映射到内核地址空间,Linux在初始化阶段可以做的最好的事是把一个具有 896MB的RAM窗口映射到内核线性地址空间,如果一个程序需要对现 有RAM的其余地址寻址,那就必须把其他的线性地址间隔映射到所需的RAM(在

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论