没有合适的资源?快使用搜索试试~ 我知道了~
Linux内核分析(《joyfire linux笔记》)
需积分: 9 21 下载量 51 浏览量
2009-08-20
17:04:15
上传
评论
收藏 2.71MB DOC 举报
温馨提示
试读
64页
非常强大的Linux内核分析的资料,中文版,617页,内容包括:Linux启动,中断,内存,进程,网络,系统调用,文件系统,驱动和一些经验。很全面。
资源推荐
资源详情
资源评论
说 明
内核分析是我收集《 笔记》的主要兴趣所在。虽然花了
特别多的精力,还是很不满意。但是新文章在技术内容上越来越重复。很长一
段没有添加有趣的新内容了。
我并不想,也没有那个实力把这份笔记变成《 内核源代码情景分析》
这样全面的巨著(在一段时间内,它解决了我技术上的几乎全部疑问,甚至觉
得这份笔记多余)。重要的是避免浮躁,恢复读小说一样的心情。希望和大家
多交流!
启动
目 录
1. 启动
1. 启动步骤
2. bootsect.S
3. setup.S
4. head.S
5. compressed/misc.c
6. 内核解压
7. 用网卡从并口启动( I386 )
启动
当 PC 启动时,Intel 系列的 CPU 首先进入的是实模式,并开始执行位于地址 0xFFFF0 处的代码,也就是
ROM-BIOS 起始位置的代码。BIOS 先进行一系列的系统自检,然后初始化位于地址 0 的中断向量表。最
后 BIOS 将启动盘的第一个扇区装入到 0x7C00,并开始执行此处的代码.这就是对内核初始化过程的一个
最简单的描述。
最初, 核心的最开始部分是用 汇编语言编写的。当开始运行时,核心将自己装入到绝对地
址 ,再将其后的 字节装入到地址 处,最后将核心的其余部分装入到 。
当系统装入时,会显示 信息。装入完成后,控制转向另一个实模式下的汇编语言代码
。 部分首先设置一些系统的硬件设备,然后将核心从 处移至 处。
这时系统转入保护模式,开始执行位于 处的代码。
接下来是内核的解压缩。 处的代码来自于文件 ,它用来初始化寄存器和调用
!"##$%&程序。!"##$%&程序由 '!()!和
"#!! 组成。解压缩后的数据被装入到了 处,这也是 不能在内存小于 * 的环
境下运行的主要原因。
解压后的代码在 处开始执行,紧接着所有的 + 位的设置都将完成: ,-.、/-. 和 -.
将被装入,处理器初始化完毕,设置好内存页面,最终调用 #$ 过程。这大概是整个内核中最
为复杂的部分。
0系统开始运行1
最早的 2 代码从汇编标记 #$+ 开始执行
3#$+4
3#$
3!$
3$
3$,56
3#! $
3#78$
3"$
3!#$
39772:;<,/$*:-=>
3$"#
397
3""$!! $
3#
3!$
3""$
3""$!! $#)#$
3$!! $
37$
3!$!! #$
3?7#$!! #$
3@$
3$!! $
3##$
39772:;<,/$A5:2$<
3!$$
397
397%2:;<,/$BC,A2&
3!$
397
3! !$#
3#"$
3#$
3$
3!$
3!$
D#$+0! + 1
D#$0"!1
D!$0!#"#"! 1
D$0! +#!1
D$,560! +E!1
D#! $0#! !1
D#78$0#78!1
D"$0! +"!1
D!#$0?#! $!1
D$"#0"!1
D""$!! $0""#!1
D#0!#"##" 1
D!$0"!1
D""$0! +""!1
D""$!! $#)#$0""#!1
D$!! $0! +""!1
D7$07!1
D!$!! #$
D?7#$!! #$07#!! !1
D@$07#@!1
D$!! $0"""!1
D##$0#!1
D!$$07#!!1
D!$0!!1
D! !$#0!#"# 1
D#"$0"!1
D#$
D$ 0! +!##!1
D!$0!#"#"! 1
D!$0! +!##!1
#$%&程序用于初始化系统内核的各个部分,包括:
F设置内存边界,调用 $%&初始化内存页面。
F初始化陷阱,中断通道和调度。
F对命令行进行语法分析。
F初始化设备驱动程序和磁盘缓冲区。
F校对延迟循环。
最后的 7!G#$G作了以下工作4
D开辟内核线程GG
D调用 !$
D建立内核运行的 !$ 环(如果没有调度,就一直死循环
实际上 #$ 永远不能终止它会无穷地循环执行 !$
最后,系统核心转向 "?$$#$"%&,以便创建初始化进程()。此后,进程 开始进
入无限循环。
初始化进程开始执行!、或# 中的一个之后,系统内核就不再对程序进行直接
控制了。之后系统内核的作用主要是给进程提供系统调用,以及提供异步中断事件的处理。多任务机制已
经建立起来,并开始处理多个用户的登录和 7%&创建的进程。
01
是第一个进程,或者说内核线程
3
3!$
3$#!$#
3"$
3##!$
3!$
3#!$
3#$!$
3$$!#
3%F!%&&HI#J$
3$"#!
37$""
3!$
3!?
[ 目录 ]
启动步骤
系统引导:
涉及的文件
! KL52M#!#
! KL52M##
#!
这个程序是 的第一个程序,包括了 自己的 # 程序,
但是在说明这个程序前,必须先说明一般 ,*A2 开机时的动作%此处的开机是指
N打开 A2 的电源N&4
一般 A2 在电源一开时,是由内存中地址 <<<<4 开始执行%这个地址一定
在 5:*,: 中,5:*,: 一般是在 <>::: 到 <<<<< 中&,而此处的内容则是一个
" 指令," 到另一个位於 5:*,: 中的位置,开始执行一系列的动作,包
括了检查 5L*,,显示器,软硬磁盘等等,这些动作是由系统测试代码
%##"#!&来执行的,随着制作 ,: 厂商的不同而会有些许差异,但都
是大同小异,读者可自行观察自家机器开机时,萤幕上所显示的检查讯息。
紧接着系统测试码之后,控制权会转移给 5:* 中的启动程序
%5:*#&,这个程序会将磁盘上的第零轨第零扇区读入
内存中%这就是一般所谓的 #!,如果你曾接触过电脑病
毒,就大概听过它的大名&,至於被读到内存的哪里呢OHH绝对
位置 P24%即 P2 处&,这是 ,* 系列 A2 的特性。而位在 开机
磁盘的 #! 上的正是 的 #! 程序,也就是说,#! 是
第一个被读入内存中并执行的程序。现在,我们可以开始来
看看到底 #! 做了什么。
第一步
首先,#! 将它N自己N从被 5:*,: 载入的绝对地址 P2 处搬到
处,然后利用一个 "%"!&的指令,跳到新位置的
" 的下一行去执行,
第二步
接着,将其他 #"## 包括 -,>, 都指向 这个位置,
与 2 看齐。另外将 A 及 -Q 指向一任意位移地址%@#&,这个地址等一下
会用来存放磁盘参数表%#H"&
第三步
接着利用 ,: 中断服务 + 的第 号功能,重置磁盘控制器,使得刚才
的设定发挥功能。
第四步
完成重置磁盘控制器之后,#! 就从磁盘上读入紧邻着 #! 的 #
程序,也就是 #,此读入动作是利用 ,: 中断服务 + 的第 号功能。
# 的 " 将会读入至程序所指定的内存绝对地址 处,也就是在内存
剩余63页未读,继续阅读
资源评论
gorilla0123
- 粉丝: 117
- 资源: 16
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功