日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

【Linux系统编程】| 【01】系统编程基本概念

發布時間:2023/12/10 linux 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Linux系统编程】| 【01】系统编程基本概念 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1、內核
        • 1.1 內核的職責
    • 2、shell
    • 3、用戶和組
        • 3.1 用戶
        • 3.1 組
        • 3.2 超級用戶
    • 4、單根目錄層級、目錄、鏈接及文件
        • 4.1 文件類型
    • 5、文件I/O模型
        • 5.1 文件描述符
    • 6、程序
    • 7、進程
    • 8、內存映射
    • 9、靜態庫和共享庫
    • 10、進程間通信及同步
    • 11、信號
    • 12、線程
    • 13、會話、控制終端和控制進程
    • 14、偽終端
    • 15、/proc文件系統

1、內核

1.1 內核的職責

【進程調度】:計算機內均配備有一個或多個CPU,以執行程序指令;Linux屬于搶占式多任務系統,“多任務”即多個進程可同時駐留于內存,且每個進程都能獲得對CPU的使用權,“搶占”則控制著哪些進程獲得對CPU的使用,以及每個進程能使用多長時間,這兩者都由內核進程調度程序決定; 【內存管理】:由于物理內存(RAM)仍然屬于有限資源,內核必須以公平、高效地在進程間共享這一資源;Linux也采用了虛擬內存管理機制,該技術主要具有以下兩方面的優勢:- 進程與進程之間、進程與內核之間彼此隔離,因此一個進程無法讀取或修改內核或其他進程的內存內容;- 只需將進程的一部分保持在內存中,這降低了每個進程對內存的需求量,而且還能在RAM中同時加載更多的進程。大幅提升事件的發生概率,在任一時刻,CPU都有至少一個進程可以執行,從而使得對CPU資源的利用更加充分; 【文件系統】:允許對文件執行創建、獲取、更新以及刪除等操作; 【創建和終止進程】:內核可將新程序載入內存,為其提供運行時資源,執行完畢,內核還要確保釋放其占用資源,以供后續程序重新使用; 【對設備的訪問】:計算機外接設備(鼠標、鍵盤、磁盤和磁帶驅動器等)可實現計算機與外部世界的通信; 【API】:進程可利用內核入口點(系統調用)請求內核去執行各種任務;

內核態和用戶態
參考:【操作系統】| 【01】操作系統簡介(運行機制、體系結構、中斷、系統調用)

2、shell

即命令解釋器,主要里讀取用戶輸入的命令,并執行相應的程序以響應命令;

3、用戶和組

系統會對每個用戶的身份作唯一標識;

3.1 用戶

系統密碼文件/etc/passwd,中記錄系統每個用戶的用戶名和用戶ID、組ID、主目錄、登錄shell;

3.1 組

出于管理目的,尤其是為了控制對文件和其他資源的訪問,將多個用戶分組; 每個用戶組對應系統文件中的/etc/group中的一行記錄:- 組名;- 組ID;- 用戶列表;

3.2 超級用戶

用戶ID為0,登錄名為root,享有特權;

4、單根目錄層級、目錄、鏈接及文件

4.1 文件類型

普通文件[-]、目錄文件[d]、字符設備[c]、塊設備[b]、管道[p]、套接字[s]、符號鏈接[l];

符號鏈接

經過特殊標記的文件,一個符號鏈接對應(引用)著目錄中內容為文件名+指針的記錄; - 只要系統調用用到路徑名,內核就會自動接觸該路徑名中符號鏈接的引用(以符號鏈接指向的文件名來替換); - 若指向的文件不存在,則為空鏈接;

文件名

最長長度為255個字符,不能包含/和\0;- 建議使用[-._a-zA-Z0-9]內的字符集;- 應避免使用-為文件名開頭,容易在shell中被當作參數;

路徑

【絕對路徑】:以/開始的路徑; 【相對路徑】:相對于當前工作目錄的文件路徑;

文件所有權和權限

每個文件都有一個與之相關的用戶ID和組ID,分別定義文件的屬主和屬組,還要其他用戶;

5、文件I/O模型

采用open、read、write、close這些系統調用程序能夠處理任何類型的文件;

5.1 文件描述符

用來指代打開的文件,常用open來獲取文件描述符; - 通過shell啟動進程會繼承3個已打開的文件描述符:0(stdin) - 標準輸入,1(stdout)標準輸出,2(stderr)標準錯誤;

6、程序

經過編譯和鏈接處理,將源碼轉化為語義相同的二進制機器碼; int main(int argc, char *argv[]):argc為命令行參數總個數,argv為指針數組記錄命令行參數;

7、進程

進程即正在執行程序的程序實例:- 內核必須在他們之間共享各種計算機資源;- 內核會將程序代碼載入虛擬內存;- 為程序變量分配空間,建立數據結構以至于記錄與進程有關的各種信息;

進程的內存布局

