选择显示字体大小

linux系统初始化过程全解

一、 概况

  系统的引导和初始化是操作系统实现控制的第一步,也是集中体现系统优劣的重要部分。linux作为一个免费的准unix操作系统,在众多业余爱好者以及小型商业处理市场表现不俗,成为继windows系列后的另一个主流。了解linux系统的初始化,对于进一步掌握unix系统是十分有帮助的。
通常,linux系统的初始化可以分为两部分:内核部分和init程序部分。内核主要完成系统的硬件检测和初始化,init程序则主要完成系统的各项配置。
  本文将着眼linux系统初始化的两个部分,初步解析linux的特点。

二、 初始化详解

1.内核部分

  通常情况下,计算机首先用lilo程序引导内核的一部分(这部分没有被压缩),以此来引导内核的其他部分。lilo程序是最常用的、也是比较完善的linux系统引导器,pc机通常从硬盘的引导扇区读取这部分程序。关于lilo程序的详细内容可以参照其他资料。
  内核被解压缩并装入内存后,开始初始化硬件和设备驱动程序。下面是内核初始化系统的具体步骤(各个版本之间会有一定的差异,下面是2.2.16-22版本的一个例子):
(1) 检测cpu的主频和控制台的显示类型,并对cpu速度用bogo mips程序进行估算。
(2) 此后内核通过外设显示系统内存信息:如131072k(128m),127820k剩余,使用的具体情况为:1048k内核代码,412k保留,1728k数据等。尔后是各类hash table的信息。
(3) 内核加载磁盘空间限量支持,完成cpu检测(包括检查数学协处理器),以及posix适应性检测。
(4) 初始化pci bios,检测系统的pci设备,并加载tcp/ip网络支持。
(5) 内核开始检测其他各种硬件设备:如ps/2端口设备,串行口设备,硬盘,软盘,scsi等。
此后,内核将启动init程序,形成系统的第一个进程。下面是dmesg记录的内核初始化信息(部分):

detected 499845 khz processor.
console: colour vga+ 80x25
calibrating delay loop... 996.15 bogomips
memory: 127820k/131072k available (1048k kernel code, 412k reserved, 1728k data, 64k init, 0k bigmem)
dentry hash table entries: 262144 (order 9, 2048k)
buffer cache hash table entries: 131072 (order 7, 512k)
page cache hash table entries: 32768 (order 5, 128k)
vfs: diskquotas version dquot_6.4.0 initialized
cpu: intel celeron (mendocino) stepping 05
checking 386/387 coupling... ok, fpu using exception 16 error reporting.
checking hlt instruction... ok.
posix conformance testing by unifix
mtrr: v1.35a (19990819) richard gooch (rgooch@atnf.csiro.au)
pci: pci bios revision 2.10 entry at 0xfb190
pci: using configuration type 1
pci: probing pci hardware
linux.net4.0 for linux 2.2
……
starting kswapd v 1.5
detected ps/2 mouse port.
serial driver version 4.27 with many_ports multiport share_irq enabled
ttys00 at 0x03f8 (irq = 4) is a 16550a
ttys01 at 0x02f8 (irq = 3) is a 16550a
pty: 256 unix98 ptys configured
apm: bios version 1.2 flags 0x07 (driver version 1.13)
real time clock driver v1.09
ram disk driver initialized: 16 ram disks of 4096k size
……
hda: quantum fireballlct10 15, ata disk drive
hdd: asus cd-s400/a, atapi cdrom drive
ide0 at 0x1f0-0x1f7,0x3f6 on irq 14
ide1 at 0x170-0x177,0x376 on irq 15
hda: quantum fireballlct10 15, 14324mb w/418kb cache, chs=1826/255/63
floppy drive(s): fd0 is 1.44m
fdc 0 is a post-1991 82077
md driver 0.90.0 max_md_devs=256, max_real=12
raid5: measuring checksumming speed
raid5: mmx detected, trying high-speed mmx checksum routines
……
using fastest function: p5_mmx (1168.146 mb/sec)
scsi : 0 hosts.
scsi : detected total.
md.c: sizeof(mdp_super_t) = 4096
partition check:
hda: hda1 hda2 < hda5 hda6 hda7 hda8 hda9 hda10 hda11 >
autodetecting raid arrays
autorun ...
... autorun done.
vfs: mounted root (ext2 filesystem) readonly.
freeing unused kernel memory: 64k freed
……

