操作系統常見考點與知識點彙總

1. 進程的有哪幾種狀態,狀態轉換圖,及導致轉換的事件。

  1. 運行態:進程佔用CPU,並在CPU上運行;
  2. 就緒態:進程已經具備運行條件,但是CPU還沒有分配過來;
  3. 阻塞態:進程因等待某件事發生而暫時不能運行;

在這裏插入圖片描述
當然理論上上述三種狀態之間轉換分爲六種情況;

   運行——>就緒:1,主要是進程佔用CPU的時間過長,而系統分配給該進程佔用CPU的時間是有限的;
			  2,在採用搶先式優先級調度算法的系統中,當有更高優先級的進程要運行時,該進程就被迫讓出CPU,
			  該進程便由執行狀態轉變爲就緒狀態。

   就緒——>運行:運行的進程的時間片用完,調度就轉到就緒隊列中選擇合適的進程分配CPU

   運行——>阻塞:正在執行的進程因發生某等待事件而無法執行,則進程由執行狀態變爲阻塞狀態,如發生了I/O請求

   阻塞——>就緒:進程所等待的事件已經發生,就進入就緒隊列



  以下兩種狀態是不可能發生的:

    阻塞——>運行:即使給阻塞進程分配CPU,也無法執行,操作系統在進行調度時不會從阻塞隊列進行挑選,而是從就緒隊列中選取

    就緒——>阻塞:就緒態根本就沒有執行,談不上進入阻塞態。

2. 進程與線程的區別。

進程是資源(CPU、內存等)分配的基本單位,它是程序執行時的一個實例。程序運行時系統就會創建一個進程,併爲它分配資源,然後把該進程放入進程就緒隊列,進程調度器選中它的時候就會爲它分配CPU時間,程序開始真正運行。

線程是程序執行時的最小單位,它是進程的一個執行流,是CPU調度和分派的基本單位,一個進程可以由很多個線程組成,線程間共享進程的所有資源,每個線程有自己的堆棧和局部變量。線程由CPU獨立調度執行,在多CPU環境下就允許多個線程同時運行。同樣多線程也可以實現併發操作,每個請求分配一個線程來處理。

進程有自己的獨立地址空間,每啓動一個進程,系統就會爲它分配地址空間,建立數據表來維護代碼段、堆棧段和數據段,這種操作非常昂貴。而線程是共享進程中的數據的,使用相同的地址空間,因此CPU切換一個線程的花費遠比進程要小很多,同時創建一個線程的開銷也比進程要小很多。

線程之間的通信更方便,同一進程下的線程共享全局變量、靜態變量等數據,而進程之間的通信需要以通信的方式(IPC)進行。不過如何處理好同步與互斥是編寫多線程程序的難點。

但是多進程程序更健壯,多線程程序只要有一個線程死掉,整個進程也死掉了,而一個進程死掉並不會對另外一個進程造成影響,因爲進程有自己獨立的地址空間。

進程是資源分配的最小單位,線程是程序執行的最小單位

3. 進程通信的幾種方式

  1. 管道( pipe):管道是一種半雙工的通信方式,數據只能單向流動,而且只能在具有親緣關係的進程間使用。進程的親緣關係通常是指父子進程關係。
  2. 有名管道 (named pipe):有名管道也是半雙工的通信方式,但是它允許無親緣關係進程間的通信。
  3. 信號量( semophore ):信號量是一個計數器,可以用來控制多個進程對共享資源的訪問。它常作爲一種鎖機制,防止某進程正在訪問共享資源時,其他進程也訪問該資源。因此,主要作爲進程間以及同一進程內不同線程之間的同步手段。
  4. 消息隊列( message queue):消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。
  5. 信號 ( signal ):信號是一種比較複雜的通信方式,用於通知接收進程某個事件已經發生。
  6. 共享內存( shared memory ):共享內存就是映射一段能被其他進程所訪問的內存,這段共享內存由一個進程創建,但多個進程都可以訪問。共享內存是最快的
    IPC方式,它是針對其他進程間通信方式運行效率低而專門設計的。它往往與其他通信機制,如信號量,配合使用,來實現進程間的同步和通信。
  7. 套接字( socket ):套解字也是一種進程間通信機制,與其他通信機制不同的是,它可用於不同及其間的進程通信。

