一、 概況
系統的引導和初始化是操作系統實現控制的第一步,也是集中體現系統優劣的重要部分。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 ([email protected])
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
……