自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

操作系統(tǒng)是怎么一步步啟動起來的?

開發(fā) 前端
既然普通程序是被操作系統(tǒng)加載運(yùn)行起來的,那么操作系統(tǒng)又是被誰加載到內(nèi)存運(yùn)行起來的?

大家好,我是小風(fēng)哥,今天來聊聊操作系統(tǒng)是如何啟動起來的。

和我們寫的helloworld程序一樣,操作系統(tǒng)本身也是一個(gè)程序,被編譯后作為文件保存在磁盤上。

圖片圖片

我們的程序是被操作系統(tǒng)加載到內(nèi)存運(yùn)行的,在前一篇文章《程序是怎么一步步運(yùn)行起來的》中有過講解:

圖片圖片

既然普通程序是被操作系統(tǒng)加載運(yùn)行起來的,那么操作系統(tǒng)又是被誰加載到內(nèi)存運(yùn)行起來的?

圖片圖片

想知道問題的答案,我們要從內(nèi)存說起。

內(nèi)存只有在加電后寫入數(shù)據(jù)才能保存信息:

圖片圖片

內(nèi)存斷電后這些信息就丟失了:

圖片圖片

當(dāng)計(jì)算機(jī)啟動時(shí)內(nèi)存中一片荒蕪,顯然CPU不能執(zhí)行來自內(nèi)存中的指令:

圖片圖片

那么在你按下開機(jī)按鍵時(shí)CPU執(zhí)行來自哪里的指令呢?答案是來自ROM或其它非易失性內(nèi)存:

圖片圖片

這些存儲設(shè)備中保存了一小段指令,計(jì)算機(jī)啟動時(shí)CPU會執(zhí)行這一小段程序。

CPU怎么知道這段程序保存在哪里呢?答案是CPU會從一個(gè)提前設(shè)置好的位置開始執(zhí)行指令,在IA-32架構(gòu)在CPU會從0xffff0這個(gè)位置開始執(zhí)行這段程序。

這一小段程序就是我們熟悉的BIOS(Basic Input/Output System),更現(xiàn)代的是UEFI(Unified Extensible Firmware Interface)。

圖片圖片

BIOS這段程序有什么作用呢?這段程序用來檢查硬件,各個(gè)硬件是否能正常工作等,CPU、內(nèi)存、硬盤等,也就是所謂的自檢,如果恰好你拆過機(jī)器忘記把內(nèi)存條裝回去,那么這一小段程序就會檢測出系統(tǒng)中沒有安裝內(nèi)存并給出告警提示。

圖片圖片

BIOS程序除了檢查硬件之外在最后一步有一項(xiàng)重要的工作就是識別出操作系統(tǒng)保存在了哪里,也就是找到所謂的啟動設(shè)備,這一般都是磁盤。

找到啟動設(shè)備后開始把磁盤前512字節(jié)的數(shù)據(jù)拷貝到內(nèi)存,這512字節(jié)就是所謂的MBR:

圖片圖片

其中包含了:

  • 一段程序,這段程序的目的是加載其它程序,因此也被稱之為boot loader
  • 磁盤分區(qū)表,識別磁盤的各個(gè)分區(qū)

此時(shí)BIOS執(zhí)行完畢,CPU開始執(zhí)行MBR中的這段boot loader程序:

圖片圖片

這段程序的目的是根據(jù)磁盤分區(qū)表加載一個(gè)更大的boot loader。

圖片圖片

這個(gè)更大的boot loader功能更加強(qiáng)大復(fù)雜,如果你安裝的是多操作系統(tǒng),那么當(dāng)這個(gè)更大的boot loader開始執(zhí)行時(shí)會給你一個(gè)選項(xiàng),在這里可以用戶可以選擇啟動哪個(gè)操作系統(tǒng)。

圖片圖片

在這里可以看到MBR中的boot loader程序加載了一個(gè)更大的boot loader程序,也因此這兩個(gè)boot loader分別被稱之為First stage boot loader和second stage boot loader,也就是一階段引導(dǎo)程序和二階段引導(dǎo)程序。

圖片圖片

你可能會有疑問,為什么要有多階段引導(dǎo)程序呢?為什么不能一階段引導(dǎo)程序直接加載操作系統(tǒng)呢?

原因就在于MBR這個(gè)512字節(jié)的引導(dǎo)程序功能過于簡陋,只能把磁盤中一段連續(xù)的數(shù)據(jù)copy到內(nèi)存,加載操作系統(tǒng)這種多文件組成的大型程序需要解析文件結(jié)構(gòu),因此需要另一段功能更為強(qiáng)大的程序也就是二階段引導(dǎo)程序的幫助。

二階引導(dǎo)最終識別出操作系統(tǒng)所在的位置并把操作系統(tǒng)加載到內(nèi)存中。

圖片圖片

此時(shí)CPU才開始真正執(zhí)行操作系統(tǒng),操作系統(tǒng)和我們寫的程序一樣也有一個(gè)初始化的過程,這個(gè)過程的最后會創(chuàng)建出一系列用戶態(tài)進(jìn)程,此時(shí)操作系統(tǒng)系統(tǒng)啟動完畢可以接受用戶的輸入。

圖片圖片

當(dāng)然在現(xiàn)代使用UEFI的現(xiàn)代系統(tǒng)中就不需要MBR中的一階引導(dǎo)程序了。

以上就是操作系統(tǒng)啟動的基本過程。

責(zé)任編輯:武曉燕 來源: 碼農(nóng)的荒島求生
相關(guān)推薦

2024-08-30 08:30:29

CPU操作系統(tǒng)寄存器

2025-03-28 09:39:15

CPU指令信號

2025-04-03 01:45:00

2024-11-11 10:28:33

操作系統(tǒng)Unix系統(tǒng)

2022-02-24 08:30:24

操作系統(tǒng)CPU程序

2024-08-06 09:29:54

程序機(jī)器指令字符串

2024-09-30 09:56:59

2017-01-19 21:08:33

iOS路由構(gòu)建

2018-07-13 15:36:52

2019-03-05 14:09:27

Docker存儲容器

2019-07-09 15:23:22

Docker存儲驅(qū)動

2018-12-24 10:04:06

Docker存儲驅(qū)動

2025-04-09 08:45:00

操作系統(tǒng)進(jìn)程線程

2010-03-04 16:28:17

Android核心代碼

2017-12-25 11:50:57

LinuxArch Linux

2016-11-02 18:54:01

javascript

2024-06-27 08:30:36

內(nèi)存擴(kuò)容堆區(qū)

2011-05-10 10:28:55

2020-12-24 11:19:55

JavaMapHashMap

2018-06-11 15:30:12

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號