計算機必須先運行程序,然後才能啓動,但是不啓動又無法運行程序,到底是怎麼啓動的?

這兩種方式雖然經過了不同的過程,對用戶輸入的行為進行分析和處理,最終調用的函數為find_command,在該函數中順序循環比較“輸入”的命令是否與系統內部定義的相同,如果相同轉到執行該函數。在這個比較的過程中包含了一個全局的數據結構為struct builtin(),由該數據結構組成了一個table類型(),將命令與相對應的builtin結構對應一起並進行串聯。下面描述一下builtin結構的定義:

1234567891011121314

有興趣的讀者可以對上面的內容進行擴展,形成自己的命令,主要在文件中按照預定的格式更新,並添加到builtin_table中即可。

在上面打開配置文件的過程中,主要是通過一些文件操作函數(被定義在中)完成。這些文件操作函數主要包括:grub_open、grub_read、grub_seek和grub_close等,這些函數屬於grub對外的上層接口,具體的函數內部將調用前文中提到的boot分區對應的文件系統的相應的函數完成,這個過程主要是通過回調函數來完成。該過程整體思路類似於面向對象過程,通過對象操作具體的函數。


半夏時光在路上


簡單點說就是先運行rom裡的程序,這是出廠時候固化的,目的就是在電氣層面上驅動電腦使之工作。然後這個程序會驅動磁盤並按照相應的規則從磁盤的特定分區讀出系統程序,並將一些核心的必要的部分放入ram,記住ram工作的前提是必須有電,再之後rom將電腦的控制轉給ram裡的系統程序,這一部分也是在rom的程序設定裡,再之後就是系統程序的事了,找到磁盤裡的驅動並運行完了你就可以工作了。這裡有三點很重要:1、所有的程序都可以用硬件實現,這是計算機運行的電氣基礎,也是第一步實現的基礎(雖然rom裡一樣是固化的軟件程序)。2、操作系統不是必須的,即便沒有rom裡的程序也可以運行到相應的位置等待,你如果可以按照rom的運行規則寫程序,一樣可以驅動磁盤和其他硬件利用整個電腦,但是很麻煩。3、rom裡的程序是出廠時就燒錄進主板芯片的,不需要外部電氣維持,按照半導體存儲原理,每次用完電腦斷電后里邊的內容可以保持10年。


靠良心掙錢


我也不是計算機專家,從我自己的理解通俗地講下吧。

計算機加電的時候,主板有個芯片BIOS先啟動,裡面規定好了運行前的工作,比如檢測本身和硬件狀態,規定各個硬件在什麼條件下運行等。沒有問題後尋找啟動源頭,比如軟驅,硬盤,光驅,U盤,網絡等等,找找看哪個符合條件,符合條件的,比如有沒有引導系統,沒有就返回信息,告訴你沒辦法啟動,如果有就按引導信息的指示找到操作系統,操作系統接管啟動工作,按自己的條件逐步測驗和加載各類系統文件,最後根據不同操作系統的指示進入到最後結果。


風中的棍子


cpu加電執行bios,bios根據啟動順序選擇啟動設備,硬盤,U盤等,然後從硬盤引導區執行代碼,將控制權交給目標操作系統,如果是win系統,則執行內核加載器ntldr,然後是執行hal.dll硬件抽象層,最後執行系統內核程序ntoskrnl.exe或ntkrnlpa.exe,然後內核創建第一個進程system以及空idle進程,system再創建smss.exe會話,然後smss創建子系統進程csrss.exe以及winlogon登錄進程,並無限等待其任何一個終止,內核就會讓系統崩潰,也稱藍屏。csrss啟動services.exe進程,winlogon則啟動userinit.exe,userinit創建外殼explorer.exe,外殼最後遍歷註冊表run及啟動項,並啟動它們。


宇宙設計師


學學彙編就知道了 cpu只會執行當前cs:ip所指向的指令 而不管其他 非常的專注 所有的存儲設備都被一起看作一個邏輯的存儲器 統一劃分了地址 cpu加電會從一個約定地址開始執行第一條指令 寄存器cs和ip會指向那一個地址 一般都是bios裡面的指令 比如自檢 初始化 等等一系列指令 最後跳轉到操作系統的指令裡面 開始引導操作系統 所以 可以看作電腦啟動第一步是人為約定給cpu指明瞭第一件要做的事(給定一個約定的地址)


NAUTILUS


你問題的前一個"程序"是指底層程序、支持程序,比如固化在主板CMOS中的基本輸入輸出系統(BIOS)、引導程序等,加電後是在這些程序的引導與配合下開始硬件啟動與喚醒過程,直到系統程序(OS,即我們常說的操作系統)加載完畢。

問題的第二個"程序"是指應用程序,是指啟動後在操作系統的支持下運行的一些功能性軟件等,比如用來上網的軟件、字處理軟件、播放軟件等。

所以可簡單表述計算機是這樣啟動的:

按下電源開關,在BOIS及系統引導程序的指令下硬件喚醒與自檢,自檢無問題後加載操作系統,操作系統加載完畢完成啟動,然後即可運行一些諸如上網、辦公、娛樂等之類的程序。


PC資訊通


按動電源開關,第一級主板固件加電,固件固化程序運行,這個就像一分多的多米諾骨牌。第二步,固化程序次序喚醒其他硬件的固化程序,進行自檢啟動運行。第三步,固化程序加載系統,自檢運行。第四步,加載基礎界面程序和用戶設置的程序。大致如此。計算機啟動完成。


墨印2


這是個好問題,跟c語言是用b語言開發的,b語言是在彙編下開發的,那彙編又是什麼在什麼上開發的有異曲同工之妙。

要想明白這個問題,就要從源頭說起了,想一下我問電腦是怎麼開機的。

按下電源鍵,開機時主板會滴一下一般,其實就是主板先通電。通電之後會自己加載boos中的程序,這就是源頭。

但是怎麼加載,執行的,這個我也不知道,跟硬件有關。


嘻嘻1991


我來簡單說下吧,bios芯片就是解決你的疑問的東西。

他是硬件,一按開機按鈕,則cpu的cs跟ip將被強制賦值,該值也正是bios的第一啟動點,在bios上的該值處肯定有指令程序在等待執行,第一步產生0x19中斷,bios加載操作系統啟動扇區的bootsect程序到內存中,該程序只有一個扇區,隨後boot程序將之後四個扇區的setup程序調入內存,經過非常複雜的一系列操作之後包括中斷產生,重新建立中斷表,重建後的中斷表改名為中斷描述符表也就是IDT,除了這個還有GDT跟GDTR的建立,setup模塊加載之後會繼續加載240個扇區的系統模塊,然後還涉及16位變32位的操作,比較複雜就不說了,隨後操作系統的main函數執行也就代表啟動os了


分享到:


相關文章: