3333666777

? 通用計算機啟動過程

1??一個基礎固件:BIOS

一個基礎固件:BIOS→基本IO系統,它提供以下功能:

  • 上電后自檢功能 Power-On Self-Test,即POST:上電后,識別硬件配置并對其進行自檢,保證正常運行和初始化;
  • 基本IO驅動與事件處理功能:初始化并驅動硬件,如顯示器、串口、鍵盤等接口,使能基本的中斷;
  • 啟動參數設置功能:過程中允許通過熱鍵啟動設置界面,進而對CMOS RAM中的啟動參數進行配置。CMOS RAM等效于BBSRAM,存放啟動配置數據,電池掉電后數據丟失;
  • 系統自動裝載功能:在系統自檢成功后,根據啟動順序,將相應啟動設備主引導記錄MBR(一般位于0磁道的0扇區,大小為512字節)的引導程序裝入內存并從入口地址運行;
2??WIndows操作系統啟動過程

① 系統上電或復位,X86處理器復位——代碼段寄存器CS為0xFFFF,指令指針寄存器IP為)0x0000,CS:IP地址存放下一條跳轉指令,跳轉至ROM中BIOS入口地址0xFFFFFFF0(復位向量地址),并啟動BIOS。
② BIOS上電自檢,若出現錯誤則初始化基本硬件,允許用戶進行參數配置。
③ BIOS將第1個啟動設備的第1個扇區加載到系統RAM的0x7C000地址,啟動MBR中的引導程序,進入引導的第一個階段。
④ 調用 Windows MBR Loader 或 LILO GRUB WinGrub等引導程序,進入引導的第二個階段。
⑤ 引導程序調用 OS Boot Loader 把用戶選擇的操作系統內核加載到內存,并跳轉到操作系統入口地址開始執行。
此時,計算機的控制權交給了操作系統,基本啟動過程完成。

? 嵌入式系統啟動過程

MCS-51 MCU 上電復位后,PC寄存器的初值為0x0000。0000H,0001H,0002H這三個單元存放了一條無條件跳轉指令,當從該地址執行時將直接跳轉到主程序的入口地址。
arm處理器復位后將從0x00000000地址處開始執行指令。

1??處理器片內集成啟動固件——嵌入式系統啟動

① 上電程序引導
片內集成獨立 Boot ROM (Brom),代碼 Rom Boot Loader (RBL) 支持從 NAND Flash、SPI、UART 等外部接口啟動。

  • 加電后,處理器將從該ROM的復位向量地址開始執行,RBL通過判斷處理器特定引腳的電平來進入正常啟動模式或開發模式;
  • RBL獲取下一步要執行的代碼,并將其復制到SRAM或SDRAM中引導執行;

② 嵌入式操作系統裝載
嵌入式操作系統的引導也需要特定的機制和軟件支持,即 Boot Loader。

  • 復位后,將 Boot Loader 代碼從Flash 拷貝到SDRAM的特定區間并引導執行;
  • Boot Loader 程序執行一系列基本的硬件初始化工作;
  • 將自身拷貝到SDRAM中,RAM中的 Boot Loader 繼續執行,為操作系統的運行做好環境準備,并將外部存儲器中的操作系統內核映像及根文件系統映像拷貝到內存中的代碼,數據空間,設置內核啟動參數;
  • 跳轉至內核入口地址開始執行。
2??裸機

直接部署在嵌入式硬件上的軟件稱為裸機代碼,或裸機(應用)軟件。一般來說都是些無限循環結構,比如空調、冰箱等嵌入式系統。通過板級支持包BSP,向下屏蔽硬件的細節,向上提供統一的服務和接口。沒有操作系統,通過中斷來實現多任務運行。

? Linux系統啟動過程

計算機接通電源上電后,需要經過BIOS加電自檢、MBR系統引導、加載內核三步之后,操作系統才會啟動。

1??BIOS加電自檢
  • BIOS全稱 Basic Input/Output System,即基本輸入輸出系統,它是一個被永久刻錄在ROM中的軟件,加電自檢是指 Power On Self Test,POST,屬于BIOS的主要組成部分。
  • 計算機在接通電源后,BIOS通過POST來加載硬件信息,進行內存、CPU、主板等檢測,如果硬件設備正常工作,BIOS會尋找硬盤第一個扇區中存儲的數據,并使用MBR中的數據激活引導加載程序。
2??MBR系統引導
  • MBR全程 Master Boot Recode,是一種磁盤分區格式,也是以此種格式的磁盤中0盤片0扇區中存儲的一段記錄——主引導記錄。磁盤中扇區的大小為512byte,主引導記錄MBR占據第一個扇區的前446字節,剩余的空間依次存儲一個64字節的磁盤分區表,和一個用于標識MBR是否有效的2字節的模數。
  • 主引導記錄MBR中包含一個實現引導加載功能的程序——Boot Loader。由于BIOS只能訪問很少量的數據,所以MBR中的引導加載程序其實只是一段初始程序的加載程序 Initial Program Loader,IPL,這段程序唯一的功能就是定位并加載 Boot Loader 的主體程序。
  • 加載引導分為兩個階段
    • 第一階段,BIOS引導IPL獲取 Boot Loader 主題程序在磁盤中的位置,此時系統啟動的控制權由BIOS轉移到MBR;
    • 第二階段,Boot Loader 主題程序與操作系統對應的內核,定位到內核文件所在的位置,并將其加載到計算機內存中,此時系統啟動的控制權由MBR轉移到內核。
3??加載內核
  • 內核是操作系統的核心,Linux操作系統的內核就是Linux。內核以一種自解壓的壓縮格式壓縮,它與一個初始化的內存映像和存儲設備映像表一起存儲在 /boot 目錄下。
  • 在選定的內核被加載到內存中并開始執行前需要先從壓縮格式中解壓,一旦內核自解壓完成,systemd進程(也就是早期版本中的init進程)便被啟動。
  • systemd進程的啟動標識著引導過程的結束,也標識著啟動過程的開始。在系統啟動之初,由于系統中沒有除systemd之外的程序執行,系統初始化工作尚未完成,因此計算機不能執行任何和用戶相關的功能性工作。
  • 系統初始化需要進行掛載文件系統、啟動后臺服務等等一系列工作,這些初始化工作全部由systemd進程完成。對于用戶來說,系統初始化完成后,系統才算正式啟動。
4??附:init進程啟動級別

系統啟動流程:
BIOS → MBR → boot loader → kernel → init
BIOS → MBR → GRUB → kernel → init

  • BIOS:找到啟動介質 - 移動硬盤、磁盤、U盤等,找到啟動介質后讀取其中的第一個扇區;
  • MBR:第一個扇區(512字節)稱為主引導記錄。主引導記錄分為3部分,前446byte是引導信息,后64byte是磁盤分區信息,最后2byte是標志位。MBR的作用是找到 boot loader 。
  • GRUP:是一種 boot loader ,用于加載kernel核心信息。
  • kernel:內核。
  • init:內核的第一個程序,分為7個啟動級別。

查看啟動級別配置文件

cat /etc/inittab  #查看啟動級別相關的配置文件

inti命令可以切換系統的啟動級別

inti 0/1/2/3/4/5/6
  • 0表示關機(不能設置為開機默認啟動級別)
  • 1表示單用戶
  • 2表示多用戶(無網絡的3級別)
  • 3多用戶(命令行模式,字符終端)
  • 4用于開發
  • 5圖形界面,默認啟動方式
  • 6reboot(不能設置為開機默認啟動級別)
runlevel   #查看系統的啟動級別

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718086.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718086.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718086.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

阿里云倉庫

