作業系統中記憶體使用與分段

2021-09-13 13:54:17 字數 1080 閱讀 5910

計算機執行的本質是取址執行。

1、這裡的取址就是從記憶體中的某個位址處取得指令,然後放入cpu中進行解析該指令

2、這裡的執行就是在cpu解析完該指令後,按照該指令的意願去處理一些任務,比如讀數或寫數。

計算機作業系統上電執行時會把儲存在磁碟上的程式指令讀入到記憶體中。我們知道程式每次執行乙個週期都會取址一次,這裡的位址就是對應著我們在寫程式時對各函式或變數賦值的位址。不過計算機取址的位址是記憶體的位址,被稱為實體地址。我們在編寫程式的時候其實並不知道將來這段程式具體在記憶體中哪個位置跑的,所以我們只好用虛擬位址來暫時表明程式要在記憶體中占用的位置。

當我們知道程式執行在記憶體中的具體位置時,我們可以在編寫程式、編譯、載入記憶體等階段將虛擬位址換算為計算機取址的位址。但是這些方法不夠靈活,因為作業系統的程序多了後,不好為某些程序分配指定的記憶體區間。所以通用作業系統採用了另一種策略,在作業系統每次取址前都會將程式中的虛擬位址換算成實體地址後,再獲取指令執行。這種就特別靈活方便了,程式設計者在程式設計時不用考慮自己的程式具體在哪一片記憶體中存放,這些都由作業系統搞定。這種策略也叫作執行時重定位策略。

作業系統中維護了一張gdt表,該錶維護著每個程序段的基位址,這樣在切換到每個程序前,會讀取到對應的基位址,然後將讀取到的基位址加上自己在程式中寫的邏輯位址就是即將要取址的位址,即記憶體的實體地址。gdt表如下圖所示:

這樣靠著這張gdt表就可以實現程式執行時的重定位策略。

1、記憶體中分為文字段、資料段、bss段。可是為什麼要這樣分呢?假如不分段,那樣乙個程式中執行指令和資料會雜糅在一起並儲存在記憶體中,由於執行指令寫到記憶體後不能被使用者修改的,屬於唯讀屬性的。而程式中的資料是可讀可寫的,所以當計算機取址執行時還要判斷該對應記憶體位址下的是指令還是資料,這個樣就不好判斷了。所以我們將指令與資料用位址區間來分開,這樣計算機在取址時通過判斷位址就可以知道取的是指令還是資料,便於執行程式。所以人們為了計算機方便,就將程式中的具有相同屬性的內容放到同一塊記憶體片段。

2、記憶體分段後,程式執行中重定位時不用把程式中所有的內容重定位一次,提高效率,比較靈活。

分析記憶體使用時最好配合**分析,待完善。

作業系統 記憶體使用與分段

首先讓程式進入記憶體 程式載入後還需要移動 重定位的最合適時機 執行時重定位 首先在記憶體中找一段空閒的記憶體,然後把這段空閒記憶體的位址找到例如起始位址1000,然後把這個1000賦給pcb,因為建立了程序自然就有了pcb,這個起始位址就作為基位址,然後pc置好初始位址開始執行。把程式放到找到的空...

作業系統中記憶體分段與記憶體分頁的區別

參考 記憶體分段和分頁的區別 分段和分頁其實都是一種對位址的劃分或者對映的方式。兩者的區別主要有以下幾點 1 頁是資訊的物理單位 段是資訊的邏輯單位 分頁是實現離散的分配方式,以消除記憶體的外零頭,提高記憶體的利用率 分段含有一組其意義相對完整的資訊 比如 資料段 段 和堆疊等 分頁僅僅是由於系統管...

作業系統 分段式記憶體管理

從計算機的角度出發,提高了記憶體的利用率,提公升了計算機的效能,以分頁通過硬體機制實現,對使用者透明 考慮到使用者和程式設計師,已滿足方便程式設計 資訊保護和共享 動態增長 動態鏈結等多方面需求 分段式記憶體管理 分段 按照使用者程序中的自然段劃分邏輯空間,例如 使用者的程序由主程式 兩個子程式 棧...