唐山网站建设

设为主页 加入收藏 繁體中文

Linux服务器启动进程详解

核心提示:文章标题:Linux服务器启动进程详解。Linux是中国站长站的1个技术频道。包括桌面利用,Linux系统治理,内核研究,嵌进式系统和开源等1些基天职类

(1)从BIOS到内核BIOS自检

计算机在接通电源以后首先由BIOS进行自检,即进行所谓的POST(PowerOnSelf
Test),然后根据BIOS内设置的引导顺序从硬盘、软盘或CDROM中读进“引导块”。在PC中,引导Linux是从BIOS中的地址0xFFFF0处开始的。BIOS的第1个步骤是加电自检(POST)。POST的工作是对硬件进行检测。BIOS的第2个步骤是进行本地设备的枚举和初始化。给定BIOS功能的不同用法以后,BIOS由两部份组成:POST代码和运行时服务。当POST完成以后,它被从内存中清算了出来,但是BIOS运行时服务依然保存在内存中,目标操纵系统可使用这些服务。

要引导1个操纵系统,BIOS运行时会依照CMOS的设置定义的顺序来搜索处于活动状态并且可以引导的设备。引导设备可以是软盘、CD-ROM、硬盘上的某个分区、网络上的某个设备,乃至是USB闪存。通常,Linux都是从硬盘上引导的,其中主引导记录(MBR)中包括主引导加载程序。MBR是1个512字节大小的扇区,位于磁盘上的第1个扇区中(0道0柱面1扇区)。当MBR被加载到RAM中以后,BIOS就会将控制权交给MBR。

提取MBR的信息

要查看MBR的内容,请使用下面的命令:

#ddif=/dev/hdaof=mbr.binbs=512count=1#od-xambr.bin

这个dd命令需要以root用户的身份运行,它从/dev/hda(第1个IDE盘)上读取前512个字节的内容,并将其写进mbr.bin文件中。od命令会以106进制和ASCII码格式打印这个2进制文件的内容。
(2)启动GRUB/LILO

GRUB和LILO都是引导加载程序。最简单地讲,引导加载程序(bootloader)会引导操纵系统。当机器引导它的操纵系统时,BIOS会读取引导介质上最前面的512字节(即人们所知的主引导记录(masterbootrecord,MBR))。在单1的MBR中只能存储1个操纵系统的引导记录,所以当需要多个操纵系统时就会出现题目。所以需要更灵活的引导加载程序。

GRUB与LILO的比较

如本文开始地方述,所有引导加载程序都以类似的方式工作,满足共同的目的。不过,LILO和GRUB之间有很多不同的地方:

  • LILO没有交互式命令界面,而GRUB具有。
  • LILO不支持网络引导,而GRUB支持。
  • LILO将关于可以引导的操纵系统位置的信息物理上存储在MBR中。假设修改了LILO配置文件,必须将LILO第1阶段引导加载程序重写到MBR。相对GRUB,这是1个更加危险的选择,由于毛病配置的MBR可能会让系统没法引导。使用GRUB,假设配置文件配置毛病,则只是默许转到GRUB命令行界面。
安全提示:

关于安全性,任何可以接触到引导磁盘/CD的人,只需要使用没有设置安全性的grub.conf或lilo.conf,便可以够绕过本文中提及的所有安全措施。特别是使用GRUB时,由于能够引导到单用户模式,所以是1个严重的安全漏洞。解决此题目的1个简单方法是在机器的BIOS中制止通过CD和软盘进行引导,并确保为BIOS设置了1个口令,使得其他人不能修改这些设置。
(3)加载内核

当内核映像被加载到内存以后,内核阶段就开始了。内核映像其实不是1个可履行的内核,而是1个紧缩过的内核映像。通常它是1个zImage(紧缩映像,小于512KB)或1个bzImage(较大的紧缩映像,大于512KB),它是提早使用zlib进行紧缩过的。在这个内核映像前面是1个例程,它实现少许硬件设置,并对内核映像中包括的内核进行解压,然后将其放进高端内存中,假设有初始RAM磁盘映像,就会将它移动到内存中,并标明以后使用。然后该例程会调用内核,并开始启动内核引导的进程。

GRUB中的手工引导

在GRUB命令行中,我们可使用initrd映像引导1个特定的内核,方法以下:

grub>kernel/bzImage⑵.6.14.2
[Linux-bzImage,setup=0x1400,size=0x29672e]

grub>initrd/initrd⑵.6.14.2.img
[Linux-initrd@0x5f13000,0xcc199bytes]

grub>boot

UncompressingLinux...Ok,bootingthekernel.
假设您不知道要引导的内核的名称,只需使用斜线(/)然后按下Tab键即可。GRUB会显示内核和initrd映像列表。
(4)履行init进程

init进程是系统所有进程的动身点,内核在完成核内引导以后,即在本线程(进程)空间内加载init程序,它的进程号是1。init进程是所有进程的发起者和控制者。由于在任何基于Unix的系统(比如Linux)中,它都是第1个运行的进程,所以init进程的编号(ProcessID,PID)永久是1。假设init出现了题目,系统的其余部份也就随之而垮掉了。

init进程有两个作用。第1个作用是扮演终结父进程的角色。由于init进程永久不会被终止,所以系统总是可以确信它的存在,并在必要的时候以它为参照。假设某个进程在它衍生出来的全部子进程结束之前被终止,就会出现必须以init为参照的情况。此时那些失往了父进程的子进程就都会以init作为它们的父进程。快速履行1下ps-af命令,可以列出很多父进程ID(ParentProcessID,PPID)为1的进程来。

init的第2个角色是在进进某个特定的运行级别(Runlevel)时运行相应的程序,以此对各种运行级别进行治理。它的这个作用是由/etc/inittab文件定义的。

#p#分页标题#e#

(5)通过/etc/inittab文件进行初始化

init的工作是根据/etc/inittab来履行相应的脚本进行系统初始化,如设置键盘、字体,装载模块,设置网络,等等。

对RedhatLinux来讲,履行的顺序为:

  • /etc/rc.d/rc.sysinit#由init履行的第1个脚本
    /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/rcX.d/[KS]

    首先终止“K”开头的服务,然后启动“S”开头的服务。

    对每1个运行级别来讲,在/etc/rc.d子目录中都有1个对应的下级目录。这些运行级别的下级子目录的命名方法是rcX.d,其中的X就是代表运行级别的数字。比如说,运行级别3的全部命令脚本程序都保存在/etc/rc.d/rc3.d子目录中。在各个运行级别的子目录中,都建立有到/etc/rc.d/init.d子目录中命令脚本程序的符号链接,但是,这些符号链接其实不使用命令脚本程序在/etc/rc.d/init.d子目录中原来的名字。假设命令脚本程序是用来启动1个服务的,其符号链接的名字就以字母S打头;假设命令脚本程序是用来封闭1个服务的,其符号链接的名字就以字母K打头。很多情况下,这些命令脚本程序的履行顺序都很重要。假设没有先配置网络接口,就没有办法使用DNS服务解析主机名!为了安排它们的履行顺序,在字母S或K的后面紧随着1个两位数字,数值小的在数值大的前面履行。比如:/etc/rc.d/rc3.d/S50inet就会在/etc/rc.d/rc3.d/S55named之前履行。寄存在/etc/rc.d/init.d子目录中的、被符号链接上的命令脚本程序是真实的实干家,是它们完成了启动或停止各种服务的操纵进程。当/etc/rc.d/rc运行通过每个特定的运行级别子目录的时候,它会根据数字的顺序顺次调用各个命令脚本程序履行。它先运行以字母K打头的命令脚本程序,然后再运行以字母S打头的命令脚本程序。对以字母K打头的命令脚本程序来讲,会传递Stop参数;类似地对以字母S打头的命令脚本程序来讲,会传递Start参数。
  • 履行/etc/ec.d/rc.local
    RedhatLinux中的运行模式2、3、5都把/etc/rc.d/rc.local做为初始化脚本中的最后1个,所以用户可以自己在这个文件中添加1些需要在其他初始化工作以后,登录之前履行的命令。在保护Linux系统运转的日子里,肯定会碰到需要系统治理员对开机或关机命令脚本进行修改的情况。假设所做的修改只在引导开机的时候起作用,并且改动不大的话,可以考虑简单地编辑1下/etc/rc.d/rc.local脚本。这个命令脚本程序是在引导进程的最后1步被履行的。
  • 履行/bin/login程式

    login程序会提示使用者需输进账号及密码,接着编码并确认密码的正确性,若2者相合,则为使用者进行初始化环境,并将控制权交给shell,即等待用户登录。
    屡次为止Linux启动进程全部结束。
最后笔者使用图1解释全部进程。

图1Linux启动流程

总结:与Linux本身非常类似,Linux的启动引导进程也非常灵活,可以支持众多的处理器和硬件平台。LILO引导加载程序对引导能力进行了扩充,但是它却缺少文件系统的感知能力。最新1代的引导加载程序,例如GRUB将更加灵活。

上1页[1][2]

http://www.fw8.net/
TAG:程序,进程,命令,脚本,内核
评论加载中...
内容:
评论者: 验证码: