進程優先級:一個進程對與CPU資源獲取的優先權
爲什麼要有優先級?(讓操作系統運行的更加良好)
交互式進程:直接與用戶進行交互的進程,(要求最好能夠更加有限的被CPU處理)。
批處理進程:在後臺默默做循環工作的進程。
環境變量:配置系統運行環境參數的變量。
環境變量優點使系統運行環境配置更加簡單靈活,可以通過設置環境變量給一個進程傳遞參數信息。(不用再去修改配置文件,重新加載配置文件,而是直接設置直接生效)
環境變量的操作
查看環境變量:env/set(查看所有變量,包含環境變量)/echo直接打印某一環境變量
設置環境變量:export
刪除環境變量:unset
環境變量是具有繼承性的:子進程也擁有父進程的環境變量
典型:PATH- - - - -系統命令程序的默認搜索路徑
代碼中環境變量的操作
- main函數的第三個參數 int main(int argc,char *argv[ ],char *env[ ])…env保存環境變量
- 通過一個全局變量eexern char **environ;…environ保存環境變量
- char *getenv(const char *name);…通過環境變量名稱獲取一個指定環境變量的數據
變量的聲明:就是告訴編譯器,有這個變量的存在(但是這個變量不一定是我們自己定義的,這個聲明使用的變量通常是一個本文件之外的全局變量 a.c / b.c)
變量的定義:告訴編譯器這個變量是什麼樣子的
exetrn char **enciron;在本文件中聲明有這個變量/然而這個變量的具體內容實際上是外部的,是標準庫中存的。
程序地址空間
地址:對內存單元的編號
程序時不佔用內存的,運行起來的程序被加載到內存,纔會佔有內存。
- 進程地址空間- - - -一個全局變量,在子進程中修改後,打印100,但父進程中依然打印1, 數據不同,表示肯定沒有使用同一塊內存空間(一塊內存空間不可能存儲兩個數據),父子進程打印的數據不同但是地址卻是相同的- - - - - 矛盾
- 實際上進程中訪問的地址都是虛擬地址,而我們所說的程序地址空間實際上是一個進程的虛擬地址空間;
虛擬一個地址空間:其實就是一個結構體 mm_struct;- - - - - 是一個對內存空間的描述- - - - -通過這個描述向進程虛擬出一個完整的、連續的內存空間;爲了能夠直接訪問物理內存
size :示內存大小
code_start/code_end:描述代碼段的起始與結束,通過這兩個信息就可以描述一塊空間。
進程直接訪問物理內存:
- 1、進程中的代碼使用都是連續的地址,若直接使用連續的物理內存會造成內存的浪費;
- 2、直接訪問物理內存會因爲缺乏內存訪問控制導致進程的不安全。
如何通過虛擬地址訪問物理內存?
- 操作系統爲進程創建mm_struct虛擬地址空間的同時,也創建了一個頁表用於映射虛擬地址與物理地址的關係;
- 進程使用虛擬地址空間,通過頁表映射物理內存,可以實現進程中數據在物理內存上的離散式存儲,通過這種方式提高內存的利用率;
- 在頁表中可以直接針對某個地址設置,這個地址的訪問權限(這個地址是隻讀的),通過這種方式實現內存訪問控制
爲什麼要使用虛擬地址空間?
- 這些虛擬地址最終通過頁表映射到物理內存上實現數據離散式存儲(提高內存訪問率);
- 在頁表中實現內存的訪問控制。