2.init程序部分

  init程序通常在/sbin或/bin下,它负责在系统启动时运行一系列程序和脚本文件。init程序一旦被内核调用,便成为系统的第0号进程,该进程对于linux系统是十分重要的,有关它的详细内容请参阅其他资料。init进程做的每一步都由/etc/initab中的配置决定。以下是radhat的/etc/inittab文件的例子:

# default runlevel. the runlevels used by rhs are:
# 0 - halt (do not set initdefault to this)
# 1 - single user mode
# 2 - multiuser, without nfs (the same as 3, if you do not have.networking)
# 3 - full multiuser mode
# 4 - unused
# 5 - x11
# 6 - reboot (do not set initdefault to this)
#
id:3:initdefault:

# system initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# things to run in every runlevel.
ud::once:/sbin/update

# trap ctrl-alt-delete
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# when our ups tells us power has failed, assume we have a few minutes
# of power left. schedule a shutdown for 2 minutes from now.
# this does, of course, assume you have powerd installed and your
# ups connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "power failure; system shutting down"

# if power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "power restored; shutdown cancelled"


# run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6

# run xdm in runlevel 5
# xdm is now a separate service
x:5:respawn:/etc/x11/prefdm -nodaemon

inittab文件的每一行包含四个域,格式为:
code:runlevels:action:command
(1) code域用单个或两个字符序列来作为本行的标识,这个标识在此文件中是唯一的。文件中的某些记录必须使用特定的code才能使系统工作正常。
(2) runlevels域给出的是本行的运行级别。linux系统运行在一定的级别下,当inittab文件指定了某一特定的运行级别时,该记录行包含的命令将被执行。redhat系统通常设置了7个运行级别(0-6),各运行级别的说明包含在inittab文件的开头。
(3) action域指出的是init程序执行command命令的方式。比如:只执行command一次,还是在它退出时重启。
(4) command域给出相应记录行要执行的命令。

  运行级别1是单用户模式,所谓单用户指的是系统运行在唯一用户--超级用户模式下。而大多数情况下,系统运行在多用户模式下。在启动出错、文件系统出错等情况下,系统将进入单用户模式,此时,系统只有很少的配置,这对于恢复系统是很必要的。
  inittab文件首先指出缺省的运行级别(如id:3:initdefault:),我们看到上面的例子中缺省的运行级别为3。此后根据下一条记录,系统应当运行/etc/rc.d/rc.sysinit,这是一个脚本文件,主要包括基本的系统初始化命令,如激活交换分区、检查并挂上文件系统、装载部分模块等。
  接下来是执行特定运行级别对应的rcn程序。rcn都是目录,当前运行级别为n时,执行/etc/rc.d/rcn.d目录下的脚本程序。以下是rc3.d目录下的文件:

 

  从中我们看到,rc3.d目录下都是类似knnxxxx和snnxxxx的文件。nn是00-99之间的一个整数,xxxx是系统提供的某些服务。以"s"开头的文件用以启动(start)服务进程,以"k"开头的文件用以终止(kill)服务进程。数字nn的大小决定程序执行的先后顺序。
  例如系统启动进入运行模式3后,/etc/rc.d/rc3.d目录下所有以"s"开头的文件将被依次执行;系统关闭时,离开运行模式3之前,/etc/rc.d/rc3.d目录下所有以"k"开头的文件将被依次执行。
下一条记录表明每一个运行级别都要运行命令update,此程序每隔30秒把内存缓冲区的内容回写一次,称为"同步",以防止系统崩溃或突然掉电造成的数据丢失和损坏。
  以下的各条记录分别描述了ctrl-alt-del组合键是否有效,与ups相关的电源失败处理和虚拟控制台的初始化,最后一条记录则是在运行级别5的启动x window系统的x显示管理程序。

  好了,到此为止,我们就可以登陆linux系统了。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons