計算機核心基礎知識總結----計算機組成原理和操作系統篇

圖片


一、計算機硬件組成

圖片

名稱 分類 功能
控制器 組合邏輯控制器和微程序控制器 計算機的指揮系統,用來控制計算機其他組件的運行,相當於人類的大腦
運算器 並行、串行 進行算術運算和邏輯運算
存儲器 內存 存儲數據,斷電數據會消失
外存 存儲數據,斷電數據不會消失
輸入輸出(I/O) 人機交互類外部設備,存儲設備等 控制輸入和輸出

cpu=運算器+控制器

CPU、內存(主存儲器)以及其他I/O設備都由一條系統總線(bus)連接起來並通過總線與其他設備通信,如圖所示:

圖片

(注:我們編寫的程序一定是要運行於計算機硬件之上,而站在硬件的角度,與運行程序有關的三大核心硬件爲CPU、內存、硬盤。

程序最先是存放於硬盤中的,程序的運行是先從硬盤把代碼加載到內存中,然後cpu是從內存中讀取指令運行。)

總結來說:

  • cpu是人的大腦,負責控制全身和運算(通常將運算器和控制器合稱爲中央處理器(Central Processing Unit,CPU)。其中運算器用來主要負責程序運算與邏輯判斷,控制器則主要協調各組件和各單元的工作,所以CPU的工作主要在於管理和運算。可以說計算機的大腦就是CPU,它從內存中**取指令->解碼->執行,**然後再取指->解碼->執行下一條指令,週而復始,直至整個程序被執行完成。)
  • 內存是人的記憶,負責臨時存儲
  • 硬盤是人的筆記本,負責永久存儲
  • 輸入設備是耳朵或眼睛或嘴巴,負責接收外部的信息存入內存
  • 輸出設備是你的臉部(表情)或者屁股,負責經過處理後輸出的結果

以上所有的設備都通過總線連接,總線相當於人的神經

舉個例子:

上課開始,老師講課,學生聽課,老師是程序員,學生是計算機,學生的器官都是計算機各部分組成

1.你通過耳朵接收老師講的知識->輸入

2.通過自己的神經,將接收的數據存入自己的內存/短期記憶(總線、內存)

3.光聽不行,你還需要反應/處理老師講的知識,於是你的大腦/cpu從短期記憶裏取出知識/指令,分析知識/指令,然後學習知識/執行指令 (cpu取指、分析、執行)

4.你通過作業或者說話輸出你學到的結果

5.你想要永久將知識保存下來,只能拿出一個筆記本,把剛剛學會的知識都寫到本子上,這個本子就是硬盤(磁盤)

既然CPU的重點在於進行運算和判斷,那麼要被運算與判斷的數據是從哪裏來的?CPU讀取的數據都是從主存儲器(內存)來的!主存儲器內的數據則是從輸入單元所傳輸進來!而CPU處理完畢的數據也必須先寫回主存儲器中,最後數據才從主存儲器傳輸到輸出單元。

圖片

在超大規模集成電路構成的微型計算機中,往往將CPU製成一塊具有特定功能的芯片,稱爲微處理器,芯片裏邊有編寫好的微指令集,我們在主機上的所有操作或者說任何軟件的執行最終都要轉化成cpu的指令去執行,如輸入輸出,閱讀,視頻,上網等這些都要參考CPU是否內置有相關微指令集纔行。如果沒有那麼CPU無法處理這些操作。不同的CPU指令集不同對應的功能也不同,這就好比不同的人腦,對於大多數人類來說,人腦的結構一樣,但是大家的智商都有差別。

CPU按照指令集可以分爲精簡指令集CPU和複雜指令集CPU兩種,區別在於前者的指令集精簡,每個指令的運行時間都很短,完成的動作也很單純,指令的執行效能較佳;但是若要做複雜的事情,就要由多個指令來完成。後者的指令集每個小指令可以執行一些較低階的硬件操作,指令數目多而且複雜,每條指令的長度並不相同。因爲指令執行較爲複雜所以每條指令花費的時間較長,但每條個別指令可以處理的工作較爲豐富。


x86架構64位

  • x86架構

    x86是針對cpu的型號或者說架構的一種統稱,詳細地講,最早的那顆Intel發明出來的CPU代號稱爲8086,後來在8086的基礎上又開發出了80285、80386…,因此這種架構的CPU就被統稱爲x86架構了。

    由於AMD、Intel、VIA所開發出來的x86架構CPU被大量使用於個人計算機上面,因此,個人計算機常被稱爲x86架構的計算機!

    程序員開發出的軟件最終都要翻譯成cpu的指令集才能運行,因此軟件的版本必須與cpu的架構契合,舉個例子,我們在MySQL官網下載軟件MySQL時名字爲:

    Windows(x86,32-bit),ZIP Archive
    
    (mysql-5.7.20-win32.zip)   
    

    我們發現名字中有x86,這其實就是告訴我們:該軟件應該運行在x86架構的計算機上。

  • **64位 **

    cpu的位數指的是cpu一次性能從內存中取出多少位二進制指令,64bit指的是一次性能從內存中取出64位二進制指令。

    在2003年以前由Intel所開發的x86架構CPU由8位升級到16、32位,後來AMD依此架構修改新一代的CPU爲64位,到現在,個人計算機CPU通常都是x86_64的架構。

    cpu具有向下兼容性,指的是64位的cpu既可以運行64位的軟件,也可以運行32位的軟件,而32位的cpu只能運行32位的軟件。這其實很好理解,如果把cpu的位數當成是車道的寬,而內存中軟件的指令當做是待通行的車輛,寬64的車道每次肯定既可以通行64輛車,也可以通信32輛車,而寬32的車道每次卻只能通行32輛車

二、操作系統

1.概念:操作系統是應用軟件與硬件之間的一個橋樑,是協調、管理、控制計算機硬件與應用軟件資源的控制程序

2.操作系統的四個特徵:併發、共享、虛擬、異步

  • 併發性(Concurrence):併發是指兩個或多個時間在同一時間間隔內發生。操作系統的併發性是指操作系統中同時存在多個運行着的程序。引入進程的目的是使程序能夠併發執行。併發和共享是操作系統最基本的兩個特徵。併發(同一時間間隔),並行(同一時刻)。

    併發是指一段時間內,宏觀上有多道程序在同時執行。並行是指在每一時刻,單處理器的環境下實際僅能有一道程序執行。並行性需要硬件的條件支撐,例如:多流程或是多處理器

  • 共享(Sharing):資源共享即共享,是指系統中的資源可供內存中的多個併發執行的進程共同使用,可以分爲兩種資源共享方式:

1:互斥共享方式:一段時間內僅允許一個進程訪問該資源,這樣的資源被稱爲臨界資源或是獨佔資源,例如打印機等等

2:同時訪問方式:一段時間內允許多個進程訪問該資源,只是一個請求分幾個時間片間隔完成的效果和連續完成的效果相同,例如磁盤設備等等

  • 虛擬(Virtual):指把一個物理上的實體變爲若干個邏輯上的對應物,有時分複用技術:處理器的分時共享,空分複用技術:虛擬存儲器
  • 異步(Asynchronism):在多道程序環境下,允許多個程序併發執行,但是由於資源有限,進程的執行不一定是連貫到底,而是走走停停。

3.主要功能

  • 處理器管理:在多道程序的情況下,處理器的分配和運行都以進程(或線程)爲基本單位,因而對處理器的管理可以分配爲對進程的管理
  • 存儲器管理:包括內存分配、地址映射、內存保護等等
  • 文件管理:計算機中的信息都是以文件的形式存在的,操作系統中負責文件管理的部分被稱爲文件系統,文件管理包括文件存儲空間的管理、目錄管理和讀寫保護等等
  • 設備管理:主要任務是完成用戶的I/O請求,包括緩衝管理、設備分配、虛擬設備等等

4.核心態與用戶態

核心態:就是執行一些特權指令

