免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 791 | 回复: 0
打印 上一主题 下一主题

Linux启动过程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-22 02:55 |只看该作者 |倒序浏览
启动 Linux 系统的过程包括很多阶段。不管您是引导一个标准的 x86 处理器,还是PowerPC 机器,很多流程都惊人地相似。本文将描述了从开机到登录的 Linux 启动全过程。
(1) 从BIOS到内核
BIOS自检
   
    计算机在接通电源之后首先由BIOS进行自检,即进行所谓的POST(Power On SelfTest),然后根据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读入"引导块"。
    BIOS 的第一个步骤是加电对硬件进行检测。
    BIOS 的第二个步骤是进行本地设备的枚举和初始化。
    要引导一个操作系统,BIOS 运行时会按照 CMOS 的设置定义的顺序来搜索处于活动状态并且可以引导的设备。引导设备可以是软盘、CD-ROM、硬盘上的某个分区、网络上的某个设备,甚至是 USB 闪存。通常,Linux 都是从硬盘上引导的,其中主引导记录(MBR)中包含主引导加载程序。MBR 是一个 512 字节大小的扇区,位于磁盘上的第一个扇区中(0 道 0 柱面 1 扇区)。当 MBR 被加载到 RAM 中之后,BIOS 就会将控制权交给 MBR。
(2)启动GRUB/LILO
      GRUB和LILO都是引导加载程序。最简单地讲,引导加载程序(boot loader) 会引导操作系统。当机器引导它的操作系统时,BIOS 会读取引导介质上最前面的 512 字节(即人们所知的主引导记录(master boot record,MBR))。在单一的MBR中只能存储一个操作系统的引导记录,所以当需要多个操作系统时就会出现问题。所以需要更灵活的引导加载程序。
(3)加载内核(kernel)
     当内核映像被加载到内存之后,内核阶段就开始了。内核映像并不是一个可执行的内核,而是一个压缩过的内核映像。通常它是一个 zImage(压缩映像,小于 512KB)或一个 bzImage(较大的压缩映像,大于 512KB),它是提前使用 zlib 进行压缩过的。在这个内核映像前面是一个例程,它实现少量硬件设置,并对内核映像中包含的内核进行解压,然后将其放入高端内存中,如果有初始 RAM 磁盘映像,就会将它移动到内存中,并标明以后使用。然后该例程会调用内核,并开始启动内核引导的过程。
(4)执行/sbin/init进程
      init进程是系统所有进程的起点,内核在完成核内引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。init进程是所有进程的发起者和控制者。因为在任何Linux中,它都是第一个运行的进程,所以init进程的编号(Process ID,PID)永远是1。如果init出现了问题,系统的其余部分也就随之而垮掉了。
      init进程有两个作用。第一个作用是扮演终结父进程的角色。因为init进程永远不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。如果某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失去了父进程的子进程就都会以init作为它们的父进程。
      init的第二个使用是在进入某个特定的运行级别(Runlevel)时运行相应的程序,以此对各种运行级别进行管理。它的这个作用是由/etc/inittab文件定义的。
  (5)通过/etc/inittab文件进行初始化
    init的工作是根据/etc/inittab来执行相应的脚本进行系统初始化,如设置键盘、字体, 装载模块,设置网络,等等。
    对于RedhatLinux来说,执行的顺序为:
/etc/rc.d/rc.sysinit            # 由init执行的第一个脚本
/etc/rc.d/rc.sysinit主要做初始化工作,包括:
    设置初始的$PATH变量。
    配置网络。
    为虚拟内存启动交换。
    设置系统的主机名。
    检查root文件系统,以进行必要的修复。
    检查root文件系统的配额。
    为root文件系统打开用户和组的配额。
    以读/写的方式重新装载root文件系统。
    清除被装载的文件系统表/etc/mtab。
    把root文件系统输入到mtab。
    使系统为装入模块做准备。
    查找模块的相关文件。
    检查文件系统,以进行必要的修复。
    加载所有其他文件系统。
    清除几个/etc文件:/etc/mtab、/etc/fastboot和/etc/nologin。
    删除UUCP的lock文件。
    删除过时的子系统文件。
    删除过时的pid文件。
    设置系统时钟。
    打开交换。
    初始化串行端口。
    装入模块。
执行/etc/rc.d/rc.local
    Redhat Linux中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中的最后一个,所以用户可以自己在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。
执行  /bin/login 程式   
            
    login 程序会提示使用者需输入账号及密码, 接着编码并确认密码的正确性, 若二者相合, 则为使用者进行初始化环境, 并将控制权交给 shell,即等待用户登录。
    到此为止Linux启动过程全部结束。参见下图:




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/27493/showart_387365.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP