按下開機鍵後,電腦都幹了些什麼?


按下電源鍵啟動,那個簡單到極致的動作後面隱藏了複雜的機理。啟動的開始並不僅僅是操作系統引導,亦或BIOS運行,甚至CPU在reset vector執行第一條指令之前,很多事情已經發生了。正如地球生命的發端並不由人類的到來而伊始,秘密隱藏在遠古而不為人知的遠古時代。讓我們順著時間回溯,站在一切發生的起點:「電源鍵按下」,通過時間的流轉,梳理其中所有的硬體軟體過程,來深入了解計算機的工作原理。

史前時代:上電時序

上電時序,也叫做Power-up Sequence,是指電源時序關係。它牽扯到諸多計算機部件,在正式開始時間之旅之前,我們來介紹一下所有參與的小夥伴們。

電源

ATX電源提供+12V、-12V、+5V、-5V、+3V和+5VSB等六種電壓。也就是我們圖上的兩個白色的電源接入口。主板其他的不同電壓是主板上的變壓線路轉換過來的,他們包括+3VSB、+1.5VSB、1.8VDual、2.5VDual、3VDual、VCore、VTDDR等等很多。

+12V主要是給CPU內核供電,它可以單獨給PCIe設備供電,包括顯卡等等。+5V應用最廣,給USB等等外設供電。+5VSB等各種帶SB的電壓,是提供Stand By的供電,即在S3 Sleep時提供電力,保障喚醒和刷新。

主板右邊中間那個紐扣電池,它叫做RTC電源,永不掉電。除非電池沒電並且沒接任何外部電源。 RTC用以保持機器內部時鐘的運轉和保證CMOS配置信息在斷電的情況下不丟失。

時鐘

電腦中的CPU,AGP、PCI插槽、SATA、USB埠和PS/2埠等在通信速度上有很大差異,所以需要提供不同的時鐘頻率。由ck410、ck505和iCLK等晶元將原先散布在不同地方的晶振和分頻電路整合在一起,為CPU、SATA、PCI、USB等等設備提供基礎頻率。

電源時序控制晶元/電路

主板對於上電的要求是很嚴格的,各種上電的必備 條件都要有著先後的順序,一項條件滿足後才可以轉到下一步,如果其中的某一個環節出現了故障,則整個上電過程不能繼續下去。誰來控制和協調整個時序過程呢?不同的主板、晶元組、代際之間都有不同的方案,在筆記本上過去經常採用EC的方案、台式機則很多用SIO或者定製晶元。現在很多電源時序控制被整合進了ME中,在面向嵌入式設備的Atom系列主板上則越來越多的引入了在手機等設備上常用的PMIC。

時間開始

我們通過一個古老的例子來了解一下開機的整個過程:

  1. 在G3(未接電源)情況下,RTC電源提供RTC_RST#和VCC_RTC電源給南橋。
  2. 插入電源或者電池。系統進入G2,S5的狀態。EC檢查電源的可靠性,並發送PM_RSMRST#通知南橋各種SB電壓已經準備完畢。南橋複位,部分功能SB功能激活,進入待機狀態。
  3. 用戶按下電源鍵,時間開始。
  4. EC收到PWRSW#信號,通過PM_PWRBTN#通知南橋。南橋收到PM_PWRBTN#信號後依次拉高SLP_S5#,SLP_S4#,SLP_S3#信號給EC。
  5. EC發出PCON#給ATX電源。
  6. ATX電源接到低電平的PSON#信號後,開始工作,發出各路基本電壓給主板上的各個元件。
  7. 基本電壓變換的其他電壓也被轉換出來。
  8. 電源發出PWROK#給EC,EC轉交給南橋和北橋(有的話)
  9. VRM和CPU通訊,根據VID送出Vcore
  10. VRM發生VRMPWRGD#給南橋,表示核心電壓OK。
  11. 南橋發送PLT_RST#給北橋。
  12. 南橋發送PWRGOOD#給CPU。
  13. 北橋在收到PLT_RST#信號後,1秒鐘後發生CPU_RST#,讓CPU複位

時序圖如下:

青銅時代:神秘消失的時間

在CPU複位後,是不是要立刻跳到reset vector開始執行BIOS程序了呢?還沒有,pcode、on die rom會在這個階段執行,TXT、boot guard等安全保障措施也在這裡運行。

城邦時代:UEFI的四個階段

CPU終於開始執行reset vector的代碼了,這就進入了我們熟悉的UEFI的世界。我們之前已經有很多文章都有介紹UEFI的各個階段,這裡簡單回顧一下:

? 在SEC階段,系統從複位開始運行(由主機引導處理器取回的第一指令),通過初始化處理器高速緩存(Cache)來作為臨時內存使用,我們有了堆棧,從而可以執行c程序,然後轉到PEI階段。

? 在PEI最開始階段,僅少量棧和堆可用,我們需要找到並使能足夠我們使用的永久內存,通常是內存顆粒或內存條(DIMM),然後轉入DXE。

? DXE階段有了永久存儲空間,真正開始負責初始化核心晶元,然後轉換到BDS階段。

? 核心晶元初始化完成後BDS階段開始,並繼續初始化引導操作系統(輸入,輸出和存儲設備)所需的硬體。 縱觀PI的整個階段,BDS對應的是「執行UEFI驅動程序模型」來引導OS這一過程。

UEFI引導階段步驟和驅動程序眾多,經過多年發展,核心代碼已經超過一百萬行,儼然已經是個獨立的小王國了。要理解UEFI,必須理解UEFI的目的:初始化硬體,安全啟動操作系統,並為操作系統提供統一的硬體抽象。所有紛繁複雜的驅動和表象後面,都在為了這一目的服務。只要抓住這條主線,再遇到其他的知識點也就會豁然開朗了。

近代和現代:引導程序和操作系統

UEFI會在BDS階段後載入操作系統引導程序,也就是OS loader。不同的OS有不同的Loader。一般用戶都十分熟悉,我們這裡不再贅述。

另外傳統BIOS和BIOS引導方式已經被淘汰。Intel也宣布對傳統BIOS兼容模式(CSM)在2020後不再支持(參考資料1)。網上諸多Int3、引導扇區等內容,除非對歷史有興趣,全部可以一笑而過了。

結論

按下電源鍵,CPU並不是第一個得到通知並立刻執行代碼的。簡單的開機後面隱藏了如此豐富的內容,這是很多人想像不到的。很多主板,尤其是很多伺服器主板,從按下電源鍵到CPU開始執行UEFI固件程序,期間經歷了很多隱藏的片段。這些片段可長可短,有的轉瞬即逝、有的卻讓人等上片刻。它們究竟是什麼,為什麼存在,值得大家細細探究。

本文被整理髮布在專欄UEFI和BIOS探秘中。至於按下電源鍵如何關機,見專欄另一篇文章:按下電源鍵後發生了什麼?電腦是如何關機的?

UEFI歷史和架構其他文章:

UEFI和UEFI論壇 - 知乎專欄

UEFI背後的歷史 - 知乎專欄

ACPI與UEFI - 知乎專欄

UEFI安全啟動 - 知乎專欄

UEFI與硬體初始化 - 知乎專欄

UEFI架構 - 知乎專欄

歡迎大家關注UEFI專欄和用微信掃描下方二維碼加入微信公眾號"UEFIBlog",在那裡有最新的文章。

用微信掃描二維碼加入UEFIBlog公眾號

參考資料:

[1]: Intel計劃徹底封殺Windows 7系統:2020年之前搞定


更新:想要知道更詳細的內容,請看 @陳中正 的回答:按下開機鍵後,電腦都幹了些什麼?

估摸著……很多人都能想通的是,CPU 一旦跑起來,代碼能夠實現讀取 BIOS 信息、完成 POST、切換 CPU 模式、引導系統之類等等等等工作,但可能不知道的就是第一行代碼怎麼跑起來的。

估計問出這個問題的人也知道有個東西叫BIOS,可能還有自己刷 BIOS 的經歷。

上電之後,有專門的複位晶元給 CPU 的複位管腳發送一個複位信號,CPU 收到複位信號後,所有寄存器都會被重設為默認值。大家都知道 CPU 有個特殊的寄存器,它保存著 CPU 當前執行的是哪一個地址的代碼,我們一般管他叫 PC(Program Counter)。複位發生時,PC 寄存器也會被重置為一個默認值,比如 0x00000000。

BIOS 是個 ROM,也是 CPU 的外設,所以也有自己的地址。而 BIOS 這片 ROM 空間的起始地址,恰好就被配置為 PC 寄存器的默認值。這是個規範。

那麼,複位後, CPU 會通過地址線請求 PC 寄存器指向的數據,這個請求會經過各種晶元的層層傳達,最終達到 BIOS 晶元,BIOS 晶元讀取相應地址的數據,經由數據線回傳給 CPU。CPU 收到指令,開始運行。

過一小小小小會兒你就能聽到熟悉的「嘀」了。

(直到現在開機聽不到這個聲音都會覺得緊張我會亂說么)


看問題的樣子,不像是問Boot 和Loader的樣子。

那我就說說計算機硬體在開機鍵按下後的反應吧。

這是一張最簡單的計算機模型圖。FPGA上能跑的喲。

按下開機鍵,實際上是給微控制器發出了一個Reset信號。(Se6_1的第二腳輸入)。

然後呢,微控制器被重置之後,程序計數器PC(圖中的lpm_counter)就被初始化了。

注意圖中的PC也有一個複位信號的輸入引腳RST。

不過真正的PC複位後所有寄存器都會被初始化的。

關鍵是段寄存器CS和指令指針寄存器IP。默認初始化的位置呢,就是BIOS的第一條指令的地址。

一般來說初始化的地址是一個特殊的內存地址,這一段地址的內存會被映射到某個ROM上。

一般情況下,這裡放的是一條跳轉指令,跳轉到真正的BIOS程序所在的地址。

嗯哼...下面就是軟體完成的工作了。

程序在執行一些必要的開機自檢和初始化後,會將自己複製到從0xA0000開始的物理內存中並繼續執行。然後,BIOS 開始搜尋可引導的存儲設備。如果找到,則將存儲設備中的引導扇區讀入物理內存 0x7C00 處,並跳轉到0x7C00繼續執行。

那麼,引導扇區,也就是啟動設備的第一個扇區,裡面放的是什麼呢?裡面放的是一個Boot程序.Boot很小,只有512B。所以肯定是無法勝任把操作系統裝入內存的任務的。所以需要再來一次曲線救國,Boot的任務就是把操作系統的裝載程序Loader裝入內存,並將控制權轉移給Loader。

Loader乾的事可多了,記錄各個硬體信息。載入GDT,開啟保護模式,載入操作系統內核,轉移控制權。不過這個不是重點。

總的來說開機啟動就是這麼一個Bootstrap的過程:

複位信號-&>

各寄存器複位,執行一條初始位置的指令-&>

跳轉BIOS的Rom,載入BIOS-&>

執行BIOS程序,搜索並載入Boot-&>

執行Boot程序-&>搜索並載入Loader-&>

執行Loader,搜索並載入操作系統內核Kernel。

嗯哼,就是一個四兩撥千斤的故事。一點一點,最終完成操作系統載入這一巨大的任務。

大概就是這樣吧。

上面這個是模型機。沒那個心情搞地址映射之類的複雜東西...反正是FPGA..

都是直接把程序寫死進Ram里,複位就開始跑的.

這樣比較粗暴,像上面這樣跳轉顯得比較....文藝?


以下內容來自阮一峰的博客

計算機是如何啟動的?

===============================================

從打開電源到開始操作,計算機的啟動是一個非常複雜的過程。

我一直搞不清楚,這個過程到底是怎麼回事,只看見屏幕快速滾動各種提示...... 這幾天,我查了一些資料,試圖搞懂它。下面就是我整理的筆記。

零、boot的含義

先問一個問題,"啟動"用英語怎麼說?

回答是boot。可是,boot原來的意思是靴子,"啟動"與靴子有什麼關係呢? 原來,這裡的boot是bootstrap(鞋帶)的縮寫,它來自一句諺語:

  "pull oneself up by one"s bootstraps"

字面意思是"拽著鞋帶把自己拉起來",這當然是不可能的事情。最早的時候,工程師們用它來比喻,計算機啟動是一個很矛盾的過程:必須先運行程序,然後計算機才能啟動,但是計算機不啟動就無法運行程序!

早期真的是這樣,必須想盡各種辦法,把一小段程序裝進內存,然後計算機才能正常運行。所以,工程師們把這個過程叫做"拉鞋帶",久而久之就簡稱為boot了。

計算機的整個啟動過程分成四個階段。

一、第一階段:BIOS

上個世紀70年代初,"只讀內存"(read-only memory,縮寫為ROM)發明,開機程序被刷入ROM晶元,計算機通電後,第一件事就是讀取它。

這塊晶元里的程序叫做"基本輸出輸入系統"(Basic Input/Output System),簡稱為BIOS

1.1 硬體自檢

BIOS程序首先檢查,計算機硬體能否滿足運行的基本條件,這叫做"硬體自檢"(Power-On Self-Test),縮寫為POST

如果硬體出現問題,主板會發出不同含義的蜂鳴,啟動中止。如果沒有問題,屏幕就會顯示出CPU、內存、硬碟等信息。

1.2 啟動順序

硬體自檢完成後,BIOS把控制權轉交給下一階段的啟動程序。

