簡體   English   中英

術語“用戶空間”和“內核空間”是指物理內存嗎?

[英]Does the terms “user space” and “kernel space” refer to physical memory?

當我們使用術語“用戶空間”時,我們是指物理內存中包含用戶進程的代碼和數據的區域,還是指每個進程具有3 GB的虛擬內存?

我們使用術語“內核空間”,我們是指物理內存中包含內核代碼和數據的區域,還是指每個進程擁有的1 GB虛擬內存?

術語“內核空間”和“用戶空間”並不特指虛擬或物理內存。 從概念上講,如果你說'內核空間'是指每個進程有1GB的虛擬內存,它仍然與引用內核代碼和駐留在物理內存中的數據相同,因為1GB的虛擬內存被映射到持有內核的物理內存代碼和數據。

我們使用術語“內核空間”和“用戶空間”來指代誰有權訪問內存的哪一部分。 “內核空間”指的是內核可以訪問的內存,而“用戶空間”指的是相應的用戶進程和內核都可以訪問的內存。

它根本沒有真正涉及地址空間。

用戶空間:處理器在無特權的上下文中執行某些操作。

內核空間:處理器在特權上下文中執行某些操作。

在特權環境中,一切都被允許,在無特權的環境中,一些處理器功能是有限的。 這是在硬件中實現的,因此處理器必須至少支持兩種Linux模式。

因此,要從用戶空間切換到內核空間,您需要切換上下文(使用系統調用)。

您可以在內核空間內分配虛擬內存( vmalloc )和物理內存( kmalloc ),因此它與內存無直接關系。

在用戶空間中,您只能分配虛擬內存( vmalloc = malloc )。

“用戶空間”和“內核空間”指的是邏輯地址的范圍。

內核空間對於所有進程都是相同的,而用戶空間對於每個進程都是唯一的。 但是,用戶地址空間可以共享映射到物理內存。

理論上,兩個進程可以具有相同的用戶空間,但這在實踐中不會發生。

流程概念方面

我們可以說一個進程可以在“內核空間”或“用戶空間”中運行,而不是同時運行。 通常,進程在“用戶空間”中運行。 如果進程需要訪問受保護資源,它應該跳轉到“內核空間”,因為只有內核才有權訪問受保護資源。 為此,我們必須使用系統調用。

地址空間而言

我們可以說(虛擬)內存可以位於“內核(地址)空間”或“用戶(地址)空間”中。 在32位普通linux系統中,用戶地址空間范圍是[0,0xbfffffff] ,內核地址空間是[0xc0000000, 0xffffffff]

你的部分是正確的。 系統內存分為以下兩種類型的內存:

用戶空間是用戶進程運行的系統內存的一部分。 這與內核空間形成對比,內核空間是內核執行並提供其服務的內存部分。

存儲器的內容由專用RAM(隨機存取存儲器)VLSI(超大規模集成電路)半導體芯片組成,可以極高速度訪問(即讀取和寫入),但僅暫時保留

內核空間是構成計算機操作系統核心的內存。 它實際上是一個控制所有其他進程的進程,它可以完全控制系統上發生的所有事情。 這包括管理硬件(管理設備)和軟件(用戶空間內的單個用戶進程)的系統資源,防止它們相互干擾。它基本上是運行操作系統的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM