Eu estava lendo um artigo que descreve a alternância entre o espaço do usuário e o espaço do kernel que ocorre em uma chamada do sistema. O artigo diz
Um aplicativo espera a conclusão da chamada do sistema antes de retomar a execução no modo de usuário.
Agora, até agora eu estava assumindo que algumas chamadas do sistema são blocking
, enquanto outras são non-blocking
. Com o comentário acima, agora estou confuso. Isso significa que todas as chamadas do sistema estão bloqueando ou eu entendi mal um conceito?
operating-systems
os-kernel
Ankit
fonte
fonte
Respostas:
Você parece estar sobrecarregando o termo "bloqueio".
Qualquer mudança de contexto que você fizer no kernel, é necessário aguardar que ele volte ao modo de usuário antes que seu aplicativo possa continuar. Isso não é o que geralmente é chamado de 'bloqueio'.
No design atual do kernel, chamadas de bloqueio são chamadas em que o kernel retorna somente quando a solicitação é concluída (ou ocorre um erro). Essas chamadas geralmente levam mais tempo e geralmente levam seu processo a ser agendado. Por exemplo, muitas chamadas de E / S estão bloqueadas.
Há chamadas de sistema que fornecem E / S assíncronas e não bloqueiam. Observe que ainda existe uma alternância de contexto aqui, apenas o aplicativo precisa cuidar da natureza assíncrona da chamada.
O artigo parece ter como objetivo acabar com essa alternância de contexto (chamadas de sistema sem exceção) e tentar fazer todas as chamadas assíncronas.
fonte