這時,BIOS需要知道,"下一階段的啟動程序"具體存放在哪一個設備。也就是說,BIOS需要有一個外部儲存設備的排序,排在前面的設備就是優先轉交控制權的設備。這種排序叫做"啟動順序"(Boot Sequence)。

打開BIOS的操作界面,裡面有一項就是"設定啟動順序"。

二、第二階段:主引導記錄

BIOS按照"啟動順序",把控制權轉交給排在第一位的儲存設備。

這時,計算機讀取該設備的第一個扇區,也就是讀取最前面的512個位元組。如果這512個位元組的最後兩個位元組是0x55和0xAA,表明這個設備可以用於啟動;如果不是,表明設備不能用於啟動,控制權於是被轉交給"啟動順序"中的下一個設備。

這最前面的512個位元組,就叫做"主引導記錄"(Master boot record,縮寫為MBR)。

2.1 主引導記錄的結構

"主引導記錄"只有512個位元組,放不了太多東西。它的主要作用是,告訴計算機到硬碟的哪一個位置去找操作系統。

主引導記錄由三個部分組成:

  (1) 第1-446位元組:調用操作系統的機器碼。

  (2) 第447-510位元組:分區表(Partition table)。

  (3) 第511-512位元組:主引導記錄簽名(0x55和0xAA)。

其中,第二部分"分區表"的作用,是將硬碟分成若干個區。

2.2 分區表

硬碟分區有很多好處。考慮到每個區可以安裝不同的操作系統,"主引導記錄"因此必須知道將控制權轉交給哪個區。

分區表的長度只有64個位元組,裡面又分成四項,每項16個位元組。所以,一個硬碟最多只能分四個一級分區,又叫做"主分區"。

每個主分區的16個位元組,由6個部分組成:

  (1) 第1個位元組:如果為0x80,就表示該主分區是激活分區,控制權要轉交給這個分區。四個主分區裡面只能有一個是激活的。

  (2) 第2-4個位元組:主分區第一個扇區的物理位置(柱面、磁頭、扇區號等等)。

  (3) 第5個位元組:主分區類型

  (4) 第6-8個位元組:主分區最後一個扇區的物理位置。

  (5) 第9-12位元組:該主分區第一個扇區的邏輯地址。

  (6) 第13-16位元組:主分區的扇區總數。

最後的四個位元組("主分區的扇區總數"),決定了這個主分區的長度。也就是說,一個主分區的扇區總數最多不超過2的32次方。

如果每個扇區為512個位元組,就意味著單個分區最大不超過2TB。再考慮到扇區的邏輯地址也是32位,所以單個硬碟可利用的空間最大也不超過2TB。如果想使用更大的硬碟,只有2個方法:一是提高每個扇區的位元組數,二是增加扇區總數

三、第三階段:硬碟啟動

這時,計算機的控制權就要轉交給硬碟的某個分區了,這裡又分成三種情況。

3.1 情況A:卷引導記錄

上一節提到,四個主分區裡面,只有一個是激活的。計算機會讀取激活分區的第一個扇區,叫做"卷引導記錄"(Volume boot record,縮寫為VBR)。

"卷引導記錄"的主要作用是,告訴計算機,操作系統在這個分區里的位置。然後,計算機就會載入操作系統了。

3.2 情況B:擴展分區和邏輯分區

隨著硬碟越來越大,四個主分區已經不夠了,需要更多的分區。但是,分區表只有四項,因此規定有且僅有一個區可以被定義成"擴展分區"(Extended partition)。

所謂"擴展分區",就是指這個區裡面又分成多個區。這種分區裡面的分區,就叫做"邏輯分區"(logical partition)。

計算機先讀取擴展分區的第一個扇區,叫做"擴展引導記錄"(Extended boot record,縮寫為EBR)。它裡面也包含一張64位元組的分區表,但是最多只有兩項(也就是兩個邏輯分區)。

計算機接著讀取第二個邏輯分區的第一個扇區,再從裡面的分區表中找到第三個邏輯分區的位置,以此類推,直到某個邏輯分區的分區表只包含它自身為止(即只有一個分區項)。因此,擴展分區可以包含無數個邏輯分區。

但是,似乎很少通過這種方式啟動操作系統。如果操作系統確實安裝在擴展分區,一般採用下一種方式啟動。

3.3 情況C:啟動管理器

在這種情況下,計算機讀取"主引導記錄"前面446位元組的機器碼之後,不再把控制權轉交給某一個分區,而是運行事先安裝的"啟動管理器"(boot loader),由用戶選擇啟動哪一個操作系統。

Linux環境中,目前最流行的啟動管理器是Grub

四、第四階段:操作系統

