計算機系統是由「硬件」和「軟件」兩大部分組成,計算機硬件包括一個或多個處理器(CPU)、內存、鍵盤、顯示器、磁盤、I/O接口以及其餘一些外圍設備好比打印機,繪圖儀等等。 總之,計算機硬件部分是一個由多種電子和機械設備組成的硬件系統。安全
爲了讓人方便正確使用這些設備,就須要編寫若干程序來管理這些設備,正是這些程序組成了計算機的軟件系統。軟件也能夠分爲兩大類:系統軟件和應用軟件。人們首先直接在硬件上加載一層程序,用它來管理整個計算機硬件設備以及一些軟件信息資源,同時還爲用戶提供開發應用程序的環境,這就是操做系統軟件和實用軟件。應用軟件是在操做系統支持下,爲實現用戶要求而編制的各類應用程序。服務器
CPU、內存和I/O接口組成的主設備一般稱爲主機,把沒有加載操做系統的主機叫作裸機。裸機與操做系統軟件的接口是由CPU的指令系統和廠商提供的系統BIOS組成。網絡
因爲操做系統向用戶隱藏了系統使用的硬件設備,所以操做系統要爲它上面的應用系統軟件提供一組命令或系統調用接口供用戶程序使用。好比咱們須要使用磁盤,能夠經過系統命名或系統調用來間接完成,而不須要親自手動編寫一個磁盤設備驅動程序。所以對於用戶來講,當計算機加載操做系統後,用戶不直接與計算機硬件打交道,而是利用操做系統提供的命令和功能區使用計算機。性能
因爲操做系統處於硬件和軟件的中央位置,所以很早就有人把操做系統成爲計算機系統軟件的核心,簡稱核心或內核。操作系統
從系統安全和保護的角度出發,在進行計算機體系結構設計時,處理機的執行模式通常設定爲兩種:分別稱爲內核模式(內核態)和用戶模式(用戶態)。當處理機處於內核模式執行時,意味着系統除了能夠執行通常指令外,還能夠執行特權指令,便可以執行訪問各類控制寄存器的指令、I/O指令以及程序狀態字。設計
當處理機處於用戶模式執行時,只能執行通常指令,而不容許執行特權指令。這樣作能夠保護核心代碼不受用戶程序有意和無心的攻擊。 顯然,處理機在運行期間須要在內核模式和用戶模式以前進行切換。cdn
Kafka使用零拷貝(Zero-Copy)技術來提供它的性能,所謂的零拷貝是指將數據直接從磁盤文件複製到網卡設備中,而不須要經由應用程序之手,減小了內核和用戶模式之間的上下文切換,零拷貝技術經過DMA技術實現。blog
直接存儲器存取方式(Direct Memory Access, DMA) DMA控制方式是以存儲器爲中心,在主存和I/O設備之間創建一條直接通路,在DMA控制器的控制下進行設備和主存之間的數據交換。這種方式只在傳輸開始和傳輸結束時才須要CPU的干預。它很是適用於高速設備與主存之間的成批數據傳輸。接口
咱們看下下面這樣的這樣一個場景:進程
客戶端在遊覽器中發起請求獲取內容,到看到具體內容經歷了什麼?
首先,該請求通過解析後,經過系統調用由用戶態轉爲核心態執行,在覈心態由操做系統中的TCP/IP協議代碼和網卡驅動程序控制網卡把請求發送到相應的網絡上, 等待Web服務器相應。當服務器返回時,由網卡接受,並經過內核傳送給客戶程序。
在服務器端,內核經過網卡從網絡上接受Web請求,並經過系統調用傳遞給Web服務器。Web服務器根據此服務請求執行相應的服務進程,並由內核把結果發送到網絡上傳送給用戶。
從上圖中能夠看到若是服務器從準備數據到發送數據經歷了下面4個過程。
從上面過程能夠看出,數據是先從內核模式-->用戶模式-->內核模式,浪費了2次複製過程:第一次是從內核模式複製到用戶模式;第二次是從用戶模式再複製回內核模式,並且在上面的過程當中,內核和用戶模式的上下文切換也是4次。
若是採用了零拷貝技術,那麼應用程序就能夠直接請求內核把磁盤中的數據傳輸給Socket.
零拷貝技術經過DMA技術將文件內容複製到內核模式下的Read Buffer中。不過沒有數據被複制到Socket Buffer,只有包含數據的位置和長度的信息的文件描述符被加到Socket Buffer中。DMA引擎直接將數據從內核模式中傳遞到網卡設備。這裏上下文切換變成了2次,也只經歷了2次複製過程就從磁盤中傳送出去了。