android 设置setmultichoiceitems设置初始化勾选_Linux内核启动:虚拟盘空间设置和内存管理结构初始化...
1. 設置虛擬盤并初始化
接下來main函數將對外設中的虛擬盤區進行設置。 檢查makefile文件中"虛擬盤使用標志"是否設置, 以此確定系統是否使用了虛擬盤(假設有虛擬盤,大小設置為2 MB)。 操作系統從緩沖區的末端起開辟2MB內存空間設置為虛擬盤,主內存起始位置后移2MB至虛擬盤的末端
實現代碼如下
在rd_init()函數中,先要將虛擬盤區的請求項處理函數do_rd_request()請求項函數控制結構blk_dev[7]的第二項掛接。 blk_dev[7]的主要功能是將某一類設備與它對應的請求項處理函數掛鉤。 目前操作系統最多可以管理6類設備。 這個掛接動作意味著以后內核內核能夠通過調用do_rd_request函數處理與虛擬盤相關的請求項操作。掛接之后,將虛擬盤所在的內存區域全部初始化為0。
最后將虛擬盤區的長度值返回。這個返回值將用來重新設置主內存區的起始位置。
2. 初始化內存管理結構mem_map
對主內存區起始位置的重新確定,標志著主內存區和緩沖區的位置和大小已經全都確定,系統 開始調用mem_init()函數。 先對主內存區的管理結構進行設置。
代碼實現如下
系統通過mem_map[]對1MB以上的內存分頁進行管理,記錄一個頁面的使用次數。 mem_init()函數先將所有的內存頁面使用計數均設置成USED(100,即被使用),然后再將主 內存中的所有頁面使用計數全部清零,系統以后只把使用計數為0的頁面視為空閑頁面。系統不對1MB以內的內存空間用這種分頁方法管理,是因為操作系統對內核和用戶進程采用了兩套不同 的分頁管理方法。內核采用分頁管理方法,線性地址和物理地址是完全一樣的,是一一映射的,等價于內核可以直接獲得物理地址。用戶進程線性地址和物理地址差異很大,之間沒有可遞推的 邏輯關系。操作系統目的就是讓用戶進程無法通過線性地址推算出具體的物理地址,讓內核能夠 訪問用戶進程,用戶進程不能訪問其他的用戶進程,更不能訪問內核。 1MB以內是內核代碼和 只有由內核管控的大部分數據所在內存空間,是絕對不允許用戶進程訪問的。 1MB以上,特別是 主內存區主要是用戶進程的代碼、數據所在內存空間,所以采用專門用來管理用戶進程的分頁管理方法。
總結
以上是生活随笔為你收集整理的android 设置setmultichoiceitems设置初始化勾选_Linux内核启动:虚拟盘空间设置和内存管理结构初始化...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php对数组进行合成的函数,php合并数
- 下一篇: 超算和服务器性能,烽火GPU高性能服务器