文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>引导和关机

引导和关机

时间:2006-11-21  来源:cnscn2008

.引导(bootstrapping)是启动计算机(starting up a computer)的专业说法
.操作系统所提供的正常功能在启动过程中还不能使用,因此,计算机必须“通过引导程序让自己启动起来”。
.在引导过程中,内核被加载到内存中并开始执行。各种初始化任务得以执行,然后用户就能够使用系统了。

.当打开计算机时,计算机执行存储在ROM中的引导代码,这些代码反过来试图确定如何加载并启动内核。
.内核检测系统的硬件,然后产生系统的init进程。这个进程总是PID1,即进程号PID为1
.在出现登陆提示符以前,系统必须检查并安装文件系统,而且系统的守护进程必须启动起来,这些步骤是由init进程按顺序运行的一系列shell脚本来管理的。启动脚本由于它们的命名方式而常被称作"rc文件", rc代表runcom或run command, 这是大约出现于1965年的CTSS操作系统的历史遗迹。 启动脚本的确切布局以及它们的执行方式随操作系统的不同而异

.自动引导和手工引导
 Linux系统可以以自动和手工两种方式进行引导
 自动引导方式下,系统自己执行全部引导过程,而不需要任何外部的帮助
 手工引导方式下,系统先自动执行一些过程,然后到某一时刻后,在运行大多数初始化脚本以前,把控制权交给操作员,这时候,计算机处于“单机用户模式”, 大多数系统进行还没有运行,其他用户还不能登陆系统

 在日常运行中,几乎总是使用自动引导。对于用户来说,在现代机器上典型的引导过程就是打开计算机的电源并等待(再等待)系统准备就绪。尽管如此,懂得自动引导过程并知道怎么执行手工引导还是很重要的。当出现某些故障而打断了自动引导过程时,例如,出现损坏的文件系统或者出现没有正确配置的网络接口时,通常不得不采用手工引导

.引导过程的步骤
 典型的引导过程由下面6个不同的阶段组成:
   加载并初始化内核
   检测和配置设备
   创建自发的系统进程
   操作员干预(仅用于手工引导)
   执行系统启动脚本
   多用户操作

1)内核初始化
   Linux内核本身就是一个程序,第一个引导任务就是把这个程序载入内存,以便能够执行它。
内核的路径名通常是/vmlinuz或者/boot/vmlinuz

Linux系统实现了一个两阶段加载过程。
   在第一个阶段,系统ROM从磁盘加载一个小的引导程序到内存中,然后,这个程序安排内核的载入。这个过程发生在Linux领域之外,所以各个系统之间并没有标准的过程。
   内核执行内存检测来确定有多少RAM可用。内核的一些内部数据结构是被静态分配其内存大小的,因此当内核启动时,它就为自己划分出一块固定数量的实际内存空间。这块空间保留给内核使用,而不能够为用户级进程使用。内核在控制台上打印一条消息,报告物理内存的问题以及用户进程可用的内存量。

2)硬件配置
   内核的第一项任务是检查机器的环境以确定机器有什么硬件。当你为自己的系统构建内核时要告诉内核,它应期望找到哪些硬件设备
   当内核开始执行时,它试图找到并初始化已经告诉它的每一个设备。大多数内核为它们所找到的每个设备打印出一行专门信息。
  
3)系统进程
   一旦完成了基本的初始化任务,内核就在用户空间创建几个“自发”的进程。它们之所以被称作是自发进程,是因为这些进程通常不是由系统的fork机制所创建的。
   自发进程的数量和特性随系统的不同而不同。在Linux上,看不到有PID为0的进程。和进程init一起的是几个内存和内核处理进程,一般包括kflushd、kupdate、kpiod和kswapd. 在所有这些进程中,只有init是真正完整的用户进程。 其他进程实际上都是内核的一部分,为了调度或结构上的原因而进行了装扮,使它们看上去像是进程罢了。
   一旦创建完毕自发进程,内核在引导阶段的任务就完成了。不过,处理基本操作(比如接受登陆)的进程还一个都没创建呢,而且大多数Linux守护进程也都没有启动。这些任务都是由init来负责的

4)操作员干预(仅限手工引导)
   如果系统以单用户模式进行引导,那么在init启动时,内核所给出的命令行标志会通知init实际要引导的是单用户模式。
   进程init最后会把控制权交给sulogin,后者是login的一个"中立而热心"的特殊版本,它提示用户输入root口令。如果输入口令正确,系统将生成一个root shell。 用户可以按下<Ctrl+D>而不是输入口令来绕过单用户模式而继续进入到多用户模式。
   在单用户shell中执行命令的方式和登陆到已完引导的系统上执行命令的方式类似。不过在SuSE和Debian系统上,这时通常只安装了root分区;为了使用不在/bin  /sbin 或 /etc下的程序,用户必须手工安装其它文件系统。在单用户模式下守护进程通常并不运行,因此依赖于服务器进程的那些命令将不能正常地工作。
   在正常情况下,会在自动引导的过程中运行fsck命令,以检查并修复文件系统。当您以单用户模式启动系统时,可能要手工运行fsck.
   当退出单用户shell时系统将试图继续引导以进行多用户模式。

