LINUX 0.11 分析集锦
1.bootsect.s
本文的目的,在将linux kernel的boot部份做一个介绍,因为笔者觉得很少有这样的
文章来介绍一个操作系统最最开始的一步----把kernel本身载入至内存中,同时进行一些
机器相关(machine dependent)的初始化工作,由于linux刚好使用的是大家最熟悉的386,
486系列PC,所以在说明其程序流程时,也刚好可以对其相关的PC硬体架构做探讨,可以
说是一举两得。不过,我必须假设读者对于汇编语言及PC最基础的架构,如寄存器,分段,
分页,中断服务等有大概的认识。
读者可在linux source code的/boot子目录下找到几个以.S作为副档名的组合语言档,
本文要说明的即是其中的bootsect.S及setup.S两个档案,及尽量简单地说明其所牵涉的
相关硬件部份。
bootsect.S
这个程序是linux kernel的第一个程序,包括了linux自己的bootstrap程序,但是
在说明这个程序前,必须先说明一般IBM PC开机时的动作(此处的开机是指"打开PC的电源"):
一般PC在电源打开时,是由内存中地址FFFF:0000开始执行(这个地址一定在ROMBIOS
中,ROMBIOS一般是在FE000h到FFFFFh中),而此处的内容则是一个jump指令,jump到另
一个位于ROMBIOS中的位置,开始执行一系列的动作,包括了检查RAM,keyboard,显示
器,软硬磁盘等等,这些动作是由系统测试码(system test code)来执行的,随着制作
BIOS厂商的不同而会有些许差异,但都是大同小异,读者可自行观察自家机器开机时,
屏幕上所显示的检查讯息。
紧接着系统测试码之后,控制权会转移给ROM中的启动程序(ROM bootstrap routine),
这个程序会将磁盘上的零道零扇区读入内存中(这就是一般所谓的bootsect,如果你曾
接触过电脑病毒,就大概听过它的大名),至于被读到内存的哪里呢?----绝对位置07C0
:0000(即07C00h处),这是IBM系列PC的特性。而位在linux开机磁盘的bootsect上的正
是linux的bootsect程序,也就是说,bootsect是第一个被读入内存中并执行的程序。
现在,我们可以开始来看看到底bootsect做了什么。
第一步
首先,bootsect将它"自己"从被ROMBIOS载入的绝对地址0x7C00处搬到0x90000处,
然后利用一个jmpi(jumpindirec
相关文档:
文档选项
打印本页
将此页作为电子邮件发送
级别: 初级
郑彦兴 (mlinux@163.com), 国防科大攻读博士学位
2003 年 5 月 01 日
共享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空间。进程A可以即时看到进程B对共 ......
复习一下,免得忘记。
显示进程属性- ps 命令
ps 命令:该命令是最基本同时也是非常强大的进程查看命令,用于报告进程标识、用户、CPU 时间消耗以及其他属性。利用它可以确定有哪些进程正在运行及运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等。ps 命令可以监控后台进程的工作情况,因 ......
学习过《软件工程》吧.软件工程可是每一个程序员"必修"的课程啊.如果你没有学习过, 建议你去看一看. 在这一章里面,我们一起来从软件工程的角度学习网络编程的思想.在我们写程序之前, 我们都应该从软件工程的角度规划好我们的软件,这样我们开发软件的效率才会高. 在网络程序里面,一般的来说都是许 ......
正则表达式 之元字符理论篇
1.元字符
\ 引用符,用于过滤掉元字符的匹配,将它当作一个普通的字符来进行匹配(包
括下面将出现的所有元字符)
. 匹配任何单个字符
? 匹配0或1个在它前面,即"?"号前面的字符
* 匹配0或任意个在它前面,即"*"号前 ......