iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
自我挑戰組

當你凝視linux, linux也在凝視你系列 第 10

Day10 分頁與分段的記憶體管理

前言

前幾天講完了行程管理的部分,其中有個部分講到,所謂的ready 或者說 task_running 的狀態,代表著行程的資料已經被移到記憶體,準備好可以執行了,從今天開始就來了解所謂的記憶體到底是怎麼演變以及運行的,在這個部分會了解MMU、page、page table、實體記憶體等等的內容,希望可以對記憶體有更多的了解。

記憶體管理的遠古時期

在遠古時期的記憶體是十分有限而且笨重的,簡單來說就是只要空間足夠就會直接把行程放進去,這代表著記憶體裡面的每個區域都可能被某個行程使用,因此這個古老的方法有兩個顯而易見的大缺點

  1. 行程地址空間的保護問題:
    因為整個記憶體是對所有的行程開放,所以對於任何行程而言,可以任意更動到記憶體內部的任何區域的資料,這對有心的惡意人士而言是犯罪的溫床,可以輕鬆的藉著改動其他區域的資料達成自己不懷好意的目標,為了這個問題後續出現分段管理的方式,在稍後會介紹到。
  2. 記憶體的使用率不良:
    因為行程的排放方式不固定,也因此如果排放的方式不良,很容易就造成嚴重的空間浪費。
    因應上述的兩個問題,分段以及分頁的機制就此出現。

分段管理

分段管理是為了解決記憶體內位址空間的保護問題而產生的機制,主要結構如下

在記憶體裏會有一個分段表(segment table)進行查表,每個cpu所產生的位址可以分成高位段的segment base與低位段的segment limit,在上圖分別以 s 跟 d 表示,會利用 s 查表,再將該欄的資料取出,分別為限制大小(limit)與基底(base),首先確認cpu 產生的d ,是否小於分段表中取出的 segment limit,如果為否,那就引發定址錯誤;如果是的話,就將分段表中取出的base 加上d,正確的存取實體記憶體。
分段機制雖然解決了記憶體保護的問題,但是在分段管理中,仍以行程的角度對記憶體進行使用,當實體記憶體不足的時候,取出的會是整個行程,因此如果有多個行程要使用,記憶體會與硬碟不停進行行程資料的交換,會造成嚴重的效能損耗。

分頁管理


上一篇
Day9 初探CFS 下
下一篇
Day11 Buddy, slab 記憶體管理大將
系列文
當你凝視linux, linux也在凝視你30

尚未有邦友留言

立即登入留言