1 程序的引入原因:
描述多道程式在併發系統中的執行過程。由於動態特性,即使相同的程式功能,每次執行時的動態特性不同,因此引入新的有機整體(包括程式功等能,執行時的動態資訊),稱這個有機整體為程序。
程序是資源分配的單位。cpu按程序分配資源。
2 unix中程式被定義為映像的執行。
映像:儲存器映像+cpu映像+開啟檔案的狀態+現行目錄,可以理解為程式和動態執行該程式時產生的各種資訊的整合。
cpu映像:
程式執行時各個暫存器的值
儲存器映像:
程序控制塊
程序執行的程式
程序執行時要使用的資料
程序執行時使用的工作區
當乙個程序暫時退出處理機時,它的cpu印象就成為儲存器映像的一部分,所以,提及,程序映像時一般指其儲存器映像。
程序控制塊:
基本控制塊proc和擴充控制塊user兩部分
proc---記錄程序狀態,優先數等直接和程序排程有關的資訊,常駐記憶體,不管對應的程序是否執行,系統都要查詢和修改這些資訊。
user---當程序處於執行狀態時,才查詢和處理這些資訊,當程序不再處理機上時,該程序的user結構到可能被交換到外存,當程序被排程執行時再交換入記憶體。
程序執行的程式
程序執行的程式,即程序共享的正文段text(多個程序共享的可重入程式和常數)
程序執行時使用的資料
外部變數,區域性變數,非共享正文段等
程序執行時使用的工作區
包括核心態下的工作區(線核心棧)和使用者態下的工作區(使用者棧)核心棧主要用於保護現場和中斷,使用者棧用於引數傳遞。
共享正文段text雖然也屬於程序映像非常駐部分,但是否在記憶體中與共享它的各個程序情況有關,單獨分開儲存,資料棧,使用者棧,核心棧儲存位址連續。
程序映像的基本結構如下圖:
3 程序排程資訊
描述乙個程序是否在記憶體中,是否正在使用處理機,使用處理機的程度
作業系統進行程序排程時使用proc中的程序排程資訊。
過程: 首先作業系統喚醒等待事件消失的程序,被喚醒程序的proc的p-wchan(等待原因,即睡眠原因,當原因消失,喚醒因該原因而正在睡眠的程序)被置換為yes,p-stat置為ready。
然後作業系統檢查所有p-stat為ready態的程序,根據程序優先數,作業系統確定最高優先權的程序執行。
選中執行程序後,根據p-flag值確定程序是否在記憶體,若不在記憶體,檢視是否有足夠大的空閒記憶體調入該程序的正文段,如果沒有,則根據淘汰法調出某些正文段,直到有足夠大的空閒記憶體,接下來作業系統根據p-addr和p-size將正文段調入,最後系統執行選中的程序。
4 程序的儲存管理
0·5存放unix**,6頁存放現在執行程序的ppda區,當然程序執行中還需要用到pcb,其中proc可通過ppda中的user找到
邏輯上分為:共享正文段、資料段、使用者棧,當然實際執行中還需要pcb其中的proc常駐記憶體,選擇執行程序時,通過p-addr找到ppda,程序執行時ppda已經在核心態下的虛空間第6頁
實際上,記憶體空間中各個程序映像分布如圖所示,作業系統**總是常駐記憶體的最低端,從0位址開始向高位址延生,而輸入輸出總是占用物理空間的最後1也
5 程序排程管理
執行狀態:
srun指執行態和就緒態
p-stat=srun
睡眠狀態:
程序等待事件的發生相當於封鎖狀態
暫停狀態:
比較特殊的睡眠狀態,用於父子程序的跟蹤機構
殭屍狀態:
sidl:
父程序建立子程序時處於的特殊狀態
Android記憶體程序管理機制
參考文章 一 理論 android採取了一種有別於linux的程序管理策略,有別於linux的在程序活動停止後就結束該程序,android把這些程序都保留在記憶體中,直到系統需要更多記憶體為止。這些保留在記憶體中的程序通常情況下不會影響整體系統的執行速度,並且當使用者再次啟用這些程序時,提公升了程序...
Android記憶體程序管理機制
參考文章 一 理論 android採取了一種有別於linux的程序管理策略,有別於linux的在程序活動停止後就結束該程序,android把這些程序都保留在記憶體中,直到系統需要更多記憶體為止。這些保留在記憶體中的程序通常情況下不會影響整體系統的執行速度,並且當使用者再次啟用這些程序時,提公升了程序...
記憶體管理機制
記憶體管理 jvm將記憶體分成三大主要區域 堆,棧,方法區,用來儲存資料。堆 堆中主要儲存引用型別物件,給成員變數分配空間。棧 jvm在執行程式時,在棧中會為每乙個方法都提供儲存空間叫棧幀,用來儲存方法中的區域性變數。方法區 用來儲存jvm載入的位元組碼檔案的資訊 類的資訊 包含類的方法,方法只有乙...