《Linux UNIX系統程式設計手冊》第2章讀書筆記

2021-07-28 02:55:46 字數 3138 閱讀 2451

寫在前面的話

紅燭啊!

你流一滴淚,灰一分心。

灰心流淚你的果,

創造光明你的因。

紅燭啊!

「莫問收穫,但問耕耘。」

第2章 基本概念

本章講了很多基本概念,有的概念會貫穿全書,有的概念作者只簡單提了一下,後面的章節會有深入講解。對於這些概念,博主不一一介紹,而是將其中有聯絡的概念放到一起說。

一、linux系統的組成

1.linux核心

功能:程序排程:linux屬於搶占式多工作業系統。計算機只有乙個cpu(我知道有多核的,咱們這只講單核的,用大白話好理解),既然多工,那只能乙個乙個來獲得cpu的使用權,那誰先誰後呢?這就需要制定規則,這個規則就是「搶占」(有的書中叫做「迴圈時間共享(sched_rr)」)。

記憶體管理:虛擬記憶體管理機制。

提供檔案系統

建立和終止程序:要建立程序,核心給這個程序提供資源,程序結束,核心會釋放資源。

訪問裝置

網路管理

提供系統呼叫api:看這句話「程序可利用核心入口點(也稱系統呼叫)請求核心去執行各 種任務。」這句話裡有三個物件:程序、系統呼叫、核心,我們可以這麼理解,使用者程序(有系統自己啟動的程序,也有使用者**啟動的程序,我們這裡就說使用者好理解些)通過系統呼叫,訪問核心,來執行各種操作。我們可以想象三個層,使用者層、系統呼叫層、核心層,也就是說,使用者只能通過各種系統 呼叫介面請求核心來使用硬體。本書主題就是介紹各種系統呼叫介面。

2.shell

讀取使用者輸入的命令,並執行相應的程式以響應命令。所以叫做命令直譯器。

shell命令:使用者向系統核心發出的控制請求。

shell指令碼:shell命令的有序集合。

幾種重要的shell版本:主要記住sh和bash,學linux系統系統一定會用到其中的乙個。

3.檔案系統

檔案系統是指作業系統中與檔案管理有關的軟體和資料。比較兩個概念就清楚了,windows檔案系統是以驅動器的碟符為基礎的,也就是常說的硬碟分割槽;linux檔案系統是乙個檔案樹,且它的所有檔案和外部裝置都是以檔案的形式掛載在這個檔案樹上。這就提到了檔案系統的目錄結構,也就是書中2.4節所講的。

4.應用程式

經過編譯之後的可執行程式。

二、使用者和組

linux系統中可以建立多個使用者。每個使用者包含5個屬性:使用者名稱、使用者id(uid)、組id、主目錄、登入shell。

使用者組是具有相同特徵的使用者的集合體,通過使用者組可以讓多個使用者具有相同的許可權。

使用者和使用者組的對應關係:

一對一:某個使用者是某個組的唯一成員;

多對一:多個使用者是某乙個組的成員,不歸屬其他組;

一對多:某個使用者是多個組的成員;

多對多:多個使用者對應多個組。

三、i/o程序

1.檔案i/o和標準i/o

檔案i/o的操作核心是檔案描述符。

標準i/o(stdio函式庫),本書不會介紹這方面內容。

2.程式和程序

1)區別:程式是靜態的,它是一些儲存在磁碟上的指令的有序集合,沒有任何執行的概念;

程序是動態概念,它是程式執行的過程,包括建立、排程、消亡。

2)程序的記憶體布局:

文字段:程式文字

資料段:全域性變數、常數

堆區:程序從該區域額外申請的空間

棧區:存放區域性變數、函式呼叫鏈結資訊,隨函式呼叫、返回而增減的一片記憶體

3)程序建立

程序在建立的時候,核心為其分配虛擬記憶體空間(4g,其中3g屬於使用者空間,剩下的1g屬於核心空間)為程式變數分配空間,建立核心記賬資料結構(task struct),描述程序屬性(程序的使用者,程序的id,程序所屬組id,程序的狀態)。

程序可以使用fork()來建立乙個新程序。子程序從父程序繼承資料段、棧區、堆區的副本後,可以修改,而文字段由父、子程序共享。

