Como posso determinar se um programa está sendo executado no espaço do Kernel ou no espaço do usuário?

0

Eu estava fazendo um sistema operacional Linux a partir do zero. Eu vim através este artigo , que cria um mínimo de sistema operacional Linux que apenas imprime hello world once linux boot do kernel.

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

Para pessoas que não querem ler esse longo artigo, aqui está o que ele faz em resumo.

  • Formatei minha unidade flash USB [/ dev / sdb no meu sistema linux] com o formato de arquivo ext4.
  • Montado na pasta / mnt / mylinux.
  • Crie pastas / boot e / bin nele.
  • Colocou uma cópia do Linux Kernel [eu compilei a partir do código-fonte do github.] bzImage na pasta / boot
  • Instalado o grub2 na pasta / boot de / dev / sdb e o arquivo grub.cfg criado 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 de inicialização é compilado estaticamente e colocado na pasta / bin.

Então, quando eu inicializo este drive, ele começa a imprimir: Hello World

    
por user3769778 01.12.2017 / 08:27

1 resposta

0

No seu caso, é um espaço de usuário: você usa bibliotecas padrão para usar a API de espaço do usuário para realizar tarefas.

Se o seu programa foi executado pelo kernel, você tem apenas a API interna do kernel (assim kprintf), e muita restrição 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 é manipulado pelo agendador e visível na lista de processos (geralmente números PID baixos, mas não 1).

    
por 01.12.2017 / 11:29