Linux 核心:任務與線程

Linux 核心:任務與線程

當我在閱讀一本書(Linux核心程式設計)時,我發現了一個有趣/令人困惑的段落mm_segment_t addr_limit(其中的成員之一struct_task),如下所示:

mm_segment_t addr_limit;
與舊核心不同,從 2.4 開始,任務(執行緒)也可以位於核心內。這些任務可以存取比使用者空間中的任務更大的位址空間。地址限制描述可以使用任務核心存取的位址空間。

問題:

  1. 在第一點中,它說“(任務)線程還可以在核心中」是有的。這是什麼意思?線程不一定在核心中嗎?

  2. 在第二句中,“這些可以存取比用戶空間中的任務更大的地址空間。這些方法?如果他說的是線程,那麼線程怎麼可能比任務有更大的位址空間呢?

答案1

短語“在內核內”可能指的是核心執行緒核心本身使用它們來執行可以非同步執行的工作。您可以在進程樹中查看這些執行緒的範例:

# ps aux | grep '\[.*\]$' | head
root         2  0.0  0.0      0     0 ?        S    May05   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S    May05   0:03 [ksoftirqd/0]
root         4  0.0  0.0      0     0 ?        S    May05   0:00 [kworker/0:0]
root         5  0.0  0.0      0     0 ?        S    May05   0:00 [kworker/u:0]
root         6  0.0  0.0      0     0 ?        S    May05   0:00 [migration/0]
root         7  0.0  0.0      0     0 ?        S    May05   0:00 [watchdog/0]
root         8  0.0  0.0      0     0 ?        S    May05   0:00 [migration/1]
root         9  0.0  0.0      0     0 ?        S    May05   0:00 [kworker/1:0]
root        10  0.0  0.0      0     0 ?        S    May05   0:02 [ksoftirqd/1]
root        11  0.0  0.0      0     0 ?        S    May05   0:00 [watchdog/1]

此類線程由呼叫 kthread_create() 的核心程式碼建立。這些執行緒在核心模式下運行,執行您期望核心執行的各種任務。

另一方面,「使用者空間中的任務」代表您通常認為的執行緒或進程,透過 fork+exec 或 pthread_create 建立。它們在用戶模式下運行,並在需要核心服務時進行系統呼叫。這裡的措辭有點奇怪,因為當然,核心知道這些任務並維護有關它們的資訊(例如 struct_task ),以便它可以在 CPU 上為它們安排時間。

至於(2),「這些」特別指「內核線程」。我相信內核線程與內核共享相同的地址空間。

相關內容