PDF de programación - Dentro núcleo Linux 2.4

Imágen de pdf Dentro núcleo Linux 2.4

Dentro núcleo Linux 2.4gráfica de visualizaciones

Actualizado el 28 de Julio del 2017 (Publicado el 14 de Enero del 2017)
1.096 visualizaciones desde el 14 de Enero del 2017
502,6 KB
79 paginas
Creado hace 22a (23/08/2001)
<bluehttp://www.moses.uklinux.net/patches/lki.sgml>
Esta guía es ahora parte del Proyecto de Documentación de Linux y también
puede ser descargada en varios formatos desde:

<bluehttp://www.linuxdoc.org/guides.html>
o puede ser leída en linea (la última versión en Inglés) en:

<bluehttp://www.moses.uklinux.net/patches/lki.html>
Esta documentación es software libre; puedes redistribuirla y/o modifi-
carla bajo los términos de la GNU General Public License tal como ha
sido publicada por la Free Software Foundation en la versión 2 de la Li-
cencia, o (a tu elección) por cualquier versión posterior. El autor esta
trabajando como ingeniero decano del núcleo Linux en VERITAS Software
Ltd y escribió este libro con el propósito de dar soporte al pequeño en-
trenamiento de cursos/charlas que dió sobre este tema,
internamente en
VERITAS. Gracias a:
Juan J. Quintela ([email protected]), Francis
Galiegue ([email protected]), Hakjun Mun ([email protected]),
Matt Kraai
Nicholas Dronen
([email protected]), Samuel S Chessman ([email protected]), Nadeem
Hasan ([email protected]) por varias correcciones y sugerencias.
El
capítulo del Caché de Páginas de Linux fue escrito por Christoph Hellwig
([email protected]). El capítulo sobre los mecanismos IPC fue escrito por
Russell Weight ([email protected]) y Mingming Cao ([email protected])
Dentro del núcleo Linux 2.4

([email protected]),

Tigran Aivazian [email protected]

23 Agosto 2001 (4 Elul 5761)

Contents

1 Arrancando

1.1 Construyendo la Imagen del Núcleo Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2 Arrancando: Vista General

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3 Arrancando: BIOS POST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.4 Arrancando: sector de arranque y configuración . . . . . . . . . . . . . . . . . . . . . . . . . .

1.5 Usando LILO como cargador de arranque . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.6

Inicialización de Alto Nivel

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.7 Arranque SMP en x86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.8 Liberando datos y código de inicialización . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.9 Procesando la linea de comandos del núcleo . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 Procesos y Manejo de Interrupciones

2.1 Estructura de Tareas y Tabla de Procesos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.2 Creación y terminación de tareas e hilos del núcleo . . . . . . . . . . . . . . . . . . . . . . . .

2.3 Planificador Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.4

Implementación de la lista enlazada (de) Linux . . . . . . . . . . . . . . . . . . . . . . . . . .

2.5 Colas de espera . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.6 Cronómetros del núcleo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2.7 Bottom Halves

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2

2

4

4

4

7

8

10

10

11

13

13

16

19

21

23

25

25

1. Arrancando

3.4 Administración de estructuras de ficheros

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

3.5 Administración de Puntos de Montaje y Superbloque . . . . . . . . . . . . . . . . . . . . . . .

3.6 Ejemplo de un Sistema de Ficheros Virtual: pipefs . . . . . . . . . . . . . . . . . . . . . . . .

3.7 Ejemplo de Sistema de Ficheros de Disco: BFS . . . . . . . . . . . . . . . . . . . . . . . . . .

3.8 Dominios de Ejecución y Formatos Binarios . . . . . . . . . . . . . . . . . . . . . . . . . . . .

4 Memoria Intermedia de Páginas Linux

5 Mecanismos IPC

5.1 Semáforos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.1.1

Interfaces de la Llamada al sistema de los Semáforos . . . . . . . . . . . . . . . . . . .

5.1.2 Estructuras Específicas de Soporte de Semáforos . . . . . . . . . . . . . . . . . . . . .

5.1.3 Funciones de Soporte de Semáforos . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.2 Colas de Mensajes

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.2.1

Interfaces de las llamadas al sistema de Colas . . . . . . . . . . . . . . . . . . . . . . .

5.2.2 Estructuras Específicas de Mensajes . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.2.3 Funciones de Soporte de Mensajes

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.3 Memoria Compartida

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.3.1

Interfaces de las llamadas al sistema de la Memoria Compartida . . . . . . . . . . . .

5.3.2 Estructuras de Soporte de Memoria Compartida . . . . . . . . . . . . . . . . . . . . .

5.3.3 Funciones de Soporte De Memoria Compartida . . . . . . . . . . . . . . . . . . . . . .

5.4 Primitivas IPC de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.4.1 Primitivas IPC de Linux Genéricas usadas con Semáforos, Mensajes y Memoria Com-
partida . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

5.4.2 Estructuras Genéricas IPC usadas con Semáforos, Mensajes, y Memoria Compartida .

6 Sobre la traducción