控制權轉交給操作系統後,操作系統的內核首先被載入內存。

以Linux系統為例,先載入/boot目錄下面的kernel。內核載入成功後,第一個運行的程序是/sbin/init。它根據配置文件(Debian系統是/etc/initab)產生init進程。這是Linux啟動後的第一個進程,pid進程編號為1,其他進程都是它的後代。

然後,init線程載入系統的各個模塊,比如窗口程序和網路程序,直至執行/bin/login程序,跳出登錄界面,等待用戶輸入用戶名和密碼。

至此,全部啟動過程完成。


可算考完試了,終於有時間來答題了。。

以下內容來自之前寫過的一篇博文

從開機到進入操作系統的引導過程詳解

===============================================

最近學習了 計算機組成原理,老師 問了一個問題「計算機如何執行第一條指令?」

又看了一本書《30天自製操作系統》,因此在這好好總結一下計算機開機以後的整個引導過程。

Part 1. 引導過程詳解

① 第一步,開機直接訪問BIOS ROM的0xFFFF0。

開機以後,CS寄存器置為0xFFFF,IP寄存器置為0x0000。這樣一來,CPU就會要求訪問地址為0xFFFF0的這個地方。這個地址實際上不是內存的地址,它被 地址控制器(實際上是南橋北橋)映射到 BIOS ROM里,而這個地址的ROM中存放著一條跳轉指令。

參考:

開機第一條指令是如何取到和執行的?

intelx86為何從0xFFFF0處執行(zt)

② 第二步,訪問BIOS ROM中的初始化程序。

0xFFFF0中這條跳轉指令,跳轉至BIOS ROM的某個地址。從這開始是一段初始化程序,把這段程序複製到內存中執行。

作用:一方面 初始化硬體(如內存等);另一方面 從硬碟載入引導程序(具體方法是 從0柱0面0扇區開始尋找,如果扇區最後是」55 AA」,則說明找到該引導程序,否則繼續尋找下一扇區,直到找到引導程序)。找到引導(boot)程序之後 複製到內存的 0x07c00——0x7dff(複製到該地址的原因參看 Memory Map (x86) )中,然後跳到該地址執行引導程序。

參考:

《30天自製操作系統》

開機第一條指令是如何取到和執行的?

到此為止,一切都是硬體自動完成的,是不可改變的。

從下面開始,執行的程序可以由程序員自由控制了。

③ 第三步,引導程序開始執行。

引導程序把操作系統硬碟讀入到內存中,並跳到內存操作系統開始地址

多說一點,在《30天自製操作系統》中是這麼做的,把軟盤中10個柱面的內容都讀到內存中,推算(軟盤在內存的開始地址+操作系統在軟盤中的相對地址=操作系統在內存中的地址)出操作系統的開始地址,然後跳到該地址。

參考:

《30天自製操作系統》

④ 第四步,開始執行操作系統程序。

開始執行操作系統程序。

Part 2. 引導程序示意圖

① 開機訪問0xFFFF0地址

② 跳轉到BIOS ROM的初始化程序

③ 把BIOS ROM中的初始化程序複製到內存中執行

④ 初始化程序 首先初始化硬體,然後在硬碟中找到 引導程序。

⑤ 將引導程序複製到 內存的 0x07c00,並執行

⑥ 引導程序 將硬碟的內容複製到內存中。

⑦ 跳到內存中操作系統的開始地址,開始執行操作系統。

⑧ 執行操作系統程序。


補充一下電源部分的啟動,一般來說只要我們接入220V電源,實際上我們最常用的ATX電源是已經在Standby模式,主板上5V已經是供電的,用以檢測是否需要開機,當我們按下電源開關後,電源開始進入正常工作模式會給主板上電,按照時序供應5V和12V電源,然後輸出Power_OK信號,通知主板可以正式工作。


今天看了看答案,發現錯別字好多,不改了.將就著看吧!!!

知乎大神太多,肯定有電子大學畢業,弄不好還有廣達仁寶上班的設計人員,小學生文筆不好,回答錯誤的地方請指出,多圖流量黨慎入。

要知道電腦按開機鍵之後電腦都幹了什麼,就要先知道沒按開機鍵之前電腦都幹了什麼,電腦怎麼知道用戶插入了電源和按了開機鍵?

說說筆記本吧,台灣廣達代工(全球第一大筆記型電腦研發設計製造公司)一般用於戴爾,聯想,惠普,索尼,神州,海爾。

下面以dell 機器型號靈越n4010,989pin處理器(俗稱一代i系列)主板號UM8B為例講解從插入電源開始到屏幕亮起出現LOGO。 一下圖片用到n4010的電路原理圖,侵刪。。。

