linux内核阅读记录

原创 2006年05月23日 20:01:00

目录:
1概述 (ok)
2内核体系结构(ok)
3引导启动(ok)
4初始化程序(ok)
5内核代码   (ok)
6块设备驱动代码
7字符设备驱动代码
8数学协处理器 (ok)
9文件系统(ok)
10内存管理(reading) P443 (ok)
11头文件
12.库文件
13. 建造工具P573
14. 实验环境建造P580
书后附录:
1. 内核主要参数P602--604
2. 内核数据结构 P605—612
3. 80X86保护运行模式  613—623
4. ASCii 表  --624
索引

tips:
中断用于处理cpu外部的异步事件
异常用于处理cpu执行过程中自身检测的问题

posix(portable operating system interface for computing systems)
GDT 全局段描述符表
LDT 局部段描述符表
IDT 中断描述符表
page 35 开机引导过程描述

page 55  启动部分
:开机后,cpu进入实模式,从0xffff0执行,这里通常是rom-bios的地址,执行系统
检测,从物理0初始化中断向量.此后将第一扇区(boot/bootsect.s)读入绝对地址0x7c00(31kb),当它执行时,把自己移到绝对地址0x90000,并把启动设备中后2kb代码(boot/setup.s)读入0x90200处,内核的其他部分(system模块)被读入0x10000,后面setup程序会把system模块移到0x00000处,此时system代码的地址就是实际的物理地址

保护模式使用段描述符索引,实模式使用段基址.

Head.s没看完,AT&T的汇编有些难懂!

Main函数调用了很多函数,需要跟踪阅读!

内存管理 阅读 P459
Linux系统内存管理仅使用一个页目录表(4字节1K个),索引1024个页表,每个页表索引1024个内存页.每个内存页4K
32位线性地址:页目录项10 页表项10  页内偏移12

页目录和页表项结构
页框地址(32-12)   修改位1 已访问位1 用户/超级用户位1 读写位1 存在位1

内存分布
内核模块 高速缓冲(4M) 虚拟盘 主内存区
head.s程序在物理地址0处放置一个页目录表,其后4个页表用于任务0

写时复制:fork建立新进程时,子进程与父进程共享内存区,只有当其中一个进程进行写操作时,系统才为其另外分配内存.

被动写时复制操作:写操作->页面异常中断->处理写保护异常->重新执行写操作

 

内核代码 阅读

把内存地址调整为4K的边界。也就是让他的低12位为零!
START&=OXFFFFF000

80386任务状态段tss
cpu进行任务切换时,tss的字段分为两类
1. CPU
通用寄存器(EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI);

段寄存器(ES, CS, SS, DS, FS, GS);

标志寄存器(EFLAGS);

指令指针(EIP);
 
前一个执行任务的TSS的选择符(仅当返回时才更新)。
 
2.CPU读取但不会更改的静态信息集。这些字段有:
 
任务的LDT的选择符;
 
含有任务页目录基地址的寄存器(PDBR);
 
特权级0-2的堆栈指针;
 
当任务进行切换时导致CPU 产生一个调试(debug)异常的T-比特位(调试跟踪位);
 
I/O比特位图基地址(其长度上限就是TSS的长度上限,在TSS描述符中说明)。

  tss由tr寄存器指示,ltr,str存取段选择符

  在Linux 0.11中,图中SS0:ESP0用于存放任务在内核态运行时的堆栈指针。
  SS1:ESP1 和SS2:ESP2分别对应运行于特权级 1 和 2 时使用的堆栈指针,
  这两个特权级在 Linux 中没有使用。
用户态时堆栈指针则保存在SS:ESP 寄存器中

rid实际id
eid有效id
suid超级用户id
uid 用户id
gid组id
pid进程id

p183 块设备

Linux内核阅读

  • 2014年10月18日 11:00
  • 624KB
  • 下载

linux内核源码阅读之facebook硬盘加速flashcache之二

flashcache数据结构都在flashcache.h文件中,但在看数据结构之前,需要先过一遍flashcache是什么,要完成哪些功能?如果是自己设计这样一个系统的话,大概要怎么设计。 前面讲过...

Linux内核阅读笔记

  • 2013年06月11日 11:43
  • 59KB
  • 下载

linux内核源码阅读之facebook硬盘加速利器flashcache之初

这个星期偷着点闲看下flashcache,所谓知其然知其所以然,本着程序员追根抛底的职业素养,看看flashcache究竟是何等的三头六臂。 一、flashcache是什么 flashcache是一个...

Linux内核源码阅读以及工具

随着linux的逐步普及,现在有不少人对于Linux的安装及设置已经比较熟悉了。与Linux 的蓬勃发展相适应,想深入了解Linux的也越来越多。而要想深入了解Linux,就需要阅读和分析linux内...

阅读赵炯的《Linux内核完全注释》之前必须知道的!

转自:http://blog.csdn.net/zxremail/article/details/5151244 Linux 0.11虽然不是什么“珠穆朗玛峰”,但它肯定还是“华山”或“泰山”。...

Ubuntu搭建OpenGrok环境阅读Linux内核源代码

CSDN GitHub Ubuntu搭建OpenGrok环境阅读Linux内核源代码 AderXCoding/system/tools/opengrok 本作品采用知识共享署名-非商业性使...
  • gatieme
  • gatieme
  • 2016年11月08日 16:42
  • 2096

阅读linux内核代码的工具-- Source Insight

http://blog.csdn.net/luckyaslan/article/details/7869235 Step 1:安装Source Insight并启动程序 可以进入图1界面,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux内核阅读记录
举报原因:
原因补充:

(最多只允许输入30个字)