4. 臨界區/關鍵段

  1. 關鍵段共初始化化、銷燬、進入和離開關鍵區域四個函數(重點:關鍵段是函數)。

  2. 關鍵段可以解決線程的互斥問題,但因爲具有“線程所有權”,所以無法解決同步問題。

  3. 推薦關鍵段與旋轉鎖配合使用。

5. 線程的實現方式. (也就是用戶線程與內核線程的區別)

用戶級線程指不需要內核支持而在用戶程序中實現的線程,其不依賴於操作系統核心,應用進程利用線程庫提供創建、同步、調度和管理線程的函數來控制用戶線程。不需要用戶態/核心態切換,速度快,操作系統內核不知道多線程的存在,因此一個線程阻塞將使得整個進程(包括它的所有線程)阻塞。由於這裏的處理器時間片分配是以進程爲基本單位,所以每個線程執行的時間相對減少。

優點:

  - 線程切換不需要轉換到內核空間,節省了寶貴的內核空間;
  - 調度算法可以是進程專用,由用戶程序進行指定;
  - 用戶級線程實現和操作系統無關;

缺點:

  - 系統調用阻塞,同一進程中一個線程阻塞和整個進程都阻塞了。
  - 一個進程只能在一個cpu上獲得執行。

內核級線程:由操作系統內核創建和撤銷。內核維護進程及線程的上下文信息以及線程切換。一個內核線程由於I/O操作而阻塞,不會影響其它線程的運行。

優點:

	- 在多處理器上,內核可以調用同一進程中的多個線程同時工作;
	- 如果一個進程中的一個線程阻塞了,其他線程仍然可以得到運行;

缺點:

	對於用戶線程的切換代價太大,在同一個線程中,從一個線程切換到另一個線程時,
	需要從用戶態,進入到內核態並且由內核切換。因爲線程調度和管理在內核實現。

兩者的區別:

1)內核級線程是OS內核可感知的,而用戶級線程是OS內核不可感知的。

2)用戶級線程的創建、撤消和調度不需要OS內核的支持,是在語言(如Java)這一級處理的;而內核支持線程的創建、撤消和調度都需OS內核提供支持,而且與進程的創建、撤消和調度大體是相同的。

3)用戶級線程執行系統調用指令時將導致其所屬進程被中斷,而內核支持線程執行系統調用指令時,只導致該線程被中斷。

4)在只有用戶級線程的系統內,CPU調度還是以進程爲單位,處於運行狀態的進程中的多個線程,由用戶程序控制線程的輪換運行;在有內核支持線程的系統內,CPU調度則以線程爲單位,由OS的線程調度程序負責線程的調度。

5)用戶級線程的程序實體是運行在用戶態下的程序,而內核支持線程的程序實體則是可以運行在任何狀態下的程序。

6. 用戶態和核心態的區別

當一個任務(進程)執行系統調用陷入內核代碼中執行時,我們就稱進程處於內核運行態(或簡稱爲內核態)。此時處理器處於特權級最高的(0級)內核代碼中執行。當進程處於內核態時,執行的內核代碼會使用當前進程的內核棧。每個進程都有自己的內核棧。當進程在執行用戶自己的代碼時,則稱其處於用戶運行態(用戶態)。即此時處理器在特權級最低的(3級)用戶代碼中運行。當正在執行用戶程序而突然被中斷程序中斷時,此時用戶程序也可以象徵性地稱爲處於進程的內核態。因爲中斷處理程序將使用當前進程的內核棧。這與處於內核態的進程的狀態有些類似。

用戶態切換到內核態的3種方式:系統調用、異常、外圍設備中斷。

7. 死鎖的概念,導致死鎖的原因.

死鎖是指兩個或兩個以上的進程在執行過程中,由於競爭資源或者由於彼此通信而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的進程稱爲死鎖進程

1)因爲系統資源不足。

2)進程運行推進的順序不合適。

3)資源分配不當等

8. 導致死鎖的四個必要條件。

1、互斥。一次只有一個進程可以使用一個資源。其他進程不能訪問已分配給其他進程的資源。

2、佔有且等待。當一個進程等待其他進程時,繼續佔有已經分配的資源。

3、不可搶佔。不能強行搶佔進程已佔有的資源。

4、循環等待。存在一個封閉的進程鏈,使得每個進程至少佔有此鏈中下一個進程所需要的一個資源。

任何一個條件不滿足,死鎖都不會發生。

9. 處理死鎖的四個方式

1)忽略該問題。例如鴕鳥算法,該算法可以應用在極少發生死鎖的的情況下。爲什麼叫鴕鳥算法呢,(鴕鳥策略)

2)檢測死鎖並且恢復。(檢測與解除策略)

(1)利用搶佔恢復
	從某些進程中拿走資源並分配給另外的進程;
(2)利用回滾恢復
	週期性地對檢查點進行檢查;若發現死鎖則將進程恢復到一個更早的狀態;
(3)通過殺死進程恢復
	簡單暴力的方式;
	將環中的某個進程殺死並釋放其資源;
	其他進程過得資源得以運行;
	一般選擇殺死那些可以從頭開始的進程;

3)仔細地對資源進行動態分配,以避免死鎖。(避免策略)

確保系統不會進入不安全的狀態。系統動態分析每一個資源請求,確保系統總是進入安全狀態,仔細對資源進行分配,動態地避免死鎖

(1)資源軌跡圖
(2)安全狀態和不安全狀態
	① 安全狀態
	一個狀態是安全的,如果存在某種調度順序是的每個進程都可以結束即使所有進程都請求
	其所需的全部資源;
	② 二者的區別
	在一個安全狀態,系統可以保證所有進程都能結束。
	在一個不安全狀態,系統不保證所有進程都能結束。
	③ 銀行家算法

4)通過破除死鎖四個必要條件之一,來防止死鎖產生。(預防策略)

確保死鎖發生的條件(四個條件)無法滿足。
(1)破壞互斥條件

如果資源不被一個進程獨佔,那麼死鎖肯定不會發生,使用假脫機技術,	CPU將多個進程丟給守護進程,自己不再進行管理。
避免分配那些不是絕對必須的資源,儘量做到儘可能少的進程可以真正請求資源。

(2)破壞佔有並等待條件

要求進程在執行前獲取所有的資源,否則他不獲得任何資源,進行等待。
	(i)很多進程運行時才知道需要多少資源
	(ii)資源利用率不高
當一個進程請求資源時,先暫時釋放其當前佔用的所有資源,然後在嘗試一次獲得所需的全部資源。

(3)破壞不可搶佔條件。

若一個進程佔有一些資源,同時請求另外的無法分配給它的資源,那麼該進程將釋放其所佔有的
所有資源;
這個方法可以應用於可重啓的資源,如內存,先保存,然後恢復。不適用於打印機等,打印到一半
被搶了那全打的是錯的。

(4)破壞環路等待條件

保證任何一個進程在任何時刻只能佔用一個資源,如果要請求其他資源,必須放棄他手上的第一個資源
(這樣導致在資源分配圖中與該進程連接的永遠只有一條邊,不會發生迴路)
給資源編號,進程請求的資源必須按照資源編號的升序提出。

10. 進程調度算法

  1. 批處理系統中的調度
    (1)先來先服務
    (2)最短作業優先SJF(shortest job first)

    很難預知進程需要的CPU用時。
    兩種模式:
    非搶佔式:一旦進程佔有CPU,它將一直運行直到CPU用時到達。
    搶佔式:如果一個新來的進程具有更小的CPU用時,則中斷當前進程,使新來的進程使用CPU。
    給定一個進程集合,SJF能夠獲得最優的平均最小等待時間

    (3)最短剩餘時間優先

  2. 交互式系統中的調度–滿足響應時間要求

(1)輪轉調度
如果等待隊列中有 n個進程,那麼每個進程將獲得 1/n 的CPU用時,且每個進程的等待時間不會超過 (n-1)q單位時間。
① 特性:
當q 增大時,算法將轉化爲 FIFO(q太大相當於要把真個程序運行完才結束)當q 減小時,算法將產生較大比例的開銷(頻繁的上下文切換),因此,q 應當設的合適。
一個進程運行結束直接走人,不需要等到時間片結束。
週轉時間比SJF長,但是響應速度快——畢竟交互式系統就是要靠這個喫飯

(2)優先級調度
每個進程一個優先級,SJF就是一個特例(以運行時間爲優先級)
問題:低優先級的進程可能會發生飢餓現象。
解決方案: 引入老化技術 – 等待的進程的優先級會隨着時間推移而增大。

(3)多級隊列
級別高的先運行,但是時間片比較短,每次一個進程用完分配的時間片之後,就會被移到下一個優先級類,該類的時間片是上個類的兩倍。也就是隨着優先級不斷降低,擁有的時間片逐漸增多。

(4)最短進程優先
首先運行最短的作業會使得響應時間最短,唯一的問題是如何從當前可運行進程中找出最短的哪一個進程。一種方法是根據過去的行爲進行推測,並執行估計運行時間最短的那個。
老化:通過當前測量值和先前估計值進行加權平均而得到的下一個估計值的技術。

(5)保證調度
向用戶做出明確的性能保證,然後去實現它。爲了實現所做的保證,系統必須跟蹤各個進程自創建以來已經使用了多少時間和他們還因該獲得多少時間。比例爲0.5說明只獲得了一半,2說明超時了,算法轉向比率最低的進程。

(6)彩票調度
可以給優先級高的進程多一些彩票,如果出售了100張,一個進程擁有20張,那麼長此以往他大概會佔據20%的CPU時間。
彩票調度反應十分迅速。協作進程之間還可以交換彩票,簡單。

(7)公平分享調度
這裏不再考慮進程,而是考慮用戶數目,無論一個用戶的進城有多少,CPU運行時間按照人數來均分。

11. Windows內存管理的方式(塊式、頁式、段式、段頁式).

當程序運行時需要從內存中讀出這段程序的代碼。代碼的位置必須在物理內存中才能被運行,由於現在的操作系統中有非常多的程序運行着,內存中不能夠完全放下,所以引出了虛擬內存的概念。把哪些不常用的程序片斷就放入虛擬內存,當需要用到它的時候在load入主存(物理內存)中。這個就是內存管理所要做的事。內存管理還有另外一件事需要做:計算程序片段在主存中的物理位置,以便CPU調度。內存管理有塊式管理,頁式管理,段式和段頁式管理。現在常用段頁式管理。

  1. 塊式管理:把主存分爲一大塊、一大塊的,當所需的程序片斷不在主存時就分配一塊主存空間,把程序片斷load入主存,就算所需的程序片度只有幾個字節也只能把這一塊分配給它。這樣會造成很大的浪費,平均浪費了50%的內存空間,但是易於管理。
  2. 頁式管理:把主存分爲一頁一頁的,每一頁的空間要比一塊一塊的空間小很多,顯然這種方法的空間利用率要比塊式管理高很多。
  3. 段式管理:把主存分爲一段一段的,每一段的空間又要比一頁一頁的空間小很多,這種方法在空間利用率上又比頁式管理高很多,但是也有另外一個缺點。一個程序片斷可能會被分爲幾十段,這樣很多時間就會被浪費在計算每一段的物理地址上(計算機最耗時間的大家都知道是I/O吧)。

段頁式管理:結合了段式管理和頁式管理的優點。把主存分爲若干頁,每一頁又分爲若干段。
————————————————

分頁與分段的主要區別:

在這裏插入圖片描述

12. 常見的頁面置換算法

  1. 最優頁面置換算法:置換出之後可能使用最少的,比如一個頁面可能要到100條指令後會被訪問,也有頁面在1000條指令後纔會被訪問,那就刪除1000的,但是你怎麼知道這個具體的時間?只能靠猜
    在這裏插入圖片描述

  2. 最近未使用頁面置換算法(NRU):
    頻繁訪問未修改>少訪問已修改,
    Class 1未訪問,顯然是之前被修改但是隔了很久沒有訪問所以訪問位置0。所以他很少訪問,應該拿走,優先級低於經常訪問的。
    主要是想減少磁盤IO。
    在這裏插入圖片描述

  3. 先進先出頁面置換算法:總是丟棄最老的頁面
    在這裏插入圖片描述

  4. 第二次機會頁面置換算法:總是檢查最老的頁面,如果既老,又沒有被使用,那麼可以立即置換。如果R是0,就置換掉,如果R=1把他R置爲0並放到鏈表頭部
    在這裏插入圖片描述

  5. 時鐘頁面置換算法:與第二次機會算法類似,但是這裏是一個循環鏈表,如果是R=0就把新頁表插入。。。。。。。經常要在鏈表中移動頁面,既降低了效率又不是很有必要。
    在這裏插入圖片描述

  6. 最近最少使用頁面置換算法LRU:
    置換未使用時間最長的頁面、
    完全體:維護一個所有頁面的鏈表,用的最多的放在表頭,每次訪問內存都必須更新整個鏈表。
    給一個64位計數器,每條指令執行完之後+1,每次訪問內存後c值保存到對應頁表項,缺頁中斷時OS找c值最小的,也是最近最少使用的。
    在這裏插入圖片描述

  7. 軟件模擬ARU: NFU:最不頻繁使用
    R:0or1,累加的R值大致反映了頁面被訪問的頻繁程度
    在這裏插入圖片描述
    在這裏插入圖片描述

算法總結;
在這裏插入圖片描述

13. 常見的內存分配算法

連續分配方式,是指爲一個用戶程序分配一個連續的內存空間。它主要包括單一連續分配、固定分區分配和動態分區分配。

  1. 單一連續分配: 是一種最簡單的存儲管理方式,其優點是軟件處理簡單,最大缺點是存儲器不能充分利用。多用於單用戶微機操作系統中
  2. 固定分區分配:固定分區分配是最簡單的一種多道程序存儲管理方式,它將用戶內存空間劃分爲若干個固定大小的區域,每個分區只裝入一道作業。當有空閒分區時,便可以再從外存的後備作業隊列中,選擇適當大小的作業裝入該分區,如此循環。
  3. 動態分區分配:動態分區分配又稱爲可變分區分配,是一種動態劃分內存的分區方法。這種分區方法不預先將內存劃分,而是在進程裝入內存時,根據進程的大小動態地建立分區,並使分區的大小正好適合進程的需要。因此係統中分區的大小和數目是可變的。
    - 動態分區在開始分配時是很好的,但是之後會導致內存中出現許多小的內存塊。隨着時間的推移,內存中會產生越來越多的外部碎片(還沒有分配出去,但是由於太小而無法分配給申請空間的新進程的內存空間空閒塊)。
    - 克服外部碎片可以通過緊湊(Compaction)技術來解決,就是操作系統不時地對進程進行移動和整理。但是這需要動態重定位寄存器的支持,且相對費時。緊湊的過程實際上類似於Windows系統中的磁盤整理程序,只不過後者是對外存空間的緊湊。

常見動態內存分配算法及優缺點如下:
  (1)首次適應算法。使用該算法進行內存分配時,從空閒分區鏈首開始查找,直至找到一個能滿足其大小要求的空閒分區爲止。然後再按照作業的大小,從該分區中劃出一塊內存分配給請求者,餘下的空閒分區仍留在空閒分區鏈中。
   該算法傾向於使用內存中低地址部分的空閒分區,在高地址部分的空閒分區很少被利用,從而保留了高地址部分的大空閒區。顯然爲以後到達的大作業分配大的內存空間創造了條件。缺點在於低址部分不斷被劃分,留下許多難以利用、很小的空閒區,而每次查找又都從低址部分開始,這無疑會增加查找的開銷。
   (2)循環首次適應算法。該算法是由首次適應算法演變而成的。在爲進程分配內存空間時,不再每次從鏈首開始查找,而是從上次找到的空閒分區開始查找,直至找到一個能滿足要求的空閒分區,並從中劃出一塊來分給作業。該算法能使空閒中的內存分區分佈得更加均勻,但將會缺乏大的空閒分區。
  (3)最佳適應算法。該算法總是把既能滿足要求,又是最小的空閒分區分配給作業。
   爲了加速查找,該算法要求將所有的空閒區按其大小排序後,以遞增順序形成一個空白鏈。這樣每次找到的第一個滿足要求的空閒區,必然是最優的。孤立地看,該算法似乎是最優的,但事實上並不一定。因爲每次分配後剩餘的空間一定是最小的,在存儲器中將留下許多難以利用的小空閒區。同時每次分配後必須重新排序, 這也帶來了一定的開銷。
  (4)最差適應算法。最差適應算法中,該算法按大小遞減的順序形成空閒區鏈,分配時直接從空閒區鏈的第一個空閒分區中分配(不能滿足需要則不分配)。很顯然,如果第一個空閒分區不能滿足,那麼再沒有空閒分區能滿足需要。這種分配方法初看起來不太合理,但它也有很強的直觀 吸引力:在大空閒區中放入程序後,剩下的空閒區常常也很大,於是還能裝下一個較大的新程序。
  最壞適應算法與最佳適應算法的排序正好相反,它的隊列指針總是指向最大的空閒區,在進行分配時,總是從最大的空閒區開始查尋。
  該算法克服了最佳適應算法留下的許多小的碎片的不足,但保留大的空閒區的可能性減小了,而且空閒區回收也和最佳適應算法一樣複雜。

14. 虛擬內存的定義及實現方式:

基於局部性原理,在程序裝入時,可以將程序的一部分裝入內存,而將其餘部分留在外存,就可以啓動程序執行。在程序執行過程中,當所訪問的信息不在內存時,由操作系統將所需要的部分調入內存,然後繼續執行程序。另一方面,操作系統將內存中暫時不使用的內容換出到外存上,從而騰出空間存放將要調入內存的信息。這樣,系統好像爲用戶提供了一個比實際內存大得多的存儲器,稱爲虛擬存儲器。

之所以將其稱爲虛擬存儲器,是因爲這種存儲器實際上並不存在,只是由於系統提供了部分裝入請求調入置換功能後(對用戶完全透明),給用戶的感覺是好像存在一個比實際物理內存大得多的存儲器。虛擬存儲器的大小由計算機的地址結構決定,並非是內存和外存的簡單相加。虛擬存儲器有以下三個主要特徵:

多次性,是指無需在作業運行時一次性地全部裝入內存,而是允許被分成多次調入內存運行。

· 對換性,是指無需在作業運行時一直常駐內存,而是允許在作業的運行過程中,進行換進和換出。

· 虛擬性,是指從邏輯上擴充內存的容量,使用戶所看到的內存容量,遠大於實際的內存容量。

虛擬內存技術的實現

虛擬內存中,允許將一個作業分多次調入內存。釆用連續分配方式時,會使相當一部分內存空間都處於暫時或“永久”的空閒狀態,造成內存資源的嚴重浪費,而且也無法從邏輯上擴大內存容量。因此,虛擬內存的實現需要建立在離散分配的內存管理方式的基礎上。虛擬內存的實現有以下三種方式:

· 請求分頁存儲管理。

· 請求分段存儲管理。

· 請求段頁式存儲管理。

15. 外存分配(文件存儲)的幾種方式,及各種優劣。

  1. 連續分配:每個文件作爲一連串連續的數據塊存儲。
    在這裏插入圖片描述
    ① 優勢
    實現方式簡單;
    讀數據的性能好;
    ② 缺點
    產生磁盤碎片;
    需要預先知道文件的大小;
  2. 鏈表分配
    ① 優勢
    充分利用磁盤空間,很少會產生磁盤碎片。
    目錄項只需要記錄鏈頭的指針即可。
    ② 缺點
    鏈表的隨機訪問困難,讀操作很慢
    指針的存在使得每個物理塊中存儲的數據不是2的整數冪次方,大多數操作系統是以2的整數冪次方來讀取數據,因此這樣效率就低了。
  3. 採用內存中的表進行鏈表分配(文件分配表FAT:file allocation table)
    類比進程的進程分配表PCB
    將鏈表分配的每個磁盤塊的指針字放在內存中的一個表中(每個塊對應一個指針,一個表項)。
    在這裏插入圖片描述
  4. I節點
    i節點記錄了文件的屬性以及文件內容的存儲地址。
    給每個文件賦予一個i節點(n字節),其中列出文件屬性和文件塊的磁盤地址
    打開文件時,其i節點纔在內存,最多打開k個文件,則內存最多需要kn個字節
    但文件大小超出i節點能容納的數目時,最後的盤塊採用指針塊地址,類似於二層也表一樣,指針塊裏又可以放很多的指針。

16. DMA。

直接內存訪問(DirectMemory Access,DMA)

直接內存訪問是一種內存訪問技術。它允許計算機內部的某些硬件子系統(外設),可以獨立地直接的讀寫系統內存,不需要CPU的介入處理。在同等程度的處理器負擔下,DMA是一種快速的數據傳送方式。很多硬件的系統會使用DMA,包含硬件控制器、繪圖顯卡、網卡和聲卡。

DMA允許不同速度的硬件設備來溝通,不需要CPU的大量中斷負載。CPU初始化傳輸動作,但傳輸動作本身是由DMA控制器完成的。在DMA傳輸過程中,不需要CPU的參與,CPU則可以進行其他的工作。DMA傳輸對於高性能嵌入式系統算法和網絡是很重要的。

注:如果不用DMA,內存和磁盤的數據交互則需要通過CPU,CPU需要將每一片數據從來源中讀出複製到寄存器,然後再把它們寫回到新的地方。

參考blogs:

https://blog.csdn.net/leechow007/article/details/76284274
https://blog.csdn.net/liuqiyao_01/article/details/39156651
https://www.jianshu.com/p/f9c2cd85e2f6

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