220v交流電通過適配器穩壓出20的電壓插入CN1(就是我們電腦的電源插頭)1腳psid是適配器瓦數識別信號(dell一般有65W90W等等),2.3腳接地(GND),4.5腳是20v輸入(+DCIN_JACK就是20v)經過FL1(保險電感)變換名稱+DC_IN經過PC37 PC40(濾波電容)濾波,經過PR35和PR30(電阻)分壓

到PQ5第四腳G極(PQ35是P溝道mos管)使PQ35 123腳到5678腳飽和導通,在變換名稱成為+DC_IN_SS分為三路,一路來到PQ1(P溝道的mos管)

一路經過PR2249.9歐姆的保險電阻來到充電晶元ISL88731(Intersil公司設計製造)

的22PIN IC的主供電引腳供電 經過晶元內部穩壓出來會一個5v從21PIN輸出。(內部工作電路不在介紹,有晶元數據手冊感興趣的可以自己去網上下載)

最後一路經過PR134和PR28分壓到第二腳和晶元內部基準電壓做比較,然後從13腳輸出ACAV_IN

ACAV_IN這個信號是適配器電源的插入信號,準確的來說

ACAV_IN不是13腳輸出的是由21PIN輸出的5v經過PR47和PR46分壓得來的只是在檢測不正常的時候13腳會拉低這個信號保護電路)

ACAV_IN分為兩路一路來到ec電源管理晶元告訴晶元適配器已插入,一路來到PQ23使PQ23導通使PR6和PR126分壓讓PQ1飽和導通並變更名稱為

+PWR_SRC(以上俗稱保護隔離電路)

+PWR_SRC稱之為公共點電壓,+PWR_SRC來到系統供電晶元RT8206B的第六腳主供電引腳給晶元供電,還經過pr87pr88電阻分壓到第四腳做為晶元線性電壓LDO的開啟信號。

晶元得到供電後,在 4 腳 EN_LDO 得到高電平後,即可輸出 5.0V 的 LDO 線性電壓。LDO 電壓輸出後,為晶元自身的 PVCC,REFIN2 供電。接下來就是晶元的 BUCK 降壓的開啟,信號是 ON2,晶元27腳得到5v高電平以後內部自舉升壓控制PQ37 PQ35輸出+3.3V_ALW

+3.3V_ALW產生之後 在待機時要給電路提供定力供應分為三路一路去到南橋rte電路供電以及rtc電路的複位電壓

沒插入適配器時南橋由CR2032的紐扣電池供電,插入電源適配器時南橋供電由+3.3V_ALW供電,

RTC_RST#和SRTX_RST#是rtc電路的複位信號由+RTC_CELL經過電阻上拉,PCH_INVRMEN也要為高電位。Y3為32.768khz的晶振,為南橋工作提供工作頻率,我們系統下的時間日期就是這個。

一路來到ec晶元的26 50等等引腳為ec提供供電,

一路來到EC BIOS晶元供電

+3.3V_ALW待機電壓先供給EC,當EC有電壓以後,外接的32.768KHZ晶振開始起振,【是+3.3V_ALW待機電壓正常後,EC發出電壓給晶振】,晶振起振後,給EC待機時提供一個時鐘,複位是有一個電阻和一個充電電容延遲以後產生複位【WRST#】

,當EC的待機、時鐘、複位滿足以後,EC發出CS#片選信號選中BIOS,從BIOS晶元中讀取程序,去配置EC中的GPIO(可編程引腳)引腳定義,當EC待機條件滿足後,程序的代碼也讀取出來了,EC就可以正常上電工作了。

在EC上電之前,還有兩個個信號條件:

1:EC第一個信號:LID_SW#這個信號是S3的休眠開關檢測信號 說明:LID—EC#在正常的情況下,是被上拉的一個信號,如果被強制拉低到一個低電位的話,機器是上不了電的,不能實現通電 。

2:EC第二個信號:適配器檢測信號(ACAV_IN)說明:當適配器插入時,在ACAV_IN處也是有一個電壓值的,如果此電壓值沒有起來,EC就認為適配器沒有檢測到,那麼也是上不了電的。

——————————————————————————————————————————————————————————————————————————————————————————————————————分割線以下是按了開關之後的。

上面看著寫了那麼多,其實只需用在插上電源的一瞬間就能完成,好了重點要來了,這就到了題主問的我們按下電源按鈕,電腦都幹了什麼。。。。。。。。。

