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

Unix/Linux
Linux 备份 恢复方法
Linux玩CS反恐精英的方法
在一个ISO镜像中集成多个不同的linux发行版,可刻盘,可引导
Linux 快捷键使用
Linux DHCP 服务器配置方法介绍
Linux 22端口的修改方法
Linux 记录会话过程的命令
Linux 后台执行程序如何操作?
linux Wget命令来浏览网页的方法
Linux tail命令的巧妙应用
Wine 中文存在很多的乱码怎么解决方法
linux 新手教程之创建锁文件的方法
配置Linux 保证其系统的安全
Linux DHCP协议实现过程
Linux系统下破解SAM密码
linux/unix vi 编辑器用法详解
Linux 误删文件的解决方法
Linux系统下的历史记录删除方法
Red Hat Linux 安全设置指南
Linux基本命令-注销、关机、重启

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 47 ::
收藏到网摘: 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