2013-11-09 77 views
3

我感到困惑與在RAM存儲器的段,請澄清以下疑慮段RAM存儲器

  1. RAM已被潛入水中用戶空間與內核空間;被該存儲器劃分被O完成/ S或者由H/W(CPU)完成。

  2. 什麼是內核空間的內容;據我瞭解,將只有內核映像,請糾正我,如果我錯了。

  3. 此代碼,數據,堆棧和堆段在哪裏存在?

    a)用戶和內核空間是否有單獨的代碼,數據,堆棧和堆段?

    b)該段由H/W或(O/S)創建。

  4. 我可以找到內核空間和用戶空間佔用的內存量嗎?

    a)有沒有Linux命令(或)系統調用來找到它?

  5. 爲什麼RAM被分成用戶空間和內核空間?

    a)爲了保持內核對應用程序的安全性,我做了這樣的事情嗎?這是唯一的原因。

我是初學者,所以請給我建議一些好書,鏈接和方法來處理這些概念。

+0

你的大多數問題過於寬泛,需要複雜,冗長的答案。我懷疑你會被關閉。多做一些閱讀/谷歌搜索。 –

+0

嘗試一次提出一個問題。我無法選擇我應該在這裏回答哪個問題。 – harper

回答

4

我接受了挑戰,並用很短的答案嘗試:

  1. 執行發生在用戶和內核空間。 BIOS & CPU支持操作系統檢測和分離資源/地址範圍,如主存儲器和設備( - >related question)以建立保護模式。在保護模式下,內存通過虛擬地址空間分隔,虛擬地址空間通過MMU (Memory Management Unit)以頁面方式映射(通常爲4096字節的塊)爲物理內存的實際地址。

    從用戶空間無法直接訪問內存(實模式),必須通過MMU訪問內存,這就像具有訪問保護的透明代理一樣。訪問錯誤被稱爲segmentation fault, access violation, segmentation violation (SIGSEGV),在Java等高級編程語言中抽象爲NullPointerException(NPE)。

    閱讀關於protected modereal mode'rings'

    注意:特殊CPU(如嵌入式系統中)不一定具有MMU,因此可能僅限於特殊操作系統,如µClinuxFreeRTOS。內核也分配緩衝區,驅動程序也是如此(例如磁盤,網絡接口和GPU的IO緩衝區)。

  2. 一般情況下,每個空間和進程/線程存在的資源
    一)內核穿(每線程)的用戶空間堆棧的頂部自己的,受保護的堆棧,並且還單獨的代碼(也「文」 ),數據和堆段。另外,每個流程都有自己的資源。
    b) CPU體系結構有一定的要求(取決於它們提供的支持程度),但最終是創建這些結構的軟件(用於連接的用戶空間庫的內核)。

  3. 每個合理的操作系統都提供了至少一種方法。
    一個)嘗試sudo cat /proc/slabinfo或簡單地sudo slabtop

  4. 讀1.
    一個)主要地,是的,就像用戶空間進程彼此,分離除特殊的技術,如CMA (Cross Memory Attach)快速直接訪問更新的內核。

+1

嗨山姆謝謝花時間回答我的問題,這真的很有幫助。我會回來後做更多的自學。 – user2972122

+0

@artless噪音:感謝您的評論。我真的應該提到MMU,所以我更新了答案。 – Sam