Como determino se um programa está sendo executado no espaço do kernel ou no espaço do usuário?

Como determino se um programa está sendo executado no espaço do kernel ou no espaço do usuário?

Eu estava fazendo um sistema operacional Linux do zero. eu me depareiesseartigo, que cria um sistema operacional Linux mínimo que apenas imprime hello world assim que o kernel do Linux é inicializado.

Então, minha pergunta é: em qual espaço [kernel ou espaço do usuário] esse programa helloworld está sendo executado? Minha consciência diz que é o espaço do kernel, então como faço para que ele rode no espaço do usuário?

Para as pessoas que não querem ler aquele artigo extenso, aqui está o que ele faz em resumo.

  • Formatei minha unidade flash USB [/dev/sdb no meu sistema Linux] com formato de arquivo ext4.
  • Montado na pasta /mnt/mylinux.
  • Pastas criadas /boot e /bin nele.
  • Coloquei uma cópia do kernel do Linux [compilei do código-fonte do github.] bzImage na pasta /boot
  • Instalei o grub2 na pasta /boot de /dev/sdb e criei o arquivo grub.cfg para especificar meu programa init.

Meu programa de inicialização.

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

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

Meu programa init é compilado estaticamente e colocado na pasta/bin.

Então, quando eu inicializo esta unidade, ela começa a imprimir: Hello World

insira a descrição da imagem aqui

Responder1

No seu caso, é um espaço do usuário: você usa bibliotecas padrão, então usa a API do espaço do usuário para fazer as coisas.

Se o seu programa foi executado pelo kernel, você tem apenas uma API interna do kernel (então kprintf) e muitas restrições sobre o que você pode fazer. Além disso, você precisa colocar no kernel ou como módulo do kernel. O kernel não executa código externo como espaço do kernel.

Nota: existem casos híbridos, mas sempre iniciados pelo kernel, para processos de longa duração, não para bloquear o kernel. Nesse caso, o código é tratado pelo agendador e fica visível na lista de processos (geralmente números PID baixos, mas não 1).

informação relacionada