如何判斷程式運行在核心空間還是用戶空間?

如何判斷程式運行在核心空間還是用戶空間?

我正在從頭開始製作 Linux 作業系統。我遇到了文章,它創建了一個最低限度的 Linux 作業系統,一旦 Linux 核心啟動,它只會列印 hello world。

所以我的問題是,這樣的 helloworld 程式在哪個空間[核心或用戶空間]運行?良心說是核心空間,那麼要如何讓它運作在使用者空間呢?

對於不想閱讀那篇冗長文章的人來說,這裡的作用很簡單。

  • 我用 ext4 檔案格式格式化了我的 USB 隨身碟 [Linux 系統上的 /dev/sdb]。
  • 將其安裝到 /mnt/mylinux 資料夾。
  • 在其中建立資料夾 /boot 和 /bin。
  • 將 Linux 核心的副本 [我從 github 原始碼編譯。
  • 將 grub2 安裝在 /dev/sdb 的 /boot 資料夾中,並建立​​ grub.cfg 檔案來指定我的 init 程式。

我的初始化程序。

#include <stdio.h>
#include <unistd.h>

int main(void){
    while(1){
        printf("Hello World\n");
        sleep(1);
    }
}

我的 init 程式是靜態編譯的並放置在 /bin 資料夾中。

所以當我啟動這個驅動器時,它開始列印:Hello World

在此輸入影像描述

答案1

就您而言,它是一個用戶空間:您使用標準庫,因此您使用用戶空間 API 來完成任務。

如果你的程式是由核心執行的,那麼你只有內部核心 API(即 kprintf),並且對你可以執行的操作有很多限制。此外,您需要放入內核或作為內核模組。核心不會將外部程式碼作為內核空間執行。

注意:存在混合情況,但始終由核心啟動,以實現持久進程,而不是阻止核心。在這種情況下,程式碼由調度程序處理,並在進程列表中可見(通常是低 PID 號,但不是 1)。

相關內容