#menios Acho que o dia mais feliz da minha vida como osdev vai ser quando o gerenciador de memória simplesmente funcionar. É muito "quase" para o meu gosto. Consegui criar um scheduler simples, consegui rodar threads de forma concorrente, mas aí a memória corrompe e desmorona tudo.
#menios eis a linha. cpu_state_t é uma estrutura de dados que armazena o estado atual do processador. cpu_state_p é um ponteiro para cpu_state_t, e um alias para cpu_state_t*. Quando se usa malloc (ou kmalloc, que faz a mesma coisa), você precisa informar a quantidade de bytes que está solicitando para armazenar seus dados. Se vou armazenar uma estrutura do tipo cpu_state_t, preciso passar como parâmetro sizeof(cpu_state_t), que retorna o tamanho da estrutura. Se eu peço o tamanho de cpu_state_p, receberei oito bytes de memória, que é o tamanho de um ponteiro numa arquitetura de 64bits, mas vou gravar uns 80 bytes no lugar, sobrescrevendo as estruturas seguintes, corrompendo a lista ligada que estou usando para ligar os nós de memória e cagando a porra toda. C é simples, mas não é fácil.
@p_balduino valeu; vou perguntar aqui mesmo.. tentei `make build', deu "xorriso : FAILURE : Cannot find in ISO image: -boot_image ... bin_path='/limine-bios-cd.bin' vi que limine-bios-cd.bin realmente não existe. Como faço para gerar esse arquivo? Aqui não tem docker.
@p_balduino sim, rodando linux. Além do bios-cd tive que copiar também o uefi-cd do mesmo diretório. Funcionou! O sistema deu boot no qemu e travou em seguida, mas aí é outra coisa...vlw