《深入理解Linux内核 OREILLY》-- 读书笔记
来源:互联网 发布:伊戈尔·克鲁托伊 知乎 编辑:程序博客网 时间:2024/05/22 10:50
Linux试图在硬件无关的源代码与硬件相关的源代码之间保持清晰的界限,为了做到这点,在arch和include目录下包含了很多子目录,以对应Linux所支持的不同硬件平台。
eg:
alpha:HP的Alpha工作站
arm:基于ARM处理器的计算机和嵌入式设备
cris:CISC cpu
frv:基于Fujitsu FR-V系列微处理器的嵌入式系统
……
第二章 内存寻址
一个段的大小在1个字节到1MB之间变化;否则,将在4KB到4GB之间变化S系统标志:如果它被清0,则这是一个系统段,存储诸如LDT这种关键的
数据结构,否则它是一个普通的代码段或数据段Type描述了段的类型特征和它的存取权限DPL描述符特权级字段:用于限制对这个段的存取。它表示为访问这个字段而要求的
CPU最小的优先级。PSegment-Present标志:等于0表示段当前不在主存中。Linux总是把这个标志设为1,
因为它从来不把整个段交换到磁盘中D或B称为D或B的标志,取决于是代码段还是数据段AVL标志可以由操作系统使用,但是被Linux忽略
如果执行一个地址转换所需的页表项或页目录项中present标志被清0,那么分页
单元就把该线性地址存放在控制寄存器cr2,并产生14号异常:缺页异常field包含页框物理
地址最高20位由于每一个页框有4KB的容量,它的物理地址最低12位总是0accessed标志每当分页单元对相应页框进行寻址时就设置这个标志。分页单元从来不重置这个
标志,而是必须由操作系统去做dirty标志只应用于页表项,每当对一个页框进行写操作时就设置这个标志。
由操作系统来设置read/write标志含有页或页表的存取权限user/supervisor标志含有访问或页表所需的特权级PCD和PWT标志控制硬件高速缓存处理页或页表的方式Page Size标志只用于页目录项。如果设置为1,则页目录项指的是2MB或4MB的页框Global标志只应用于页表项。用来防止常用页从TLB高速缓存中刷新出去,只有在cr4寄存器的页
全局启用标志置位时这个标志才起作用
PAGE_SHIFT
指定Offset字段的位数;当用于80x86处理器时,它产生的值为12。这个宏由PAGE_SIZE使用以返回页的大小。最后,PAGE_MASK宏产生的值为0xfffff000,用以屏蔽Offset字段的所有位。
PMD_SHIFT
指定线性地址的Offset字段和Table字段的总位数,PMD_SIZE宏用于计算由页中间目录的一个单独表项所映射的区域大小,也就是一个页表的大小。PMD_MASK宏用于屏蔽Offset字段与Table字段的所有位。
当PAE(物理地址扩展)被禁用,PMD_SHIFT产生的值为22(Offset的12位+Table的10位),PMD_SIZE产生的值为4MB,PMD_MASK产生的值为0xffc00000。相反,当PAE被激活时,PMD_SHIFT产生的值为21(Offset4 12位+Table的9位),PMD_SIZE=2MB,PMD_MASK=0xffe00000.
大型页不使用最后一级页表,所以产生的大型页尺寸的LARGE_PAGE_SIZE宏等于PMD_SIZE,而在大型页中的用于屏蔽Offset字段和Table字段的所有位的LARGE_PAGE_MASK宏,就等于PMD_MASK。
PUD_SHIFT
确定页上级目录项所能映射的区域大小的对数。PUD_SIZE宏用于计算页全局目录中的一个单独表项所能影射的区域大小。PUD_MASK宏用于屏蔽Offset字段、Table字段、Middle Dir字段和Upper Dir字段的所有位
在80x86处理器上,PUD_SHIFT总是等价于PMD_SHIFT,而PUD_SIZE则等于2MB或4MB
PGDIR_SHIFT
确定页全局目录项所能映射的区域大小的对数。PGDIR_SIZE宏用于计算页全局目录中一个单独表项所能映射区域的大小。PGDIR_MASK宏用于屏蔽Offset、Table、Middle Dir及Upper Dir字段的所有位。
PTRS_PER_PTE, PTRS_PER_PMD, PTRS_PER_PUD, PTRS_PER_PGD
用于计算页表、页中间目录、页上级目录和页全局目录表中表项的个数。当PAE被禁用时,分别为1024,1,1,1024,当PAE被激活时,产生的值分别为512,512,1,4
物理内存布局
一般来说,Linux内核安装在RAM中从物理地址0x00100000开始的地方,也就是说,从第二个MB开始。所需页框总数依赖于内核的配置方案。为什么内核没有安装在RAM的第一个MB开始的地方?原因如下:
(1)页框0由BIOS使用
(2)物理地址从640KB到1MB(0x000a0000~0x000fffff)之间范围通常留给BIOS例程,并且映射ISA图形卡的同部内存。
(3)第一MB内的其他页框由特定计算机模型保留
进程页表
进程的线性空间分成两部分:
(1)从0x00000000~0xbfffffff的线性地址,无论进程运行在用户态还是内核态都可以寻址
(2)从0xc0000000~0xffffffff的线性地址,只有内核态的进程才能寻址
第3章 进程
第4章 中断和异常
第6章 定时测量
- 《深入理解Linux内核 OREILLY》-- 读书笔记
- 深入理解linux内核读书笔记1--系统启动
- 《深入理解Linux内核》读书笔记 - 绪论:进程
- 《深入理解Linux内核》读书笔记:第一章 绪论
- 《深入理解Linux内核》读书笔记:内存管理
- 深入理解linux内核读书笔记 (第四章)
- 深入理解linux内核读书笔记(第十二章)
- 《深入理解linux内核》读书笔记 -- 第一章 绪论
- 深入理解linux内核(第三版)-读书笔记
- 《深入理解Linux内核》--第五章 内核同步:读书笔记
- 《深入理解Linux内核》--第三章 进程:读书笔记
- 《深入理解Linux内核》--第四章 中断和异常:读书笔记
- 《深入理解Linux内核》--第六章 定时测量:读书笔记
- 《深入理解Linux内核》--第七章:进程调度:读书笔记
- 读书笔记之《深入理解Linux内核》第一、二、三章
- 读书笔记之《深入理解Linux内核》第四、五、六章
- 《深入理解Linux内核》读书笔记第一章 绪论(1)
- 《深入理解Linux内核》读书笔记 第一章 绪论(2)
- 三层结构——理论篇
- 徐家骏
- Linux 下文件描述符和打开文件之间的关系
- OC中的深浅复制
- oracle_linux_6_64(bit)上安装oracle11gR2数据库环境快速准备神器oracle-rdbms-server-11gR2-preinstall
- 《深入理解Linux内核 OREILLY》-- 读书笔记
- linux c语言 select函数用法
- 集合类
- OpenGL在VS 2008平台下的配置过程
- [leetcode 10] Regular Expression Matching
- OC中对实例变量的相关处理方法——属性
- OCP 1Z0 053 99
- 黑色帽子
- POJ 3093 Margaritas on the River Walk (0-1背包变形)