Articles of linux kernel

Existe alguma API para determinar o endereço físico do endereço virtual no Linux?

Existe alguma API para determinar o endereço físico do endereço virtual no sistema operacional Linux?

Qual é a diferença entre vmalloc e kmalloc?

Eu pesquisei por aí e descobri que a maioria das pessoas defende o uso de kmalloc , já que é garantido que você obtenha blocos físicos de memory contíguos. No entanto, também parece que o kmalloc pode falhar se um bloco físico contíguo que você deseja não puder ser encontrado. Quais são as vantagens de […]

O que é “: – !!” no código C?

Eu esbarrei neste estranho código de macro em /usr/include/linux/kernel.h : /* Force a compilation error if condition is true, but also produce a result (of value 0 and type size_t), so the expression can be used eg in a structure initializer (or where-ever else comma expressions aren’t permitted). */ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); })) […]

Uso de ponto flutuante no kernel do Linux

Estou lendo “Linux Kernel Development”, de Robert Love, e me deparei com a seguinte passagem: Não (Fácil) Uso do Ponto Flutuante Quando um processo de espaço do usuário usa instruções de ponto flutuante, o kernel gerencia a transição do modo inteiro para o ponto flutuante. O que o kernel precisa fazer ao usar instruções de […]

O que são vdso e vsyscall?

Eu fiz o sudo cat /proc/1/maps -vv Eu estou tentando fazer sentido da saída. Eu posso ver um monte de bibliotecas compartilhadas sendo mapeadas para o segmento de mapeamento de memory conforme o esperado. 7f3c00137000-7f3c00179000 r-xp 00000000 08:01 21233923 /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8 7f3c00179000-7f3c00379000 —p 00042000 08:01 21233923 /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8 7f3c00379000-7f3c0037a000 r–p 00042000 08:01 21233923 /lib/x86_64-linux-gnu/libdbus-1.so.3.5.8 7f3c0037a000-7f3c0037b000 rw-p 00043000 […]

Se os threads compartilham o mesmo PID, como eles podem ser identificados?

Eu tenho uma consulta relacionada à implementação de threads no Linux. O Linux não possui suporte explícito a threads. No userspace, podemos usar uma biblioteca de threads (como o NPTL) para criar threads. Agora, se usarmos o NPTL, ele suportará o mapeamento 1: 1. O kernel usará a function clone() para implementar threads. Suponha que […]

Como usar o netlink socket para se comunicar com um módulo do kernel?

Eu estou tentando escrever um módulo de kernel do Linux que se comunica com o processo do usuário usando o netlink. Eu estou usando netlink porque o programa do usuário que eu quero comunicar se comunica usando apenas sockets e eu não posso mudar isso para adicionar ioctl() ou qualquer coisa. O problema é que […]

Descobrindo qual processo foi morto pelo assassino Linux OOM

Quando o Linux fica sem memory (OOM), o OOM killer escolhe um processo para matar baseado em algumas heurísticas (é uma leitura interessante: http://lwn.net/Articles/317814/ ). Como alguém pode determinar programaticamente quais processos foram mortos recentemente pelo assassino da OOM?

Medir o tempo no Linux – tempo vs relógio vs getrusage vs clock_gettime vs gettimeofday vs timespec_get?

Entre as funções de time , time , clock getrusage , clock_gettime , gettimeofday e timespec_get , quero entender claramente como eles são implementados e quais são seus valores de retorno para saber em qual situação eu tenho que usá-los. Primeiro, precisamos classificar as funções que retornam os valores de relógio de parede para comparar […]

Como depurar o kernel do Linux com o GDB e o QEMU?

Eu sou novo no desenvolvimento do kernel e gostaria de saber como executar / depurar o kernel do linux usando o QEMU e o gdb. Na verdade, estou lendo o livro de Robert Love, mas infelizmente isso não ajuda o leitor sobre como instalar ferramentas adequadas para executar ou depurar o kernel … Então o […]