Linux y teoria de sistemas operativos

De Jose Castillo Aliaga
Ir a la navegación Ir a la búsqueda

Linux es un buen sistema operativo para aprender teoría de los sistemas operativos observando su funcionamiento. En este texto, vamos a usar comandos de la terminal de Linux para demostrar los conceptos teóricos de los sistemas operativos.


Un sistema operativo intenta simplificar el uso del ordenador a los usuarios. Para ello introduce conceptos abstractos como los procesos, los ficheros, la terminal... En realidad, la máquina es mucho más difícil de tratar y, curiosamente, más simple. ¿Cómo puede ser más simple y más difícil al mismo tiempo? El sistema operativo proporciona multitud de herramientas programadas con unas pocas instrucciones de máquina. El resultado es más parecido al lenguaje verbal o visual humano que a secuencias de bits.


Código C vs Ensamblador

El lenguaje C es el lenguaje con el que se programa el núcleo del sistema operativo. Es un lenguaje de alto nivel, aunque permite hacer cosas de muy bajo nivel. Esto quiere decir que es fácil de programar, ya que se parece al lenguaje humano (inglés). Para que lo entienda la máquina ha de ser compilado. El sistema operativo permite al programador olvidar cosas tan complejas como el acceso a memória, a la E/S...

El lenguaje máquina se compone de instrucciones simples codificadas según el tamaño de la palabra (32 o 64 bits, por ejemplo) Estas instrucciones se guardan en binario, como todo. Entenderlas es muy complicado, pero se simplifica un poco si usamos ensamblador. Este lenguaje usa palabras para cada instrucción y otras abstracciones que permiten que sea más fácil de aprender y memorizar.

Veamos una demostración de cómo programar en un lenguaje de alto nivel como C es más fácil que hacerlo en lenguaje máquina o ensamblador.

Tenemos el clásico hello world:

#include<stdio.h>

int main(int arg_count,char ** arg_values)
{
 printf("Hello World\n");
 return 0;
}

El significado de cada línea lo puedes encontrar en cualquier manual de c. Pero casi se puede entender todo si sabes un poco de inglés. Si lo compilamos:

$ gcc hello.c -o hello
$ ./hello
Hello World

Vemos que funciona.

En Linux tenemos a nuestra disposición algunas herramientas para ver el contenido binario de un fichero compilado. Podemos usar xxd, que nos lo muestra en hexadecimal:


