以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 操作系统原理 』  (http://bbs.xml.org.cn/list.asp?boardid=63)
----  Linux 操作系统启动部分的主要执行流程  (http://bbs.xml.org.cn/dispbbs.asp?boardid=63&rootid=&id=25061)


--  作者:enorm
--  发布时间:12/6/2005 9:37:00 PM

--  Linux 操作系统启动部分的主要执行流程
当PC 的电源打开后,80x86 结构的CPU 将自动进入实模式,并从地址0xFFFF0 开始自动执行程序代码,这个地址通常是ROM-BIOS 中的地址。PC 机的BIOS 将执行某些系统的检测,并在物理地址0 处开始初始化中断向量。此后,它将可启动设备的第一个扇区(磁盘引导扇区,512 字节)读入内存地址0x7C00 处,并跳转到这个地方。启动设备通常是软
驱或是硬盘。这里的叙述是非常简单的,但这已经足够理解内核初始化的工作过程了。
Linux 的最最前面部分是用8086 汇编语言编写的(boot/bootsect.s),它将由BIOS 读入到内存0x7C00处,当它被执行时就会把自己移到绝对地址0x90000 处,并将启动设备(boot/setup.s)的下2kB 字节的代码读入内存0x90200 处,而内核的其它部分(system 模块)则被读入到从地址0x10000 开始处,因为当时system 模块的长度不会超过0x80000(即512KB),所以它不会覆盖在0x90000 处开始的bootsect 和setup
模块。在系统加载期间将显示信息"Loading..."。然后控制权将传递给boot/setup.s 中的代码,这是另一个实模式汇编语言程序。启动部分识别主机的某些特性以及vga 卡的类型。如果需要,它会要求用户为控制台选择显示模式。然后将整个系统从地址0x10000 移至0x0000 处,进入保护模式并跳转至系统的余下部分(在0x0000 处)。此时所有32 位运行方式的设置启动被完成: IDT、GDT 以及LDT 被加载,处理器和协处理器也已确认,分页工作也设置好了;最终调用init/main.c 中的main()程序。
--  作者:reallyh
--  发布时间:12/7/2005 4:16:00 PM

--  
顶个
--  作者:reallyh
--  发布时间:12/7/2005 4:17:00 PM

--  
顶个
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
5,539.063ms