Necessidade de algumas chamadas do sistema

0

Eu entendo muito bem como a chamada do sistema funciona e a necessidade de chamadas do sistema em geral. No entanto, não entendo por que algumas chamadas do sistema como create (), read () e close () devem ser executadas apenas no modo kernel.

Por exemplo, no arquivo create () e read (), por que isso não acontece no userspace ou no usermode? Como o usuário poderia danificar o sistema criando e lendo um arquivo? Eu tenho a mesma dúvida no caso de uma chamada de sistema close () também.

    
por Zephyr 23.11.2017 / 08:25

2 respostas

1

I don't understand why do some system calls like create() file, read() file and close() should be executed only in kernel mode.

Bem, as chamadas do sistema, por definição, são executadas no modo kernel. No espaço do usuário, geralmente estão disponíveis através de funções de wrapper de bibliotecas que possuem o mesmo nome. De man 2 intro :

A system call is an entry point into the Linux kernel. Usually, system calls are not invoked directly: instead, most system calls have corresponding C library wrapper functions which perform the steps required (e.g., trapping to kernel mode) in order to invoke the system call. Thus, making a system call looks the same as invoking a normal library function.

(veja também man 2 syscall )

Como dito por @dirkt e @StephenKitt nos comentários, as chamadas do sistema que você mencionou precisam ser executadas no espaço do kernel porque elas precisam escrever na tabela de descritores de arquivos, acessar os drivers para E / S de arquivos, verificar direitos de acesso, etc. .

    
por 24.11.2017 / 11:56
0

For example in create() and read() file, why can't it happen in userspace?

Em algumas plataformas (incluindo as baseadas no Linux), é bem possível executar o ES do sistema de arquivos a partir do espaço do usuário. É conhecido como FUSE e você pode ler o Filesystem in Userspace para uma introdução ao tópico.

Existem muitos sistemas de arquivos baseados em FUSE disponíveis, incluindo SSHFS (sistema de arquivos acima de ssh ) e S3QL (sistema de arquivos no armazenamento em nuvem).

O kernel medeia a camada entre o cliente de espaço do usuário (um programa aplicativo) e a implementação do FUSE para que as semânticas do sistema de arquivos sejam validadas e consistentes, mas o código IO real para creat() , open() , read() , write() , fcntl() , close() , etc. é executado a partir de um serviço de espaço do usuário.

    
por 24.11.2017 / 13:12