0000000: 7f45 4c46 0101 0100 0000 0000 0000 0000  .ELF............
0000010: 0200 0300 0100 0000 2083 0408 3400 0000  ........ ...4...
0000020: 3c11 0000 0000 0000 3400 2000 0900 2800  <.......4. ...(.
0000030: 1e00 1b00 0600 0000 3400 0000 3480 0408  ........4...4...
0000040: 3480 0408 2001 0000 2001 0000 0500 0000  4... ... .......
0000050: 0400 0000 0300 0000 5401 0000 5481 0408  ........T...T...
0000060: 5481 0408 1300 0000 1300 0000 0400 0000  T...............
0000070: 0100 0000 0100 0000 0000 0000 0080 0408  ................
0000080: 0080 0408 c405 0000 c405 0000 0500 0000  ................
0000090: 0010 0000 0100 0000 140f 0000 149f 0408  ................
00000a0: 149f 0408 0001 0000 0801 0000 0600 0000  ................
00000b0: 0010 0000 0200 0000 280f 0000 289f 0408  ........(...(...
00000c0: 289f 0408 c800 0000 c800 0000 0600 0000  (...............
00000d0: 0400 0000 0400 0000 6801 0000 6881 0408  ........h...h...
00000e0: 6881 0408 4400 0000 4400 0000 0400 0000  h...D...D.......
00000f0: 0400 0000 50e5 7464 cc04 0000 cc84 0408  ....P.td........
0000100: cc84 0408 3400 0000 3400 0000 0400 0000  ....4...4.......
0000110: 0400 0000 51e5 7464 0000 0000 0000 0000  ....Q.td........
0000120: 0000 0000 0000 0000 0000 0000 0600 0000  ................
0000130: 0400 0000 52e5 7464 140f 0000 149f 0408  ....R.td........
0000140: 149f 0408 ec00 0000 ec00 0000 0400 0000  ................
0000150: 0100 0000 2f6c 6962 2f6c 642d 6c69 6e75  ..../lib/ld-linu
0000160: 782e 736f 2e32 0000 0400 0000 1000 0000  x.so.2..........
0000170: 0100 0000 474e 5500 0000 0000 0200 0000  ....GNU.........
0000180: 0600 0000 1800 0000 0400 0000 1400 0000  ................
0000190: 0300 0000 474e 5500 deb8 688e 30c2 df19  ....GNU...h.0...
00001a0: 628b 19b1 de36 d36b 2923 3147 0200 0000  b....6.k)#1G....
00001b0: 0400 0000 0100 0000 0500 0000 0020 0020  ............. . 
00001c0: 0000 0000 0400 0000 ad4b e3c0 0000 0000  .........K......
00001d0: 0000 0000 0000 0000 0000 0000 2900 0000  ............)...
00001e0: 0000 0000 0000 0000 1200 0000 0100 0000  ................
00001f0: 0000 0000 0000 0000 2000 0000 2e00 0000  ........ .......
0000200: 0000 0000 0000 0000 1200 0000 1a00 0000  ................
0000210: bc84 0408 0400 0000 1100 0f00 005f 5f67  .............__g
0000220: 6d6f 6e5f 7374 6172 745f 5f00 6c69 6263  mon_start__.libc
0000230: 2e73 6f2e 3600 5f49 4f5f 7374 6469 6e5f  .so.6._IO_stdin_
0000240: 7573 6564 0070 7574 7300 5f5f 6c69 6263  used.puts.__libc
0000250: 5f73 7461 7274 5f6d 6169 6e00 474c 4942  _start_main.GLIB
0000260: 435f 322e 3000 0000 0200 0000 0200 0100  C_2.0...........
0000270: 0100 0100 1000 0000 1000 0000 0000 0000  ................
0000280: 1069 690d 0000 0200 4000 0000 0000 0000  .ii.....@.......
0000290: f09f 0408 0602 0000 00a0 0408 0701 0000  ................
00002a0: 04a0 0408 0702 0000 08a0 0408 0703 0000  ................
00002b0: 5383 ec08 e800 0000 005b 81c3 3b1d 0000  S........[..;...
00002c0: 8b83 fcff ffff 85c0 7405 e831 0000 00e8  ........t..1....
00002d0: dc00 0000 e897 0100 0083 c408 5bc3 0000  ............[...
00002e0: ff35 f89f 0408 ff25 fc9f 0408 0000 0000  .5.....%........
00002f0: ff25 00a0 0408 6800 0000 00e9 e0ff ffff  .%....h.........
0000300: ff25 04a0 0408 6808 0000 00e9 d0ff ffff  .%....h.........
0000310: ff25 08a0 0408 6810 0000 00e9 c0ff ffff  .%....h.........
0000320: 31ed 5e89 e183 e4f0 5054 5268 6084 0408  1.^.....PTRh`...
0000330: 68f0 8304 0851 5668 d483 0408 e8cf ffff  h....QVh........
0000340: fff4 9090 9090 9090 9090 9090 9090 9090  ................
0000350: 5589 e553 83ec 0480 3d14 a004 0800 753f  U..S....=.....u?
0000360: a118 a004 08bb 209f 0408 81eb 1c9f 0408  ...... .........
0000370: c1fb 0283 eb01 39d8 731e 8db6 0000 0000  ......9.s.......
0000380: 83c0 01a3 18a0 0408 ff14 851c 9f04 08a1  ................
0000390: 18a0 0408 39d8 72e8 c605 14a0 0408 0183  ....9.r.........
00003a0: c404 5b5d c38d 7426 008d bc27 0000 0000  ..[]..t&...'....
00003b0: 5589 e583 ec18 a124 9f04 0885 c074 12b8  U......$.....t..
00003c0: 0000 0000 85c0 7409 c704 2424 9f04 08ff  ......t...$$....
00003d0: d0c9 c390 5589 e583 e4f0 83ec 10c7 0424  ....U..........$
00003e0: c084 0408 e807 ffff ffb8 0000 0000 c9c3  ................
00003f0: 5557 5653 e869 0000 0081 c3fb 1b00 0083  UWVS.i..........
0000400: ec1c 8b6c 2430 8dbb 20ff ffff e89f feff  ...l$0.. .......
0000410: ff8d 8320 ffff ff29 c7c1 ff02 85ff 7429  ... ...)......t)
0000420: 31f6 8db6 0000 0000 8b44 2438 892c 2489  1........D$8.,$.
0000430: 4424 088b 4424 3489 4424 04ff 94b3 20ff  D$..D$4.D$.... .
0000440: ffff 83c6 0139 fe75 df83 c41c 5b5e 5f5d  .....9.u....[^_]
0000450: c3eb 0d90 9090 9090 9090 9090 9090 9090  ................
0000460: f3c3 8b1c 24c3 9090 9090 9090 9090 9090  ....$...........
0000470: 5589 e553 83ec 04a1 149f 0408 83f8 ff74  U..S...........t
0000480: 13bb 149f 0408 6690 83eb 04ff d08b 0383  ......f.........
0000490: f8ff 75f4 83c4 045b 5dc3 9090 5383 ec08  ..u....[]...S...
00004a0: e800 0000 005b 81c3 4f1b 0000 e89f feff  .....[..O.......
00004b0: ff83 c408 5bc3 0000 0300 0000 0100 0200  ....[...........
00004c0: 4865 6c6c 6f20 576f 726c 6400 011b 033b  Hello World....;
00004d0: 3000 0000 0500 0000 14fe ffff 4c00 0000  0...........L...
00004e0: 08ff ffff 7000 0000 24ff ffff 9000 0000  ....p...$.......
00004f0: 94ff ffff cc00 0000 96ff ffff e000 0000  ................
0000500: 1400 0000 0000 0000 017a 5200 017c 0801  .........zR..|..
0000510: 1b0c 0404 8801 0000 2000 0000 1c00 0000  ........ .......
0000520: c0fd ffff 4000 0000 000e 0846 0e0c 4a0f  ....@......F..J.
0000530: 0b74 0478 003f 1a3b 2a32 2422 1c00 0000  .t.x.?.;*2$"....
0000540: 4000 0000 90fe ffff 1c00 0000 0041 0e08  @............A..
0000550: 8502 420d 0558 c50c 0404 0000 3800 0000  ..B..X......8...
0000560: 6000 0000 8cfe ffff 6100 0000 0041 0e08  `.......a....A..
0000570: 8502 410e 0c87 0341 0e10 8604 410e 1483  ..A....A....A...
0000580: 054e 0e30 024a 0e14 410e 10c3 410e 0cc6  .N.0.J..A...A...
0000590: 410e 08c7 410e 04c5 1000 0000 9c00 0000  A...A...........
00005a0: c0fe ffff 0200 0000 0000 0000 1000 0000  ................
00005b0: b000 0000 aefe ffff 0400 0000 0000 0000  ................
00005c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00005d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00005e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00005f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000600: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000610: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000620: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000630: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000640: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000650: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000660: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000670: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000680: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000690: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00006a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00006b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00006c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00006d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00006e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00006f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000700: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000710: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000720: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000730: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000740: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000750: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000760: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000770: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000780: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000790: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00007a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00007b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00007c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00007d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00007e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00007f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000800: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000810: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000820: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000830: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000840: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000850: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000860: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000870: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000880: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000890: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00008f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000900: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000910: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000920: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000930: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000940: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000950: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000960: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000970: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000980: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000990: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00009a0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00009b0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00009c0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00009d0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00009e0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
00009f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000a00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000a10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000a20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000a30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000a40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000a50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000a60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000a70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000a80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000a90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000aa0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ab0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ac0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ad0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ae0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000af0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000b00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000b10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000b20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000b30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000b40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000b50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000b60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000b70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000b80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000b90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ba0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000bb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000bc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000bd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000be0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000bf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000c00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000c10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000c20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000c30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000c40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000c50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000c60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000c70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000c80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000c90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ca0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000cb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000cc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000cd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ce0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000cf0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000d00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000d10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000d20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000d30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000d40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000d50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000d60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000d70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000d80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000d90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000da0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000db0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000dc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000dd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000de0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000df0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000e00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000e10: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000e20: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000e30: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000e40: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000e50: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000e60: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000e70: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000e80: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000e90: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ea0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000eb0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ec0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ed0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ee0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ef0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000f00: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000f10: 0000 0000 ffff ffff 0000 0000 ffff ffff  ................
0000f20: 0000 0000 0000 0000 0100 0000 1000 0000  ................
0000f30: 0c00 0000 b082 0408 0d00 0000 9c84 0408  ................
0000f40: f5fe ff6f ac81 0408 0500 0000 1c82 0408  ...o............
0000f50: 0600 0000 cc81 0408 0a00 0000 4a00 0000  ............J...
0000f60: 0b00 0000 1000 0000 1500 0000 0000 0000  ................
0000f70: 0300 0000 f49f 0408 0200 0000 1800 0000  ................
0000f80: 1400 0000 1100 0000 1700 0000 9882 0408  ................
0000f90: 1100 0000 9082 0408 1200 0000 0800 0000  ................
0000fa0: 1300 0000 0800 0000 feff ff6f 7082 0408  ...........op...
0000fb0: ffff ff6f 0100 0000 f0ff ff6f 6682 0408  ...o.......of...
0000fc0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000fd0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000fe0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0000ff0: 0000 0000 289f 0408 0000 0000 0000 0000  ....(...........
0001000: f682 0408 0683 0408 1683 0408 0000 0000  ................
0001010: 0000 0000 4743 433a 2028 5562 756e 7475  ....GCC: (Ubuntu
0001020: 2f4c 696e 6172 6f20 342e 362e 332d 3175  /Linaro 4.6.3-1u
0001030: 6275 6e74 7535 2920 342e 362e 3300 002e  buntu5) 4.6.3...
0001040: 7379 6d74 6162 002e 7374 7274 6162 002e  symtab..strtab..
0001050: 7368 7374 7274 6162 002e 696e 7465 7270  shstrtab..interp
0001060: 002e 6e6f 7465 2e41 4249 2d74 6167 002e  ..note.ABI-tag..
0001070: 6e6f 7465 2e67 6e75 2e62 7569 6c64 2d69  note.gnu.build-i
0001080: 6400 2e67 6e75 2e68 6173 6800 2e64 796e  d..gnu.hash..dyn
0001090: 7379 6d00 2e64 796e 7374 7200 2e67 6e75  sym..dynstr..gnu
00010a0: 2e76 6572 7369 6f6e 002e 676e 752e 7665  .version..gnu.ve
00010b0: 7273 696f 6e5f 7200 2e72 656c 2e64 796e  rsion_r..rel.dyn
00010c0: 002e 7265 6c2e 706c 7400 2e69 6e69 7400  ..rel.plt..init.
00010d0: 2e74 6578 7400 2e66 696e 6900 2e72 6f64  .text..fini..rod
00010e0: 6174 6100 2e65 685f 6672 616d 655f 6864  ata..eh_frame_hd
00010f0: 7200 2e65 685f 6672 616d 6500 2e63 746f  r..eh_frame..cto
0001100: 7273 002e 6474 6f72 7300 2e6a 6372 002e  rs..dtors..jcr..
0001110: 6479 6e61 6d69 6300 2e67 6f74 002e 676f  dynamic..got..go
0001120: 742e 706c 7400 2e64 6174 6100 2e62 7373  t.plt..data..bss
0001130: 002e 636f 6d6d 656e 7400 0000 0000 0000  ..comment.......
0001140: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0001150: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0001160: 0000 0000 1b00 0000 0100 0000 0200 0000  ................
0001170: 5481 0408 5401 0000 1300 0000 0000 0000  T...T...........
0001180: 0000 0000 0100 0000 0000 0000 2300 0000  ............#...
0001190: 0700 0000 0200 0000 6881 0408 6801 0000  ........h...h...
00011a0: 2000 0000 0000 0000 0000 0000 0400 0000   ...............
00011b0: 0000 0000 3100 0000 0700 0000 0200 0000  ....1...........
00011c0: 8881 0408 8801 0000 2400 0000 0000 0000  ........$.......
00011d0: 0000 0000 0400 0000 0000 0000 4400 0000  ............D...
00011e0: f6ff ff6f 0200 0000 ac81 0408 ac01 0000  ...o............
00011f0: 2000 0000 0500 0000 0000 0000 0400 0000   ...............
0001200: 0400 0000 4e00 0000 0b00 0000 0200 0000  ....N...........
0001210: cc81 0408 cc01 0000 5000 0000 0600 0000  ........P.......
0001220: 0100 0000 0400 0000 1000 0000 5600 0000  ............V...
0001230: 0300 0000 0200 0000 1c82 0408 1c02 0000  ................
0001240: 4a00 0000 0000 0000 0000 0000 0100 0000  J...............
0001250: 0000 0000 5e00 0000 ffff ff6f 0200 0000  ....^......o....
0001260: 6682 0408 6602 0000 0a00 0000 0500 0000  f...f...........
0001270: 0000 0000 0200 0000 0200 0000 6b00 0000  ............k...
0001280: feff ff6f 0200 0000 7082 0408 7002 0000  ...o....p...p...
0001290: 2000 0000 0600 0000 0100 0000 0400 0000   ...............
00012a0: 0000 0000 7a00 0000 0900 0000 0200 0000  ....z...........
00012b0: 9082 0408 9002 0000 0800 0000 0500 0000  ................
00012c0: 0000 0000 0400 0000 0800 0000 8300 0000  ................
00012d0: 0900 0000 0200 0000 9882 0408 9802 0000  ................
00012e0: 1800 0000 0500 0000 0c00 0000 0400 0000  ................
00012f0: 0800 0000 8c00 0000 0100 0000 0600 0000  ................
0001300: b082 0408 b002 0000 2e00 0000 0000 0000  ................
0001310: 0000 0000 0400 0000 0000 0000 8700 0000  ................
0001320: 0100 0000 0600 0000 e082 0408 e002 0000  ................
0001330: 4000 0000 0000 0000 0000 0000 1000 0000  @...............
0001340: 0400 0000 9200 0000 0100 0000 0600 0000  ................
0001350: 2083 0408 2003 0000 7c01 0000 0000 0000   ... ...|.......
0001360: 0000 0000 1000 0000 0000 0000 9800 0000  ................
0001370: 0100 0000 0600 0000 9c84 0408 9c04 0000  ................
0001380: 1a00 0000 0000 0000 0000 0000 0400 0000  ................
0001390: 0000 0000 9e00 0000 0100 0000 0200 0000  ................
00013a0: b884 0408 b804 0000 1400 0000 0000 0000  ................
00013b0: 0000 0000 0400 0000 0000 0000 a600 0000  ................
00013c0: 0100 0000 0200 0000 cc84 0408 cc04 0000  ................
00013d0: 3400 0000 0000 0000 0000 0000 0400 0000  4...............
00013e0: 0000 0000 b400 0000 0100 0000 0200 0000  ................
00013f0: 0085 0408 0005 0000 c400 0000 0000 0000  ................
0001400: 0000 0000 0400 0000 0000 0000 be00 0000  ................
0001410: 0100 0000 0300 0000 149f 0408 140f 0000  ................
0001420: 0800 0000 0000 0000 0000 0000 0400 0000  ................
0001430: 0000 0000 c500 0000 0100 0000 0300 0000  ................
0001440: 1c9f 0408 1c0f 0000 0800 0000 0000 0000  ................
0001450: 0000 0000 0400 0000 0000 0000 cc00 0000  ................
0001460: 0100 0000 0300 0000 249f 0408 240f 0000  ........$...$...
0001470: 0400 0000 0000 0000 0000 0000 0400 0000  ................
0001480: 0000 0000 d100 0000 0600 0000 0300 0000  ................
0001490: 289f 0408 280f 0000 c800 0000 0600 0000  (...(...........
00014a0: 0000 0000 0400 0000 0800 0000 da00 0000  ................
00014b0: 0100 0000 0300 0000 f09f 0408 f00f 0000  ................
00014c0: 0400 0000 0000 0000 0000 0000 0400 0000  ................
00014d0: 0400 0000 df00 0000 0100 0000 0300 0000  ................
00014e0: f49f 0408 f40f 0000 1800 0000 0000 0000  ................
00014f0: 0000 0000 0400 0000 0400 0000 e800 0000  ................
0001500: 0100 0000 0300 0000 0ca0 0408 0c10 0000  ................
0001510: 0800 0000 0000 0000 0000 0000 0400 0000  ................
0001520: 0000 0000 ee00 0000 0800 0000 0300 0000  ................
0001530: 14a0 0408 1410 0000 0800 0000 0000 0000  ................
0001540: 0000 0000 0400 0000 0000 0000 f300 0000  ................
0001550: 0100 0000 3000 0000 0000 0000 1410 0000  ....0...........
0001560: 2a00 0000 0000 0000 0000 0000 0100 0000  *...............
0001570: 0100 0000 1100 0000 0300 0000 0000 0000  ................
0001580: 0000 0000 3e10 0000 fc00 0000 0000 0000  ....>...........
0001590: 0000 0000 0100 0000 0000 0000 0100 0000  ................
00015a0: 0200 0000 0000 0000 0000 0000 ec15 0000  ................
00015b0: 1004 0000 1d00 0000 2d00 0000 0400 0000  ........-.......
00015c0: 1000 0000 0900 0000 0300 0000 0000 0000  ................
00015d0: 0000 0000 fc19 0000 fb01 0000 0000 0000  ................
00015e0: 0000 0000 0100 0000 0000 0000 0000 0000  ................
00015f0: 0000 0000 0000 0000 0000 0000 0000 0000  ................
0001600: 5481 0408 0000 0000 0300 0100 0000 0000  T...............
0001610: 6881 0408 0000 0000 0300 0200 0000 0000  h...............
0001620: 8881 0408 0000 0000 0300 0300 0000 0000  ................
0001630: ac81 0408 0000 0000 0300 0400 0000 0000  ................
0001640: cc81 0408 0000 0000 0300 0500 0000 0000  ................
0001650: 1c82 0408 0000 0000 0300 0600 0000 0000  ................
0001660: 6682 0408 0000 0000 0300 0700 0000 0000  f...............
0001670: 7082 0408 0000 0000 0300 0800 0000 0000  p...............
0001680: 9082 0408 0000 0000 0300 0900 0000 0000  ................
0001690: 9882 0408 0000 0000 0300 0a00 0000 0000  ................
00016a0: b082 0408 0000 0000 0300 0b00 0000 0000  ................
00016b0: e082 0408 0000 0000 0300 0c00 0000 0000  ................
00016c0: 2083 0408 0000 0000 0300 0d00 0000 0000   ...............
00016d0: 9c84 0408 0000 0000 0300 0e00 0000 0000  ................
00016e0: b884 0408 0000 0000 0300 0f00 0000 0000  ................
00016f0: cc84 0408 0000 0000 0300 1000 0000 0000  ................
0001700: 0085 0408 0000 0000 0300 1100 0000 0000  ................
0001710: 149f 0408 0000 0000 0300 1200 0000 0000  ................
0001720: 1c9f 0408 0000 0000 0300 1300 0000 0000  ................
0001730: 249f 0408 0000 0000 0300 1400 0000 0000  $...............
0001740: 289f 0408 0000 0000 0300 1500 0000 0000  (...............
0001750: f09f 0408 0000 0000 0300 1600 0000 0000  ................
0001760: f49f 0408 0000 0000 0300 1700 0000 0000  ................
0001770: 0ca0 0408 0000 0000 0300 1800 0000 0000  ................
0001780: 14a0 0408 0000 0000 0300 1900 0000 0000  ................
0001790: 0000 0000 0000 0000 0300 1a00 0100 0000  ................
00017a0: 0000 0000 0000 0000 0400 f1ff 0c00 0000  ................
00017b0: 149f 0408 0000 0000 0100 1200 1a00 0000  ................
00017c0: 1c9f 0408 0000 0000 0100 1300 2800 0000  ............(...
00017d0: 249f 0408 0000 0000 0100 1400 3500 0000  $...........5...
00017e0: 5083 0408 0000 0000 0200 0d00 4b00 0000  P...........K...
00017f0: 14a0 0408 0100 0000 0100 1900 5a00 0000  ............Z...
0001800: 18a0 0408 0400 0000 0100 1900 6800 0000  ............h...
0001810: b083 0408 0000 0000 0200 0d00 0100 0000  ................
0001820: 0000 0000 0000 0000 0400 f1ff 7400 0000  ............t...
0001830: 189f 0408 0000 0000 0100 1200 8100 0000  ................
0001840: c085 0408 0000 0000 0100 1100 8f00 0000  ................
0001850: 249f 0408 0000 0000 0100 1400 9b00 0000  $...............
0001860: 7084 0408 0000 0000 0200 0d00 b100 0000  p...............
0001870: 0000 0000 0000 0000 0400 f1ff b900 0000  ................
0001880: 149f 0408 0000 0000 0000 1200 ca00 0000  ................
0001890: 289f 0408 0000 0000 0100 1500 d300 0000  (...............
00018a0: 149f 0408 0000 0000 0000 1200 e600 0000  ................
00018b0: f49f 0408 0000 0000 0100 1700 fc00 0000  ................
00018c0: 6084 0408 0200 0000 1200 0d00 0c01 0000  `...............
00018d0: 6284 0408 0000 0000 1202 0d00 2301 0000  b...........#...
00018e0: 0ca0 0408 0000 0000 2000 1800 2e01 0000  ........ .......
00018f0: 14a0 0408 0000 0000 1000 f1ff 3501 0000  ............5...
0001900: 9c84 0408 0000 0000 1200 0e00 3b01 0000  ............;...
0001910: 209f 0408 0000 0000 1102 1300 4801 0000   ...........H...
0001920: 0ca0 0408 0000 0000 1000 1800 5501 0000  ............U...
0001930: 0000 0000 0000 0000 1200 0000 6501 0000  ............e...
0001940: 0000 0000 0000 0000 2000 0000 7401 0000  ........ ...t...
0001950: 10a0 0408 0000 0000 1102 1800 8101 0000  ................
0001960: bc84 0408 0400 0000 1100 0f00 9001 0000  ................
0001970: 0000 0000 0000 0000 1200 0000 ad01 0000  ................
0001980: f083 0408 6100 0000 1200 0d00 bd01 0000  ....a...........
0001990: 1ca0 0408 0000 0000 1000 f1ff c201 0000  ................
00019a0: 2083 0408 0000 0000 1200 0d00 c901 0000   ...............
00019b0: b884 0408 0400 0000 1100 0f00 d001 0000  ................
00019c0: 14a0 0408 0000 0000 1000 f1ff dc01 0000  ................
00019d0: d483 0408 1c00 0000 1200 0d00 e101 0000  ................
00019e0: 0000 0000 0000 0000 2000 0000 f501 0000  ........ .......
00019f0: b082 0408 0000 0000 1200 0b00 0063 7274  .............crt
0001a00: 7374 7566 662e 6300 5f5f 4354 4f52 5f4c  stuff.c.__CTOR_L
0001a10: 4953 545f 5f00 5f5f 4454 4f52 5f4c 4953  IST__.__DTOR_LIS
0001a20: 545f 5f00 5f5f 4a43 525f 4c49 5354 5f5f  T__.__JCR_LIST__
0001a30: 005f 5f64 6f5f 676c 6f62 616c 5f64 746f  .__do_global_dto
0001a40: 7273 5f61 7578 0063 6f6d 706c 6574 6564  rs_aux.completed
0001a50: 2e36 3135 3900 6474 6f72 5f69 6478 2e36  .6159.dtor_idx.6
0001a60: 3136 3100 6672 616d 655f 6475 6d6d 7900  161.frame_dummy.
0001a70: 5f5f 4354 4f52 5f45 4e44 5f5f 005f 5f46  __CTOR_END__.__F
0001a80: 5241 4d45 5f45 4e44 5f5f 005f 5f4a 4352  RAME_END__.__JCR
0001a90: 5f45 4e44 5f5f 005f 5f64 6f5f 676c 6f62  _END__.__do_glob
0001aa0: 616c 5f63 746f 7273 5f61 7578 0068 656c  al_ctors_aux.hel
0001ab0: 6c6f 2e63 005f 5f69 6e69 745f 6172 7261  lo.c.__init_arra
0001ac0: 795f 656e 6400 5f44 594e 414d 4943 005f  y_end._DYNAMIC._
0001ad0: 5f69 6e69 745f 6172 7261 795f 7374 6172  _init_array_star
0001ae0: 7400 5f47 4c4f 4241 4c5f 4f46 4653 4554  t._GLOBAL_OFFSET
0001af0: 5f54 4142 4c45 5f00 5f5f 6c69 6263 5f63  _TABLE_.__libc_c
0001b00: 7375 5f66 696e 6900 5f5f 6936 3836 2e67  su_fini.__i686.g
0001b10: 6574 5f70 635f 7468 756e 6b2e 6278 0064  et_pc_thunk.bx.d
0001b20: 6174 615f 7374 6172 7400 5f65 6461 7461  ata_start._edata
0001b30: 005f 6669 6e69 005f 5f44 544f 525f 454e  ._fini.__DTOR_EN
0001b40: 445f 5f00 5f5f 6461 7461 5f73 7461 7274  D__.__data_start
0001b50: 0070 7574 7340 4047 4c49 4243 5f32 2e30  .puts@@GLIBC_2.0
0001b60: 005f 5f67 6d6f 6e5f 7374 6172 745f 5f00  .__gmon_start__.
0001b70: 5f5f 6473 6f5f 6861 6e64 6c65 005f 494f  __dso_handle._IO
0001b80: 5f73 7464 696e 5f75 7365 6400 5f5f 6c69  _stdin_used.__li
0001b90: 6263 5f73 7461 7274 5f6d 6169 6e40 4047  bc_start_main@@G
0001ba0: 4c49 4243 5f32 2e30 005f 5f6c 6962 635f  LIBC_2.0.__libc_
0001bb0: 6373 755f 696e 6974 005f 656e 6400 5f73  csu_init._end._s
0001bc0: 7461 7274 005f 6670 5f68 7700 5f5f 6273  tart._fp_hw.__bs
0001bd0: 735f 7374 6172 7400 6d61 696e 005f 4a76  s_start.main._Jv
0001be0: 5f52 6567 6973 7465 7243 6c61 7373 6573  _RegisterClasses
0001bf0: 005f 696e 6974 00                        ._init.

Como se puede observar, es bastante complicado de entender. Hay que tener en cuenta que el compilador añade información extra y las librerías de entra y salida también ocupan su sitio. Estas librerías simplifican la escritura por pantalla (acceso a la memória de vídeo, renderización de las letras...) a un simple printf().

Podemos usar el comando objdump para ver el código resultante de la compilación en ensamblador:

$ objdump -Dslx a.out | grep -2 'Hello'
 80484ac e89ffeff ff83c408 5bc3               ........[.      
Contents of section .rodata:
 80484b8 03000000 01000200 48656c6c 6f20576f  ........Hello Wo
 80484c8 726c6400                             rld.            
Contents of section .eh_frame_hdr:

Con este comando y el grep, nos quedamos sólo con la línea que indica dónde se guarda la cadena "Hello World". De todas formas, el código total queda muy complicado de leer. Cabe decir que queda más largo porque ha desensamblado. En ensamblador hecho por una persona el programa sería más legible, aunque mucho más complejo que en C. [1]

Gestión de memoria

Una de las funciones fundamentales del Kernel de un sistema operativo es la gestión de la memoria. Está íntimamente relacionada con la gestión de procesos.

La memoria principal es un almacén de datos temporales de los programas en ejecución. Guarda las instrucciones y los datos de los programas. Pero en la arquitectura Von Neumann no tiene estructura. Simplemente proporciona un espacio con direcciones de memoria.

En los ordenadores sin sistema operativo es relativamente sencillo programar con la memoria principal. Solo hay que tener en cuenta el no llenarla o usar direcciones de memoria ya utilizadas. En este tipo de ordenadores (Microcontroladores, Arduino...) tienes toda la memoria a tu disposición y no molestas a nadie. Las direcciones de memoria son absolutas. Es decir, si el programador quiere guardar un número en la dirección 0x0001, en la dirección física de la memoria estará ese dato hasta que se pare el ordenador.

Si ya usamos sistema operativo, pero es monoproceso, tampoco es mucho más complicado. El sistema operativo indica al procesador cual es la dirección de memoria para programas. Le llama el registro base. De esta manera, el programador ya no sabe donde está su variable.

{{{1}}}