¿Qué es una Syscall?
Parte de la sección Fundamentos del Journey de Assembly de Coddy — lección 31 de 45.
Has escrito instrucciones de ensamblador como mov y lea. Estas instrucciones se ejecutan directamente en la CPU. Pero, ¿qué pasa si necesitas hacer algo que la CPU no puede hacer por sí misma, como imprimir en la pantalla, leer del teclado o salir de un programa?
Para estas tareas, necesitas el sistema operativo (Linux, en este curso).
¿Qué es una syscall?
Una syscall (llamada al sistema) es una solicitud de tu programa al sistema operativo. Es la forma en que le pides al SO que haga algo por ti.
Por qué necesitas syscalls:
| Tarea | ¿Puede la CPU hacerlo sola? | ¿Necesita syscall? |
|---|---|---|
| Sumar dos números | Sí | No |
| Mover datos entre registros | Sí | No |
| Imprimir texto en pantalla | No | Sí |
| Leer entrada del teclado | No | Sí |
| Salir de un programa | No | Sí |
| Abrir un archivo | No | Sí |
Cómo funciona una syscall:
- Colocas un número de syscall en
rax(le dice al SO lo que quieres) - Colocas argumentos en otros registros (
rdi,rsi,rdx, etc.) - Ejecutas la instrucción
syscall
- La CPU salta al kernel del SO
- El SO realiza la solicitud
- El SO devuelve el control a su programa
Analogía:
Piense en una syscall como si llamara a una oficina gubernamental:
| Paso | Analogía | En ensamblador |
|---|---|---|
| 1 | Decida qué servicio necesita | Elija el número de syscall (póngalo en rax) |
| 2 | Complete los formularios | Ponga los argumentos en los registros |
| 3 | Envíe la solicitud | Ejecute syscall |
| 4 | El gobierno la procesa | El kernel del SO hace el trabajo |
| 5 | Reciba su resultado | El programa continúa |
Syscalls que aprenderás en este curso:
| Syscall | Número | Qué hace | Capítulo |
|---|---|---|---|
exit | 60 | Finaliza el programa | Capítulo 4 |
write | 1 | Imprime texto en pantalla | Capítulo 5 |
La syscall más importante por ahora: <strong>exit</strong>
Sin exit, tu programa seguiría ejecutándose para siempre o fallaría. Cada programa que escribas debe terminar con una syscall exit.
mov rax, 60 ; número de llamada al sistema para salir
mov rdi, 0 ; código de salida (0 = éxito)
syscall ; solicitar al sistema operativo salirPruébalo tú mismo
Esta lección no incluye un desafío de código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1La máquina
¿Qué es la CPU?MemoriaRegistros vs. MemoriaCómo funcionan las instruccionesPatrón de dos archivosLa arquitectura x86-64