【深入理解Linux内核】《第二章 内存寻址》笔记 (2014-06-28 12:38)

2.1 内存地址

  • 逻辑地址:段+偏移
  • 线性地址(虚拟地址)
  • 物理地址

2.2硬件中的分段

2.2.1 段选择符和段寄存器

15                                                3  2  1   0
------------------------------------------------
|                                                    |TI |RPL  |
|         索引号                                  |    |       |
------------------------------------------------
TI = 表指示器

RPL = 请求者特权级

段寄存器的唯一目的是存放段选择符。这些段寄存器称为CS,SS,DS,ES,FS和GS。

2.2.2段描述符

每个段由一个8字节的段描述符表示,它描述了段的特征。段描述符放在全局描述符表(GDT)或局部描述符表(LDT)中。

通常只定义一个GDT,而每个进程除了存放在GDT中的段之外如果还需要创建附加的段,就可以有自己的LDT。GDT在主存中的地址和大小存放在gdtr控制寄存器中,当前正在被使用的LDT地址和大小放在ldtr控制寄存器中。

【深入理解Linux内核】《第二章 内存寻址》笔记 (2014-06-28 12:38)

时间: 2024-08-07 07:51:18

【深入理解Linux内核】《第二章 内存寻址》笔记 (2014-06-28 12:38)的相关文章

深入理解Linux内核 - 第二章 内存寻址 01

1,三个地址 逻辑地址,机器语言指令中用来指定一个操作数或一条指令的地址. 线性地址:32位无符号整数,高达4GB.64位的cpu就是64位的线性地址 物理地址:内存芯片级内存单元寻址.老式x86由32位或36位无符号整数表示. 2,MMU内存控制单元 存在一个分段单元的硬件电路将一个逻辑地址转换为线性地址 存在一个分页单元的硬件电路将线性地址转换成一个物理地址. 问题: 1,为什么物理地址能够用36位的地址来表示? 2,为什么是逻辑地址转换成线性地址,再由线性地址转换为物理地址,这3个地址是什

深入理解Linux内核 第二章 内存寻址

内存地址 当使用80x86微处理器时,必须区分以下三种不同的地址: 1)逻辑地址(logical address),每一个逻辑地址都由一个段(segment)和偏移量(offset或者displacement)组成,偏移量指明了从段开始的地方到实际地址之间的距离. 2)线性地址(linear address),也称虚拟地址(virtual address),是一个32bit无符整数,可以用来表示4G的地址,通常由16制数字表示. 3)物理地址(physical address),用于内存芯片级内

深入理解Linux内核 - 第二章 内存寻址 04

问题:段描述符中的字段含义? 段首地址的线性地址/偏移/粒度/特权限制等信息. 1,快速访问段描述符 在加载段选择符时,相应的段描述符被自动由内存装入对应的非编程CPU寄存器.装入后就不再访问主存中的GDT或LDT. 2,段选择符的字段 index:指定了放在GDT或LDT中相应段描述符的入口 TI:0 GDT 1 LDT RPL:特权级,特指装入CS段中当前CPU的特权级. 3,段描述符地址换算 GDT地址:0x00020000 index:2 地址:0x00020000+(2*8))0x00

深入理解Linux内核 - 第二章 内存寻址 03

问题:1,逻辑地址怎么求?2,段描述符的base字段怎么求? 逻辑地址:由16位段选择符和32位偏移量组成,并不是说这个地址就是段选择符偏移32位再和偏移量相加. 段选择符:或叫段标识符,是一个16位长的字段.顾名思义,用于选择段的.为了快速找到段选择符,处理器提供段寄存器. 15~3bit,段索引号,2bit TI位, 1 0 位,特权级别. 由于段选择符仅仅在转换成线性地址中发挥作用,则通常认为32位偏移量就是逻辑地址.也即c语言中用&求得一个变量的地址就是逻辑地址. 段描述符:段选择符中,

20150514我读《深入理解linux内核》之虚拟文件系统笔记

20150514我读<深入理解linux内核>之虚拟文件系统笔记 2015-05-14 Lover雪儿 虚拟文件系统所隐含的思想就是把很多不同种类的文件系统的共同信息放入内核,其中有一个字段或者函数来支持Linux所支持的所有实际文件系统所提供的任何操作.对所调用的每个读.写或者其他函数,内核都能把他们替换成支持本地Linux文件系统.NTFS文件系统,或者文件所在的任何其他文件系统的实际函数. 虚拟文件系统可以称为虚拟文件系统转换,是一个内核软件层,用来处理与Unix标准文件系统相关的所有系

深入理解Linux内核 第一章 绪论

Unix 文件系统概述 Unix的每个进程都有一个当前工作目录. 为标识一个特定的文件,进程使用路径名.如果路径名第一个字符是斜杠,那么这个路径是绝对路径,其起点是根目录:如果第一项是目录名或者文件名,那么这个路径就是相对路径,其起点是进程的当前目录. 硬链接的限制 1)不允许用户给目录创建硬链接,因为这可能把目录的树形结构变成环形结构. 2)只有在同一文件系统中的文件之间才能创建硬链接.此限制较大,因为现代Unix系统可能包含多种文件系统,这些文件系统位于不同的磁盘和/或分区,用户也无法知道他

准备把深入理解Linux内核这本书细看一遍

第一章 绪论 Linux与其他类Unix内核的比较 硬件的依赖性 Linux版本 操作系统基本概念 Unix文件系统概述 Unix内核概述 第二章 内存寻址 内存地址 硬件中的分段 Linux中的分段 硬件中的分页 Linux中的分页 第三章 进程 进程.轻量级进程和线程 进程描述符 进程切换 创建进程 撤销进程 第四章 中断和异常 中断信号的作用 中断和异常 中断和异常处理程序的嵌套执行 初始化中断描述符表 异常处理 软中断及tasklet 工作队列 从中断和异常返回 第五章 内核同步 内核如

【读书笔记::深入理解linux内核】内存寻址

我对linux高端内存的错误理解都是从这篇文章得来的,这篇文章里讲的 物理地址 = 逻辑地址 – 0xC0000000:这是内核地址空间的地址转换关系. 这句话瞬间让我惊呆了,根据我的CPU的知识,开启分页之后,任何寻址都要经过mmu的转换,也就是一个二级查表的过程(386) 难道内核很特殊,当mmu看到某个逻辑地址是内核传来的之后,就不查表了,直接减去0xC0000000,然后就传递给内存控制器了??? 我发现网上也有人和我问了同样的问题,看这个问题 这句话太让人费解了,让人费解到以至于要怀疑

【笔记】深入理解Linux内核--内存寻址(一)

<深入理解Linux内核>中关于内存管理一共有三章,这是其中的一章,还有第八章,讨论内核怎样给自己分配主存,以及第九章,考虑怎样给进程分配线性地址. 内存地址 -- (P40) 以下三种地址是相对与8086处理器来说的. 逻辑地址(logical address) 包含在机器语言指令中用来指定一个操作数或一条指令的地址.比如下面反汇编代码中最左边的地址即逻辑地址. 1 40052d: 55 push %rbp 2 40052e: 48 89 e5 mov %rsp,%rbp 3 400531: