Por que alguns manipuladores de eventos de sistemas operacionais são escritos em asm em vez de c?

17

A minha pergunta é por que hoje em dia alguma manipulação de evento do sistema operacional ainda é escrita em linguagem assembly em vez de uma linguagem de nível superior como C, quando o próprio kernel é escrito principalmente em C?

    
por MAKZ 24.02.2015 / 14:19

4 respostas

24

A linguagem abstrai o acesso a registradores da CPU, e um SO ao manipular eventos tem que salvar o contexto, então precisa de acesso aos registradores no ponto do evento, quebrando assim as especificações C.

    
por 24.02.2015 / 21:50
18

C é uma abstração do código de máquina que é executado na máquina (embora muito mais próximo do que a maioria das outras linguagens).

Para essas coisas, instruções de código de máquina que não podem ser expressas em C, e talvez para a otimização extra não fornecida pelo conjunto de compilador C, são usadas principalmente na forma de .

Na árvore do código-fonte do kernel, isso é armazenado em arch/<arch> e include/asm-<arch> , em que <arch> é um nome de arquitetura específico. Na verdade, é apenas uma pequena parte da fonte completa do kernel.

    
por 24.02.2015 / 14:37
6

Você não pode fazer isso em C:)

lgdt[xxxx]
mov eax, cr0
or al, 0x01
mov cr0, eax

Estou tentando entrar no modo protegido x86. Obviamente, eu ainda posso fazer isso em C "emitindo" códigos brutos de máquina, mas ainda no caso de precisar acessar offets precisos - eu estou sem sorte na maior parte do tempo.

O segundo exemplo é o BootLoader. Em sistemas x86, é necessário que o código de boot tradicional tenha exatamente 512 bytes de comprimento e os dois últimos bytes sejam 0xAA e 0x55 (ou 55 AA exatamente), respectivamente ... Assegurando que tal coisa com compiladores C é um pesadelo e o assembler faz o trabalho de uma forma fantástica.

Existem muitos outros casos em que a Assembleia não é apenas preferível - mas é o único meio.

    
por 25.02.2015 / 10:23
-5

o asm é mais fino e geralmente muito mais rápido que o C com bibliotecas, etc., e o SO está lidando com MUITOS eventos o tempo todo. Você quer magro e rápido para esta função.

    
por 24.02.2015 / 22:45