當我們按了電源按鈕也就是ec的125腳 SYS_PWR_SW#信號有一個從高到低在到高的電壓變化,這個時候ec晶元就知道用戶已經按下開機按鈕了。

然後EC的100腳發出一個SUS_ON信號給8206B系統供電的14腳做為+5V_SUS的開啟信號,+5V_SUS輸出以後給後面要用到的,內存供電IC,橋供電IC,硬碟,光碟機,USB等等供電

還來到PQ15使PQ17導通把+3.3V_ALW轉換成+3.3_SUS給南橋提供待機供電。

然後EC發出RSMRST#信號(從低到遲續高電位)至南橋中的RSMRST#腳位,其目的是:清零南橋裡面的ACPI控制器的邏輯關係

接著EC收到

SYS_PWR_SW#後,延時發出

PM_PWRBTN#_R低電位有效觸發至南橋中的PWRBIN#腳位,告知南橋用戶已按下電源鍵

當南橋供電、時鐘、複位條件滿足以後以及收到PWRBIN#有效觸發後,依次發出高電平的SLP—S3#、SLP—S5#的信號

EC收到S3 S5後123腳發出RUN_ON去開啟各種電壓 比如。內存1.5V PCH南橋的1.05V和光碟機,硬碟等等。

84腳發出GFX_ON去開啟獨立顯卡供電。

這些電壓輸出後晶元偵測到輸出正常後都會輸出PWRGD信號匯總在一起變成HWPG到EC的66腳

EC收到HWPG後99腳延時99毫秒輸出

IMVP_VR_ON信號去ADP3212IC的第一腳開啟CPU(中央處理器)核心電壓。

CPU電壓正常後晶元會輸出兩個信號

2腳IMVP_PWRGD信號為CPU的核心電壓電源好信號,去往ec的119腳告訴ECcpu電壓已經OK

3腳VR_PWRGD_CLKEN#為低電平去開啟時鐘晶元CLK。讓CLK為大家提供一個工作頻率、

EC會延時輸出

ECPWROK到南橋(PCH)的PWROK引腳

南橋收到ECPWROK信號以後發出PM_DRAM_PWRGD信號到CPU告訴內存模塊電壓正常,

南橋延時輸出cpu需要的時鐘,H_PWRGOOD告訴cpu 告訴cpu電壓正常。pltrst#去複位各個設備

無線網卡,ec晶元,等等,還經過R134和R66分壓到AL14引腳複位cpu

CPU得到複位以後硬啟動完成剩下是軟啟動,軟啟動需要用到示波器和邏輯分析儀來測量,簡單說下(nnd其實我也弄不清楚,畢竟沒到設計電腦的水平)

CPU通過DMI匯流排到南橋(pch)

讀取南橋BIOS,從BIOS裡面讀取開機自檢信息,然後按照原路再返回,最終先將信息載入到內存,然後CPU再到內存一一去讀取測試,測試正常到最後一步,顯卡發出LCD_DOCCLK 和DAT時鐘數據通過屏線和屏幕進行數據交換檢測屏幕是否正常。正常後LVDS模塊發出屏幕供電開啟信號,和背光開啟信號,亮度調節信號,點亮屏幕,這樣大大的電腦LOGO就出現在我們眼前。

然後調取硬碟信息,進系統。

寫了這麼多,其實電腦完成就需要幾秒鐘時間。


通電後讀取bios信息,檢測GPU,檢測內存,檢測硬碟,從啟動盤中讀取啟動信息,啟動操作系統。


基本上前面幾位大神都說的很詳細了 我再以本人淺薄的知識稍稍補充一點細節內容

-----------------------------------------------------

1 本身開關的作用是連接主板電源開關 啟動EC(一般手動啟動台式機電源的手法即短接電源綠線黑線的效果)

2 電源啟動給主板供電

3 理論上應該先是北橋通電 然後是南橋 北橋是負責CPU和內存顯卡PCI插槽等,BIOS啟動,之後是顯卡音效卡硬碟光碟機CPU內存網卡等硬體通電 顯卡發出顯示器啟動的信號

4 之後進行的就是如前面幾位大神所述的 北橋對主板以及各硬體進行自檢

5 自檢完畢 按照BOOT順序列表逐一檢查 比如如果光碟機/軟碟機在前 會自動檢測是否有光碟/軟盤在內 如果有 則嘗試使用光碟軟盤對系統進行引導,USB啟動亦是如此 ,如果沒有或者當前光碟/軟盤/USB存儲設備內沒有相關的引導文件 則自動跳轉到下一個BOOT項目 一直按照BOOT順序表 一直進行到有可行BOOT項目為止

