讀書筆記2013-2 Linux內核設計與實現A
《Linux內核設計與實現》簡介這本書不是想Linux源碼剖析那樣一行行分析Linux源代碼的書,而是從Linux歷史,Linux哲學,Linux設計原理和原則,計算機硬件相關知識,編譯安裝內核實戰等多方面多角度講述和Linux相關的方方面面。從中學到的更多的不單內核的源代碼,而是Linux的哲學。建議所有從事Linux相關工作的猿都要讀一下,讀完之后,很多東西都變得容易理解,知其然,知其所以然。如果沒有讀過《深入理解計算機》類似的圖書,建議和《深入理解計算機》一起閱讀。有條件的話建議閱讀英文版。
筆記和摘要AFrom the beginning to Chapter "The Linux Scheduling Implementation"
1. 有名的Unix哲學--do one thing and do it well.因為Unix系統創建進程所需時間很短,并且Unix提供簡單且健壯的ipC(進程間通信手段),所以設計Unix時可以設計一個個實現單一功能的小程序,并且很方便的將他們組合起來實現很強大的功能,大大提高了程序的通用性和復用性。
2. MMU--Memory Management UnitMMU是一個專門用于管理內存的硬件,負責完成虛擬內存和物理內存間的轉換。通常,它被設計為CPU的一部分,但它也可以以獨立硬件的形式出現。除了管理虛擬內存外,MMU還負責內存保護,為每個進程分配單獨的進程空間,CPU高速緩存控制,Bus總線仲裁以及存儲體轉換(尤其在8位系統上)等工作。
3.如何加快編譯Linux內核的速度: make-j32通過加參數-j來使用多線程來并行編譯內核。一般為一個cpu配兩個作業任務,所以如果你的服務器的cpu是16核的,則可以指定-j32
4.內核態和用戶態的區別進程就是執行中的程序。但不僅僅指程序的源代碼,還包括打開的文件、接收到的信號、處理器狀態、內存地址空間、執行中的線程、全局變量等。線程是處理器調度的最小單位。Linux使用一種獨特的方式來實現線程:線程與進程沒有明顯區別,線程就是一種特殊的進程--它們能夠與其他進程共享如地址空間等資源。對進程來說,有兩個虛擬化:虛擬內存和虛擬處理器。通過進程調度機制,為每個進程分配獨立的虛擬內存和虛擬存儲器,所以從進程的角度來看,它們都任務自己獨占整個機器。
6.進程描述符系統用process identification (PID)來標識每個進程。PID其實就是一int型的數字,為了向后兼容,這個數字最大是2的32,768(15次方),這個值記錄在<linux/threads.h>里,編譯時可以修改。這個值的大小限制著能夠同時運行的進程的個數。盡管這個值對于普通desktop來說,足夠用了,但對于大的服務器來說,可能不夠用。這種情況時管理員可以通過/proc/sys/kernel/pid_max。在內核中,通常是通過一個指向存儲任務信息的結構體task_struct的指針來獲取任務信息。由于x86系統的計算機只有很少的寄存器,所以與大多數體系結構的計算機直接把一些信息存到不同的寄存器里不同,x86系統的計算機將這些信息存到棧里面。
7.進程的狀態進程的狀態只可能是下面5種中的一種
處在TASK_UNINTERRUPTIBLE狀態的進程拒絕接受信號,所以無法被殺死
新聞熱點
疑難解答