¿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é ocurre si necesitas hacer algo que la CPU no puede hacer por sí sola, 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 un syscall?
Un 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 syscall:
| Tarea | ¿Puede la CPU hacerlo por sí sola? | ¿Necesita syscall? |
|---|---|---|
| Sumar dos números | Sí | No |
| Mover datos entre registros | Sí | No |
| Imprimir texto en la pantalla | No | Sí |
| Leer la entrada del teclado | No | Sí |
| exit un programa | No | Sí |
| Abrir un archivo | No | Sí |
Cómo funciona un syscall:
- Colocas un número de syscall en
rax(indica al sistema operativo lo que quieres) - Colocas argumentos en otros registros (
rdi,rsi,rdx, etc.) - Ejecutas la instrucción
syscall
- La CPU salta al núcleo del sistema operativo
- El sistema operativo realiza la solicitud
- El sistema operativo devuelve el control a tu programa
Analogía:
Piensa en un syscall como llamar a una oficina gubernamental:
| Paso | Analogía | En ensamblador |
|---|---|---|
| 1 | Decide qué servicio necesitas | Elige el número de syscall (colócalo en rax) |
| 2 | Rellena los formularios | Coloca los argumentos en los registros |
| 3 | Envía la solicitud | Ejecuta syscall |
| 4 | El Gobierno la procesa | El kernel del sistema operativo hace el trabajo |
| 5 | Recibe el resultado | El programa continúa |
Syscalls que aprenderás en este curso:
| Syscall | Number | Qué hace | Capítulo |
|---|---|---|---|
exit | 60 | Termina el programa | Capítulo 4 |
write | 1 | Imprime texto en la 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 se bloquearía. Todo programa que escribas debe terminar con una syscall exit.
mov rax, 60 ; syscall number for exit
mov rdi, 0 ; exit code (0 = success)
syscall ; ask the OS to exitPrué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-64Practica por tu cuenta: Playground de Assembly