UNIX 系統概述

2021-09-20 08:19:58 字數 2911 閱讀 3398

系統在password檔案中尋找登入名,通常為檔案/etc/passwd。每個使用者由7部分組成:登入名:加密密碼:使用者id:使用者組id:注釋字段:home資料夾:shell程式

所有現代的系統都將加密密碼移到了另外乙個檔案中。

乙個shell是乙個命令列直譯器,它讀取使用者輸入並執行命令。使用者輸入通常從終端中讀入,有時候也從檔案讀入(叫做shell指令碼)。我們在圖1.2中對使用的shell進行總結:

具體執行哪個shell由passwd檔案中最後乙個字段指定。

unix檔案系統是檔案和資料夾的乙個分層布置。資料夾也是乙個檔案,它包含了資料夾入口。我們可以將每個資料夾入口想象成乙個檔名和描述檔案屬性的結構體的組合。檔案的屬性包括檔案型別(檔案,資料夾),檔案大小,檔案擁有者,檔案的訪問級別(其他使用者是不是可以訪問這個檔案),還有檔案的最後修改時間。我們使用stat和fstat函式來返回包含所有檔案屬性資訊的結構體。

只有兩個字元不能出現在檔名中,反斜槓「/」和null字元。因為反斜槓用於分隔路徑中的檔名,null字元用於終止路徑名。

檔案描述符是乙個非負整數,核心用它來標識程序訪問的檔案。

按照慣例,當乙個新的程式執行時,所有的shell都會開啟三個描述符:標準輸入,標準輸出和標準錯誤。如果沒有任何特殊操作,這三個描述符都會被連線到終端。大多數shell都提供了將三個描述符重定向到檔案的功能。

無緩衝i/o由函式open,read,write,lseek和close提供。這些函式同檔案描述符一塊工作。

1 #include "

apue.h"2

#define buffsize 4096

3int

4 main(void)5

標準i/o函式為不帶緩衝的i/o函式提供了乙個帶緩衝的介面。使用標準i/o函式無需擔心如何選取最佳的緩衝區大小。

我們最熟悉的標準i/o函式是printf。

用標準i/o將標準輸入複製到標準輸出:

1 #include "

apue.h"2

int3 main(void)4

程式是乙個儲存在磁碟上某個目錄中的可執行檔案。核心使用exec函式,將程式讀入記憶體,並執行程式。

程式的執行例項被成為程序(process)。unix系統確保每個程序都有乙個唯一的數字識別符號,稱為程序id。程序id為非負整數。

有三個用於程序控制的主要函式:fork,exec和waitpid(exec有七種變體,但經常把它們統稱為exec函式)

多個控制線程可以使得某些問題解決起來更加容易,並能充分利用多處理器系統的並行行為。

執行緒也用id標識,乙個程序中的執行緒id在另外乙個程序中沒有意義。

當unix系統函式出錯時,通常會返回乙個負值,而且整型變數errno通常被設定為具有特定資訊的值。有些函式對於出錯使用另外一種約定而不是返回負值。例如大多數返回物件指標的函式在出錯時會返回乙個null指標。

linux支援多執行緒訪問errno:

1

extern

int *_ _errno_location(void);2

#define errno (*_ _errno_location())

對於errno應當注意兩條規則。第一條是:如果沒有出錯,其值不會被例程清除。第二條是:任何函式都不會將errno值設定為0.

可將在中定義的各種出錯分成兩類:致命性的和非致命性的。致命性的錯誤無法恢復。只能列印日誌。對於非致命性的錯誤,有時可以較為妥善的進行處理。

口令檔案登入項中的使用者id是乙個數值,它向系統標識各個不同的使用者。

使用者id為0的使用者為根使用者(root)或超級使用者(superuser)。在口令檔案中,通常有乙個登入項,其登入名為root,我們稱這種使用者的特權為超級使用者特權。超級使用者對系統具有自由的支配權。

口令檔案登入項也包括使用者的組id,它是乙個數值。在口令檔案中有多個登入項具有相同的組id。組被用於將若干使用者集合到專案或部門中去。這種機制允許同組的各個成員之間共享資源(如檔案)。

組檔案通常是/etc/group。

訊號用於通知程序發生了某種情況。程序有三種處理訊號的方式。

忽略訊號。

按系統預設方式處理。對於除數為0,系統預設方式是終止該程序。

提供乙個函式,訊號發生時呼叫該函式,這被稱為捕捉該訊號。

歷史上unix系統使用過兩種不同的時間值。

日曆時間。這個值是utc時間(2023年1月1日 00:00:00)這個特定時間以來所經過的描述累計值。系統基本資料型別time_t用來儲存這種時間值。

程序時間。也被稱為cpu時間,用以度量程序使用的**處理器資源。程序時間以始終滴答計算。系統基本資料型別clock_t儲存這種時間值。

當度量乙個程序的執行時間時,unix系統為乙個程序維護了三個程序時間值:

可以用time命令來獲取上述三個時間值。

所有作業系統都提供多種服務的入口點,由此程式向核心請求服務。各版本的unix實現都提供良好定義、數量有限、直接進入核心的入口點,這些入口點被稱作系統呼叫。

庫函式可能會呼叫乙個或者多個核心的系統呼叫,但是它們並不是核心的入口點。

應用程式既可以呼叫庫函式也可以呼叫核心函式。

個人部落格:

UNIX檔案系統概述

unix檔案系統是unix系統的心臟部分,提供了層次結構的目錄和檔案。檔案系統將磁碟空間劃分為每1024個位元組一組,稱為塊 block 也有用512位元組為一塊的,如 sco xenix 編號從0到整個磁碟的最大塊數。全部塊可劃分為四個部分,塊0稱為引導塊,檔案系統不用該塊 塊1稱為專用塊,專用塊...

Unix 核心概述

核心本身並不是乙個程序,而是程序的管理者。程序 核心模式假定 請求核心服務的程序使用所謂系統調 system call 的特殊程式設計機制。每個系統呼叫都設定了乙個組識別程序請求的引數,然後執行與硬體相關的cpu指令完成從使用者態到核心態的轉換。unix系統還包括幾個所謂核心執行緒 kernel t...

Unix程序之程序概述

程序是計算機程式執行起來的動態過程。發明計算機的目的就是為了處理各式各樣的資料,人類通過程式設計工具 c c 等 編寫對處理資料的程式,完成了對現實世界中各類資料的抽象 資料型別 通過函式 類等方式把我們對資料處理的過程表達出來 程式像這樣的 c語言 程式被轉換成二進位制指令序列 像這樣 十六進製制...