• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • LINUX系統初始化過程解析

    發表于:2007-07-02來源:作者:點擊數: 標簽:
    一、 概況 系統的引導和初始化是操作系統實現控制的第一步,也是集中體現系統優劣的重要部分。 LINUX 作為一個免費的準 UNIX 操作系統,在眾多業余愛好者以及小型商業處理市場表現不俗,成為繼 WINDOWS 系列后的另一個主流。了解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 ()
    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系統了。

    作者:jackold

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>