1 Arrancando

2

42

45

49

51

53

54

56

57

57

59

60

65

65

68

70

72

72

74

75

77

77

78

79

1.1 Construyendo la Imagen del Núcleo Linux

Esta sección explica los pasos dados durante la compilación del núcleo Linux y la salida producida en cada
etapa. El proceso de construcción depende de la arquitectura, por lo tanto me gustaría enfatizar que sólo
consideraremos la construcción de un núcleo Linux/x86.

Cuando el usuario escribe ’make zImage’ o ’make bzImage’ la imagen inicializable del núcleo resultante es
almacenado como arch/i386/boot/zImage o arch/i386/boot/bzImage respectivamente. Aquí está como
es construida la imagen:

1. Los archivos fuente en C y ensamblador son compilados en formato de objetos reasignables ELF (.o)

y algunos de ellos son agrupados lógicamente en archivos (.a) usando ar(1).

1. Arrancando

3

2. Usando ld(1), los anteriores .o y .a son enlazados en vmlinux, el cual es un fichero ejecutable ELF

32-bits LSB 80386 estáticamente enlazado al que no se le han eliminado los símbolos de depuración.

3. System.map es producido por nm vmlinux, donde los símbolos irrelevantes o que no interesan son

desechados.

4. Se entra en el directorio arch/i386/boot.

5. El código de ensamblador del sector de arranque bootsect.S es preprocesado con o sin -
D BIG KERNEL , dependiendo de cuando el objetivo es bzImage o zImage, en bbootsect.s
o bootsect.s respectivamente.

6. bbootsect.s es ensamblado y entonces convertido en la forma ’raw binary’ llamada bbootsect (o

bootsect.s ensamblado y convertido a raw en bootsect para zImage).

7. El código de configuración setup.S (setup.S incluye video.S) es preprocesado en bsetup.s para
bzImage o setup.s para zImage. De la misma forma que el código del sector de arranque, la diferencia
radica en que -D BIG KERNEL está presente para bzImage. El resultado es entonces convertido
en la forma ’raw binary’ llamada bsetup.

8. Se entra en el directorio arch/i386/boot/compressed y se convierte /usr/src/linux/vmlinux a
$tmppiggy (nombre temporal) en el formato binario raw, borrando las secciones ELF .note y .comment.

9. gzip -9 < $tmppiggy > $tmppiggy.gz

10. Se enlaza $tmppiggy.gz en ELF reasignable (ld -r) piggy.o.

11. Compila

las

rutinas

misc.c
arch/i386/boot/compressed) en los objetos ELF head.o y misc.o.

head.S

compresión

de

y

(todavía

en

el

directorio

12. Se enlazan todas ellas: head.o, misc.o y piggy.o en bvmlinux (o vmlinux para zImage, ¡no confundas
esto con /usr/src/linux/vmlinux!). Destacar la diferencia entre -Ttext 0x1000 usado para vmlinux
y -Ttext 0x100000 para bvmlinux, esto es, el cargador de compresión para bzImage es cargado más
arriba.

13. Se convierte bvmlinux a ’raw binary’ bvmlinux.out borrando las secciones ELF .note y .comment.

14. Se vuelve atrás al directorio arch/i386/boot y, usando el programa tools/build, se concatenan todos
ellos: bbootsect, bsetup y compressed/bvmlinux.out en bzImage (borra la ’b’ extra anterior para
zImage). Esto escribe variables importantes como setup sects y root dev al final del sector de
arranque.

El tamaño del sector de arranque es siempre de 512 bytes. El tamaño de la configuración debe ser mayor
que 4 sectores, pero está limitado superiormente sobre los 12k - la regla es:

0x4000 bytes >= 512 + sectores configuración * 512 + espacio para la pila mientras está funcionando el
sector de arranque/configuración

Veremos más tarde de dónde viene esta limitación.

El límite superior en el tamaño de bzImage producido en este paso está sobre los 2.5M para arrancarcon
LILO y 0xFFFF párrafos ((0xFFFF0 = 1048560 bytes) para arrancar imágenes directamentee, por ejemplo
desde un diskette o CD-ROM (con el modo de emulación El-Torito).

Destacar que mientras que tools/build valida el tamaño del sector de arranque, la imagen del núcleo
y el límite inferior del tamaño de la configuración, no chequea el límite *superior* de dicho tamaño de
configuración. Entonces, es fácil construir un núcleo defectuoso justamente sumándole algún gran ”.espacio”
al final de setup.S.

1. Arrancando

4

1.2 Arrancando: Vista General

Los detalles del proceso de arranque son específicos de cada arquitectura, por lo tanto centraremos nuestra
atención en la arquitectura IBM PC/IA32. Debido al diseño antiguo y a la compatibilidad hacia atrás, el
firmware del PC arranca el sistema operativo a la vieja usanza. Este proceso puede ser separado en las
siguientes seis etapas l
  • Links de descarga
http://lwp-l.com/pdf1323

Comentarios de: Dentro núcleo Linux 2.4 (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad