Tutorial de {desarrollo} de programación avanzada de Linux Parte 1 Kernel de Linux Parte 2 Guía de programación del módulo del kernel de Linux Parte 3 Guía del programador de Linux Parte 4 Concepto del kernel de Linux Estructura del sistema Parte 5 Estructura del sistema específica del kernel de Linux
Tabla de contenidos Introducción a Raymond Prefacio "Anuncio" del Grupo de Ingeniería de Documentación de Linux Prefacio del traductor Primera parte Prefacio del kernel de Linux Capítulo 1 Conceptos básicos de hardware y software 6 1.1 Conceptos básicos de hardware 6 1.1.1 procesador 7 1.1.2 Memoria 8 1.1.3 Autobús 8 1.1.4 Controladores y periféricos 8 1.1.5 Espacio de direcciones 9 1.1.6 Reloj 9 1.2 Conceptos básicos del software 9 1.2.1 Lenguaje informático 9 1.2.2 Qué es un sistema operativo 11 1.2.3 Estructura de datos del kernel 13 Capítulo 2 Gestión de la memoria 15 2.1 Modelo abstracto de memoria virtual 15 2.1.1 Solicitar paginación 17 2.1.2 Intercambio 17 2.1.3 Memoria virtual compartida 18 2.1.4 Modo de direccionamiento físico y modo de direccionamiento virtual 18 2.1.5 Control de acceso 18 2.2 Almacenamiento en caché 19 2.3 Tabla de páginas de Linux 20 2.4 Asignación y reciclaje de páginas 21 2.4.1 Asignación de páginas 22 2.4.2 Reciclaje de páginas 22 2.5 Mapeo de memoria 22 2.6 Solicitar paginación 23 2.7 Caché de páginas de Linux 24 2.8 Cambio y eliminación de páginas 25 2.8.1 Reducir el tamaño del búfer y de la caché de páginas 25 2.8.2 Intercambio de páginas de memoria compartida de System V 26 2.8.3 Cambiar y retirar páginas 27 2.9 Intercambiar caché 27 2.10 cambio de página 28 Capítulo 3 Proceso 29 3.1 Procesos de Linux 29 3.2 Identificadores 31 3.3 Programación 32 3.4 Documentación 34 3.5 Memoria virtual 35 3.6 Creando un proceso 36 3.7 Tiempo y temporizadores 37 3.8 Ejecutar el programa 38 3.8.1 ELFO 39 3.8.2 Archivos de script 40 Capítulo 4 Mecanismo de comunicación entre procesos 41 4.1 Mecanismo de señalización 41 4.2 Tuberías 42 4.3 Enchufes 44 4.3.1 Mecanismo de comunicación entre procesos del Sistema V 44 4.3.2 Cola de mensajes 44 4.3.3 Semáforo 45 4.3.4 Almacenamiento compartido 47 Capítulo 5 PCI 49 5.1 Espacio de direcciones PCI 49 5.2 Encabezado de configuración PCI 50 5.3 E/S PCI y espacio de direcciones de almacenamiento 51 5.4 Puente PCI-ISA 51 5.5 Puente PCI-PCI 51 5.5.1 Puente PCI-PCI: direcciones de almacenamiento y E/S PCI Ventana al espacio 51 5.5.2 Puente PCI-PCI: Ciclo de configuración PCI y PCI Autobús número 52 5.6 Inicialización de PCI de Linux 53 5.6.1 Estructura de datos PCI del kernel de Linux 53 5.6.2 Controlador de dispositivo PCI 53 5.6.3 Funciones del BIOS PCI 56 5.6.4 Proceso de corrección de PCI 57 Capítulo 6 Manejo de interrupciones y controladores de dispositivos 60 6.1 Interrupciones y manejo de interrupciones 60 6.1.1 Controlador de interrupción programable 61 6.1.2 Inicializar la estructura de datos de procesamiento de interrupciones 61 6.1.3 Manejo de interrupciones 62 6.2 Controladores de dispositivos 63 6.2.1 Prueba e interrupción 64 6.2.2 Acceso directo a memoria (DMA) 65 6.2.3 Memoria 66 6.2.4 Interfaz entre el controlador del dispositivo y el kernel 66 6.2.5 Disco duro 69 6.2.6 Equipo de red 74 Capítulo 7 Sistemas de archivos 77 7.1 El segundo sistema de archivos extendido EXT2 78 7.1.1 Nodo inodo del sistema EXT2 79 7.1.2 Súper bloque en el sistema EXT2 80 7.1.3 Descriptores de grupo para sistemas EXT2 80 7.1.4 Directorio del sistema EXT2 81 7.1.5 Buscar archivos en el sistema de archivos EXT2 81 7.1.6 Cambiar archivos en el sistema de archivos EXT2 Talla 82 7.2 Sistema de archivos virtuales 83 7.2.1 Superbloque del sistema de archivos VFS 84 7.2.2 Nodo inodo del sistema de archivos VFS 84 7.2.3 Registrar el sistema de archivos 85 7.2.4 Montaje del sistema de archivos 85 7.2.5 Encontrar archivos en un sistema de archivos virtual 87 7.2.6 Desmontaje del sistema de archivos 87 7.2.7 Caché de inodos del sistema de archivos VFS 87 7.2.8 Almacenamiento en caché de directorio 88 7.3 Almacenamiento en caché del búfer 88 7.3.1 demonio del kernel bdflush 90 7.3.2 proceso de actualización 90 7.4 sistema de archivos /proc 91 7.5 Archivos de dispositivos especiales 91 Capítulo 8 Red 92 8.1 Descripción general de la red TCP/IP 92 8.2 Jerarquía de red TCP/IP en Linux 95 8.3 Interfaz de conector BSD 96 8.4 Capa de socket de INET 97 8.4.1 Creando un socket BSD 98 8.4.2 Dirección de enlace para INET BSD Socket 99 8.4.3 Establecimiento de la conexión del socket INET BSD 99 8.4.4 Escucha de socket INET BSD 100 8.4.5 Aceptar solicitudes de conexión 100 8.5 capa IP 100 8.5.1 Búfer de socket 100 8.5.2 Recibir mensajes IP 101 8.5.3 Envío de paquetes IP 102 8.5.4 Fragmentación de datos 102 8.6 Protocolo de resolución de direcciones 103 8.7 Enrutamiento IP 104 Capítulo 9 Mecanismos y módulos del kernel 107 9.1 Mecanismo del núcleo 107 9.1.1 Control de la mitad inferior 107 9.1.2 Cola de tareas 108 9.1.3 Temporizadores 109 9.1.4 Cola de espera 110 9.1.5 Bloqueo de giro 110 9.1.6 Semáforo 110 9.2 Módulos 111 9.2.1 Carga del módulo 112 9.2.2 Desinstalación del módulo 113 Capítulo 10 Procesadores 115 10.1X86 115 10.2 BRAZO 115 10.3 Procesador Alfa AXP 115 Capítulo 11 Código fuente del kernel de Linux 117 11.1 Cómo obtener el código fuente del kernel de Linux 117 11.2 Disposición del código fuente del kernel 117 11.3 Por dónde empezar 118 Capítulo 12 Estructuras de datos de Linux 120 Apéndice A Sitios web y FTP útiles 138 Apéndice B Glosario 139 Parte 2 Guía de programación del módulo del kernel de Linux Agradecimientos Prefacio Capítulo 1 Hola, mundo 145 1.1 Makefiles del módulo del kernel 146 1.2 Módulo del kernel de múltiples archivos 147 Capítulo 2 Archivos de dispositivo de caracteres 149 Capítulo 3 Sistema de archivos /proc 158 Capítulo 4 Uso de /proc para entrada 162 Capítulo 5 Uso de archivos de dispositivo para entrada 170 Capítulo 6 Parámetros de inicio 182 Capítulo 7 Llamadas al sistema 185 Capítulo 8 Manejo de bloqueo 190 Capítulo 9 Reemplazo de printk 199 Capítulo 10 Programación de tareas 202 Capítulo 11 Controladores de interrupciones 207 Capítulo 12 Multiprocesamiento simétrico 211 Capítulo 13 Errores comunes 212 Apéndice A Diferencias entre 2.0 y 2.2 213 Apéndice B Otros recursos 214 Apéndice C Da tu evaluación 215 Parte 3 Guía del programador de Linux Capítulo 1 Sistema operativo Linux 219 Capítulo 2 Núcleo de Linux 220 Capítulo 3 Paquete libc de Linux 221 Capítulo 4 Llamadas al sistema 222 Capítulo 5 “Navaja suiza”: ioctl 223 Capítulo 6 Comunicación entre procesos de Linux 224 6.1 Introducción 224 6.2 Tuberías Unix semidúplex 224 6.2.1 Conceptos básicos 224 6.2.2 Creación de canalizaciones en lenguaje C 225 6.2.3 Método sencillo 229 6.2.4 Operaciones atómicas en tuberías 233 6.2.5 Varias cosas a tener en cuenta sobre las tuberías semidúplex Número 233 6.3 Tuberías con nombre 234 6.3.1 Conceptos básicos 234 6.3.2 Creando FIFO 234 6.3.3 Operación FIFO 235 6.3.4 Acción de bloqueo en FIFO 236 6.3.5 Señal SIGPIPE 237 6.4 Sistema V IPC 237 6.4.1 Conceptos básicos 237 6.4.2 Cola de mensajes 239 6.4.3 Semáforo 251 6.4.4 semtool: operaciones interactivas de semáforo Programa 260 6.4.5 Memoria compartida 267 Capítulo 7 Programación de sonido 274 7.1 Programación de altavoces internos 274 7.2 Programación de la tarjeta de sonido 274 Capítulo 8 Gráficos de unidades de caracteres 276 8.1 Funciones de E/S en libc 277 8.1.1 Salida formateada 277 8.1.2 Entrada formateada 278 8.2 biblioteca termcap 278 8.2.1 Prefacio 278 8.2.2 Obtención de la descripción del terminal 279 8.2.3 Ver descripción del terminal 279 8.2.4 capacidades termcap 280 8.3 Introducción a Ncurses 280 8.4 Inicialización 282 8.5 Ventanas 283 8.6 Salida 284 8.6.1 Salida formateada 285 8.6.2 Insertar caracteres/línea 286 8.6.3 Eliminar caracteres/líneas 286 8.6.4 Cuadros y líneas 287 8.6.5 Personajes de fondo 287 8.7 Entrada 288 8.8 Opciones 289 8.8.1 Opciones de salida 289 8.8.2 Opciones de entrada 290 8.8.3 Propiedades de los terminales 291 8.8.4 Usar opciones 291 8.9 Actualizar terminal 292 8.10 Propiedades y colores del vídeo 293 8.11 Cursor y coordenadas de pantalla 294 8.12 Rodando 294 8.13 Teclado 295 8.14 Etiquetas suaves 295 8.15 Varios 295 8.16 Acceso de bajo nivel 296 8.17 Volcado de pantalla 296 8.18 Simulación de Termcap 296 8.19 Función Terminfo 296 8.20 Funciones de depuración 297 8.21 Capacidades de Terminfo 297 8.21.1 Capacidades booleanas 297 8.21.2 Capacidades numéricas 298 8.21.3 Capacidades de cadena 299 8.22 [N]Descripción general de la función Maldiciones 306 Capítulo 9 Programación de puertos de E/S 307 9.1 Programación del mouse 307 9.2 Programación del módem 308 9.3 Programación de la impresora 308 9.4 Programación del joystick 308 Capítulo 10 Portar aplicaciones a Linux 309 10.1 Introducción 309 10.2 Procesamiento de señales 309 10.2.1 Bajo SVR4, BSD y POSIX.1 Señal 310 10.2.2 Opciones de señal de Linux 310 10.2.3 Señales bajo Linux 310 10.2.4 Señales soportadas por Linux 311 10.3 Terminales de E/S 311 10.4 Información y control del proceso 311 10.4.1 proceso kvm 312 10.4.2 sistema de archivos ptrace y /proc 312 10.4.3 Control de procesos bajo Linux 312 10.5 Compilación condicional portátil 313 10.6 Instrucciones complementarias 314 Apéndice Sistema Alfabético Llamadas 315 Parte 4 Resumen de la estructura del sistema del concepto del kernel de Linux 323 Prefacio 324 Capítulo 1 Estructura del sistema 325 1.1 Descripción general del sistema 325 1.2 Objetivos del kernel 325 1.3 Descripción general de la estructura del núcleo 325 1.4 Admite múltiples desarrolladores 327 1.5 Estructura de datos del sistema 328 1.5.1 Lista de tareas 328 1.5.2 Mapeo de memoria 328 1.5.3 Nodos de índice 328 1.5.4 Conexión de datos 329 Capítulo 2 Estructura del sistema de subsistemas 330 2.1 Estructura del sistema del programador de procesos 330 2.1.1 Metas 330 2.1.2 Módulo 330 2.1.3 Expresión de datos 331 2.1.4 Dependencias, flujo de datos y flujo de control 331 2.2 Estructura del sistema administrador de memoria 331 2.2.1 Metas 331 2.2.2 Módulos 331 2.2.3 Representación de datos 331 2.2.4 Flujo de datos, flujo de control y dependencias 332 2.3 Estructura del sistema del sistema de archivos virtual 333 2.3.1 Metas 333 2.3.2 Módulos 333 2.3.3 Representación de datos 333 2.3.4 Flujo de datos, flujo de control y dependencias 334 2.4 Estructura del sistema de interfaz de red 334 2.4.1 Metas 334 2.4.2 Módulos 334 2.4.3 Representación de datos 335 2.4.4 Flujo de datos, flujo de control y dependencias 335 2.5 Estructura del sistema de comunicación entre procesos 335 Capítulo 3 Conclusión 336 Apéndice A Definición de términos 337 Apéndice B Referencias 338 Parte 5 Resumen de la estructura específica del sistema del kernel de Linux 341 Capítulo 1 Prefacio 342 1.1 Metas 342 1.2 Introducción a Linux 342 1.3 Conocimientos previos de la estructura del sistema de software 342 1.4 Métodos y enfoques 343 1.5 Lectores a quienes está destinado este libro 344 1.6 Disposición del capítulo de esta parte 344 Capítulo 2 Estructura del sistema 345 Capítulo 3 Estructura del subsistema 346 3.1 Programador de procesos 346 3.1.1 Metas 346 3.1.2 Interfaz externa 346 3.1.3 Descripción del subsistema 346 3.1.4 Estructura de datos 347 3.1.5 Estructura del subsistema 348 3.1.6 Dependencias del subsistema 348 3.2 Administrador de memoria 348 3.2.1 Metas 348 3.2.2 Interfaz externa 349 3.2.3 Descripción del subsistema 349 3.2.4 Estructura de datos 350 3.2.5 Estructura del subsistema 350 3.2.6 Dependencias del subsistema 351 3.3 Sistema de archivos virtuales 352 3.3.1 Metas 352 3.3.2 Interfaz externa 352 3.3.3 Descripción del subsistema 353 3.3.4 Controladores de dispositivos 353 3.3.5 Sistema de archivos lógico 354 3.3.6 Módulos 354 3.3.7 Estructura de datos 355 3.3.8 Estructura del subsistema 355 3.3.9 Dependencias del subsistema 355 3.4 Comunicación entre procesos 355 3.4.1 Metas 355 3.4.2 Interfaz externa 357 3.4.3 Descripción del subsistema 357 3.4.4 Estructura de datos 358 3.4.5 Estructura del subsistema 359 3.4.6 Dependencias del subsistema 359 3.5 Interfaz de red 360 3.5.1 Metas 360 3.5.2 Interfaz externa 361 3.5.3 Descripción del subsistema 361 3.5.4 Estructura de datos 362 3.5.5 Estructura del subsistema 363 3.5.6 Dependencias del subsistema 363 Capítulo 4 Conclusión 365 Apéndice A Definición de términos 366 Apéndice B Referencias 368 Parte Sexta Apéndice Apéndice A Licencia de copia del proyecto de documento de Linux 372 Apéndice B Licencia pública general GNU 374