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. .