sel4原始碼解析(七) vspace

2021-10-02 21:06:37 字數 2266 閱讀 9907

sel4 vspace指的是程序的虛擬位址空間。armv8 64位版本的sel4 對應的頁表劃分分為四級,分別是:pgd(page global directory)、pud(page upper directory)、pd(page directory)和pt(page table)。

pgdpgd結構體:

block pgde_pud
pgd cap結構體:

block page_global_directory_cap
pud

pud結構體:

block pude_pd
pud cap結構體:

block page_upper_directory_cap
pd結構體:

block pde_small
pd cap結構體:

block page_directory_cap
pte結構體:

block pte
page_table_cap結構體:

block page_table_cap
這裡以初始程序為例,初始程序的頁表建立過程大致分為三步:建立記憶體、建立對映、填充頁表項屬性。具體如下所示:

create_rootserver_objects函式

boot_code void

create_rootserver_objects

(pptr_t start, v_region_t v_reg, word_t extra_bi_size_bits)

create_it_address_space函式

92^9

29個pud表項;

為pud的對映關係表分配記憶體,其大小為4k,包含了2

92^9

29為pd的對映關係表分配記憶體,其大小為4k,包含了2

92^9

29為pt的對映關係表分配記憶體,其大小為4k,包含了2

92^9

29

boot_code cap_t create_it_address_space

(cap_t root_cnode_cap, v_region_t it_v_reg)

}/* create any pds needed for the user land image */

for(vptr =

round_down

(it_v_reg.start, pud_index_offset)

; vptr < it_v_reg.end;

vptr +

=bit

(pud_index_offset))}

/* create any pts needed for the user land image */

for(vptr =

round_down

(it_v_reg.start, pd_index_offset)

; vptr < it_v_reg.end;

vptr +

=bit

(pd_index_offset))}

slot_pos_after = ndks_boot.slot_pos_cur;

ndks_boot.bi_frame->userimagepaging =

(sel4_slotregion)

;return vspace_cap;

}

最後由函式create_frames_of_region填充頁表的頁表項,具體可以參看pt的結構體;

取虛擬位址高九位結合ttbr_elx暫存器找到pgd的首位址;

再取虛擬位址九位得到pgde,裡面包含pud的首位址;

再取九位得到pude,裡面包含pd的首位址;

再取九位得到pde,裡面包含pt的首位址;

剩餘的低十二位為頁內位址。

sel4原始碼解析(一) - sel4核心物件

sel4原始碼解析(二) - cspace

sel4原始碼解析(三) - sel4系統呼叫處理流程

sel4原始碼解析(四) - ipc

sel4原始碼解析(五) - notification

sel4原始碼解析(六) - 程序

sel4原始碼解析(七) - vspace

sel4原始碼解析(一) sel4核心物件

sel4是微核心,它只提供了少數供使用者程式使用的機制。不像linux核心提供了大量的服務。本文主要介紹sel4提供的七個核心物件,著重講述了untyped這一核心物件。sel4提供了七個核心物件,這七個核心物件構成了乙個程序基本執行環境。它們分別是 sel4 untyped表示為一塊連續未分配的物...

Celery 原始碼解析七 Worker 之間的互動

序列文章 前面對於 celery 的分布式處理已經做了一些介紹,例如第五章的遠端控制和第六章的event機制,但是,我認為這些分布式都比較簡單,並沒有體現出多例項之間的協同作用,所以,今天就來點更加複雜的,對於多例項直接的互動更多,這就是 gossip 和 mingle。在 celery 的介紹中,...

dubbo原始碼解析 spi 4

aop是老生常談的話題了,思想都不會是一蹴而就的.比如架構設計從all in one到soa也是乙個逐步演進的過程,所以本篇也講講這個aop的思想演進過程.假如我們就以aop最常用的場景事務來說,我們最初的做法是怎麼樣的?public class employeeserviceimpl implem...