6 光碟軟盤以及USB設備一般使用對應的引導文件來引導 不過多贅述了 硬碟則是使用引導區信息來逐步引導系統啟動 前面第一位的回答已經說的很明白了


嗶…………

我要啟動了!


標籤里要是加上嵌入式,估計答案會多一些。


參考了阮老師的博客加上自己簡單的理解,因為是java開發,如果有誤請拍磚

一.啟動入口
任何啟動程序或者系統都有啟動入口。那麼計算機的啟動入口是什麼呢
1.1 CS:IP
CS寄存器: 代碼段寄存器 IP寄存器:指令指針寄存器 在實模式下,內存地址為:CS * 16 + IP,例如CS:0xF000和IP:0xFFF0,計算得出內存地址為0xFFFF0。 而CPU將CS:IP地址指向的內容當做指令執行。 1.2 啟動入口地址
由於還沒有啟動,肯定不是由軟體操作,而是由硬體操作的。首先將CS寄存器置為0xF000,IP寄存器置為0xFFF0。所以CPU第一條執行的指令地址是0xFFFF0
1.3 0xFFFF0是什麼地址
0xFFFF0指向BIOS的入口地址,此地址所指向的內容也是一條執行jmp f000:e05b

二.啟動順序

2.1 設置啟動入口地址
設置啟動入口地址CS:IP 為0xF000:0xFFF0
2.1 執行BIOS
BIOS是Bbase Input Output System的縮寫,基本輸入輸出系統。
BIOS是一個ROM(只讀存儲器),容量較小,只能做少部分工作,不可能完成所有的啟動任務。
所以BIOS只完成了下面幾項工作:

  • POST(Power-On Self-Test):硬體自檢

檢查計算機硬體是否滿足運行基本條件,如果出現問題,主板會發出不同含義的報警。如果沒有問題,則繼續啟動。並建立中斷向量表等等

  • 檢驗和載入啟動盤位於0盤0道1扇區的內容到內存0x7c00處

載入的內容就是MBR引導程序,至於為什麼在0盤0道1扇區,就是約定的。

  • 最後跳轉到0x7c00處,jmp 0:0x7c00

2.1 MBR主引導記錄
BIOS按照啟動順序,把控制權轉交給MBR.MBR是Main/Master Boot Record的縮寫,主引導記錄。共512位元組。 主引導記錄結構:

  • 1-446位元組: 調用操作系統的機器碼
  • 447-510位元組: 分區表
  • 511-512: 主引導記錄標記(0x55和0xAA),如果此扇區末尾兩個位元組是0x55和0xAA,則表示是MBR主引導記錄

分區:
比如我們普通的電腦都分為C D E F等幾個盤,到底哪個是啟動盤,主引導記錄將控制權轉交給哪個盤,也就是哪個分區

  • 第1個位元組:如果為0x80,就表示該主分區是激活分區,控制權要轉交給這個分區
  • 第2-4個位元組:主分區第一個扇區的物理位置(柱面、磁頭、扇區號等等)
  • 第5個位元組:主分區類型
  • 第6-8個位元組:主分區最後一個扇區的物理位置
  • 第9-12位元組:該主分區第一個扇區的邏輯地址
  • 第13-16位元組:主分區的扇區總數

MBR應該將控制權轉交給系統載入器,MBR所做的工作

  • 讀取每個分區的開始位置,判斷是否是0x80,如果是0x80,則是激活分區
  • 將控制權交給OBR

2.3 OBR 系統引導記錄
OBR是OS Boot Record的縮寫,系統引導記錄,也就是所謂的次引導記錄,就是操作系統的起始位置。然後後面就把控制權交給操作系統了。
OBR所做工作

  • 載入操作系統到內存的某個位置
  • 然後跳轉到操作系統內存位置開始執行,啟動系統

三.幾個概念

  • MBR:Main /Master Boot Record的縮寫,是主引導記錄
  • BIOS: Base Input Output System,基本輸入輸出系統
  • EBT: Extend Boot Record,擴展引導記錄
  • OBR: OS Boot Record,操作系統引導程序

參考:http://www.ruanyifeng.com/blog/2013/02/booting.html

個人博客:因為熱愛 - 博客園


推薦閱讀:

如何挑選顯示器?
我想生產一款滑鼠,如何找到代工廠?
為什麼 HTC 的 Android 手機基本上都是採用高通的處理器?
電視機為什麼不用觸摸屏?
想在電腦上用wii模擬器玩wii上的遊戲,相關的硬體需要買什麼?

TAG:計算機 | 信息技術IT | 硬體 | 計算機科學 | 計算機工程CE |