Linux/Unix系統編程-基本概念

內核

內核是操作系統的核心,是指管理和分配系統資源的核心軟件。

  1. 內核的職責
    ①進程調度:linux屬於搶佔式多任務操作系統,多個進程可以同時存在於內存當中,但是每次只能有一個進程獲得對cpu的使用權。內核通過一定的進程調度算法控制哪個進程獲得對cpu的使用,以及使用時間。
    ②內存管理:雖然現在的計算機內存大小逐漸增長。但內存還是屬於有限資源,進程間需要共享資源,linux採用了虛擬內存機制,看過操作系統的應該會了解一點虛擬內存機制,系統會將進程和進程之間、進程和內核之間彼此隔離,一個進程無法讀取和修改其他進程或內核的內存。這種機制會將不需要的內存頁保存在外存中,需要用的時候再調出來。
    ③文件系統:內核在磁盤上提供文件系統,對文件執行各種操作。
    ④創建和終止進程:內核來控制對進程的創建,資源的分配,當進程結束後,對資源進行回收。
    ⑤對設備的訪問:計算機有很多設備,包括輸入輸出設備,IO設備等,內核爲程序訪問設備提供了接口,控制程序對設備的訪問。
    ⑥聯網:內核會以用戶進程的名義收發數據包,控制數據包的路由。
    ⑦提供系統調用應用編程接口:進程通過內核提供的api請求內核執行各種任務。

  2. 內核態和用戶態
    cpu存在兩種狀態:內核態和用戶態,在用戶態下,cpu只能訪問用戶空間的內存,處於內核態時,既可以訪問用戶空間的內存,也能訪問內核空間的內存。只有處於核心態時,才能執行一些特定操作,如宕機,訪問內存管理軟件,IO設備的初始化等。

shell

shell是一種具有特殊用途的程序,用於讀取命令,相應命令。也叫做命令解釋器。

用戶和組

linux作爲一個多用戶的系統,可以創建多個用戶,同時多個用戶還能一起登錄,每個用戶會有唯一的用戶名和ID。用戶可以隸屬於多個組,我們可以對不同的組設置不同的權限,來做權限管理。

進程

進程是正在執行的程序實例,當創建一個進程時,內核會對該進程的信息進行記錄,然後會將程序載入內存,爲程序分配空間和資源。進程之間是互不干涉的,他們有獨立的內存空間和資源。進程在內存中有這麼幾塊區域:
文本:程序的指令
數據:程序使用的靜態變量
堆:程序可動態分配的內存空間
棧:隨函數調用、返回而增減的一個內存區域,能爲局部變量分配空間,內存的分配和回收由系統控制。
父進程可以使用系統調用fork()來創建一個子進程,內核通過對父進程的複製來創建子進程。創建出來的子進程相當於父進程的副本,子進程可以去執行與父進程共享代碼段的不同函數,但是更常見的是通過系統調用execve()加載一個全新程序,這個系統調用會銷燬現有的文本段,數據段,棧和堆段,來創建新的這些段。

線程

線程是比進程更小的劃分。可以說線程是進程的一部分,一個沒有線程的進程可以看做是一個單線程。每個進程可以執行多個線程,線程之間共享數據區和堆,但是每個線程都有自己的棧,用來裝載本地變量和函數調用鏈接信息。線程間的通信往往是通過共享變量的使用。

靜態庫和共享庫

我們知道代碼需要先通過編譯變成機器代碼,然後通過鏈接器將庫文件和其他目標代碼進行鏈接,最後生成可執行文件。
靜態庫相當於每次生成可執行文件都會把所需靜態庫中的函數織入可執行文件中。所以不同的可執行文件會存在同一庫函數的程序,造成了內存浪費。
共享庫相當於在內存中只保存一份庫文件中的目標模塊,當可執行文件運行時動態地將所需庫文件函數載入內存,大大節省了內存空間。

發佈了70 篇原創文章 · 獲贊 19 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章