倉庫服務 (aliyun.com) maven中央倉庫: Central Repository: (maven.org)

Windows10 安裝Neo4j流程

1、下載并安裝ava運行環境 官網鏈接(需要注冊Oracle賬號):https://www.oracle.com/java/technologies/downloads/ 根據自己Neo4j版本確認需要的JDK版本 百度網盤鏈接: 鏈接:鏈接:https://pan.baidu.com/s/…

靜態網頁和動態網頁的異同

靜態網頁和動態網頁是兩種不同類型的網頁。它們之間的主要異同點如下: 1. 靜態網頁: - 靜態網頁是指在服務器上預先準備好的網頁,內容固定不變。 - 靜態網頁通常由HTML、CSS和JavaScript等靜態文件組成。 - 用戶訪問靜態網頁時&#xff0c…

Sodinokibi勒索病毒最新變種,解密工具更新到2.0版本

Sodinokibi勒索病毒 Sodinokibi勒索病毒又稱REvil,自從2019年6月1日,GandCrab勒索病毒運營團伙宣布停止運營之后,Sodinokibi勒索病毒馬上接管了GandCrab的大部分傳播渠道,同時它也被稱為是GandCrab勒索病毒的“接班人”&#xff…

VMware 虛擬機安裝windows 10操作系統

先提前準備好鏡像文件 1.創建新的虛擬機 2.選擇自定義,然后下一步 v Windows 建議選擇2G以上,下一步 選擇網絡地址轉換(NAT),下一步 這里可按自己的需求來分區,也可以安裝好后再分區 選擇立即重啟&#xff…

【劍指offer】C++ 翻轉字符串里面的單詞

目錄 題目: 思路: 代碼出現 結果 題目: 給定一個字符串,逐個翻轉字符串中的每個單詞。 示例 1: 輸入: "the sky is blue" 輸出: "blue is sky the" 示例 2: 輸入: " hello world! " 輸出: "world! hello" 解釋: 輸入字符…

L1-032 Left-pad(PTA)

文章目錄 L1-032 Left-pad題目描述代碼 L1-032 Left-pad 題目描述 根據新浪微博上的消息,有一位開發者不滿NPM(Node Package Manager)的做法,收回了自己的開源代碼,其中包括一個叫left-pad的模塊,就是這個…

使用 Object.defineProperty() 來進行數據劫持有什么缺點?

使用 Object.defineProperty() 來進行數據劫持有什么缺點? (1)在對一些屬性進行操作時,使用這種方法無法攔截,比如通過下標方式修改數組數據或者給對象新增屬性,這都不能觸發組件的重新渲染,因為…

Vue組件置底方法,ElementPlus布局

問題描述 在開發網頁時使用了elementplus的el-container組件 組件里分成了main和footer兩塊&#xff0c;但是想要將兩個按鈕置底在容器底部遇到了困難 如下圖所示&#xff0c;在網頁開發者工具可見兩個按鈕與左側的圖片沒有底部對齊 此時我的代碼是這樣 <el-footer>&…

STM32自學?串口發送+接收

一、相關函數說明&#xff1a; USART_ClockInit()和USART_ClockStructInit(); 用來配置同步時鐘輸出 USART_DMACmd(); 開啟USART到DMA的觸發通道 USART_SendData(); 發送數據 USART_ReceiveData(); 接收數據 二、程序代碼 serial.c文件 #include "stm32f10x.h" #i…

文件底層的深入理解之文件輸入輸出重定向

目錄 一、文件fd的分配規則 二、對輸出重定向現象的理解 三、輸出輸入重定向的簡單實現 1、輸出重定向 2、輸入重定向 一、文件fd的分配規則 最小的沒有被使用的數組下標&#xff0c;會被分配給最新打開的文件。 二、對輸出重定向現象的理解 正如上面這段代碼所示&#xff0…

C語言實現日本某地發生了一件謀殺案

