學前說兩句
這個章節內容還是比較多的,學習的內容都是很基礎的計算機知識,如果你是計算機專業的,這些東西你都了解過的,學習起來應該不難。
根據我的理解,最核心的內容應該是:前驅圖、死鎖與銀行家算法、存儲管理、磁盤管理、索引文件、位視圖。
不過這個章節在軟件架構師的內容中不算太核心,大家學習的時候不要投入太多的時間。
核心知識
![]()
計算機系統
![]()
從硬件層面上學習就是計算機組成
從軟件層面上學習就是操作系統
計算機組成 馮諾依曼體系結構
![]()
層次化存儲
![]()
局部性原理
![]()
寄存器里面存儲的比特位,32的機器,存儲的就是32位的
這里要了解一下局部性原理,局部性原理是層次化存儲的支撐
總線
![]()
- 單工:數據只能單向傳輸,如廣播、電視信號,發送方和接收方角色固定,無法反向通信。
- 半雙工:數據可雙向傳輸,但同一時間僅支持一個方向,如對講機,需切換發送/接收狀態。
- 全雙工:數據可同時雙向傳輸,如電話通話,雙方能同時說話和聆聽,無需切換模式。
![]()
![]()
1.數據總線(Data Bus)
- 功能:負責在CPU、內存、外設之間傳輸實際數據(如數字、文字、指令等)。
- 例子:當你用鍵盤輸入字母“A”時,鍵盤通過數據總線將“A”的二進制編碼(如01000001)發送給CPU;CPU處理后,又通過數據總線將結果(如顯示指令)傳給顯示器。
- 功能:指定數據要發送到哪個位置(如內存的某個地址、硬盤的某個扇區),相當于“門牌號”。
- 例子:CPU想讀取內存中第1000號地址的數據時,會通過地址總線發送地址1000,內存收到后,從該地址取出數據,再通過數據總線傳回CPU。
- 功能:傳遞控制信號(如讀寫指令、中斷請求),協調各部件的動作,相當于“交通警察”。
- 例子:CPU通過控制總線向內存發送“讀”信號,內存收到后,知道要將數據通過數據總線傳給CPU;如果是“寫”信號,內存則準備接收數據。
通俗比喻
- 數據總線:像貨車,負責運送貨物(數據)。
- 地址總線:像導航,告訴貨車去哪里(目標地址)。
- 控制總線:像紅綠燈,指揮貨車何時出發、何時停止(控制操作)。
三者協同工作,才能讓計算機各部件高效協作!
![]()
并行總線適合短距離的,串行總線適合長距離的
串行總線的傳輸速度(波特率)可以調整。
無論是串行還是并行,要想驗證是否通過,需要通過驗證碼來實現,數據傳輸方式可以有多種,比如中斷,DMA等等
![]()
一般不說總線都是半雙工的。軟件查詢?可以通過多種方式來查詢
數據傳輸方式
![]()
程序控制(查詢)方式
- 解釋:這就好比你去快遞站取快遞,你(相當于CPU)得不停地問快遞站工作人員(相當于外設),有沒有自己的快遞。這種方式分為兩種情況,一種是一直問,不管有沒有快遞(無條件傳送);另一種是先問問有沒有,有的話再取(程序查詢方式)。它的優點是方法簡單,就像這種簡單的詢問流程很容易理解和操作,硬件開銷也小;缺點是I/O能力不高,因為CPU要一直去查詢,就像你一直問快遞,就沒辦法去做其他事情,嚴重影響了CPU的利用率。
- 例子:計算機的鍵盤輸入,早期可能采用這種方式,CPU不斷查詢鍵盤是否有按鍵按下,若有則讀取按鍵信息。
- 解釋:還是以取快遞為例,你不用一直在快遞站守著問,而是留下自己的聯系方式,等快遞到了,快遞站工作人員會主動通知你。這種方式下,CPU不用等待外設準備好數據,可以先去執行其他任務,當外設準備好數據后,會向CPU發送一個中斷信號,就像工作人員給你打電話通知你取快遞,CPU再轉去處理數據傳輸。這種方式提高了傳輸請求的響應速度,而且CPU與I/O傳輸可以并行進行,也就是取快遞和做其他事情互不耽誤。
- 例子:在計算機打印文件時,CPU將打印任務發送給打印機后,就可以去處理其他任務,當打印機準備好接收數據時,會向CPU發出中斷信號,CPU再響應并傳輸數據給打印機。鼠標和鍵盤就是程序中斷方式
- 解釋:假如你要把一大批貨物從倉庫(主存)運到另一個地方,如果還是靠你(CPU)一件一件搬運或者指揮搬運,效率很低。DMA方式就相當于請了一個專業的搬運團隊(DMA控制器),他們可以直接在倉庫(主存)和目的地(外設)之間快速、批量地搬運貨物,不需要你(CPU)一件一件去操作,只需要在搬運開始和結束時通知你一下。這種方式是為了在主存與外設之間實現高速、批量數據交換而設置的,比前兩種方式都高效,同樣CPU與I/O傳輸可并行。
- 例子:計算機從硬盤讀取大量數據到內存,比如加載一個大型游戲,DMA控制器可以直接控制數據在硬盤和內存之間快速傳輸,而不需要CPU逐個數據地去處理傳輸過程,大大提高了數據傳輸效率。
![]()
不需要CPU的參與,外設可以直接和內存(主存)交換數據。也就是說,DMA讓外設(比如硬盤、網卡)和內存之間建立了一條“直達的高速公路”,繞過了CPU。
處理器體系結構
![]()
- 存儲方式:馮·諾依曼結構指令和數據存一塊;哈佛結構指令和數據分開存。
- 總線情況:馮·諾依曼結構共用一組總線傳輸指令和數據;哈佛結構指令、數據各有獨立總線,還有地址總線。
- 讀取特點:馮·諾依曼結構同一時間只能取指令或讀數據;哈佛結構能同時并行讀取指令和數據,數據吞吐率高。
- 典型應用:馮·諾依曼結構多用于PC處理器;哈佛結構常用于嵌入式系統處理器。
![]()
復雜:可變長 用的多的就短一些,用的少的就長一些
簡單:指令都放在寄存器里面
操作系統 操作系統的概述
![]()
![]()
操作系統主要有:進程管理、存儲管理、文件管理、作業管理、設備管理這幾個主要功能
操作系統的分類
![]()
![]()
![]()
進程管理
進程管理就是CPU如何調度進程進行的管理
什么是進程
![]()
就把計算機正在執行的任務想象成一場熱鬧的舞臺劇,每個上臺表演的角色就相當于一個進程。而PCB呢,就是這個角色的專屬小檔案。
這個檔案里記錄了關于這個角色(進程)的各種各樣重要信息。比如,角色的身份編號(進程標識符),讓計算機能清楚區分不同的進程;角色現在處于表演的哪個狀態,是在臺上激情表演(運行狀態)、在后臺候場(就緒狀態),還是因為一些原因暫時不能上臺(阻塞狀態),這些狀態信息都在檔案里;還有角色在舞臺上的位置信息,方便下次繼續表演時能準確找到地方;另外,檔案里還有控制角色表演方式的控制信息,以及和其他相關角色(進程)的關聯信息等等。
計算機靠這個PCB小檔案來管理和調度每一個進程,就像導演靠演員的檔案來安排舞臺劇的表演一樣,這樣才能讓各個進程有條不紊地運行。
![]()
第一問中,我們只需要看PCB也就是最后一列,我們可以看到他們之間并沒有任何連接,所以不是順序也不是連接
索引方式是為每種進程狀態設置一個索引表,索引表的表項指向處于該狀態的進程的PCB。在圖中,運行進程索引表、就緒進程索引表、阻塞進程索引表分別對應運行、就緒、阻塞三種狀態的進程,并且通過運行指針、就緒表指針、阻塞表指針來指向相應的索引表,每個索引表中的表項又指向具體進程的PCB,完全符合索引方式的特點。
線程
![]()
進程的狀態
![]()
要注意狀態之間是否可流轉
進程調度算法
![]()
高響應有限綜合了先來先服務和最短作業有限兩種
進程的同步與互斥
![]()
- 互斥:像千軍萬馬過獨木橋,同一時刻只一個進程能用臨界資源,是直接制約。
- 同步:進程速度不同,需等待,如張三步行慢,李四騎車快但要在起點A等張三一起出發(或在途中某點等),是間接制約。
同步不同類的進程
互斥相同類的進程
PV操作與信號量
![]()
這張圖很復雜,首先用通俗的語言來解釋一下,這里面有三個核心的內容:
一個是信號量,這個信號量表示任務中資源的數量,注意是任務中,所以第一步要區分任務是什么,只有確定了任務,才能知道信號量為多少。
第二個核心內容是PV操作,P表示進行加鎖,進程在加鎖的時候,會觸發信號量-1,表示鎖定資源。此時如果發現資源不小于0,那么就表示資源夠用,此時就可以順利執行,如果發現資源小于0,就表示資源不夠用,那么進程就不會執行了,此時就會進入到阻塞隊列中,所以這就是為什么,信號量為負時表示排隊的進程數。
第三個核心內容是PV操作,V表示解鎖,進行在解鎖的時候,會觸發信號量+1,表示進程使用完成資源了,釋放資源,如果此時發現信號量小于等于0,這里要說一下等于0,等于0,說明之前是-1,-1表示有排隊,所以說明有進行在剛剛找資源的時候,沒有找到,所以此時就需要將阻塞進程喚醒一個。
![]()
首先第一點,我們必須要確定任務是什么,任務是3個進程搶奪兩個打印機,所以打印機就是資源,所以s的初始值就是2。設想一種極端情況,只有p,沒有v。第一個進程執行p操作,此時s=1,第二個進程執行p操作,此時s=0,第三個進程執行p操作,此時s=-1,所以取值范圍為[-1,2]
![]()
首先,先分析任務是什么,任務是用戶訂票,那么這個時候用戶可以理解為進程,那么票就是信號量,所以票有Tj,所以信號量初始值應該為Tj,但是選項里面沒有。那么這個時候應該選擇什么呢?
其實仔細想一下,這個的本質確實是訂票,雖然進程們強的是Tj,但是如果多個進程同時操作Tj,就會出現數據不一致的問題,比如兩個進程同時讀取到相同的剩余票數,然后都進行售票操作并修改Tj,導致實際售出的機票數超過真實剩余量。所以,這里的關鍵是要保證同一時間只有一個進程能夠訪問和修改Tj,這就需要一個互斥信號量來控制,互斥信號量初始值應該為1
系統有n個售票點管理機票銷售,用n個進程Pi模擬,Tj單元存機票剩余票數。信號量S用于實現對Tj單元的互斥訪問,因為多個進程可能同時操作Tj,為保證數據正確性需互斥,所以S初始值應為1,確保同一時間只有一個進程訪問Tj。
空(a)、空(b)、空(c)處操作分析
- 空(a)處:在進程Pi按用戶要求找到單元Tj后,準備操作Tj前,要保證對Tj的互斥訪問,所以應執行P(S)操作,申請資源使用權。
- 空(b)處:當Temp < x,即余票不足時,進程應釋放對信號量S的控制,讓其他進程能訪問Tj,所以此處是V(S)操作。
- 空(c)處:在完成售票操作(Temp = Temp - x,Tj = Temp)后,進程要釋放信號量S,使其他等待進程有機會獲取資源,因此也是V(S)操作。
綜上,信號量S初始值為1,空(a)、空(b)、空(c)處應分別填入P(S)、V(S)和V(S),答案選A。
前驅圖
![]()
![]()
前驅圖表示進程和進程之間的關系,A->D表示A做完之后D才可以,要想保證這個邏輯,就必須使用信號量,在進程D開始之前,要加鎖來檢查,也就是p,沒有鎖定到資源就等待。在進程A結束之后,要釋放鎖,也就是V,釋放鎖后要檢查有沒有進程在等待,等待要執行等待進程。
前驅圖和信號量的結合關鍵在于->p檢查前驅,v通知后驅,A->D,A就是前驅,D就是后驅,前驅完成需要V操作,后驅開始需要P操作,這是核心
表示方式:
![]()
如上所示,前驅圖和信號量的表示方式有兩種,如上所示。我們可以完成的看到了原則,就是前驅結束會V,后驅開始會P。
圖中有四個箭頭,所以就會有四個信號量
死鎖和銀行家算法 死鎖產生的條件
![]()
互斥:爭奪相同的資源
保持和等待:已經有的資源不放手,繼續等待需要的資源
不剝奪:已經被占用的資源,不能被搶奪
環路等待:我需要的資源,在別人那,我有的資源,別人需要
四大條件是死鎖的必要條件,必須同時發生才能產生死鎖。要想死鎖不出現,有兩種方式,一種方式是破壞四大條件,其中互斥是無法破壞的,不然會產生安全性問題。
另外一種方法就是銀行家算法,它的核心思想是通過一定規則的資源分配,保證在有限的資源情況下,讓進程能夠正常完成
死鎖所需資源數
![]()
![]()
假設資源為N,進程為M,每個進程需要a個資源才可以運行,那么N為多少的時候一定會出現死鎖,N為多少的時候通過一定的方式分配可以保證死鎖不出現,N為多少的時候一定不會出現死鎖?
如上所示,當資源為13個的時候是一定不會出現死鎖的,這樣就肯定會有一個進程擁有五個資源,此時一定不會死鎖
銀行家算法
![]()
銀行家算法的原則就是通過一定規則的資源分配,保證在有限的資源情況下,保證所有進程都能逐步獲取到所需要的資源,最終保證程序的穩定執行。
示例:
![]()
![]()
![]()
![]()
![]()
![]()
銀行家算法非常簡單,就是看現有資源有限分配給誰的問題,如果先分配給了一個進程,那么進程就會釋放它已經占有的資源,不斷的分配資源給進程,最終完成所有進程執行完畢的任務。
存儲管理 頁式存儲
![]()
頁式存儲的核心就是將內存一個大空間,按照4kb(默認)為一個單位來劃分成多個獨立的小塊,這個小塊就會稱為頁。
對于用戶程序而言,程序操作是邏輯地址,比如第幾頁,但是實際數據存儲再內存中,是物理地址,這兩者之間的映射關系是通過頁表來維護的,操作系統負責頁表。
頁表有兩列,第一列是邏輯地址的頁號,第二頁為物理地址的塊號。
整個使用邏輯是這樣的,當用戶程序操作第N頁的時候,就可以通過頁面找到第N頁對應的物理塊號,然后通過物理塊號來找到對應的內存地址。
當找到塊之后,還沒有完,因為一個塊為4kb,那么可能我們只需要一個塊中的一小部分數據,那么此時還要有一個偏移量的概念,也就是頁內地址。無論是物理地址還是邏輯地址,他們兩個對應的其實都是同一個物理塊,那么對于二者而言,兩個的偏移量也就是頁內地址其實是描述的同一個位置的數據。
邏輯地址=頁號+頁內地址
物理地址=頁幀號+頁內地址
頁號和頁幀號通過頁表對應,頁內地址肯定是一樣的。這個是核心
一個頁有4kb,頁內地址唯一標識一頁(4KB)內的某個字節位置,范圍是0到4095(共4096個地址)。要想表示4096個地址,需要12位0、1來表示。例如,地址000000000010(二進制)指向頁內第2個字節。每個字節的數據使用8位二進制進行數據表示,不要小看8位二進制,asc碼才有多少位啊。
- 不要混淆“地址”與“數據”
- 地址是位置標識(如門牌號),數據是位置存儲的內容(如房間里的物品)。
- 頁內地址用12位二進制表示位置,每個位置存儲的數據是1字節(8比特)。
明白這個之后,我們就可以給定一個物理地址算出邏輯地址,或者給出邏輯地址算出物理地址,因為頁內地址都是12位,并且一樣的,頁號和頁幀號可以通過頁表來映射。
比如邏輯地址:10 1100 1101 1110
此時首先可以看出頁內地址位1100 1101 1110
然后頁號為10,對應十進制為2,此時可以看到頁幀號為6,二進制表示就是110,所以最終可以得到的物理地址為110 1100 1101 1110
在頁式存儲管理中,抖動(Thrashing)現象是指進程在運行過程中,頻繁地發生頁面置換(Page Fault),導致大部分時間都用于從磁盤等外存中調入頁面和將頁面寫回外存,而真正用于執行程序指令的時間卻很少,就好像系統在不停地“抖動”,無法有效地推進程序的執行。
缺頁中斷
![]()
訪問位與時間有關系
修改位與實踐沒有關系
當程序訪問4的時候,發現頁表中沒有該頁,此時就會產生缺頁中斷,他會把先把頁面淘汰出去,然后再加加進來,淘汰的原則就是右下角。
段式存儲
一般來說,一個程序的邏輯不只有4kb,會更大,所以頁式存儲肯定是會把程序的邏輯給分割的,所以引入段式存儲,可以保證程序邏輯不被分割來。
![]()
頁式存儲中有一個隱含的概念,就是一頁只有4kb,所以頁面中只用記錄頁號和頁幀號(頁的起始物理位置)的映射就可以了。但是在段式存儲中,每個段的大小是不一樣的,所以我們不僅要記錄每個段的起始位置,還要記錄段的長度。
(0,35k),段號為0對應的段長只有30k,那么35k越界了,此時一定是有問題的。
![]()
段頁式
![]()
段頁式存儲是段式與頁式存儲管理的結合。其基本思路是先將程序的地址空間按邏輯模塊分段(如代碼段、數據段、堆棧段等),再將每段細分成固定大小的頁。這樣,程序的邏輯地址就由段號、段內的頁號以及頁內的位移三部分組成。
系統中為每個進程建立一段表,段表寄存器用于存放當前運行進程的段表起始地址和段表長度。段表寄存器是CPU中的一組專用寄存器,用于在程序執行過程中快速訪問當前進程的段表信息。當一個進程被調度到CPU上運行時,操作系統會將該進程的段表起始地址和段表長度加載到段表寄存器中。這樣,CPU在進行地址轉換時,可以直接從段表寄存器中獲取段表的起始位置和大小,而無需每次都通過操作系統查詢。也就是說段表寄存器只存當前用的這段
段表中每個表目對應一個段,包含段表大小、段表始址、狀態等信息,還指向該段的頁表起始地址和頁表大小,這樣就可以通過段找到這個段中包含的所有的頁。
圖中右上角展示的是邏輯地址的結構,在段頁式存儲管理系統中,邏輯地址通常被劃分為段號、頁號和頁內地址三個部分。圖中展示的邏輯地址結構可能只是一個簡化的示例,為了說明段頁式存儲管理中邏輯地址的劃分方式,并不一定反映實際的頁大小設置。如果按照圖中的說明,那么一個頁的大小就是256字節了。
磁盤管理 物理結構
![]()
磁盤就像是一個光盤一樣,有一個磁頭不停的轉,轉的時候磁道沒有變更,變的是扇區,這是順序的。
磁頭還可以沿著中心位置移動,此時變的是磁道,這是隨機的
![]()
電腦上的磁盤是立體的,又多個,同一時刻,磁頭在不同盤面的扇區都是一樣的。
讀取磁盤的數據的時間
![]()
你可以理解位磁道和扇區就是磁盤體系下的坐標軸,當磁道和扇區確定了,此時磁盤的數據點就唯一確定了。
![]()
有的時候傳輸時間是可以忽略的。
![]()
例題一
![]()
一個旋轉周期為33ms,一共有11個物理塊,說明旋轉一個物理塊需要3ms,這是隱含條件。
單緩沖區,處理時間為3ms,說明當一個物理塊數據往里面寫的時候,另外一個物理塊必須等待,是沒有辦法讀的。
解決這個問題,很簡單,通過一個畫圖就可以了,首先一個記錄處理需要兩部分,一部分是讀取數據,另外一部分是處理數據,我們可以得到一個這樣的圖
![]()
我們先從R0開始,首先它不需要旋轉,可以直接讀取數據需要3ms,然后處理數據3ms,此時得到一個這樣的圖
![]()
6ms時候,磁頭已經到R2的開始的位置了
![]()
此時R1就被過去了,所以需要30ms才可以到R1開始的位置,然后3ms讀取R1,3ms處理數據
![]()
此時磁頭已經到了R3開始的位置,已經錯過了R2了
![]()
所以由此推斷R2也會和R1一樣
所以最終的結果為3+3+(30+3+3)*10=6+360=366
第二問,換了位置,設想一下,剛才如果R1和R2換下位置,是不是R0處理完成之后,跳過去的就不是R1了,就是R2了,如果此時是這樣的位置呢
![]()
此時每一個都不需要輪詢一圈了,可以直接讀取+處理了,就是(3+3)*11=66ms
關鍵點:一定要看好這個時間是否會有重疊,不要以為數據處理的時間可以和磁頭旋轉并行,這里是不可以的。
所以記住一點,如果不能并行,那么這個圖中就不能畫出現縱向重合的情況
例題二
![]()
先看單緩沖區,處理一個磁盤塊需要3個步驟:
讀入緩沖區
緩存區到用戶區
用戶區處理
緩沖區是順序的,所以讀取緩沖區和緩沖區到用戶區是無法并行的,也就是緩沖區在一個時刻,只能處理一個磁道的數據
![]()
首先先看第一塊,讀取緩沖區15,緩沖區到用戶區5,處理1,此時可以得到
![]()
注意,標紅的就是只能串行的,不能重合的部分 ,因為是獨占的
接下來看第二塊:
![]()
由此可以推測出來,10塊需要(15+5)+(15+5)*9+1=201
接下來我們分析雙緩沖區的
![]()
我們必須要解決一個誤區,就是雖然是雙緩沖區,但并不意味著可以通過往多個緩沖區中存儲數據。在同一時刻由開關控制,也只能往一個緩存區中寫入數據,同時緩沖區也在統一時刻也只能有一個緩沖區往用戶進程里面寫入數據,所以這里依然不能并行
但是輸入到緩沖區,和緩沖區到用戶進行這里是可以并行了,下面我們看一下
![]()
所以最終我們可以得到15*10+5+1=156
所以這種問題,只需要通過這種圖就很好的就可以解決,核心就是看有沒有辦法并行,只要可以并行就大膽的并行就可以了,放心的畫。
其實這種可以并行的有一種公式:
![]()
這個叫做流水線計算,它的核心公式,就是先看一個基本步驟的耗時,這里無論是并行還是串行都是15+5+1,然后再看tmax,核心就是找出所有的并行工作,然后找到最大的并行時間
![]()
![]()
移臂調度算法
![]()
旋轉是沒有算法的,但是尋找磁道是有算法的,所以移臂是切換磁道的
掃描算法不會換方向:從頭到尾,再從尾到頭
從頭到尾,然后又直接跳到頭,又從頭開始
![]()
![]()
![]()
柱面號就是磁道號,相同磁道選扇區從小到大的
文件系統 索引文件結構
![]()
文件系統中索引文件結構有四種:直接索引、一級間接索引、二級間接索引、三級間接索引
如果題目沒有明確,那么默認直接索引有一個、一級間接索引有一個、二級間接索引有一個,三級間接索引有一個
![]()
物理盤塊可以存儲兩類數據,存儲不同類型的數據叫法是不一樣的。
假設一個物理盤塊是1kb,而一個地址項大小是4B,那么此時一個物理盤塊最多可以存儲256個索引,那么整個文件系統最多可以存儲10+256+256*256+256*256*256個物理盤,一個物理盤1kb,那么整個文件系統就是(10+256+256*256+256*256*256)kb
![]()
![]()
注意,這里說的是,索引節點只有8個地址項,其中0到5為直接索引,6為一級索引,7為二級索引,沒有三級索引:
直接索引指向0到5的物理塊
物理塊大小為1kb,每個地址項大小為4字節,此時一個物理塊有256個索引位置
一級索引指向6到6+256-1=261
二級索引指向到262+256*256-1= 65797
由于從0開始,所以邏輯總頁數為65798
或者可以6+256+256*256=65798
記錄磁盤空間使用情況 位圖
![]()
通過位示圖中標1的表示被占用,標0的表示不被占用
第一問:1000個物理塊,這里假設計算機字長位16,那么需要1000/16=62...8 說明要63個字才可以
第二問:64號物理塊,64/16=4....1,此時說明應該在第4個字的地方沒法放,需要放在第五個字上的,1bit位置上,也就是4,0 設置為1,表示有數據。
![]()
- 算出物理塊總數:磁盤總容量除以每個物理塊的大小,就能知道磁盤被劃分成了多少個物理塊。即300×1024MB÷1MB=30720個物理塊。這里把300GB換算成MB,因為1GB = 1024MB,所以要乘以1024。
- 算出位示圖所需字數:用物理塊總數除以一個字能對應的物理塊數(也就是計算機字長32)。即30720÷32=9600個字。
- 字的定義:在計算機領域,字(Word)是CPU一次能處理的數據的位數或者能傳送的二進制位數,它是一個重要的基本單位。不同字長的計算機,其字的長度有所不同,比如常見的32位計算機,一個字就是32位。
![]()
性能指標 軟硬件指標分類
![]()
時鐘頻率:CPU反應的快慢
吞吐率:單位時間內完成的任務量
吞吐量:一定時間內完成的任務量
![]()
特殊指標
![]()
字長:計算機一次表示的字的長度,通常與計算機的硬件性能相關
數據通路寬度:數據傳輸過程中,一次性通過的比特位位數
響應時間是系統或服務從接收到請求到開始處理的時間間隔,而完成時間則是從請求開始到處理結束的總耗時,兩者核心區別在于前者關注“開始處理”的時效,后者關注“整個流程”的完成時效。
兼容性:主要是指操作系統的兼容性
![]()
主頻:計算機單位時間(1s)內能夠處理的脈沖數。或者理解為計算機的運算速度
CPU時鐘周期是一次脈沖完成的時間,所以CPU時鐘周期=1/主頻
在計算機中,時鐘周期是最小的單位時間,機器周期和指令周期會包含多個時鐘周期
主頻是CPU的頻率,在它之外內是外頻,它們相差的倍數叫做倍頻
C就是總周期:總周期數:CPU 執行一段程序總共花費的時鐘周期數量。
I就是總條數:總條數:這段程序包含的指令總數
CPU時鐘周期:CPU 的時鐘周期是 CPU 的節拍,由主頻決定,CPU 時鐘周期 = 1 / 主頻。它表示 CPU 完成一個基本操作所需要的時間。
P就是/
S就是每條指令完成的總時間,每條指令完成的總時間=平均每條指令的平均周期個數*CPU始終周期= CPI × 時鐘周期 = CPI / 主頻
S表示總時間
IPS 是每秒執行的指令數,根據定義,IPS = 總條數 / 總時間
IPS=總條數/每條指令完成的總時間 × 總條數=1/每條指令完成的總時間
通過不同的推導方式都得到了 IPS = 主頻 / CPI = 主頻×IPC 這個公式,它用于衡量 CPU 每秒能夠執行的指令數量,是評估 CPU 性能的重要指標之一。
MFLOPS與MIPS是一個東西,只不過是針對浮點數的
![]()
基本指令5個周期,每個周期3*10^-6s,那么一個指令總時間為15*10^-6s,此時IPS=1/每條指令完成的總時間,此時可以得到1/15*10^6IPS,轉變為MIPS就是1/15MIPS,注意這里M到非M為10的6次方,G到M為10的3次方=0.067
![]()
這個選擇A,因為200MHz*13=主頻,2600MHZ,轉變就是2.6GHz
![]()
所以G和M之間相差1000倍
性能調整
![]()
![]()
A,CPU利用率高是可以進行優化的
C、此時應該優化磁盤
D、首先不正比,同時這里也沒有表明CPU是性能的主要問題點
![]()
阿姆達爾(Amdahl)解決方案
![]()
![]()
這個公式很復雜,不用看公式,就假設總時間為100,占有運行時間60%,那么就是60時間,提高5倍,時間就是12,所以從時間由100降低到了52,所以提高了1.923倍
![]()
這個就是求極限值,當n趨向于無窮的時候,p的值是多少
![]()
性能評價方法
![]()
時鐘頻率法,指令執行速度法,等效指令速度法,都是用來評價CPU的
數據處理速率法:衡量CPU和存儲
![]()
![]()
A丟包率主要是網絡層面的
![]()
性能評估
![]()
![]()
思維導圖
# 計算機系統基礎 - 核心知識思維導圖 │ ├── 0?? 計算機系統的組成 (★★★) │ ├── 硬件 │ │ ├── CPU │ │ ├── 內存 │ │ ├── 存儲設備 │ │ ├── 輸入設備 │ │ └── 輸出設備 │ └── 軟件 │ ├── 系統軟件 │ │ ├── 操作系統 │ │ ├── 編譯程序 │ │ ├── 匯編程序 │ │ └── 實用程序 │ └── 應用軟件 │ ├── 辦公軟件 │ ├── 數據庫應用 │ ├── 網絡應用 │ └── 行業專用軟件 │ ├── 1?? 處理器體系結構與 指令系統 (★★★) │ ├── 馮·諾依曼結構 │ │ ├── 指令與數據存儲器合并 │ │ ├── 指令與數據通過相同數據總線傳輸 │ │ └── 典型應用:PC處理器(I3、I5、I7) │ ├── 哈佛結構 │ │ ├── 指令與數據分開存儲、 獨立編址 │ │ ├── 并行讀取,數據吞吐率高 │ │ ├── 4條總線:指令/數據地址總線+指令/數據總線 │ │ └── 典型應用:嵌入式系統、DSP │ ├── CISC(復雜指令集) │ │ ├── 指令數量多、頻率差別大 │ │ ├── 可變長格式、多種 尋址方式 │ │ ├── 微程序控制技術 │ │ └── 典型:x86(Intel、AMD) │ ├── RISC(精簡指令集) │ │ ├── 指令數量少、定長格式 │ │ ├── 單周期指令、操作寄存器 │ │ ├── 硬布線控制、適合流水線 │ │ ├── 典型:ARM、Power │ │ └── RISC特點不包括:尋址方式豐富、指令功能強 │ ├── 總線 │ │ ├── 基本概念:一組能為多個部件分時共享的信息傳送線 │ │ ├── 核心特點 │ │ │ ├── 分時發送:多個部件只能分時向總線發送數據 │ │ │ ├── 同時接收:多個部件可以同時從總線接收數據 │ │ │ ├── 總線復用 :減少信號線數量,以較少的信號線傳輸更多信息 │ │ │ └── 注意:傳統總線通常是半雙工的,但現代總線可支持全雙工 │ │ ├── 按層次分類 │ │ │ ├── 芯片內總線:集成電路芯片內部各部分的連接 │ │ │ ├── 系統總線 (內總線):CPU、內存和接口等連接 │ │ │ └── 外總線(通信總線):計算機與外設或計算機間連接 │ │ ├── 按功能分類 │ │ │ ├── 數據總線:傳輸數據 │ │ │ ├── 地址總線:傳輸地址 │ │ │ └── 控制總線:傳輸控制信號 │ │ └── 按數據傳輸方式分類 │ │ ├── 并行總線 │ │ │ ├── 特點:多根數據線同時傳送多位數據 │ │ │ ├── 適用:短距離傳輸 │ │ │ └── 代表:PCI、ISA │ │ └── 串行總線 │ │ ├── 特點:一位一位順序傳輸,每個位占據固定時間長度 │ │ ├── 適用:長距離傳輸 │ │ ├── 傳輸波特率可調整 │ │ ├── 正確性依賴于 校驗碼 │ │ ├── 雙工模式 │ │ │ ├── 半雙工:同一時刻只能單向傳輸(發或收) │ │ │ └── 全雙工:可同時發送和接收(一條線發,一條線收) │ │ ├── 數據傳輸控制方式 │ │ │ ├── 程序查詢方式:CPU主動查詢 狀態寄存器 ,判斷是否可收/發 │ │ │ └── 中斷方式:設備準備好后主動向CPU發中斷請求,CPU響應后處理 │ │ └── 代表:USB、 RS-232 、SATA │ └── I/O控制方式 │ ├── 程序控制(查詢)方式 │ ├── 程序中斷方式 │ ├── DMA方式 │ ├── 通道方式 │ └── I/O處理機 │ ├── 2?? 存儲系統 (★★★) │ ├── 存儲層級(由快到慢) │ │ ├── 第1級:CPU寄存器 │ │ │ └── 速度最快,容量最小,成本最高 │ │ ├── 第2級:Cache(高速緩存) │ │ │ ├── 局部性原理是Cache設計的理論基礎 │ │ │ ├── 時間局部性:循環導致指令重復執行 │ │ │ ├── 空間局部性:順序訪問附近 存儲單元 │ │ │ └── 快表(TLB,Translation Lookaside Buffer) │ │ │ ├── 定義:專門用于緩存頁表項的高速緩存 │ │ │ ├── 原理:利用局部性原理緩存最近使用的頁表項 │ │ │ ├── 作用:加速邏輯地址到物理地址的轉換 │ │ │ ├── 位置:通常位于CPU的MMU( 內存管理單元 )中 │ │ │ └── 命中效果:大大減少訪問內存頁表的次數,提升地址 轉換效率 │ │ ├── 第3級:內存(主存)DRAM │ │ │ └── 程序運行時駐留的主要區域 │ │ └── 第4級:外存(磁盤、SSD等) │ │ └── 容量大,速度慢,斷電不丟失 │ ├── 3?? 操作系統概述 (★★) │ ├── 作用 │ │ ├── 人機接口 │ │ ├── 軟硬件接口 │ │ ├── 控制程序運行 │ │ └── 管理系統資源 │ ├── 分類 │ │ ├── 批處理操作系統 (單道/多道) │ │ ├── 分時操作系統 (時間片輪轉) │ │ ├── 實時操作系統 (高可靠性) │ │ ├── 網絡操作系統(Unix、Linux、Windows Server) │ │ ├── 分布式操作系統 (透明性、高性能) │ │ ├── 微機操作系統(Windows、Linux) │ │ └── 嵌入式操作系統(微型化、可定制) │ └── 多道程序設計 提高CPU和外部設備利用率 │ ├── 4?? 進程管理 (★★★) │ ├── 進程相關概念 │ │ ├── 互斥(Mutual Exclusion) │ │ │ ├── 性質:間接制約關系 │ │ │ └── 特點:同時只能有一個進程訪問某資源 │ │ ├── 同步(Synchronization) │ │ │ ├── 性質:直接制約關系 │ │ │ └── 特點:一個進程需要等待另一個進程完成 │ │ ├── 臨界資源(Critical Resource) │ │ │ ├── 定義:互斥方式共享的資源 │ │ │ └── 典型:打印機、磁帶機 │ │ ├── 臨界區(Critical Section) │ │ │ ├── 定義:每個進程中訪問臨界資源的那段代碼 │ │ │ └── 原則:互斥進入,不能同時有兩個進程在臨界區 │ │ └── 信號量(Semaphore) │ │ ├── 定義:表示資源數量的特殊變量 │ │ ├── 正數:可用資源數量 │ │ ├── 負數:排隊等待的進程數 │ │ ├── P操作(Passeren,申請) │ │ │ ├── 信號量值減1 │ │ │ └── 若結果<0,進程阻塞 │ │ └── V操作(Verhoog,釋放) │ │ ├── 信號量值加1 │ │ └── 若結果≤0,喚醒等待進程 │ ├── 進程與線程 │ │ ├── 進程(Process) │ │ │ ├── 定義:程序在一個 數據集 合上運行的過程 │ │ │ ├── 系統進行資源分配和調度的獨立單位 │ │ │ ├── 擁有獨立的地址空間和系統資源 │ │ │ └── 進程組成:程序塊 + 數據塊 + PCB │ │ ├── 線程(Thread) │ │ │ ├── 定義:進程中的一條執行路徑 │ │ │ ├── CPU調度和分派的基本單位 │ │ │ ├── 一個進程包含多個線程 │ │ │ └── 線程分類:內核線程、用戶線程 │ │ ├── 線程獨享資源 │ │ │ ├── 程序計數器 (PC) │ │ │ ├── 寄存器組 │ │ │ └── 棧(Stack) │ │ └── 線程共享資源(屬于同一進程的線程間共享) │ │ ├── 內存地址空間 │ │ ├── 代碼段 │ │ ├── 數據段 │ │ └── 打開的文件 │ ├── PV操作與前趨圖 │ │ ├── PV操作 │ │ │ ├── P操作(Passeren):申請資源,信號量值減1,若結果<0則阻塞 │ │ │ └── V操作(Verhoog):釋放資源,信號量值加1,若結果≤0則喚醒 │ │ ├── 前趨圖(Precedence Graph) │ │ │ ├── 定義:描述多個進程之間執行順序的 有向無環圖 │ │ │ ├── 表示并發執行關系 │ │ │ ├── 結點:一個進程或一個程序段 │ │ │ ├── 有向邊:前趨關系(A→B表示A必須在B之前完成) │ │ │ ├── 起始進程:沒有前趨的結點 │ │ │ └── 終結進程:沒有后繼的結點 │ │ └── 前趨圖與PV操作的關系(核心技巧) │ │ ├── 實現并發的信號量初始值一般為0 │ │ ├── 有幾個箭頭(前趨關系)就有幾個信號量 │ │ ├── 對于前趨關系 A → B(A先于B完成): │ │ │ ├── A 執行完成后需要執行 V(S) 操作(釋放資源,通知后繼) │ │ │ └── B 開始執行前需要執行 P(S) 操作(檢查資源是否足夠) │ │ └── 總結:前趨圖中的每個箭頭對應一個信號量,前趨進程執行 V 操作,后繼進程執行 P 操作 │ ├── 進程三態模型 │ │ ├── 運行態(Running) │ │ │ └── 進程正在CPU上執行 │ │ ├── 就緒態(Ready) │ │ │ └── 獲得了除CPU外的一切資源,等待調度 │ │ ├── 阻塞/等待態(Blocked/Waiting) │ │ │ └── 正在等待某一事件發生(如I/O完成) │ │ └── 狀態轉換規則 │ │ ├── 就緒 → 運行:進程被調度程序選中 │ │ ├── 運行 → 就緒:時間片用完或被更高優先級進程搶占 │ │ ├── 運行 → 阻塞:進程主動請求I/O或等待某事件 │ │ ├── 阻塞 → 就緒:所等待的事件發生(如I/O完成) │ │ ├── ? 阻塞 → 運行:不允許直接轉換 │ │ └── ? 就緒 → 阻塞:不允許直接轉換 │ ├── 進程調度算法 │ │ ├── 先來先服務(FCFS,First Come First Served) │ │ │ ├── 原理:按進程到達就緒隊列的先后順序分配CPU │ │ │ └── 特點: 非搶占式 ,公平但平均等待時間較長 │ │ ├── 短作業優先(SJF,Shortest Job First) │ │ │ ├── 原理:選擇預估執行時間最短的進程先分配CPU │ │ │ └── 特點:平均等待時間最小,但長作業可能饑餓 │ │ ├── 高 響應比 優先(HRRN,Highest Response Ratio Next) │ │ │ ├── 原理:選擇響應比最高的進程分配CPU │ │ │ ├── 響應比公式:(等待時間 + 執行時間) / 執行時間 │ │ │ ├── 特點:綜合考慮了作業的執行時間和等待時間 │ │ │ └── 優勢:綜合了先來先服務和短作業優先的優點 │ │ ├── 時間片輪轉(RR,Round Robin) │ │ │ ├── 原理:每個進程被分配一個固定大小的時間片 │ │ │ ├── 調度方式:進程用盡時間片后,調度器將其移動到隊列末尾 │ │ │ ├── 特點:公平,響應時間快,適合分時系統 │ │ │ └── 關鍵:時間片大小影響系統性能(過大退化為FCFS,過小增加切換開銷) │ │ ├── 優先級調度(Priority Scheduling) │ │ │ ├── 原理:選擇優先級最高的進程分配CPU │ │ │ ├── 分類:靜態優先級(固定)、動態優先級(可調整) │ │ │ └── 問題:低優先級進程可能饑餓(可用老化技術解決) │ │ └── 搶占式 & 非搶占式 │ │ ├── 非搶占式:進程主動放棄CPU(如等待I/O或結束) │ │ └── 搶占式:更高優先級進程可強制搶占當前進程的CPU │ └── 死鎖與銀行家算法 │ ├── 死鎖概念 │ │ ├── 定義:多個進程因互相等待對方持有的資源而無法繼續執行 │ │ └── 結果:系統陷入無限等待狀態,資源無法釋放 │ ├── 死鎖產生的四大必要條件 │ │ ├── ① 互斥(Mutual Exclusion) │ │ │ └── 資源一次只能被一個進程使用 │ │ ├── ② 保持和等待(Hold and Wait) │ │ │ └── 進程持有至少一個資源,同時等待其他進程持有的資源 │ │ ├── ③ 不剝奪(No Preemption) │ │ │ └── 資源只能由進程主動釋放,不能被強制剝奪 │ │ └── ④ 環路等待(Circular Wait) │ │ └── 形成循環等待鏈,每個進程等待下一個進程持有的資源 │ ├── 死鎖避免的方式 │ │ ├── 方式一:有序分配資源 │ │ │ └── 對所有資源統一編號,進程按編號順序申請資源 │ │ └── 方式二:銀行家算法 │ │ └── 動態檢測資源分配的安全性,避免進入不安全狀態 │ ├── 銀行家算法(Banker's Algorithm) │ │ ├── 核心思想:分配資源前先計算是否會導致不安全狀態 │ │ ├── 分配資源的限制原則 │ │ │ ├── 原則一:當一個進程對資源的最大需求量不超過系統中的資源數時可以接納該進程 │ │ │ ├── 原則二:進程可以分期請求資源,但請求的總數不能超過最大需求量 │ │ │ └── 原則三:當系統現有的資源不能滿足進程尚需資源數時,對進程的請求可以推遲分配 │ │ └── 安全狀態判斷 │ │ ├── 安全狀態:存在一個安全序列,所有進程都能按順序完成 │ │ ├── 不安全狀態:不存在安全序列,可能引發死鎖 │ │ └── 注意:不安全狀態 ≠ 死鎖,但可能導致死鎖 │ └── 不可能死鎖的數學條件 │ └── 資源數 ≥ 進程數 × (每個進程所需資源數 - 1) + 1 │ ├── 5?? 存儲管理 (★★★) │ ├── 頁式存儲(Paging) │ │ ├── 基本概念:將程序與內存均劃分為同樣大小的塊(頁/頁幀) │ │ ├── 頁面大小與地址轉換核心原理 │ │ │ ├── 核心:根據頁面大小確定表示頁內地址所需的位數 │ │ │ ├── 頁內地址位數 = log2(頁面大小) │ │ │ ├── 示例:頁面大小為4KB(4096字節),需要12位表示頁內地址 │ │ │ ├── 關鍵規律:頁內地址(低位)在轉換前后保持不變 │ │ │ └── 變化部分:邏輯頁號 → 物理頁幀號(高位部分) │ │ ├── 地址轉換 │ │ │ ├── 邏輯地址 = 邏輯頁號 + 頁內地址 │ │ │ └── 物理地址 = 物理頁幀號(物理塊號) + 頁內地址 │ │ ├── 地址轉換示意圖解 │ │ │ ├── 邏輯地址:[邏輯頁號 | 頁內地址] │ │ │ ├── 查頁表:邏輯頁號 → 物理頁幀號 │ │ │ └── 物理地址:[物理頁幀號 | 頁內地址] │ │ ├── 頁表:記錄邏輯頁號到物理頁幀號的映射 │ │ ├── 淘汰原則(頁面置換算法) │ │ │ ├── 狀態位為1(在內存中)才可淘汰 │ │ │ ├── 優先淘汰訪問位為0的頁面 │ │ │ └── 其次考慮修改位為0的頁面 │ │ ├── 優點:利用率高、碎片小(內部碎片)、分配及管理簡單 │ │ └── 缺點:增加了 系統開銷 (頁表)、可能產生抖動現象 │ ├── 段式存儲(Segmentation) │ │ ├── 基本概念:按用戶作業中的自然段來劃分邏輯空間 │ │ ├── 特點:段的長度可以不一樣,段長可變 │ │ ├── 段表:記錄段號到物理基地址和段長的映射 │ │ ├── 地址轉換:邏輯地址 = 段號 + 段內地址 │ │ ├── 優點:方便共享和保護,按邏輯模塊組織 │ │ ├── 缺點:會產生外部碎片 │ │ └── 注意:地址轉換可能因段內地址超過段長而發生越界 │ └── 段頁式存儲(Segmented Paging) │ ├── 基本概念:段式與頁式的綜合體,先分段再分頁 │ ├── 結構:一個程序有若干個段,每個段中有若干頁,每頁大小相同 │ ├── 地址結構:段號 + 頁號 + 頁內地址 │ ├── 優點 │ │ ├── 空間浪費小(結合了頁式的高利用率) │ │ ├── 存儲共享容易(按段共享) │ │ ├── 存儲保護 容易(按段保護) │ │ └── 能動態連接 │ └── 缺點 │ ├── 管理軟件增加,復雜性和開銷增大 │ ├── 需要的硬件及占用的內存增加 │ └── 執行速度下降(需多次查表) │ ├── 6?? 磁盤管理 (★★★) │ ├── 磁盤存取時間 │ │ ├── 公式:存取時間 = 尋道時間 + 等待時間 │ │ ├── 尋道時間:磁頭移動到指定磁道所需的時間 │ │ ├── 等待時間: 旋轉延遲 (讀寫的扇區轉到磁頭下方的時間)+ 傳輸時間 │ │ └── 優化目標:減少尋道時間和旋轉延遲 │ ├── 移臂調度算法 │ │ ├── 先來先服務(FCFS,First Come First Served) │ │ │ ├── 原理:按請求到達的先后順序處理 │ │ │ └── 特點:公平,但平均尋道距離較大 │ │ ├── 最短尋道時間優先(SSTF,Shortest Seek Time First) │ │ │ ├── 原理:選擇距離當前磁頭最近的請求優先處理 │ │ │ └── 特點:平均尋道時間較短,但可能導致饑餓 │ │ ├── 掃描算法(SCAN,電梯算法) │ │ │ ├── 原理:磁頭單向移動,處理沿途請求,到盡頭后折返 │ │ │ └── 特點:雙向掃描,避免饑餓 │ │ └── 循環掃描(CSCAN,Circular SCAN) │ │ ├── 原理:磁頭單向移動,到盡頭后直接返回起始端重新掃描 │ │ └── 特點:單向掃描,兩端請求響應更公平 │ ├── 緩沖區優化 │ │ ├── 單緩沖區:處理時間 = (讀入+傳送+處理) + (讀入+傳送) × (塊數-1) │ │ ├── 雙緩沖區:讀入和傳送/處理可并行,效率更高 │ │ └── 優化分布:將 邏輯記錄 按處理順序優化分布在物理塊上,減少旋轉延遲 │ └── 磁盤 空間管理 │ ├── 位示圖(Bitmap):用二進制位記錄磁盤塊使用情況 │ ├── 位示圖大小計算:磁盤容量 ÷ 物理塊大小 ÷ 字長 │ └── 位示圖計算技巧(第幾個字的定位) │ ├── 基本規則:磁盤序號、字的序號、對應位號均從0開始 │ ├── 給定磁盤塊序號 n(從0開始): │ │ ├── 所在字的序號 = n ÷ 16(整除,取整數部分) │ │ └── 所在位的位號 = n mod 16(余數) │ ├── 給定磁盤塊為第 N 個(N從1開始): │ │ ├── 先轉換為從0開始的序號:n = N - 1 │ │ ├── 所在字的序號 = (N-1) ÷ 16(整除) │ │ └── 所在位的位號 = (N-1) mod 16 │ ├── 需要幾個字表示前 n+1 個磁盤塊: │ │ └── 所需字數 = ?(n+1) ÷ 16?(向上取整) │ └── 示例:指定序號為 99(從0開始)的磁盤塊 │ ├── 所在字的序號 = 99 ÷ 16 = 6(第6個字,索引從0開始) │ ├── 所在位的位號 = 99 mod 16 = 3(第3位) │ └── 前100個磁盤塊需要 ?100 ÷ 16? = 7個字 │ ├── 7?? 文件系統 (★★) │ ├── 文件組成 │ │ ├── 文件真實內容(數據) │ │ │ └── 文件中存儲的實際數據信息 │ │ └── 文件說明(文件信息/ 元數據 ) │ │ ├── 文件名 │ │ ├── 文件大小 │ │ ├── 創建時間、修改時間 │ │ ├── 所有者、權限 │ │ └── 文件在磁盤上的存儲位置 │ ├── 文件類型(UNIX系統分類) │ │ ├── 普通文件(Regular File) │ │ │ └── 存儲用戶數據、程序、文本等,最常見類型 │ │ ├── 目錄文件(Directory File) │ │ │ ├── 用于組織和管理文件系統的目錄結構 │ │ │ ├── 包含文件名和對應i節點的映射關系 │ │ │ └── ?? 若目錄文件的修改結果寫回磁盤時發生掉電,對系統影響最大 │ │ │ ├── 原因:目錄文件損壞會導致大量文件無法訪問 │ │ │ └── 后果:文件系統結構破壞,可能造成大面積數據丟失 │ │ └── 設備文件(Device File) │ │ ├── 代表硬件設備(如磁盤、鍵盤、打印機) │ │ ├── 分類:塊設備文件(如磁盤)、 字符設備 文件(如鍵盤) │ │ └── 通過 文件系統接口 統一訪問硬件 │ ├── 索引文件結構 │ │ ├── 基本參數(以1KB物理塊、4B地址項為例) │ │ │ ├── 物理塊大小:1KB = 1024字節 │ │ │ ├── 地址項大小:4字節 │ │ │ └── 每個索引塊可存放地址項個數 = 1024B ÷ 4B = 256個 │ │ ├── 直接地址索引 │ │ │ ├── 索引節點直接指向數據塊 │ │ │ ├── 頁號范圍:0 ~ 9(假設10個直接地址項) │ │ │ └── 可表示的文件大小 = 10 × 1KB = 10KB │ │ ├── 一級間接索引 │ │ │ ├── 索引節點指向索引塊,索引塊再指向數據塊 │ │ │ ├── 地址項個數:256個 │ │ │ └── 可表示的文件大小 = 256 × 1KB = 256KB │ │ ├── 二級間接索引 │ │ │ ├── 索引節點→一級索引塊→二級索引塊→數據塊 │ │ │ ├── 地址項個數:256 × 256 = 65536個 │ │ │ └── 可表示的文件大小 = 65536 × 1KB = 65536KB = 64MB │ │ ├── 三級間接索引 │ │ │ ├── 索引節點→一級→二級→三級索引塊→數據塊 │ │ │ ├── 地址項個數:256 × 256 × 256 = 16,777,216個 │ │ │ └── 可表示的文件大小 = 16,777,216 × 1KB = 16GB │ │ └── 總結:索引級別越高,可表示的文件越大 │ └── 位示圖管理磁盤空間 │ ├── 原理:用二進制位表示磁盤塊的使用狀態(1表示已用,0表示空閑) │ ├── 計算公式:位示圖大小(字)= 磁盤容量 ÷ 物理塊大小 ÷ 字長 │ └── 計算技巧(第幾個字的定位) │ ├── 基本規則:磁盤序號、字的序號、對應位號均從0開始 │ ├── 給定磁盤塊序號 n(從0開始): │ │ ├── 所在字的序號 = n ÷ 16(整除,取整數部分) │ │ └── 所在位的位號 = n mod 16(余數) │ ├── 給定磁盤塊為第 N 個(N從1開始): │ │ ├── 先轉換為從0開始的序號:n = N - 1 │ │ ├── 所在字的序號 = (N-1) ÷ 16(整除) │ │ └── 所在位的位號 = (N-1) mod 16 │ ├── 需要幾個字表示前 n+1 個磁盤塊: │ │ └── 所需字數 = ?(n+1) ÷ 16?(向上取整) │ └── 示例:指定序號為 99(從0開始)的磁盤塊 │ ├── 所在字的序號 = 99 ÷ 16 = 6(第6個字,索引從0開始) │ ├── 所在位的位號 = 99 mod 16 = 3(第3位) │ └── 前100個磁盤塊需要 ?100 ÷ 16? = 7個字 │ ├── 8?? 性能指標與評價 (★★) │ ├── 性能指標分類 │ │ ├── 硬件性能指標 │ │ │ ├── 計算機 │ │ │ │ ├── CPU主頻、CPI、IPC、MIPS │ │ │ │ ├── 內存容量與帶寬 │ │ │ │ ├── 存儲設備讀寫速度 │ │ │ │ └── 總線帶寬與傳輸速率 │ │ │ ├── 路由器 │ │ │ │ ├── 包轉發能力(pps) │ │ │ │ ├── 路由表容量 │ │ │ │ ├── 吞吐量 │ │ │ │ └── 延遲 │ │ │ ├── 交換機 │ │ │ │ ├── 交換容量(bps) │ │ │ │ ├── 包轉發率 │ │ │ │ ├── 端口速率 │ │ │ │ └── MAC地址表深度 │ │ │ └── 網絡 │ │ │ ├── 帶寬(bps) │ │ │ ├── 吞吐量 │ │ │ ├── 延遲(RTT) │ │ │ ├── 丟包率 │ │ │ └── 抖動 │ │ └── 軟件性能指標 │ │ ├── 操作系統 │ │ │ ├── 系統的可靠性 │ │ │ ├── 系統的吞吐率(量) │ │ │ ├── 系統響應時間 │ │ │ ├── 系統資源利用率 │ │ │ └── 可移植性 │ │ ├── 數據庫管理系統 │ │ │ ├── 數據庫大小 │ │ │ ├── 表中允許的記錄(行)數量 │ │ │ ├── 單個記錄(行)的大小 │ │ │ ├── 最大并發 事務處理 能力 │ │ │ ├── 負載均衡 能力 │ │ │ └── 最大連接數 │ │ └── Web服務器 │ │ ├── 最大并發連接數 │ │ ├── 響應延遲 │ │ └── 吞吐量 │ ├── CPU性能指標詳解 │ │ ├── 主頻(CPU時鐘頻率) │ │ │ ├── 定義:CPU每秒產生的時鐘周期數 │ │ │ ├── 單位:Hz(MHz、GHz) │ │ │ └── 公式:外頻 × 倍頻 = 主頻 │ │ ├── CPI(Clock cycles Per Instruction) │ │ │ ├── 定義:平均每條指令所需的時鐘周期個數 │ │ │ ├── 公式:CPI = 總時鐘周期數 ÷ 總指令條數 │ │ │ └── 意義:CPI越小,CPU執行指令效率越高 │ │ ├── IPC(Instructions Per Clock) │ │ │ ├── 定義:每個時鐘周期平均執行的指令條數 │ │ │ ├── 公式:IPC = 總指令條數 ÷ 總時鐘周期數 │ │ │ └── 關系:IPC = 1 / CPI │ │ └── MIPS(Million Instructions Per Second) │ │ ├── 定義:每秒執行的百萬條指令數,表示CPU運算速度 │ │ ├── 公式:MIPS = 主頻 / CPI = 主頻 × IPC │ │ ├── 單位:百萬條指令/秒 │ │ └── 意義:MIPS值越大,CPU運算速度越快 │ ├── 性能評價方法 │ │ ├── 時鐘頻率法:以時鐘頻率高低衡量速度 │ │ ├── 指令執行速度法(MIPS):用MIPS表示運算速度 │ │ ├── 等效指令速度法(Gibson mix):通過各類指令在程序中所占比例計算 │ │ ├── 數據處理速率法(PDR):PDR = L/R,考慮CPU+存儲 │ │ ├── 綜合理論性能法(CTP):用MTOPS表示 │ │ └── 基準程序法(Benchmark) │ │ ├── 定義:把應用程序中用得最多、最頻繁的那部分核心程序作為評估計算機系統性能的標準程序 │ │ ├── 地位:目前一致承認的測試系統性能的較好方法 │ │ ├── 測試精確度排名:真實程序 > 核心程序 > 小型基準程序 > 合成基準程序 │ │ ├── 常見基準程序 │ │ │ ├── Dhrystone:綜合整數 基準測試 程序 │ │ │ ├── Linpack:測試 高性能計算 機浮點性能 │ │ │ ├── Whetstone:綜合性測試程序( 浮點運算 、功能調用等) │ │ │ ├── SPEC:速度測試(單項任務)和吞吐率測試(多任務) │ │ │ └── TPC:評測事務處理、數據庫性能(TPC-C、TPC-H等) │ │ └── 核心特點:測試結果反映真實應用場景下的系統性能 │ ├── 阿姆達爾定律 │ │ ├── 定義:系統性能提升受限于可改進部分所占比例 │ │ ├── 公式:加速比 = 1 / [(1-Fe) + Fe/Se] │ │ │ ├── Fe:可改進部分在總執行時間中所占比例 │ │ │ └── Se:改進部分性能提升倍數 │ │ └── 意義:性能提升的上限由不可改進部分決定 │ └── 多處理機 性能公式 │ ├── 公式:P = n / [1 + (n-1)a] │ │ ├── n:CPU個數 │ │ └── a:開銷常數 │ └── 意義:多機系統性能存在上限,與CPU個數不成正比 │ ├── 9?? Web服務器與 系統監視 (★) │ ├── Web性能指標 │ │ ├── 最大并發連接數 │ │ ├── 響應延遲 │ │ └── 吞吐量 │ └── 系統監視方式 │ ├── 系統命令(ps、last、netstat) │ ├── 系統記錄文件 │ └── 監控工具(Perfmon) │ └── 計算機層次結構 (★) ├── 第0級:硬聯邏輯 ├── 第1級:微程序機器 ├── 第2級:傳統機器 ├── 第3級:操作系統機器 ├── 第4級: 匯編語言 機器 ├── 第5級: 高級語言 機器 └── 第6級:應用語言機器
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.