作業系統中同時執行著多個程序,如何管理和排程這些程序,以合理利用系統資源,提高系統吞吐量呢?
程序是由作業系統核心建立的,每乙個程序都分配得有4g的定址空間(在32位作業系統中,乙個指標長度是 4 位元組,而 4 位元組指標的定址能力是從 0x00000000~0xffffffff ,最大值 0xffffffff 表示的即為4gb 大小的容量,要注意的是這個 4gb 的位址空間是「虛擬」的,並不是真實存在的,而且每個程序只能訪問自己虛擬位址空間中的資料,無法訪問別的程序中的資料,通過這種方法實現了程序間的位址隔離),該定址空間是虛擬位址空間,包含使用者態(0~3g)和核心態位址空間(3g-4g),應用程式只能執行使用者態的**,只有在要執行系統呼叫的時候,才會進入核心態,核心態位址空間是所有程序共享的(是作業系統核心執行的地方)。
使用者態中又會包含程序的執行**,資料,堆(heap)和使用者態棧,當程式執行malloc(memory allocation 向系統申請分配指定size個位元組的記憶體空間)的時候,實際上是在虛擬位址空間中申請的(動態記憶體分配的)。
cpu在執行**的時候,並不是直接使用實體地址去物理記憶體中操作,而是使用虛擬位址。mmu(記憶體管理單元)接受到cpu發出的虛擬位址後,會首先去記憶體中進行查表(頁表,虛擬記憶體頁到物理記憶體的對映關係),如果發現當前需要的頁已經存在於物理記憶體中,則直接去操作,如果發現還不在,就會產生缺頁異常(中斷),中斷處理程式就會載入相應的頁到物理記憶體中(lru頁置換演算法),並替換出最近最少使用的頁回虛擬記憶體中(虛擬記憶體通常設定為實際物理記憶體的1.5~3倍)。
每個程序都有乙個程序控制塊(pcb),實際上是乙個task_struct結構體,裡面維護這各個程序的核心資訊,如程序id,執行狀態,優先順序以及構建程序的資源等。若要詳細檢視程序,則進入/proc/pid目錄,檢視maps,smaps,status三個檔案的內容。
作業系統 程序
在作業系統中,作業系統將記憶體,網路,檔案系統抽象為資源的統一抽象表示。1 什麼是程序 程序就是進入記憶體中正在執行的程式。把程序當做一組元素組成的實體。程序包括兩個部分,一部分是 部分,另一部分是 相關的資料集合。程序控制塊 每乙個程序,在核心中都對應著乙個程序控制塊。程序控制塊中儲存著程序的所有...
作業系統 程序
程序是作業系統中的重要概念,描述了程式的執行資訊。乙個程序就是一次執行。可以把程式想象成類,程序就是例項。引入程序的概念有利於實現多程式並行的設計。每乙個程式執行的時候可以大致分為io任務和計算任務,如果乙個程序正在io,那麼應該把cpu讓給另乙個程序執行計算任務,這樣可以提公升cpu的利用率,這就...
作業系統程序
乙個程序就是乙個正在執行的程式。它包括 程序狀態。包括 每個程序在作業系統中用程序控制塊pcb來表示,用來儲存與該程序有關的各種狀態資訊。pcb只是基本原理中的說法,對於乙個真實的作業系統可能不叫pcb,比如linux中叫做任務結構體 task struct 分時系統是在程序之間快速切換,以便使用者...