内核源码下载:

https://mirrors.edge.kernel.org/pub/linux/kernel/
http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/pub/linux/kernel/

本书基于2.4.16版本

分段分页

分段。Linux在启动过程中设置了段寄存器的值和全局描述符表GDT的内容。


段选择子:

// FILE: include/asm-i386/segment.h
#define __KERNEL_CS 0x10    // 内核代码段, index=2 TI=0 RPL=0
#define __KERNEL_DS 0x18    // 内核数据段, index=3 TI=0 RPL=0
#define __USER_CS   0x23    // 用户代码段, index=4 TI=0 RPL=3
#define __USER_DS   0x2B    // 用户数据段, index=5 TI=0 RPL=3

段描述符GDT:

1)段基址都为0x0000_0000;2)段界限都为0xffff; 3)粒度G都为1,即段长单位为4KB;

4)段的D位为1,即对这4个段的访问都为32位指令;5)段的P位为1,即4个段都在内存。

// FILE: arch/i386/kernel/head.S
ENTRY(gdt_table).quad 0x0000000000000000    /* NULL descriptor */.quad 0x0000000000000000   /* not used */.quad 0x00cf9a000000ffff  /* 0x10 kernel 4GB code at 0x00000000 */.quad 0x00cf92000000ffff    /* 0x18 kernel 4GB data at 0x00000000 */.quad 0x00cffa000000ffff    /* 0x23 user   4GB code at 0x00000000 */.quad 0x00cff2000000ffff    /* 0x2b user   4GB data at 0x00000000 */.quad 0x0000000000000000    /* not used */.quad 0x0000000000000000  /* not used */

分页。

Linux没有把这几个类型直接定义长整数而是定义为一个结构,是为了让gcc在编译时进行更严格的类型检查。另外,还定义了几个宏来访问这些结构的成分。

// FILE: include/asm-i386/page.h
// These are used to make use of C type-checking..
typedef struct { unsigned long pte_low; } pte_t;
typedef struct { unsigned long pmd; } pmd_t;
typedef struct { unsigned long pgd; } pgd_t;typedef struct { unsigned long pgprot; } pgprot_t;#define pte_val(x)    ((x).pte_low)
#define pmd_val(x)  ((x).pmd)
#define pgd_val(x)  ((x).pgd)
#define pgprot_val(x)   ((x).pgprot)

页表项。把标志位定义为宏,而不是位段,更有利于编码。

// FILE: include/asm-i386/pgtable.h
#define _PAGE_PRESENT   0x001
#define _PAGE_RW    0x002
#define _PAGE_USER  0x004
#define _PAGE_PWT   0x008
#define _PAGE_PCD   0x010
#define _PAGE_ACCESSED  0x020
#define _PAGE_DIRTY 0x040
#define _PAGE_PSE   0x080   /* 4 MB (or 2MB) page, Pentium+, if present.. */
#define _PAGE_GLOBAL    0x100   /* Global TLB entry PPro+ */extern pgd_t swapper_pg_dir[1024];     // 页目录表
/* page table for 0-4MB for everybody */
extern unsigned long pg0[1024];     // 一个临时页表

中断机制

Intel x86通过两片级联的中断控制器8259A来响应15个外中断源,每个8259A可管理8个中断源。

IRQ0 时钟;IRQ1 键盘

初始化中断控制器8259A

// FILE: arch/i386/kernel/i8259.c
void __init init_8259A(int auto_eoi)()
{...
}

86

[书]深入分析Linux内核源代码相关推荐

  1. 《深入分析Linux内核源代码》读书、私藏笔记大放送

    秉承着"不懂操作系统原理的程序员不是合格的程序员"的至理名言,鄙人又是买陈莉君老师的"Linux教学视频",又是研读其力作<深入分析Linux内核源代码& ...

  2. epub 深入linux内核架构_深入分析Linux内核源代码6-Linux 内存管理(2)

    每天十五分钟,熟读一个技术点,水滴石穿,一切只为渴望更优秀的你! ----零声学院 6.3 内存的分配和回收 在内存初始化完成以后,内存中就常驻有内核映像(内核代码和数据).以后,随着用 户程序的执行 ...

  3. linux内核源码多大,Linux内核源代码

    秉承着"不懂操作系统原理的程序员不是合格的程序员"的至理名言,鄙人又是买刘丽君老师的"Linux教学视频",又是研读其力作<深入分析Linux内核源代码& ...

  4. linux重复文件管理,在windows下解压缩Linux内核源代码出现重复文件原因

    在windows下解压缩Linux内核源代码出现重复文件原因 2009年06月30日 13:35 来源:ChinaUnix博客 作者:embededgood 编辑:周荣茂     原因一.因为在Lin ...

  5. 深入分析Linux内核源码oss.org.cn/kernel-book/

    本html页面地址:http://oss.org.cn/kernel-book/ 深入分析Linux内核源码 前言         第一章 走进linux 1.1 GNU与Linux的成长 1.2 L ...

  6. 乔纳森离开苹果;李彦宏被泼水;Windows 公开 Linux 内核源代码 | 开发者周刊

    [CSDN编者按]七月的第一周,科技圈就像盛夏的天气一样,冰火两重天.乔纳森离开苹果:李彦宏被泼水:Windows 公开 Linux 内核源代码......最近一周就有哪些开发者新闻呢?就在本期开发者 ...

  7. Linux内核源代码情景分析笔记

    Linux内核源代码情景分析笔记 好吧,首先我承认我要是读者的话,这篇文章我看着也头疼,因为写的太长太泛(其主要部分集中在内存管理,进程管理,文件系统)!原本是想按自己理解的精简精简的,按照操作系统中 ...

  8. 独辟蹊径品内核:linux内核源代码导读,独辟蹊径品内核:Linux内核源代码导读(china-pub首发)...

    独辟蹊径品内核:Linux内核源代码导读(china-pub首发) 市场价 :¥65.00 ¥48.75(75折) 本书样章试读: [作 者]李云华 [同作者作品] [出 版 社] 电子工业出版社   ...

  9. linux 内核源代码漫游,Linux内核源代码漫游——

    Linux内核源代码漫游 Alessandro Rubini著, rubini@pop.systemy.it 赵炯 译,gohigh@shtdu.edu.cn 本章试图以顺序的方式来解释Linux源代 ...

最新文章

  1. 线程同步monitor
  2. 金融风控实战——特征工程上
  3. 【Elasticsearch】Elasticsearch Span Query跨度查询
  4. DS博客作业02--线性表
  5. JS的浅拷贝和深拷贝
  6. 《黑客防线》《黑客X档案》《非安全-黑客手册》电子刊下载(最全版)
  7. 学习《华为基本法》(4):组织结构管理原则
  8. 从Kaminario谈谈“三大”存储热点技术
  9. 如何使用python 执行命令行传入的代码
  10. SLA,SLO和SLI工程师指南
  11. 为什么要学网络安全?如何学习网络安全?这3个理由告诉你(自己整理的50G网安资料)
  12. 图片热区自适应和设置热区边框
  13. mysql多表删除_MySQL中多表删除方法
  14. Parent ‘Unknown:Unknown:Unknown‘ has problems 异常的处理
  15. 要么甲必胜,要么乙必胜
  16. 快递查询教程,批量查询物流,正在途中、已签收的单号怎么查询
  17. 点线面的意义_浅析点线面在平面设计中作用与意义.doc
  18. 一人之下合鸿蒙技巧,一人之下:碧游村马大姐竟然会三个八奇技,网友:怪不得这么强!...
  19. 机器学习中关于偏差、方差和误差的理解
  20. 【C】 打印菱形图案

热门文章

  1. 压缩包忘记密码怎么解压
  2. TVS管工作原理及使用 ----- /*自己总结*/
  3. 《服务器和数据中心虚拟化》(VMware vSphere)4.1,4.1u1,5.0[光盘镜像]
  4. 网站在线客服系统怎么添加?
  5. Pytorch_Geometric(PyG)使用DataLoader报错RuntimeError: Sizes of tensors must match except in dimension 0.
  6. html5如何写出圆背景,利用HTML5实现Canvas虚幻圆点背景特效
  7. 手动编译LUCI 到 openwrt中 并且解决'/bin/po2lmo': Permission denied问题
  8. 软件工程通信录管理系统c语言,软件工程设计管理系统附源码.doc
  9. 淘宝教育浏览器无法观看
  10. 注解@CrossOrigin