Articles of linux kernel

Qual é a function de “(void) (& _min1 == & _min2)” na macro min no kernel.h?

No kernel.h min é definido como: #define min(x, y) ({ \ typeof(x) _min1 = (x); \ typeof(y) _min2 = (y); \ (void) (&_min1 == &_min2); \ _min1 < _min2 ? _min1 : _min2; }) Eu não entendo o que a linha (void) (&_min1 == &_min2); faz. É algum tipo de verificação ou algo assim?

Noções básicas sobre container_of macro no kernel do Linux

Quando eu estava navegando no kernel do Linux, encontrei uma macro container_of que é definida da seguinte forma: #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \ (type *)( (char *)__mptr – offsetof(type,member) );}) Eu entendo o que o container_of faz, mas o que eu não entendo é a […]

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?