Estaba leyendo un artículo que describe el cambio entre el espacio de usuario y el espacio de kernel que ocurre en una llamada al sistema. El artículo dice
Una aplicación espera la finalización de la llamada del sistema antes de reanudar la ejecución en modo de usuario.
Ahora, hasta ahora estaba asumiendo que algunas llamadas al sistema son blocking
, mientras que otras lo son non-blocking
. Con el comentario anterior, ahora estoy confundido. ¿Significa esto que todas las llamadas al sistema están bloqueando o no he entendido bien un concepto?
operating-systems
os-kernel
Ankit
fuente
fuente
Respuestas:
Parece que estás sobrecargando el término 'bloqueo'.
Cualquier cambio de contexto que realice al kernel, debe esperar a que vuelva al modo de usuario antes de que su aplicación pueda continuar. Esto no es lo que generalmente se llama 'bloqueo'.
En el diseño actual del kernel, las llamadas de bloqueo son llamadas en las que el kernel regresa solo cuando la solicitud está completa (o ocurre un error). Estas llamadas generalmente demoran más tiempo y generalmente hacen que su proceso se programe. Por ejemplo, muchas llamadas IO están bloqueando.
Hay llamadas al sistema que proporcionan E / S asíncronas y no son de bloqueo. Tenga en cuenta que todavía hay un cambio de contexto que ocurre aquí, solo la aplicación tiene que ocuparse de la naturaleza asincrónica de la llamada.
El documento parece apuntar a eliminar este cambio de contexto de un lado a otro (llamadas al sistema sin excepción) e intentar hacer que todas las llamadas sean asíncronas.
fuente