天天看點

《Linux核心設計的藝術:圖解Linux作業系統架構設計與實作原理》——2.2 規劃實體記憶體格局,設定緩沖區、虛拟盤、主記憶體

接下來設定緩沖區、虛拟盤、主記憶體。主機中的運算需要cpu、記憶體互相配合工作才能實作,記憶體也是參與運算的重要部件。對記憶體中緩沖區、主記憶體的設定、規劃,從根本上決定了所有程序使用記憶體的數量和方式,必然會影響到程序在主機中的運算速度。

具體規劃如下:除核心代碼和資料所占的記憶體空間之外,其餘實體記憶體主要分為三部分,分别是主記憶體區、緩沖區和虛拟盤。主記憶體區是程序代碼運作的空間,也包括核心管理程序的資料結構;緩沖區主要作為主機與外設進行資料互動的中轉站;“虛拟盤區”是一個可選的區域,如果選擇使用虛拟盤,就可以将外設上的資料先複制進虛拟盤區,然後加以使用。由于從記憶體中操作資料的速度遠高于外設,是以這樣可以提高系統執行效率。

這裡,系統要對主記憶體中的這三種不同性質的區域,在大小、位置以及管理方式方面進行規劃。

先根據記憶體大小對緩沖區和主記憶體區的位置和大小進行如圖2-2所示的初步設定。

《Linux核心設計的藝術:圖解Linux作業系統架構設計與實作原理》——2.2 規劃實體記憶體格局,設定緩沖區、虛拟盤、主記憶體

具體執行代碼如下:

其中memory_end為系統有效記憶體末端位置。超過這個位置的記憶體部分,在作業系統中不可見。main_memory_start為主記憶體區起始位置。buffer_memory_end為緩沖區末端位置。對于緩沖區的起始位置,我們将在2.10節中詳細介紹。

小貼士

有幾個常用的左移、右移的資料關系需要記住:

<<20或>>20相當于乘或除以1 mb,

<<12或>>12相當于乘或除以4 kb(聯想到頁),

<<10或>>10相當于乘或除以1 kb。

是以,1<<20就是1 mb,ext_mem_k<<10就是ext_mem_k(擴充記憶體的kb數)的位元組數。