5)执行启动脚本
   到了系统准备运行其启动脚本的时候,我们就能看出它是Linux系统了。启动脚本是普通的shell脚本,它们由init根据一定的算法来选择并运行,尽管算法有时候有些复杂,但还是相当容易理解的。

6)多用户操作
   在初始化脚本运行过以后,系统就是完全可操作的了,不过现在用户还不能登陆进来。为了在某个特定终端(包括控制台)上接受用户登陆,必须有一个getty进程监听终端或者控制台。init直接生成这些getty进程,完成引导过程。init还负责生成图形登陆系统,如xdm或gdm

...................................................................
PC引导过程
   一旦机器确定从什么设备来启动,那么它将试图加载磁盘的头512个字节的信息。 这512字节的段叫做MBR(Master Boot Record, 主引导记录)MBR包含一个程序,该程序告诉计算机从磁盘的哪个分区加载第二个引导程序(引导加载程序,boot loader). 默认的MBR是一个简单的程序,它告诉计算机从磁盘上的第一个分区获取引导加载程序。Linux提供了更加复杂的MBR,它知道怎样去处理多操作系统和多内核。 一旦MBR已经选定从什么分区进行引导,它就试图加载针对那个分区的引导加载程序。之后,引导加载程序负责加载内核。

....................................................................
GRUB (Grand Unified Boot Loader) 全面统一的引导加载程序
   用户通过运行grub-install把GRUB安装到引导驱动器上。这条命令的参数是要引导的设备名。遗憾的是,GRUB自己有一套给物理磁盘设备命名的方法,和标准的Linux约定不一样。 GRUB设备名看上去类似:
   (hd0,0)
    hd0表示物理驱动器号(从0开始)
    ,0 表示分区号(也是从0开始)
    合起来等同于Linux设备/dev/hda1
  
    如果用户想要在主(primary)设备上安装GRUB, 那么应使用命令:
    grub-install  '(hd0,0)'
    
    默认情况下,GRUB从/boot/grub/grub.conf读取它的默认引导配置

GRUB示例:
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE:  You have a /boot partition.  This means that
#          all kernel and initrd paths are relative to /boot/, eg.
#          root (hd0,0)
#          kernel /vmlinuz-version ro root=/dev/sda2
#          initrd /initrd-version.img
#boot=/dev/sda
default=0
timeout=3
splashimage=(hd0,0) /grub/splash.xpm.gz
hiddenmenu
title Fedora Core (2.6.17-1.2187_FC5smp)
        root (hd0,0)
        kernel /vmlinuz-2.6.17-1.2187_FC5smp ro root=LABEL=/ rhgb quiet
        initrd /initrd-2.6.17-1.2187_FC5smp.img

title Fedora Core (2.6.17-1.2157_FC5smp)
        root (hd0,0)
        kernel /vmlinuz-2.6.17-1.2157_FC5smp ro root=LABEL=/ rhgb quiet
        initrd /initrd-2.6.17-1.2157_FC5smp.img

解释:
   1.  default=0  如果系统在timeout=3秒时间内没有接收到来自键盘的任何输入,则自动引导
   2.  splashimage=(hd0,0) /grub/splash.xpm.gz
       表示/boot/grub/splash.xpm.gz  即通常所说的启动画面,下面列出图像文件
       #gzip  -lf /boot/grub/splash.xpm.gz
        /boot/grub/splash.xpm

.....................................................................
多重引导的技巧
    NT/2000引导加载程序非常非常想要被安装在MBR中,并成为系统的唯一真正的引导加载程序。
    为了让NT/2000的引导加载程序能引导Linux的分区,请安装Linux, 然后用软盘或CD-ROM来引导它。用户需要提取Linux分区的头512个字节(这是分区引导记录), 并把它们写入到一个文件中。可以用dd命令来完成。
    #dd if=/dev/hda2  of=linux.bin bs=512 count=1

    然后把这个文件复制到NT/2000的分区, 并在NT的引导加载程序配置中增加一条目,告诉它怎样使用这个文件引导系统。即在c:\boot.ini中加一行, 这一行包含了这个文件路径, 还有一个标签(mtools 软件的命令对于Linux和Windows环境之间移动文件来说很方便)。 对于Linux来说, 这一行看起来像下面这样子:
  c:\linux.bin="Linux"
相关阅读 更多 +
排行榜 更多 +
少女爱换装

少女爱换装

休闲益智 下载
百变英雄射击

百变英雄射击

飞行射击 下载
魔灵契约

魔灵契约

休闲益智 下载