學習linux核心,記憶體管理是必學的,但是和自己以前設計解碼電路的定址完全不同,所以對抽象後位址對映不能很好地理解,雖然很多書都有介紹,但是領悟的還是有缺陷。所以這次以intel微處理器為例子,去了解硬體是怎麼定址的,然後在轉到linux系統怎麼抽象的。
80x86常見的工作模式有,實模式和保護模式。
先來看實模式,它的操作空間<=1mb。
所以這個時候段暫存器裡面存放的是16位的段位址。然後段位址會和偏移位址運算後(段位址x10h+偏移位址)來讀取對應的儲存單元。段暫存器內的段位址是任何乙個大小為64kb(2^16b=64kb)的儲存器段的起始位址,偏移位址用來精確的讀取該儲存器段內的任一單元。
這裡有乙個儲存器區域叫做高階儲存器,大小為64kb,因為位址範圍(0ffff0h~10ffefh)在1mb的最頂端,所以叫做高階儲存器。
自己的思維是,如果一段記憶體區域已經被分配,那麼它就已經固定了,不會再變動,一直到它被釋放。
但實際上,段位址和偏移位址允許重定位,這樣的好處是,在實模式下執行的程式可以在保護模式下執行。可重定位程式是乙個可以放入儲存器的任何區域,且不需要修改而仍能執行的程式。可重定位資料是可以放在儲存器的任何區域,且不需要修改就可以被程式引用的資料。
另外需要注意的是,儲存器段是可以相連或不相連的,也可以是重疊的。
到這兒,應該能看出段不是慣性思維中固定且有序的,它們會根據儲存器的實際情況做出改變。
希望你忘了上邊的再看下邊的,要不然會亂的。
接下來是保護模式下的儲存器定址,它的操作空間在》1mb。
這個時候的段暫存器已經變了,它裡面存放的是叫做選擇子,以及兩個標誌(ti、rpl)。另外還有乙個專業術語叫描述符表,它其實也就是一塊儲存區,裡面放的是每個儲存段的首位址以及他的大小。所以,這個時候,段暫存器會根據ti來選擇實在全域性描述符表還是區域性描述符表查詢選擇子中對應的值,這個值說白來才是真正儲存段所要的段首位址值。
但是保護模式下通過段最後得到的位址並不是實際的實體地址,因為它是根據程式產生的位址,叫做線性位址。
這東西吧,又被人分成了3部分,最高10位頁目錄位址,最低12位偏移量,中間的10位頁表位址。所以,這又聯絡到了頁,根據偏移位址(2^12=4kb)知道乙個頁4kb。
然後頁目錄回合乙個名字叫做cr3的暫存器(這個暫存器的專職工作就是儲存乙個位址值)進行運算,得出在頁目錄表中的對應位置,取出,然後在頁表進行運算,取出對應於頁表中的值,接下來在和偏移量運算,得到最終的實體地址。運算過程是,(m<<2+n)線性位址中的頁目錄和頁表左偏移兩位相加對應的儲存器中的數,(m+n)偏移量直接加不左移。
到這,硬體上的定址就結束了,下來要做的就是去看作業系統中的**是如何抽象這些東西的,呵呵。
從軟硬體了解地磁車位探測器
如今解決停車難的問題成了大家的共識,另外路邊停車資訊難以掌握,如何管理成為了一大難題,網際網路的發展為解決問題開闢了新的方式,以智慧型停車場 路面停車管理為主的靜態交通應用越來越多。地磁車位探測器是目前使用比較多的用於智慧型停車的產品,今天我們就來了解一些無線地磁系統。一 從軟硬體方面去了解 1 硬...
從零了解MQ
有從別的地方複製的介紹,侵刪 代表訊息佇列,是一種應用程式對應用程式的通訊方法 通過訊息傳遞佇列傳送和接收訊息資料,達到兩者之間的資訊交換。broker 訊息伺服器,作為server提供訊息核心服務 producer 訊息生產者,業務的發起方,負責生產訊息傳輸給broker,consumer 訊息消...
如何了解路由器硬體資訊
cisco ios 思科網路作業系統 含有幾個很重要的show命令,每一位網路管理員都應該了解,其中之一就是show diag命令,這是個很少有人知道的命令,其功能是提供關於路由器以及它的控制器 介面的相關診斷資訊。本文詳細描述了show diag命令的使用方法,幫助網管員了解在日常網路維護管理中該...