O unix estava realmente usando apenas uma interrupção suave (int 0x80)? Por quê?

0

Voltando aos dias de x86 (32 bits) (antes do sysenter / sysexit / syscall etc.), o INT 0x80 era usado para invocar ações do kernel de um processo do usuário. De acordo com link , o DOS usou o INT 0x21 para o mesmo propósito. A mesma fonte, entre outros, afirma que os processadores x86 entenderiam até 256 interrupções suaves (0x00 - 0xff). Mesmo que alguns deles sejam bloqueados por uma funcionalidade especial, um SO deve ser capaz de usar mais do que apenas uma interrupção suave. Mas nenhum SO parece fazê-lo. Apenas um é usado? Qual é a razão para esta decisão de design?

    
por K. Nick 02.01.2018 / 15:34

2 respostas

4

Não há interrupções suaves suficientes para todas as chamadas do sistema, portanto, é necessário um parâmetro que identifique a chamada do sistema. Não há motivo para numerar as chamadas do sistema em duas dimensões. Todas as interrupções de software são iguais de qualquer forma, não há algumas que sejam mais adequadas para um tipo específico de chamadas de sistema.

    
por 02.01.2018 / 16:21
0

O Unix para o qual o Linux foi baseado não faz uso específico de interrupções em termos de design.

Na arquitetura x86, chamar uma interrupção faz com que a execução esteja no anel 0. Embora, na realidade, um syscall esteja realmente usando o contexto existente e apenas salve o estado da thread com o primeiro registro (EAX) configurado para o syscall. Os outros registradores são os outros operandos do syscall. Você pode ver porque isso é bem portátil.

Talvez 2-3 mnemônicos sejam salvos pulando essa etapa. Ter todas as syscalls referenciadas como interrupções tornaria o código não portátil e, se fossem necessárias mais de 256, você teria que usar um sistema como este. Uma interrupção suave no x86 é compartilhada com endereços de interrupção de hardware na Tabela de Vetor de Interrupções (IVT). Então, a ideia de usá-los, especialmente em certas configurações de hardware, é totalmente possível.

Além disso, fazer várias interrupções temporárias aumenta as chances de erros de cache, já que um código manipulador de interrupções semelhante teria que ser carregado de diferentes áreas da memória.

    
por 02.01.2018 / 18:19

Tags