用戶態:在覈外的用戶程序不允許執行特權指令

操作系統內核工作在覈心態,而用戶程序工作在用戶態。系統不允許用戶程序實現核心態的功能,而它們又必須使用這些功能。因此,需要在覈心態建立一些“門”,以便實現從用戶態進入核心態。在實際操作系統中,CPU運行上層程序時唯一能進入這些“門”的途徑就是通過中斷或異常。發生中斷或異常時,運行用戶態的CPU會立即進入核心態,這是通過硬件實現的。

例如用一個特殊的寄存器的一位來表示CPU所處的工作狀態,0表示核心態,1表示用戶態。若要進入核心態,則只需將該位置0即可。

在操作系統這一層面上,我們關心的是系統核心態和用戶態的軟件實現與切換。

下面是由用戶態轉向核心態的例子:

  • 用戶程序要求操作系統的服務,即系統調用。

發生一次中斷。

  • 用戶程序中產生了一個錯誤狀態。
  • 用戶程序中企圖執行一條特權指令。
  • 從核心態轉向用戶態由一條指令實現,這條指令也是特權命令,一般是中斷返回指令。

圖片

5.後備隊列、就緒隊列、阻塞隊列

  • 後備隊列:放在外部輔助存儲中,這裏放的是作業,還不能叫做線程,進程。
  • 就緒對列:當線程、進程獲取資源後,但還沒有獲取CPU時,就放進就緒隊列
  • 阻塞隊列:當線程阻塞時,就進入這個狀態。

6.進程和線程

名稱 進程 線性
含義 進程是程序的一次執行過程,是一個動態概念,是程序在執行過程中分配和管理資源的基本單位 線程是CPU調度和分派的基本單位,它可與同屬一個進程的其他的線程共享進程所擁有的全部資源
聯繫 一個進程可以有多個線程,但至少有一個線程 線程是進程的一部分,一個線程只能屬於一個進程
包含關係 沒有線程的進程可以看做是單線程的,如果一個進程內有多個線程,則執行過程不是一條線的,而是多條線(線程)共同完成的;線程是進程的一部分,所以線程也被稱爲輕量級進程
區別 1.根本區別:進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位
2.在開銷方面:每個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程共享代碼和數據空間,每個線程都有自己獨立的運行棧和程序計數器(PC),線程之間切換的開銷小
3.所處環境:在操作系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(通過CPU調度,在每個時間片中只有一個線程執行)
4.內存分配方面:系統在運行的時候會爲每個進程分配不同的內存空間;而對線程而言,除了CPU外,系統不會爲線程分配內存(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源。

7.進程和線程在多核cpu,多cpu中的運行關係

操作系統會拆分CPU爲一段段時間的運行片,輪流分配給不同的程序。對於多cpu,多個進程可以並行在多個cpu中計算,當然也會存在進程切換;對於單cpu,多個進程在這個單cpu中是併發運行,根據時間片讀取上下文+執行程序+保存上下文。同一個進程同一時間段只能在一個cpu中運行,如果進程數小於cpu數,那麼未使用的cpu將會空閒。

多線程的概念主要有兩種:一種是用戶態多線程;一種是內核態多線程,對於內核態多線程(java1.2之後用內核級線程),在操作系統內核的支持下可以在多核下並行運行;

對於多核cpu,進程中的多線程並行執行。

對於單核cpu,多線程在單cpu中併發執行,根據時間片切換線程。

同一個線程同一時間段只能在一個cpu內核中運行,如果線程數小於cpu內核數,那麼將有多餘的內核空閒。

8**.進程的常見狀態?以及各種狀態之間的轉換條件?**

  • 就緒:進程已處於準備好運行的狀態,即進程已分配到除CPU外的所有必要資源後,只要再獲得CPU,便可立即執行。
  • 執行:進程已經獲得CPU,程序正在執行狀態。
  • 阻塞:正在執行的進程由於發生某事件(如I/O請求、申請緩衝區失敗等)暫時無法繼續執行的狀態。

圖片

9.分頁和分段

名稱 分頁 分段
目的 頁是信息的物理單位,分頁是爲實現離散分配方式,以消減內存的外零頭,提高內存的利用率。或者說,分頁是出於系統管理的需要而不是用戶需要。 段是信息的邏輯單位,它含有一組其意義相對完整的信息。分段的目的是爲了更好地滿足用戶的需要。
長度 頁的大小固定而且由系統決定,由系統把邏輯地址劃分爲頁號和頁內地址兩部分,是由機器硬件實現的,因而在系統中只能有一種大小的頁面。 段的長度不固定,決定於用戶所編寫的程序,通常由編譯程序在對程序進行編譯時,根據信息的性質來劃分。
地址空間 頁的地址空間是一維的,即單一的線形地址空間,程序員只要利用一個記憶符就可以表示一個地址。 作業地址空間是二維的,程序員在標識一個地址時,既需要給出段名,又需給出段內地址。
碎片 分頁有內部碎片無外部碎片 分段有外部碎片無內部碎片
絕對地址 處理器使用頁號和偏移量計算絕對地址 處理器使用段號和偏移量計算絕對地址
管理方式 對於分頁,操作系統必須爲每個進程維護一個頁表,以說明每個頁對應的的頁框。當進程運行時,它的所有頁都必須在內存中,除非使用覆蓋技術或虛擬技術,另外操作系統需要維護一個空閒頁框列表。 對於分段,操作系統必須爲每個進程維護一個段表,以說明每個段的加載地址和長度。當進程運行時,它的所有短都必須在內存中,除非使用覆蓋技術或虛擬技術,另外操作系統需要維護一個內存中的空閒的空洞列表。特別的,當使用虛擬技術是,把一頁或一段寫入內存時可能需要把一頁或幾個段寫入磁盤
共享和動態鏈接 不容易實現 容易實現

10.進程同步

進程同步的主要任務:是對多個相關進程在執行次序上進行協調,以使併發執行的諸進程之間能有效地共享資源和相互合作,從而使程序的執行具有可再現性。

同步機制遵循的原則:

(1)空閒讓進;

(2)忙則等待(保證對臨界區的互斥訪問);

(3)有限等待(有限代表有限的時間,避免死等);

(4)讓權等待,(當進程不能進入自己的臨界區時,應該釋放處理機,以免陷入忙等狀態)。

11.死鎖(Java面試必問)

  • 定義:死鎖是指兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。更加規範的定義:“集合中的每一個進程都在等待只能由本集合中的其他進程才能引發的事件,那麼該組進程是死鎖的。”競爭的資源可以是:鎖、網絡連接、通知事件,磁盤、帶寬,以及一切可以被稱作“資源”的東西。

例如,在某一個計算機系統中只有一臺打印機和一臺輸入 設備,進程P1正佔用輸入設備,同時又提出使用打印機的請求,但此時打印機正被進程P2 所佔用,而P2在未釋放打印機之前,又提出請求使用正被P1佔用着的輸入設備。這樣兩個進程相互無休止地等待下去,均無法繼續執行,此時兩個進程陷入死鎖狀態。

  • 產生原因:
  1. 系統資源的競爭

系統資源的競爭導致系統資源不足,以及資源分配不當,導致死鎖。

  1. 進程運行推進順序不合適

進程在運行過程中,請求和釋放資源的順序不當,會導致死鎖。

  • 四個必要條件

互斥條件:進程要求對所分配的資源進行排它性控制,即在一段時間內某資源僅爲一進程所佔用。

請求和保持條件:當進程因請求資源而阻塞時,對已獲得的資源保持不放。

不剝奪條件:進程已獲得的資源在未使用完之前,不能剝奪,只能在使用完時由自己釋放。

環路等待條件:在發生死鎖時,必然存在一個進程–資源的環形鏈。

  • ** 死鎖的避免與預防**

1. 死鎖避免

死鎖避免的基本思想:系統對進程發出的每一個系統能夠滿足的資源申請進行動態檢查,並根據檢查結果決定是否分配資源,如果分配後系統可能發生死鎖,則不予分配,否則予以分配,這是一種保證系統不進入死鎖狀態的動態策略。

如果操作系統能保證所有進程在有限時間內得到需要的全部資源,則系統處於安全狀態否則系統是不安全的。

  1. 安全狀態是指:如果系統存在 由所有的安全序列{P1,P2,…Pn},則系統處於安全狀態。一個進程序列是安全的,如果對其中每一個進程Pi(i >=1 && i <= n)他以後尚需要的資源不超過系統當前剩餘資源量與所有進程Pj(j < i)當前佔有資源量之和,系統處於安全狀態則不會發生死鎖。

    b.不安全狀態:如果不存在任何一個安全序列,則系統處於不安全狀態

下面我們來通過一個例子對安全狀態和不安全狀態進行更深的瞭解

圖片

如上圖所示系統處於安全狀態,系統剩餘3個資源,可以把其中的2個分配給P3,此時P3已經獲得了所有的資源,執行完畢後還能還給系統4個資源,此時系統剩餘5個資源所以滿足(P2所需的資源不超過系統當前剩餘量與P3當前佔有資源量之和),同理P1也可以在P2執行完畢後獲得自己需要的資源。

如果P1提出再申請一個資源的要求,系統從剩餘的資源中分配一個給進程P1,此時系統剩餘2個資源,新的狀態圖如下:那麼是否仍是安全序列呢那我們來分析一下

圖片

系統當前剩餘2個資源,分配給P3後P3執行完畢還給系統4個資源,但是P2需要5個資源,P1需要6個資源,他們都無法獲得資源執行完成,因此找不到一個安全序列。此時系統轉到了不安全狀態。

2.死鎖預防

我們可以通過破壞死鎖產生的4個必要條件來 預防死鎖,由於資源互斥是資源使用的固有特性是無法改變的。

  1. 破壞“不可剝奪”條件:一個進程不能獲得所需要的全部資源時便處於等待狀態,等待期間他佔有的資源將被隱式的釋放重新加入到 系統的資源列表中,可以被其他的進程使用,而等待的進程只有重新獲得自己原有的資源以及新申請的資源纔可以重新啓動,執行。
  2. 破壞”請求與保持條件“:第一種方法靜態分配即每個進程在開始執行時就申請他所需要的全部資源。第二種是動態分配即每個進程在申請所需要的資源時他本身不佔用系統資源。
  3. 破壞“循環等待”條件:採用資源有序分配其基本思想是將系統中的所有資源順序編號,將緊缺的,稀少的採用較大的編號,在申請資源時必須按照編號的順序進行,一個進程只有獲得較小編號的進程才能申請較大編號的進程。

啓動計算機

在計算機的主板上有一個基本的輸入輸出程序(Basic Input Output system)

BIOS就相當於一個小的操作系統,它有底層的I/O軟件,包括讀鍵盤,寫屏幕,進行磁盤I/O,該程序存放於一非易失性閃存RAM中。

啓動流程

1.計算機加電

2.BIOS開始運行,檢測硬件:cpu、內存、硬盤等

3.BIOS讀取CMOS存儲器中的參數,選擇啓動設備

4.從啓動設備上讀取第一個扇區的內容(MBR主引導記錄512字節,前446爲引導信息,後64爲分區信息,最後兩個爲標誌位)

5.根據分區信息讀入bootloader啓動裝載模塊,啓動操作系統

6.然後操作系統詢問BIOS,以獲得配置信息。對於每種設備,系統會檢查其設備驅動程序是否存在,如果沒有,系統則會要求用戶按照設備驅動程序。一旦有了全部的設備驅動程序,操作系統就將它們調入內核。然後初始有關的表格(如進程表),穿件需要的進程,並在每個終端上啓動登錄程序或GUI


參考博客:

https://blog.csdn.net/misayaaaaa/article/details/73087967

https://www.cnblogs.com/linhaifeng/p/6523843.html#4462371

https://blog.csdn.net/qq_32100465/article/details/95730268

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章