程序id為pid,父程序id為ppid。

3.記憶體對映

建立程序時,核心為其分配虛擬記憶體空間是通過對映物理記憶體得來的。

將虛擬位址空間分割成等大小的「頁」單元(4k),將物理記憶體也分割成與虛擬位址空間相同的「頁」單元。系統為每乙個程序維護一張頁對映表,mmu(記憶體管理單元,前面講的linux核心功能之一)根據頁對映表完成位址的轉換以及保護。

頁對映表:頁對映表由頁表條目組成,每乙個頁表條目記錄虛擬位址空間中的頁單元的對應關係。

4.靜態庫和共享庫

靜態庫在程式編譯時會被鏈結到目標**中,而程式執行時將不再需要該靜態庫,因此體積較大。

共享庫在程式編譯時不會被鏈結到目標**中,而是在程式執行時才被載入,在程式執行時還需共享庫存在,因此**體積較小。

5.程序間通訊(ipc)

在本書第1章中已經回顧了程序間通訊的發展歷史,但是感覺有點亂,這裡再梳理一下:at&t公司把傳統的程序間通訊方式改進了一下,形成system v ipc;bsd跳出這個限制,單獨整了個套接字通訊機制;posix標準在擴充套件中又包含了自己的通訊機制。而linux中使用最多的程序間通訊方式主要有以下幾種:

傳統的程序間通訊方式:無名管道(pipe)、有名管道(fifo)、訊號(signal)

system v ipc:共享記憶體(share memory)、訊息佇列(message queue)、訊號燈(semaphore)

bsd:套接字(socket)

6.訊號

訊號可以直接進行使用者空間程序和核心程序之間的互動,核心程序也可以利用它來通知使用者空間程序發生了哪些系統事件。

訊號是在軟體層次上對中斷機制的一種模擬,是一種非同步通訊方式。

使用者程序對訊號的響應方式:

1)忽略訊號:對訊號不做任何操作,但是有兩個訊號不能忽略:sigkill及sigstop

2)捕捉訊號:定義訊號處理函式,當訊號發生時,執行響應的處理函式

3)執行預設操作:linux對每種訊號都規定了預設操作

7.執行緒

乙個程序可以建立多個執行緒,執行緒與執行緒之間共享程序的資料段,文字段,堆區,每乙個執行緒有屬於自己的棧區,儲存自己的區域性變數,控制函式的呼叫和返回。

執行緒之間可以通過共享的全域性變數進行通訊。

四、其他

關於其他概念,請讀者自行理解。

其實本章就像是一本教材的緒論,博主閱讀本章時經常翻看全書目錄,為了能夠使自己全書結構有個大概的認識。本章中涉及了很多概念,博主大致進行了分組,目的是為了使本章更加有條理,大部分概念在本書的後續章節中都會展開來講,在本章中博主也仍有很多地方不理解,在後續章節中再進行深入**。

讀書筆記之linux unix系統程式設計手冊 43

程序間通訊介紹 1.unix系統上各種通訊和同步工具,並根據功能將他們分成了三類 1 通訊 這些工具關注程序之間的資料交換 2 同步 這些程序關注程序和執行緒操作之間的同步 3 訊號 儘管訊號的主要作用並不在此,但在特定場景下可以將它作為一種同步技術 2.資料傳輸工具 為了通訊,乙個程序將資料寫入i...

《Linux UNIX系統程式設計手冊》第1章讀書筆記

寫在前面的話 一切偉大的行動和思想都有乙個眇乎小哉的開始。第1章 歷史和標準 看第1章題目就可以知道本章要講的是歷史和標準。我們會問,歷史是講誰的歷史?1.unix和c語言的歷史 這段歷史已經聽過很多了,要注意它是at t公司整出來的,其中c語言完全是為了實現unix核心及相關軟體而開發的。注意其中...

《Linux UNIX系統程式設計手冊》第3章讀書筆記

寫在前面的話 i was so much order then,i m younger than that now.昔日我曾如此蒼老,如今才是風華正茂。bob dylan my back pages 第3章 系統程式設計概念 本章主要講系統呼叫和庫函式的概念,以及對執行系統呼叫和庫函式之後的狀態進行...