Linux系統啟動原理

2022-04-04 17:03:24 字數 3575 閱讀 2989

各種硬體通電,電腦開始運作

bios是一組固化到計算機內主機板上乙個rom晶元上的程式,它儲存著計算機最重要的基本輸入輸出的程式、開機後自檢程式和系統自啟動程式,它可從cmos中讀寫系統設定的具體資訊。 其主要功能是為計算機提供最底層的、最直接的硬體設定和控制。此外,bios還向作業系統提供一些系統引數。系統硬體的變化是由bios隱藏,程式使用bios功能而不是直接控制硬體。現代系統會忽略bios提供的抽象層並直接控制硬體元件。

各大主機板製造商都會開發適合自己主機板的bios,我們只需要知道bios最主要的功能就是對自身的硬體做一次自檢,只有硬體沒有時,才會執行軟體(作業系統也是乙個軟體)這種自檢的過程就叫"加電自檢(power on self test,簡稱post)"

機器自檢後,bios預設從磁碟的零柱面,零磁軌,第乙個扇區中讀取乙個叫mbr的東西

硬碟的主引導記錄區(mbr)

mbr位於硬碟的0磁頭0柱面1扇區,其中存放著硬碟主引導程式和硬碟分割槽表。在總共512位元組的硬碟主引導記錄扇區中,446位元組屬於硬碟主引導程式,64位元組屬於硬碟分割槽表(dpt),兩個位元組(55 aa)屬於分割槽結束標誌。

這512位元組的空間內容由專門的分割槽程式產生,比如windows的fdisk.exe和linux下的fdisk命令,所以他不是依賴於任何作業系統,而mbr中的引導程式也是可以修改的,因此我們可以利用這個特性實現多系統共存即所謂的雙系統。

centos,redhat缺省會使用grub作為引導作業系統的程式,因為grub本身比較大,所以一般是在mbr中寫入grub的位址,這樣bios就會引導作業系統就會載入grub作為作業系統的引導程式。

gnu grub(grand unified bootloader簡稱「grub」)是乙個來自gnu專案的多作業系統啟動程式。grub是多啟動規範的實現,它允許使用者可以在計算機內同時擁有多個作業系統,並在計算機啟動時選擇希望執行的作業系統。grub可用於選擇作業系統分割槽上的不同核心,也可用於向這些核心傳遞啟動引數。

用於引導red hat linux的選單配置檔案

default=linux

timeout=10

color=green/blacklight-gray/blue

#sectiontoloadlinux

titlelinux

root(hd0,1)這裡制定了grub的根。並且掛載。

kernel/vmlinuzroot=/dev/hda5核心是grub根下的vmlinuz。

並且核心載入後,核心的根是在/dev/hda5

boot

#sectiontoloadwindows2000

titlewindows

rootnoverify(hd0,0)rootnoverify就是指定根,但是不要掛載。

chainloader+1使用(hd0,0)的第一扇區來引導。

grub最重要的功能就是根據配置檔案載入kernel映象,執行核心後載入的第乙個程式是/sbin/init,這個程式會根據/etc/initab來初始化

這裡最主要的就是根據設定好的runlevel(runlevel預設為3)來確定系統的執行級別

linux系統會根據/etc/inittab中定義的系統初始化配置si::sysinit:/etc/rc.d/rc.sysinit執行/etc/rc.sysinit指令碼,該指令碼會設定系統變數,網路配置,並啟動swap,設定/proc,載入使用者自定義模組,載入kernel設定等

如果runlevel的值為3,會執行/etc/rc3.d下的所有指令碼;如果為5,則會執行/etc/rc5.d下的指令碼

簡單的欣賞一下指令碼**

[hx@centos8 ~]$ cat /etc/rc3.d/s80aegis |more

#!/bin/bash

### begin init info

# provides: aegis

# required-start: $remote_fs $syslog

# required-stop: $remote_fs $syslog

# default-start: 2 3 4 5

# default-stop:

# short-description: aegis update.

# description: aegis client.

### end init info

aegis_install_dir="/usr/local/aegis"

if [ `id -u` -ne "0" ]; then

echo "error: permission denied." 1>&2

exit 1

fistart() "/aegis_update/aliyundunupdate &

}stop()

status()

var=0

path="/etc/debian_version"

if [ `uname -n` = "debian" ];

then

if [ -f "$path" ];

then

var=`awk -f. '' $path`

fifiuninstall() .d/" ];

then

rm -f "/etc/rc$.d/s80aegis"

elif [ -d "/etc/rc.d/rc$.d" ];

then

rm -f "/etc/rc.d/rc$.d/s80aegis"

fidone

path="/etc/debian_version"

if [ -f "$path" -a -s "$path" ];

then

var=`awk -f. '' $path`

if [ -z $(echo $var|grep "[^0-9]") ];

then

if [ $var -ge 6 ];

then

echo "insserv -r aegis: remove aegis server"

insserv -r aegis >/dev/null 2>&1

fifi

fiecho "uninstall successful"

}case "$1" in

start)

start

sleep 1

status

;;stop)

stop

status

;;restart)

stop 1

status

echo "aegis restarting..."

sleep 1

start

status

;;status)

status

;;uninstall)

uninstall

;;*)

echo $"usage: $0 "

exit 1

;;esac

linux系統啟動

本文簡單介紹一下從我們按開機鍵到可以登入系統,這段時間系統和電腦硬體是怎麼一起工作的。既做為對自己知識的乙個總結整理,也可以給linux初級使用者做乙個入門介紹,高手請略過。一般來說linux的啟動可以分成三個階段 bios階段,系統引導階段,系統啟動階段。一 bios階段 bios 基本輸入輸出系...

linux系統啟動

本文簡單介紹一下從我們按開機鍵到可以登入系統,這段時間系統和電腦硬體是怎麼一起工作的。既做為對自己知識的乙個總結整理,也可以給linux初級使用者做乙個入門介紹,高手請略過。一般來說linux的啟動可以分成三個階段 bios階段,系統引導階段,系統啟動階段。一 bios階段 bios 基本輸入輸出系...

Linux系統啟動

1.系統啟動流程大概 1 啟動bios 2 mbr中的引導 bootcode 3 執行引導程式 linux中用的最多的是grub 引導程式的主要作用是用來載入核心 4 載入系統核心 5 執行init 6 runlevel init根據當前預設的執行級別來啟動相關的程式及裝置 2.bios basic...