Как определить, запущена ли программа в пространстве ядра или в пространстве пользователя?

Как определить, запущена ли программа в пространстве ядра или в пространстве пользователя?

Я делал ОС Linux с нуля. Я наткнулся наэтотстатья, в которой создается минимальная версия ОС Linux, которая просто выводит «Hello World» после загрузки ядра Linux.

Итак, мой вопрос: в каком пространстве [ядро или пользовательское пространство] запущена такая программа helloworld? Моя совесть говорит, что это пространство ядра, тогда как мне заставить ее работать в пользовательском пространстве?

Для тех, кто не хочет читать эту длинную статью, вот ее краткий обзор.

  • Я отформатировал свой USB-флеш-накопитель [/dev/sdb в моей системе Linux] в файловом формате ext4.
  • Смонтировал его в папку /mnt/mylinux.
  • Создал в нем папки /boot и /bin.
  • Разместил копию ядра Linux [я скомпилировал из исходного кода github.] bzImage в папке /boot
  • Установил grub2 в папку /boot на /dev/sdb и создал файл grub.cfg для указания моей программы инициализации.

Моя программа инициализации.

#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).

Связанный контент