Volver al temario
Tema 02 · 44 páginas

El sistema operativo: una máquina virtual

Tema completo Modo estudio
TEXTO ORIGINAL · Páginas 1517 Ver PDF

2.2.1. Biblioteca del sistema

Texto íntegro de la conversión. Las figuras y la disposición de las notas se pueden consultar en el PDF.

2.2.1. Biblioteca del sistema

Desde el punto de vista del programador, el mecanismo de entrada al sistema mediante traps tiene un gran problema: no es portable porque depende del lenguaje máquina propio del procesador. Si queremos facilitar que el código fuente de los programas sea fácilmente portable entre arquitecturas diferentes donde esté instalado el mismo sistema operativo, hay que disponer de una forma independiente del hardware para poder realizar las llamadas al sistema operativo. La solución viene dada por la biblioteca del sistema. Las rutinas de esta biblioteca permiten expresar de forma estándar las llamadas al sistema.

Por ejemplo, la figura 2 muestra la interfaz (en lenguaje C) de la llamada al sistema write del sistema operativo Unix.

"ssize_t write(int fd, const void *buf, size_t count);"

Figura 2. Interfaz de la llamada al sistema write del sistema operativo Linux

Página 16

La rutina write de la biblioteca del sistema Unix para la arquitectura IA-32 invoca la llamada al sistema tal como se hace en esta arquitectura (paso de parámetros a través de registros determinados, instrucción de lenguaje máquina int). La figura 3 (arriba) muestra el código ensamblador de esta rutina.

000001cd : 1cd: push %ebp 1ce: mov %esp,%ebp

1d0: push %ebx 1d1: sub $0x4,%esp

1d4: mov $0x4,%eax 1d9: mov 0x8(%ebp),%ebx 1dc: mov 0xc(%ebp),%ecx

1df: mov 0x10(%ebp),%edx 1e2: int $0x80 1e4: mov %eax,0xfffffff8(%ebp)

1e7: cmpl $0xffffff82,0xfffffff8(%ebp) 1eb: jbe 1f4 <write+0x27> 1ed: movl $0xffffffff,0xfffffff8(%ebp)

1f4: mov 0xfffffff8(%ebp),%eax 1f7: add $0x4,%esp 1fa: pop %ebx

1fb: leave 1fc: ret

__write: 0x120009fd0: addq zero, 0x4, v0 0x120009fd4: call_pal callsys

0x120009fd8: beq a3, 0x120009ff0 0x120009fdc: br gp, 0x120009fe0

0x120009fe0: ldah gp, 0(gp) 0x120009fe4: lda gp, 19472(gp) 0x120009fe8: lda at, 26144(gp)

0x120009fec: br zero, 0x120015210 0x120009ff0: ret zero, (ra), 1

Figura 3. Código de la rutina de biblioteca write de Unix en dos arquitecturas: IA-32 (arriba) y Alpha (abajo)

De esta forma, el programador puede invocar la llamada al sistema write como si fuera una rutina cualquiera del lenguaje C. Como el ejecutable se genera sobre la arquitectura IA-32, se utilizará la biblioteca de sistema correspondiente a la arquitectura IA-32.

La figura 3 (abajo) muestra el código ensamblador de la rutina write de la biblioteca del sistema Unix para la arquitectura Alpha. Como el ejecutable se genera sobre esta arquitectura, se utilizará la biblioteca de sistema de la

Página 17

arquitectura Alpha. De esta forma, el programador no necesita conocer cómo se da la llamada al sistema en lenguaje máquina y puede invocarla de una forma portable.

Los otros dos mecanismos (interrupciones y excepciones) no están a disposición directa del usuario.

Ver fragmento extraído sin normalizar
2.2.1.  Biblioteca del sistema


Desde el punto de vista del programador, el mecanismo de entrada al sistema
mediante traps tiene un gran problema: no es portable porque depende del
lenguaje máquina propio del procesador. Si queremos facilitar que el código
fuente de los programas sea fácilmente portable entre arquitecturas diferentes
donde esté instalado el mismo sistema operativo, hay que disponer de una
forma independiente del hardware para poder realizar las llamadas al sistema
operativo. La solución viene dada por la biblioteca del sistema. Las rutinas de
esta biblioteca permiten expresar de forma estándar las llamadas al sistema.


Por ejemplo, la figura 2 muestra la interfaz (en lenguaje C) de la llamada al
sistema write del sistema operativo Unix.


    "ssize_t write(int fd, const void *buf, size_t count);"


Figura 2. Interfaz de la llamada al sistema write del sistema operativo Linux

## Página 16

<!-- source-page: 16 -->

GNUFDL • PID_00214804                                                                                  16                                                                          El sistema operativo: una máquina virtual

La rutina write de la biblioteca del sistema Unix para la arquitectura IA-32 in-
voca la llamada al sistema tal como se hace en esta arquitectura (paso de pa-
rámetros a través de registros determinados, instrucción de lenguaje máquina
int). La figura 3 (arriba) muestra el código ensamblador de esta rutina.


    000001cd <write>:
         1cd:    push    %ebp
         1ce:    mov     %esp,%ebp

         1d0:    push    %ebx
         1d1:    sub     $0x4,%esp

         1d4:    mov     $0x4,%eax
         1d9:    mov     0x8(%ebp),%ebx
         1dc:    mov     0xc(%ebp),%ecx

         1df:    mov     0x10(%ebp),%edx
         1e2:    int     $0x80
         1e4:    mov     %eax,0xfffffff8(%ebp)

         1e7:    cmpl    $0xffffff82,0xfffffff8(%ebp)
         1eb:    jbe     1f4 &lt;write+0x27&gt;
         1ed:    movl    $0xffffffff,0xfffffff8(%ebp)

         1f4:    mov     0xfffffff8(%ebp),%eax
         1f7:    add     $0x4,%esp
         1fa:    pop     %ebx

         1fb:    leave
         1fc:    ret


    __write:
    0x120009fd0: addq zero, 0x4, v0
    0x120009fd4: call_pal callsys

    0x120009fd8: beq a3, 0x120009ff0
    0x120009fdc: br gp, 0x120009fe0

    0x120009fe0: ldah gp, 0(gp)
    0x120009fe4: lda gp, 19472(gp)
    0x120009fe8: lda at, 26144(gp)

    0x120009fec: br zero, 0x120015210
    0x120009ff0: ret zero, (ra), 1


Figura 3. Código de la rutina de biblioteca write de Unix en dos arquitecturas: IA-32 (arriba)
y Alpha (abajo)

De esta forma, el programador puede invocar la llamada al sistema write como
si fuera una rutina cualquiera del lenguaje C. Como el ejecutable se genera
sobre la arquitectura IA-32, se utilizará la biblioteca de sistema correspondiente
a la arquitectura IA-32.


La figura 3 (abajo) muestra el código ensamblador de la rutina write de la
biblioteca del sistema Unix para la arquitectura Alpha. Como el ejecutable
se genera sobre esta arquitectura, se utilizará la biblioteca de sistema de la

## Página 17

<!-- source-page: 17 -->

GNUFDL • PID_00214804                                                                                  17                                                                          El sistema operativo: una máquina virtual

arquitectura Alpha. De esta forma, el programador no necesita conocer cómo
se da la llamada al sistema en lenguaje máquina y puede invocarla de una
forma portable.


Los otros dos mecanismos (interrupciones y excepciones) no están a disposi-
ción directa del usuario.


Descargar Markdown originalEstudiar este apartado