題目 猜兇手 題目內容&#xff1a; 日本某地發生了一件謀殺案&#xff0c;警察通過排查確定殺人兇手必為4個嫌疑犯的一個。 以下為4個嫌疑犯的供詞: A說&#xff1a;不是我。 B說&#xff1a;是C。 C說&#xff1a;是D。 D說&#xff1a;C在胡說 已知3個人說了真話&…

從零開始學習Netty - 學習筆記 -Netty入門【半包,黏包】

Netty進階 1.黏包半包 1.1.黏包 服務端代碼 public class HelloWorldServer {private static final Logger logger LoggerFactory.getLogger(MethodHandles.lookup().lookupClass());public static void main(String[] args) {NioEventLoopGroup bossGroup new NioEventL…

Ubuntu上Jenkins自動化部署Gitee上VUE項目

文章目錄 1.安裝NodeJS插件2.配置全局工具配置-NodeJS環境變量3.新建自由風格的軟件項目任務4.配置General配置丟棄舊的構建配置參數化構建過程 5.配置源碼管理6.構建觸發器7.設置構建環境8.配置構建步驟9.配置構建后操作10測試構建 前文鏈接&#xff1a; Ubuntu上Jenkins自動…

java常用應用程序編程接口(API)——Instant,DateTimeFormatter,Period,Duration概述

前言&#xff1a; 整理下學習心得。打好基礎&#xff0c;daydayup&#xff01; Instant Instant是時間線上的某個時刻/時間戳&#xff0c;通過獲取Instant的對象可以拿到此刻的時間&#xff0c;該時間由兩部分組成&#xff1a;1&#xff0c;從1970年1月1日00:00:00開始走到此刻…

前端開發 VSCode 插件推薦

1、Chinese (Simplified) (簡體中文) Language Pack for Visual Studio Code VS Code 的中文&#xff08;簡體&#xff09;語言包&#xff0c;此中文&#xff08;簡體&#xff09;語言包為 VS Code 提供本地化界面。 下載地址&#xff1a;Chinese (Simplified) (簡體中文) La…

D*算法超詳解 (D星算法 / Dynamic A*算法/ Dstar算法)(死循環解決--跟其他資料不一樣奧)

所需先驗知識&#xff08;沒有先驗知識可能會有大礙&#xff0c;了解的話會對D*的理解有幫助&#xff09;&#xff1a;A*算法/ Dijkstra算法 何為D*算法 Dijkstra算法是無啟發的尋找圖中兩節點的最短連接路徑的算法&#xff0c;A*算法則是在Dijkstra算法的基礎上加入了啟發函數…

[JavaWeb玩耍日記]HTML+CSS+JS快速使用

目錄 一.標簽 二.指定css 三.css選擇器 四.超鏈接 五.視頻與排版 六.布局測試 七.布局居中 八.表格 九.表單 十.表單項 十一.JS引入與輸出 十二.JS變量&#xff0c;循環&#xff0c;函數 十三.Array與字符串方法 十四.自定義對象與JSON 十五.BOM對象 十六.獲取…

Network LSA 結構簡述

Network LSA主要用于描述一個區域內的網絡拓撲結構&#xff0c;包括網絡中的路由器和連接到這些路由器的網絡。它記錄了每個路由器的鄰居關系、連接狀態以及連接的度量值&#xff08;如帶寬、延遲等&#xff09;&#xff0c;以便計算最短路徑和構建路由表。display ospf lsdb n…

網關kong記錄接口處理請求和響應插件 tcp-log-with-body的安裝

tcp-log-with-body 介紹 Kong的tcp-log-with-body插件是一個高效的工具&#xff0c;它能夠轉發Kong處理的請求和響應。這個插件非常適用于需要詳細記錄API請求和響應信息的情景&#xff0c;尤其是在調試和排查問題時。 軟件環境說明 kong version 2.1.4 - 2.8.3 [可用親測]C…