《深入理解Linux内核》学习笔记-第二章 内存寻址

今天开始学习《深入理解Linux内核》这本书。

Linux作为工作中的生产力操作系统,我一直对它的高效和稳定保持好奇。作为非计算机系的学生,《操作系统》这门课也只是工作后买了一本教材自学了而已,对操作系统的理解还远远不够。所以我希望完成这本书的学习后:一、能够加深自己对操作系统的理解,二、能够大致了解Linux内核的大概 三、能够利用所学的知识进行简单的性能调优

为了督促自己学习,也为了能够回顾所学的知识点,特地开启这篇笔记,记录学习的到的知识点和自己的理解,其中难免有认识错误的地方,如果有大佬看到,还希望得到指正。

7月1日

1.在使用x86处理器时,内存地址可以分成三类:逻辑地址、线性地址、物理地址

2.内存控制单元(MMU)通过分段单元把一个逻辑地址转换成线性地址,接着分页单元把线性地址转换成一个物理地址

逻辑地址--------------->线性地址--------------->物理地址
           分段单元                 分页单元

7月4日

分段

1.一个逻辑地址由两部分组成:段选择符(16位)+相对偏移量(32位)

2.为了快速找到段选择符,处理器提供6个段寄存器存放段选择符。6个段寄存器中有cs Code Segment 代码段寄存器,ss Stack Segment 栈段寄存器,ds Data Segment 数据段寄存器。

3.cs寄存器中有一个两位的字段,用以指明CPU当前的特权级,Linux只用0级和3级,分别为内核态和用户态。

4.每一个段由8字节的段描述符表示,段描述符放在全局描述符表(Global Descriptor Table,GDT)或局部描述符表(Local Descriptor Table,LDT)中。

5.分段过程
·逻辑地址=段选择符+offset
·段选择符=index+TI+RPL
·先检查段选择符的TI字段,确认段描述符在GDT还是在LDT中,随后通过段选择符的index字段计算段描述符的地址。
·由得到的段描述符地址+offset得到线性地址

7月6日

分页

1.线性地址被分为以固定长度为单位的组,称为页;分页单元把所有RAM分成固定长度的页框;页框的长度与一个页的长度一致。
注意:页是一个数据块,可以存放在页框,也可以存放在磁盘中;页框是一个有着固定大小存储区域

2.为了节省进程页表使用RAM的数量,页表采取分级的形式来进行。Linux在2.6.11版本后开始采用4级分页模型

7月7日

1.一般来说,Linux内核安装在RAM中物理地址0x00100000开始的地方,即第二个MB开始。第一个MB主要用于BIOS。

2.进程的线性地址空间分成两个部分:
·从0x00000000到0xbfffffff的线性地址,无论进程运行在用户态还是内核态都可以寻址
·从0xc0000000到0xffffffff的线性地址,只有内核态的进程才能寻址


0 条评论
发表一条评论