Articles of linux kernel

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 […]

Kernel Linux: exemplo de enganchamento de chamadas do sistema

Eu estou tentando escrever algum código de teste simples como uma demonstração de ligar a tabela de chamada do sistema. “sys_call_table” não é mais exportado na versão 2.6, então eu estou apenas pegando o endereço do arquivo System.map, e eu posso ver que está correto (Olhando através da memory para o endereço que encontrei, eu […]

O que acontece com um identificador de arquivo aberto no Linux se o arquivo apontado for movido, excluir

O que acontece com um identificador de arquivo aberto no Linux se o arquivo apontado receber: Movido para fora -> O identificador de arquivo permanece válido? Excluído -> Isso leva a uma EBADF, indicando um identificador de arquivo inválido? Substituído por um novo arquivo -> O arquivo manipula apontando para este novo arquivo? Substituído por […]

Qual é o número máximo teórico de conexões TCP abertas que uma checkbox Linux moderna pode ter?

Assumindo um desempenho infinito do hardware, uma checkbox Linux pode suportar> 65536 conexões TCP abertas? Eu entendo que o número de portas efêmeras (<65536) limita o número de conexões de um IP local para uma porta em um IP remoto. A tupla (ip local, porta local, ip remoto, porta remota) é o que define com […]

Aumentando o número máximo de conexões tcp / ip no linux

Estou programando um servidor e parece que meu número de conexões está sendo limitado, já que minha largura de banda não está saturada, mesmo quando defini o número de conexões como “ilimitado”. Como posso aumentar ou eliminar um número máximo de conexões que minha checkbox do Ubuntu Linux pode abrir de cada vez? O SO […]

Como ler / gravar arquivos dentro de um módulo do kernel do Linux?

Eu sei todas as discussões sobre por que não se deve ler / escrever arquivos do kernel, em vez disso, como usar / proc ou netlink para fazer isso. Eu quero ler / escrever de qualquer maneira. Eu também li o Driving Me Nuts – coisas que você nunca deveria fazer no Kernel . No […]

Qual é a utilidade de fazer while (0) quando definimos uma macro?

Duplicar Possível: Declarações Do-While e if-else em macros C / C ++ Estou lendo o kernel do Linux e encontrei muitas macros como esta: #define INIT_LIST_HEAD(ptr) do { \ (ptr)->next = (ptr); (ptr)->prev = (ptr); \ } while (0) Por que eles usam isso em vez de defini-lo simplesmente em {}?

Como as macros provável () e improvável () no kernel do Linux funcionam e qual é o benefício delas?

Eu estive procurando por algumas partes do kernel Linux e encontrei chamadas assim: if (unlikely(fd < 0)) { /* Do something */ } ou if (likely(!err)) { /* Do something */ } Eu encontrei a definição deles: #define likely(x) __builtin_expect((x),1) #define unlikely(x) __builtin_expect((x),0) Eu sei que eles são para otimização, mas como eles funcionam? E […]

O bool é um tipo C nativo?

Eu notei que o código do kernel Linux usa bool, mas eu achei que bool era do tipo C ++. O bool é uma extensão C padrão (por exemplo, ISO C90) ou uma extensão GCC?