圖1-1 虛擬位址空間記憶體布局
圖1-1是描述linux虛擬位址空間的大致記憶體布局,位址空間大小為4g,0-3g記憶體為使用者空間,3-4g空間為核心空間,乙個程序只能讀寫使用者空間,而不能對核心空間進行操作,核心空間是可以被多個程序共享的,這個在後文中會提到。
② 正文**段txt:存放程式用於執行的**,即cpu機器指令,通常屬於唯讀,以防止其他程式意外地修改這一部分指令(對該段的寫操作將導致段錯誤);
③ 已初始化資料data:資料段,對映程式中已經初始化的全域性變數;
④ 未初始化資料bss:
⑤ 堆區:存放程序執行時動態分配的記憶體,由程式設計師自己管理進行動態擴張或縮減,通過malloc/new可以申請記憶體,free/delete用來釋放記憶體,堆的位址從低向高擴充套件,是不連續的空間;
⑥ 共享庫:共享庫及匿名檔案的對映區域;
⑧ 命令列引數和環境變數,在linux下通過鍵入env命令可以檢視系統定義的環境變數;
作業系統中對虛擬位址空間的管理是以頁為單位的,1頁=4096位元組=4kb
舉例:malloc在堆區申請1000bytes的空間,向物理記憶體申請真正位址1頁的大小。此時若再malloc 200bytes,作業系統發現已分配的1頁=4096bytes還未使用完,不再向物理記憶體申請,而若再malloc 3097bytes,發現1頁大小不夠用,則重新申請1頁的位址空間。
這有利於我們提高程式設計的效率,在不知道申請的位址空間大小的情況下,最好是4096的整數倍,這樣避免了空間的浪費,或者多申請了一頁的位址空間,浪費了系統資源,因為申請位址空間也是需要時間的。
圖1-2 磁碟檔案載入到物理記憶體再對映到虛擬記憶體中
圖1-2簡單描述了乙個磁碟檔案載入到物理記憶體再對映到虛擬記憶體中的過程,對映的過程由作業系統維護一張虛擬記憶體對映表來進行。程序1執行前,首先將**載入到物理記憶體中,然後對映到虛擬記憶體中初始化一系列變數,程序2有同樣的過程。對於兩個程序不同的是,他們的使用者空間0-3g不共享,而核心空間3-4g因為核心**不允許使用者對其有所改動,所以可以實現共享,這樣做也節省了物理記憶體的空間。
q:為什麼核心空間禁止修改?
a:通過r/w訪問控制屬性對其進行訪問控制,核心空間的**設定為唯讀,而使用者空間的內容可寫可讀,這一原理同c語言中,輸入 char * p = "hello"; 不能使用*p對字串進行修改,字串存放在唯讀資料段中,在申請記憶體時頁面屬性為「唯讀」,核心區同樣也是「唯讀」的屬性。
圖1-3 程序的狀態
作業系統中程序的基本狀態分為:執行、就緒、阻塞3個狀態。
① 執行態(程序實際占用cpu);
② 就緒態(可執行,等待cpu分配時間片);
③ 阻塞態(等待外部事件發生進入就緒態,如等待鍵盤輸入)。
前兩種狀態處於的狀態都是可執行的狀態,cpu在執行時採用輪換時間片的機制,以單核cpu為例,cpu不會一直執行某一程序直到他結束為止,而是分為一些固定的週期,以時間片為單位,輪換執行不同的程序,但這個切換的時間非常短,導致單核cpu給人一種並行執行的錯覺,實際上是一種偽並行。
從執行到阻塞:程序因為需要等待外部事件(如輸入)而阻塞;
從阻塞到就緒:程序等到了外部事件(出現了有效輸入),進入就緒態;
從就緒到執行:cpu排程程式分配給了程序時間片,程序開始執行;
從執行到就緒:程序占用cpu達到一定時間,需要將cpu時間片讓出給別的程序使用;
三種狀態都能直接變為停止的狀態,如:出現外部中斷,系統錯誤,或者被其他程序傳送訊號殺死
例:假設有兩個程式a.out和b.out,a.out正在執行,而b.out處於就緒態,在排程程式切換程序時,a.out執行中斷,儲存處理器現場(一些執行時用到的變數和暫存器的值)到pcb中的核心棧(注意不是0-3g的使用者棧),由b.out使用cpu,a.out切換回時,在自己的核心棧中找到之前儲存的內容,恢復處理器現場,a.out繼續執行,由作業系統完成這個程序排程的過程,稱為分時復用。
linux 程序 一 基本概念
1,程序的基本概念 簡單來說程序就是執行期的程式,但是同時程序也不至於此,它還包括了其它資源 如開啟的檔案,掛起的訊號等等 linux是乙個多工多使用者作業系統,乙個任務 task 就是乙個程序 process 即程序 任務,在linux系統中,程序和執行緒共享一系列的資源 位址空間,檔案,訊號,名...
Linux 程序的基本概念
在了解程序之前先要知道作業系統的基本原理。作業系統是管理計算機硬體與軟體資源的電腦程式,是計算機系統的核心與基石。簡單理解就是,作業系統包括核心與其他程式兩部分。設計作業系統就是方便使用者與硬體進行互動,幫助使用者管理軟硬體資源。那麼怎麼管理呢?例如 學生 班長 班主任,學生被班長管理,班長又受班主...
程序基本概念
程式在計算機上的一次執行過程。即進行中的程式。程序 是活的,動態的。有生命週期。只能對應乙個程式。程式 是死的,靜態的。指令的集合。可以對應多個程序。就緒 程序已獲得除cpu以外的所有必要的資源 獲得cpu立即執行。執行 程式正在cpu上執行。阻塞 等待某個事件發生而無法執行時 放棄cpu。task...