当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > Linux 开机程序之研讨

Unix/Linux
mysql+httpd+gd+php+zend
automake 小回顾
unix黑客精神的最好诠释
www
sun t3存储的设置
RPM简明中文手册
Linux爱好者入门教程 序章 (持续更新)
第一章 Linux基础知识 (飘心)
linux下进程与线程
浅谈如何学习linux
第二章 Linux安装
硬件安装指南
Windows 2000 的桌面不見了的解決方法
部分的ADSL路由器默认帐号密码
如何设定安全log服务器呢?
iptables 规则速查
网友学习 Linux 的七点忠告
sniffer的含义及原理
Linux编程白皮书 第二章 内存管理
Linux编程白皮书 第二章 内存管理 2.1.1 请求调页 --2.1.5 访问控制

Unix/Linux 中的 Linux 开机程序之研讨


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 169 ::
收藏到网摘: n/a

  各位是否曾经对电脑整个开机的流程感到好奇呢 ? 这一次 , 我们所要讨论的
   主题 , 就是 Linux 从开机的一瞬间到 login 为止 , 到底发生了什麽事情 ?

   想必各位都知道 , 在刚开机时 , 由於 80x86 的特性 , CS ( Code Segment )
   这个暂存器中全部都放著 1 , 而 IP ( Instruction Pointer ) 这个暂存器
   中全部都放著 0 , 换句话说 , CS=FFFF 而 IP=0000 , 此时 , CPU 就依据
   CS 及 IP 的值 , 到 FFFF0H 去执行那个地方所放的指令 . 这时候 , 由於
   FFFF0H 已经到了高位址的顶端 , 所以 , FFFF0H 这个地方 , 总是会放一个
   JMP 指令 , 跳到比较低的位址 . 接著 , ROM BIOS 就会作一些检查的动作
   像记忆体 , 键盘 等...... 并在我们俗称的 UMB ( Upper Memory Block )
   之中扫描 , 看看是否有合法的 ROM 存在 ( 比如 SCSI 卡上的 ROM ) .
   假如有 , 就到里面去执行一些东西 , 执行完之後再继续刚才的行程 . 到了
   最後 , 读取磁碟机上的第一个 sector . 在这里 , 我假设各位由硬碟启动
   因此 , 就硬碟的构造而言 , 它的第一个 sector 称为 MBR ( Master Boot
   Record ) . 因为一个 sector 是 512 bytes , 而 MBR 这 512 bytes 可分
   为两个部份 , 第一个部份为 Pre-Boot 区 , 占了 446 bytes ; 第二部份
   是 Partition Table , 占了 66 bytes . Pre-Boot 区的作用之一 , 就是
   去看看那个 Partition 被标成 Active , 然後去读那个 Partition 的 Boot
   区 .

      在 Linux 的启动方面 , 一般人最常把 LILO 放在 MBR 或 Superblock
   假如你把 LILO 放在 MBR , 那很明显的 , 当读取到 MBR 的时候 , LILO
   就被执行 , 此时 , 你的萤幕上会出现  boot: 接著 , 就进行 Load Kernel
   的动作 . 在另一方面来说 , 假如你把 LILO 安装在 Superblock , 通常你
   还会有一个管理开机的程式 , 也许是住在 MBR ( 像 OSBS ) 或者是放在一
   个单独的 Partition ( 像 OS/2 的 Boot Manager ) . 再由这个管理开机
   的程式去读取 LILO , 进而做 Load Kernel 的动作 .

   好了 , 到了目前为止 , 我们已经讲到 Load Kernel 的动作 . Kernel 被
   load 到 memory 中之後 , 接著进行一连串 probe 周边的动作 , 像串联埠
   并联埠 , 软碟 , 音效卡 , 硬碟 , 光碟机 等 ...... 接著 mount root
   partition . 在这之後 , kernel 会起动 init 这个 process . init 这
   个 process 的 PID 为 1 , 它是所有 process 的祖先 .

   接下来呢 ? 系统就开始执行  /rc.d/rc.S  , 在这里 , 我们暂时打住 ,
   先对大概的 initialization script 执行的顺序作一个浏览 , 请看下面
   的流程 :

            init[1]
            rc.S   begin               <--- 目前我们已经讲到这里
              rc.serial   begin
              rc.serial   end
            rc.S   end
            init[1] enter runlevel 5
            rc.M   begin
              rc.inet1    begin
              rc.inet1    end
              rc.inet2    begin
              rc.inet2    end
              rc.font     begin
              rc.font     end