源代码网整理以下一、 概况
源代码网整理以下 系统的引导和初始化是操作系统实现控制的第一步,也是集中体现系统优劣的重要部分。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系统了。
源代码网供稿.