基本概念 - - Linux系統編程手冊

基本概念(Fundamental concepts)

內核 (The Kernel)

操作系統 (operating system) 通常有 2 種 不同含義:

1. 指 完整的軟件包 。 這 包括  管理計算機資源的核心軟件   和 所有 附帶的 標準 軟件工具 , 如。。。。

//consisting of   ...   and  .....   翻譯爲 “  ,這包括 ....   以及/和 ......

2. 狹義地(More narrowly) 指  核心軟件,它(that)  管理和分配  計算機資源 (如: CPU, RAM, devices)

Kernel 通常 指 第二種含義。本書中的 operating system 也是 這種含義。

//A of  B   翻譯爲 “ B的 A"

內核的職責 (Tasks performed by the kernel)

      process scheduling (進程調度)

      Linux 是一個 preemptive multitasking  operating sysytem (搶佔式多任務操作系統)。 Preemptive 搶佔 意味着 一組管理規則,

 哪些進程能獲得cpu 及 能使用多長時間 這些都由 kernel 進程調度來決定 (而不是進程本身)。

   內存管理(Memory management)

   Linux 採用 虛擬內存管理。這個技術有2個主要的優勢

   進程被隔離 與另一個進程 ,與內核。所以一個進程不能 讀 或修改 另一個進程 的  或 內核的  內存。

   A are   ..ed  . from  B  .  and from .. c   ->  

   只需要進程的一部分被保存在內存中, 這使 降低了 進程對每個內存的 需求量,並且允許(allowing)  RAM 可以同時擁有 更多的進程

   by the standards of a decade or two gage   以 一二十年前的標準來看

  提供了文件系統(Provision of a file system)

 創建 終止 進程 (Creation and termination of  processes)

   內核可以將 一個 新程序 加載到內存 ,並 爲它分配資源 (如 CPU ,內存, 訪問文件);一旦 一個進程 結束了執行,kernel 會確保它使用的資源被釋放,爲了之後的程序 可以重新使用。

訪問設備(Access to devices)

   計算機外接設備(如 鼠標,鍵盤,硬盤 等)

網絡(Networking)

提供系統調用API (Provision of system call application programming interface(API)

內核態和 用戶態 (Kernel mode and User mode)

     現在處理架構 一般都允許 以 至少 兩種 模式 去運行 CPU  : 用戶模式 和 內核模式(Kernel mode  ,也是supervisor mode)。

     相應地,虛擬內存 也被 標記爲 user space  和 kernel space 。當 CPU 運行在user mode , CPU 僅僅可以訪問被標記爲user space 的內存;嘗試去訪問 kernel space ,將會導致硬件異常。當CPU運行在kernel mode,CPU 可訪問 內存的 user space 和memory space。

當處理器在 kernel mode 下運行,才能執行特定的操作。這樣的例子包括: 執行(hat instruction)去 停止系統,訪問 內存管理 硬件,初始化 I/O 操作的初始化。這確保了 user proccess 不能訪問內核執行 和內核數據結構,也無法執行 操作系統不建議的操作。

系統的 進程視角 vs  系統的 內核視角(Process versus kernel views of the system)

    在許多的日常編程任務中,我們習慣於 以 面向進程(process-oriented) 的方式來編程。然而 轉變我們的觀點 “以kernel的角度“來考慮 是很有用和必要的。爲了凸顯兩者的差異,我們從 進程的角度 和 內核的角度 來 看看系統。

    從進程角度看:一個運行着的系統通常有許多的進程。對於一個進程來說,許多 事情 異步地發生。一個執行中的進程,它不知道:退出佔有cpu是何時,哪一個其它的進程 將會被CPU 調度、並且也不知道以何種順序被調度,它下次什麼時候被調度。信號的傳遞 和 進程間通信事件的觸發 都有內核協調, 對進程而言在任何時候都可能發生。許多事情 的發生對進程來說 都是透明的,進程一無所知。進程不知道它 在 RAM中的位置,更通用的說法是,進程空間的某塊特定部分是 駐留在內存中 還是被保存在交換空間李,進程本身不知道。類似地 ,進程也不知道 它訪問的文件在硬盤的何處,它只是通過名稱來訪問。進程操作 處於 隔絕狀態,與另一個進程的交流不是直接地。進程不能夠創建進程,哪怕自我 結束 也不能。最後,進程不能夠 直接地 和外部的 輸入輸出設備交流。

從內核角度看:內核控制着每一件事。內核決定哪個進程下次將獲得CPU的訪問權,及何時他將執行,及使用多長時間。內核維護了數據結構,這個數據結構的信息包含了所有運行着的進程 ,這個數據結構 隨着進程被創建,更新,結束 而被更新。內核維護者底層數據結構,它使 文件名 轉換爲 硬盤上實際的存儲的位置。內核也維護者這樣的數據結構,它維護着 每個進程的虛擬內存 和 計算機物理內存及交換區 的映射關係。內核 會響應 進程的請求,創建進程,終止進程。內核負責  和 輸入 、輸出設備的通信。

    在本書後續,我們常說 如“ 進程 可以創建另一個進程, 一個進程可以創建管道(pipe),一個進程可以寫數據到 文件,一個進程可以通過調用 exit() 來終止。記住,以上,都是內核 來協調 如此這些 動作, 這些描述語句 都是 “一個進程可以請求內核創建另一個進程”,以此類推。

Shell

 

 

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