內容主要關於計算機總線與IO設備、計算機儲存器、計算機的CPU;算法
日常咱們平常所見的USB,既是通用串行總線(Universal Serial Bus),它提供了提供了對外鏈接的接口,且不一樣設備能夠經過USB接口進行鏈接;是一種鏈接的標準,能夠解決不一樣設備之間的通緩存
信問題,也可以促使外圍設備接口的統一。dom
總線(Bus)也是計算機各類功能部件之間傳送信息的公共通訊幹線,它是由導線組成的傳輸線束,按照計算機所傳輸的信息種類,計算機的總線能夠劃分爲數據總線、地址總線和控制總線,分別用來傳異步
輸數據、數據地址和控制信號。性能
在不使用總線進行傳輸的時候,通常採用分散鏈接的方式,既輸入設備同時與存儲器、運算器、控制器鏈接,這樣作會使得線路過於複雜。總線能夠用來替代原來的基於運算器爲主的分散式鏈接,經過總spa
線將多個部件鏈接在一塊兒,使得運算器只須要與總線打交道,實現了存儲器爲主的計算機而且方便了硬件的擴展。操作系統
總線分爲片內總線和系統總線。設計
片內總線,既是高集成度芯片內部的信息傳輸線。如:寄存器與寄存器之間或寄存器與控制器、運算器之間。3d
系統總線分爲數據總線、地址總線、控制總線。是CPU、主內存、IO設備、各組件之間的信息傳輸線。blog
數據總線,能夠雙向傳輸各個部件的數據信息,數據總線的位數(寬度),通常與CPU位數(CPU一次可以並行處理的數據寬度),通常CPU位數與數據總線寬度相同(32位、64位)。字長爲32(指
計算機內部參與運算的數的位數,是指一次能傳輸的數據的位數),既數據總線的寬度也爲32位,由於計算機的字長取決於數據總線的寬度。CPU位數 --> 數據總線寬度 --> 字長。
地址總線,2^n / 2^30 = 16G,n爲地址總線位數。CPU是經過地址總線來指定存儲單元的,是指定源數據或目的數據在內存中的地址,地址總線的位數與存儲單元有關,地址總線位數=n,尋址範
圍(存儲單元大小):0~2^n,如尋址空間(尋址空間是地址總線決定的)爲4G((2^32種地址狀況)/2^30獲得4G,既須要4G的內存才能夠存儲那麼多個數據地址),則最多能夠儲存2^32個地址。操做系統
的位數是說其所依賴的指令集的位數。地址總線決定的是存儲器的容量,實際生活中就是主板對內存的支持容量是有限制的。系統尋址空間的大小由操做系統位數和地址總線位數共同決定。通常地址總線的位
數指的是當前所使用的那部分的位數。
控制總線,是用來發出各類控制信號的傳輸線,控制信號經由控制總線從一個組件發給另一個組件,控制總線能夠監視不一樣組件之間的狀態(就緒/未就緒)。
例題:已知,計算機內存容量爲4GB,字長爲32,則______。
A.地址總線和數據總線的寬度都爲32
B.地址總線的寬度爲30,數據總線的寬度爲32
C.地址總線的寬度爲30,數據總線的寬度爲8
D.地址總線的寬度爲32,數據總線的寬度爲8
答案:A
內存容量爲4GB,∵ 4G=2^32 ,即內存單元的地址寬度爲32位。字長爲32位即要求數據總線的寬度爲32位,所以地址總線和數據總線的寬度都爲32。
系統中多個設備或模塊可能同時申請對總線的使用權,爲避免產生總線衝突,需由總線仲裁機構合理地控制和管理系統中須要佔用總線的申請者,在多個申請者同時提出總線請求時,以必定的優先算法仲
裁哪一個應得到對總線的使用權。爲了解決總線使用權的衝突問題,通常使用仲裁器。
仲裁方法主要有鏈式查詢、計時器定時查詢、獨立請求。
(1)鏈式查詢,假設有設備一、設備二、設備3,這三個設備都與系統總線進行鏈接,除此之外還有一個仲裁控制器,並經過仲裁控制線分別與3個設備相連。
在設備2須要使用系統總線時,會經過控制線發出信號,仲裁控制器收到信號後,發出容許使用的信號,這個信號首先會經過鏈式進入設備1,若1不須要使用,
則信號會被設備2接收,此時,設備2就可使用系統總線了。這種方法可讓設備1得到持續的優先權,並且電路的複雜度較低,仲裁的方式也簡單,缺點也很明顯,
優先權低的設備極可能難以得到設備的使用權,且設備使用串聯電路,對電路的故障十分的敏感。
(2)計時器定時查詢,仲裁控制器對設備編號並使用計數器累計計數,接收到仲裁信號後,往全部設備發出計數值,計數值與設備編號一致則得到總線使用權。
仲裁控制器分別與設備1,設備2,設備3鏈接,仲裁控制線也分別鏈接3個設備,仲裁控制器中還會有一個計數器,假設當前計數器中的值爲1,收到設備2的請求後,
仲裁器會將1發送給全部的設備,由於設備1並無發出過請求,1與設備3的編號不符合,且1餘設備2的編號也不符合,因此不會有設備去執行這個容許使用的信息,
此時仲裁器會給每個設備都發出2信號,這時,設備2收到2信息,就得到了總線的使用權。
(3)獨立請求,每一個設備均有總線獨立鏈接仲裁器,設備可單獨向仲裁器發送請求和接收請求,當同時收到多個請求信號,仲裁器有權按優先級分配使用權。
這種方法,響應速度快,優先順序可動態改變,能夠實如今不一樣的狀況下有不一樣的優先級方案,缺點也十分明顯,設備的連線會十分的多,總線的控制也會複雜。
串聯優先級,並聯優先級,循環優先級判別。分別對應三種總線仲裁方法。
常見的輸入設備通常分爲字符輸入設備和圖像輸入設備。
字符輸入設備通常多見的爲鍵盤。
圖像輸入設備通常多見爲鼠標、數位板、掃描儀
圖像輸出設備,顯示器、打印機、投影儀
接口的設計必須實現容許讀取數據和向設備發送數據(寫數據)、判斷設備有無被佔用、判斷設備是否已經鏈接和判斷設備已經正常啓動。這些都是設計的需求。
接口主要有數據線、狀態線、命令線、設備選擇線。
數據線,是I/O設備與主機之間進行數據交換的傳送線,根據I/O設備的不一樣,又能夠分爲單向傳輸數據線和雙向傳輸數據線。
狀態線,IO設備狀態向主機報告的信號線,主機能夠經過狀態線查詢設備是否已經正常鏈接並就緒以及查詢設備是否已經被佔用。
命令線,CPU向設備發送命令的信號線,好比,發送讀寫信號和發送啓動中止信號。
設備選擇線,主機選擇I/O設備進行操做的信號線。能夠對連在總線上的設備進行選擇。好比多個U盤同時鏈接計算機,CPU經過設備選擇線來選擇對哪一個U盤進行讀寫操做。
這個問題主要是由於CPU的速度與I/O設備速度不一致,前者速度會快不少。
因此主要有兩個方法來適應此問題,分別是程序中斷和DMA(直接存儲器訪問)。
當外圍IO設備就緒時,向CPU發出中斷信號,CPU中有專門的電路響應中斷信號。當CPU收到中斷信號的時候就會暫停所作的工做轉爲處理外圍I/O設備的工做,等外圍I/O設備的事件處理完成後,
CPU纔會從新加載以前的工做並繼續進行。
程序中斷能夠提供低速設備通知CPU的一種異步的方式,CPU能夠高速運轉同時兼顧低速設備的響應。缺點就是若是頻繁的打斷CPU會下降CPU的使用效率。
如下爲程序中斷簡化的流程:
注:CPU響應中斷並不會老是當即響應,會存在延遲。
DMA直接鏈接主存與IO設備,DMA工做時不須要CPU的參與。這是指一種高速的數據傳輸操做,容許在外部設備和存儲器之間直接讀寫數據,既不經過CPU,也不須要CPU干預。整個數據傳輸操做在一
個稱爲"DMA控制器"的控制下進行的。當主存與IO設備交換信息時,不須要中斷CPU,能夠提升CPU的效率,DMA設備常見於硬盤和外置顯卡。
一次完整的DMA傳送過程:
DMA 預處理,CPU向DMA送命令,如DMA方式,主存地址,傳送的字數等,以後CPU執行原來的程序
DMA 控制在 I/O 設備與主存間交換數據:
準備一個數據,向CPU發DMA請求,取得總線控制權,進行數據傳送,修改卡上主存地址,修改字數計數器內且檢查其值是否爲零,不爲零則繼續傳送,若已爲零,則向 CPU發中斷請求。
按存儲介質分類:
半導體存儲器:內存、U盤、固態SSD
磁存儲器:磁盤、磁帶
按存取方式分類:
隨機存儲器(RAM),是一種可讀可寫的存儲器,這種存儲器的任意一個單元,均可以隨機的讀取,存取的時間和位置是沒有關係的。
串行存儲器,存取的時間與位置有關係,由於在讀取的時候須要按在存儲的前後順序去查找對應的內容。
只讀存儲器(ROM),是一種只讀不寫的存儲器,BIOS(基本輸入輸出系統)以及手機的固件都是存儲在ROM裏面的,是一些不多進行更改的內容。
在挑選存儲器時,讀寫速度,存儲容量,價格都是咱們較爲關注的,可使用位價(每比特位價格)來衡量。位價越高,速度越快,容量越小;位價越低,速度越慢,容量越大。
按照他們的讀寫速度能夠分爲:
原理:局部性原理:
局部性原理是指CPU訪問存儲器時,不管是存取指令仍是存取數據,所訪問的存儲單元都趨於彙集在一個
較小的連續區域中
實現:在CPU與主存之間增長一層速度快(容量小)的Cache
目的:解決主存速度不足的問題
原理:局部性原理
實現:主存以外增長輔助存儲器(磁盤、SD卡、U盤等)
目的:解決主存容量不足的問題
RAM(隨機存取存儲器:Random Access Memory)
RAM經過電容存儲數據,必須隔一段時間刷新一次,若是掉電,那麼一段時間後將丟失全部數據。
主存儲器由如下的部分組成:
與CPU進行交互,CPU中的MDR經過數據總線與讀寫電路進行鏈接,
CPU中的MAR經過地址總線與內存進行鏈接,CPU能夠經過地址總線來指定數據的位置,經過數據總線來傳輸某個位置的數據
磁盤表面是可磁化的硬磁特性材料
讀取數據的方法是移動磁頭徑向運動讀取磁道信息
磁頭位置:磁頭當前所在的磁道
磁頭方向:磁頭是由外向內運動或由內向外運動
假設磁道在磁道4,磁頭方向由裏向外,如今須要讀取磁道1 4 2 3 1 5 。
先來先服務算法:
磁頭會先從第四個磁道移動到第一個磁道再到第四個磁道,再到第二個磁道、第三磁道、第一磁道,最後讀取第五磁道.
最短尋道時間優先:
與磁頭當前位置有關,優先訪問離磁頭最近的磁道;
優先讀取第四個磁道,接着有可能讀取第三個或者第五個磁道,這裏假設讀取的是第五個磁道,以後讀取第三個,第二個、連續
讀取兩次第一個磁道。
掃描算法(電梯算法):
每次只往一個方向移動,到達一個方向須要服務的盡頭再反方向移動。
因爲磁頭方向向外,因此優先向磁道1的方向讀取,到達盡頭後再由外向內讀取至最裏面的第五磁道。
循環掃描算法:
讀取時只會往一個方向讀取,由內往外或者由外往內
假設由外往內讀取,先讀取第四個磁道,讀取第五個磁道,到達盡頭,直接把磁頭位置移動到最外層的第一個磁道,
接着讀取第一個磁道、第二個磁道、第三個磁道。
緩存位於存儲器層次結構中的緩存主存層次,能夠直接與CPU進行交換數據,主要是爲了解決CPU與主存的速度不匹配的問題
字: 是指存放在一個存儲單元中的二進制代碼組合
字塊: 存儲在連續的存儲單元中而被看做是一個單元的一組字
假設一個字有32位(字長32位),一個字塊有B個字,主存共有M個字塊,則:
B * M = 主存總字數
B * M * 32 = 主存總容量(bits)
字的地址:
字的地址包含兩個部分,
前m位指定字塊的地址,後b位指定字在字塊中的地址(偏移量)。
可用如下公式求出地址至少所須要的位數:
2 ^ 𝑚(位數) = 𝑀(總共字塊數)
2 ^ 𝒃(位數) = B(一個字塊中的字數,塊內字數)
求地址的位數主要是須要總共的塊數和塊中字數,就能夠求得前m位和後b位地址的位數。
緩存命中率 :
CPU直接從緩存中取出所需數據的成功率成爲緩存命中率
命中率是衡量緩存的重要性能指標,理論上CPU每次都能從高速緩存取數據的時候,命中率爲1。
命中率的運算:
緩存訪問效率:
也能夠用來衡量緩存的性能,在命中率的基礎上去計算,這裏面的平均時間是在命中率意義上的平均,並不是平分。
主要解決,要把哪些數據從主存中放到緩存中
咱們須要良好的替換策略來提升緩存的訪問效率和命中率。
高速緩存的替換時機:
當CPU所須要的數據不在告訴緩存中時
隨機算法:
每次須要替換時,隨機替換一個高速緩存中的位置。
先進先出算法(FIFO)
把高速緩存看作是一個先進先出的隊列,優先替換最早進入隊列的字塊。
最不常用算法(LFU)
優先淘汰最不常用的字塊,須要額外的空間記錄字塊的使用頻率。
若頻率相同則按照FIFO算法來淘汰,把最早加入的字塊給淘汰。
此算法若使用雙向鏈表來實現,將會有多條雙向鏈表來表示不一樣的頻率。
最近最少使用算法(LRU)
優先淘汰一段時間內沒有使用的字塊,有多種實現方法,通常使用雙向鏈表
把當前使用的訪問節點置於鏈表前面(保證鏈表頭部節點是最近使用的),當要淘汰時,淘汰最末尾的節點。
與FIFO的不一樣點在於,FIFO中使用了已經存在的字塊時,是不會把字塊置於鏈表的最前面的。
也與LFU算法不一樣,在於此算法僅須要一條雙向鏈表便可實現,且不會去計算使用頻率
機器指令:
操做碼、地址碼
操做碼:指令所要完成的操做;
位數反映了機器的操做種類
地址碼:數據或者數據的地址,直接給出操做數或者操做數的地址
分三地址指令(地址碼中有三個地址):
如:A1 +(operate) A2 = A3(用於保存操做的結果)
操做完成後把結果放在地址1或地址2
能夠理解爲本身對本身的操做,不須要第二個操做數(被操做的數)的參與
也能夠理解爲一個操做數作一個默認行爲,不如自增的操做
零地址指令:
在機器指令中無地址碼
如:空操做、停機操做、中斷返回操做等
數據傳輸類型:
寄存器之間、寄存器與存儲單元、存儲單元之間傳送
數據讀寫、交換地址數據、清零置一等操做
算術邏輯操做:
操做數之間的加減乘除運算
操做數的與或非等邏輯位運算
移位操做:
數據左移(乘2)、數據右移(除2)
移位操做是完成數據在算術邏輯單元的必要操做
控制指令:
等待指令、停機指令、空操做指令、中斷指令等
尋址方式就是處理器根據指令中給出的地址信息來尋找有效地址的方式,是肯定本條指令的數據地址以及下
一條要執行的指令地址的方法。既是機器指令是怎樣找到相關的數據的。
包括指令尋址(去找指令)和數據尋址(去找數據)。
順序尋址:
因爲指令地址在內存中按順序安排,當執行一段程序時,一般是一條指令接一條指令地順序進行。
也就是說,從存儲器取出第1條指令,而後執行這條指令;接着從存儲器取出第2條指令,
再執行第二條指令,接着再取出第3條指令。
跳躍尋址:
當程序轉移執行的順序時,指令的尋址就採起跳躍尋址方式。
所謂跳躍,是指下條指令的地址碼不是由程序計數器給出,而是由本條指令給出。
當即尋址:
地址碼字段中 addr1 中直接就包括了操做數 , 無需訪問寄存器。
直接尋址:
地址碼字段 addr1 中直接指向操做數在主存中的地址,無需計算數據地址。
間接尋址:
機器指令中指令地址碼給出的是操做數地址的地址,addr2 --> 操做數地址(指向操做數所在的地址) --> 操做數;
須要訪問一次或屢次主存來獲取操做數。
三者比較:
地址碼的位數是有限的,內存中的地址位數較大,因此使用間接尋址和直接尋址的方法能夠操做更大的操做數,
可是間接尋址的速度較慢;
地址碼所能指向的內存地址因爲其自己的位數的關係,很是有限,使用間接尋址可使得尋址空間變大。
未完...