文本:程序的指令; 數據:程序使用的靜態變量; 堆:程序可從該區域動態分配額外內存; 棧:隨函數調用、返回而增減的一片內存,用于為局部變量和函數調用鏈接信息分配存儲空間;

創建進程和執行程序

可使用fork創建一個新進程,父進程調用fork,fork創建的為子進程(復制) ;- 子進程從父進程繼承數據段、棧段以及堆段的副本后,可修改,不會影響父進程的內容;- 子進程一般去執行父進程代碼段中的另一組函數,或者使用execve去加載新程序;- execve會銷毀現有的文本段,數據段、棧段、堆段;

進程ID和父進程ID

進程標識符PID,父進程標識符PPID;

進程終止和終止狀態

- 使用_exit()請求退出; - 向進程傳遞信號,將其殺死;

進程的用戶和組標識符

真實用戶ID和組ID:用來標識進程所述的用戶和組; 有效用戶ID和組ID:進程訪問受保護資源時,會使用這兩個ID來確定訪問權限; 補充組ID:用來標識進程所屬的額外組;

init進程

系統引導時,內核會創建一個名為init的特殊進程(/sbin/init);- 進程號總為1,以超級用戶權限運行;- 只有關閉系統才能終止該進程;- init主要是創建并監控系統運行所需的一系列進程;

8、內存映射

會在虛擬地址空間中創建一個新的內存映射; - 【文件映射】:將文件部分區域映射入調用進程的虛擬內存;完成后,對文件映射內容的訪問轉化為相應內存區域的字節操作; - 【匿名映射】:其頁面內容會被初始化為0;【映射共享】: - 兩個進程都針對某一文件的相同部分加以映射; - 由fork創建的子進程處繼承映射;

當兩個或多個進程頁面相同時,進程之一對頁面內容的改動是否為其他進程所見呢

若傳入標志為私有,則某進程對映射內容的修改對于其他進程是不可見的,而且改動不會落實到文件; 若傳入標志為共享,修改則其他進程可見;

9、靜態庫和共享庫

靜態庫

對已編譯目標模塊的一種結構化整合;- 使用該庫中的函數,需要在創建程序的鏈接命令中指定相應的庫;- 鏈接器解析后,會從庫中抽取所需的目標模塊副本,拷貝到可執行文件中,即靜態鏈接;- 使用該庫程序中都會帶有一份副本,會造成空間浪費;- 若對庫函數進行修改,則需要重新加以編譯生成新的靜態庫;

共享庫

為了解決靜態庫存在的問題,不會及那個目標模塊拷貝到可執行程序中;- 會在可執行文件中寫入一條記錄,表明可執行文件在運行時需要使用該共享庫;- 一旦運行時將可執行文件載入內存;- 共享庫代碼在內存中只需保留一份,且供所有運行中的程序使用;

10、進程間通信及同步

【進程間通信機制】: - 信號:用來表示事件的發生; - 管道:和FIFO,用于在進程間傳遞數據; - 套接字:供同一臺主機或是聯網的不同主機上所運行的進程之間傳遞數據; - 文件鎖定:為防止其他進程讀取或更新文件內容,允許某進程對文件的部分區域加以鎖定; - 消息隊列:用于在進程間交拖消息(數據包); - 信號量:用來同步進程動作; - 共享內存:允許兩個及兩個以上進程共享一塊內存;

11、信號

信號采用不同的整數來標識各種信號類型,信號從產生直至送達進程期間,一直處于掛起狀態;- 【內核可向進程發送信號】: - 用戶鍵入中斷字符; - 進程的子進程之一已終止; - 由進程設定的定時器已到期; - 進程嘗試訪問無效的內存地址;【進程會根據信號采取的動作】: - 忽略信號; - 被信號殺死; - 先掛起,在被專用信號喚醒;

12、線程

在現代UNIX 實現中,每個進程都可執行多個線程,每個線程都會執行相同的程序代碼,共享同一數據區域和堆,但每個線程都擁有屬于自己的棧,用來裝載本地變量和函數調用鏈接信息;- 線程之間可通過共享的全局變量進行通信,借助于線程API所提供的條件變量和互斥機制;- 線程的主要優點在于協同線程之間的數據共享(通過全局變量)更為容易;

13、會話、控制終端和控制進程

會話指一組進程組,中所有進程都具有相同的會話標識符;- 首進程即創建會話進程;- 進程ID即會話ID;- 會話會與某個控制終端相關;控制終端建立于會話首進程初次打開終端設備之時;- 一個會話可以擁有任意數量的后臺進程組,由以&結尾的行命令來創建;

14、偽終端

一對相互連接的虛擬設備 —— 主從設備;- 設備間設有IPC信道,可供數據進行雙向傳遞;

15、/proc文件系統

該文件系統為一種虛擬文件系統,由一組目錄和文件組成,提供一個指向內核數據結構的接口;- 為查看和改變各種系統屬性提供便利;

總結

以上是生活随笔為你收集整理的【Linux系统编程】| 【01】系统编程基本概念的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。