0% encontró este documento útil (0 votos)
163 vistas230 páginas

Material Complementario Sistemas Operativos

Este documento describe los componentes de un sistema de computación y define el sistema operativo. Explica que un sistema operativo actúa como intermediario entre el hardware, los programas de aplicación y los usuarios, administrando los recursos de forma eficiente y optimizando el uso de los mismos. También resume brevemente las principales funciones de un sistema operativo como ejecutar aplicaciones, facilitar la interacción con el hardware y administrar los recursos de forma eficiente.

Cargado por

Lizbeth Nieto
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
163 vistas230 páginas

Material Complementario Sistemas Operativos

Este documento describe los componentes de un sistema de computación y define el sistema operativo. Explica que un sistema operativo actúa como intermediario entre el hardware, los programas de aplicación y los usuarios, administrando los recursos de forma eficiente y optimizando el uso de los mismos. También resume brevemente las principales funciones de un sistema operativo como ejecutar aplicaciones, facilitar la interacción con el hardware y administrar los recursos de forma eficiente.

Cargado por

Lizbeth Nieto
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 230

Sistemas Operativos I

Sistemas Operativos I 01

1.1. Sistema de computación


Un sistema de computación (un ordenador por ejemplo) puede dividirse en cuatro
componentes donde el sistema operativo (SO en adelante) es una parte importante:

Hardware: Elementos físicos de los que se compone un ordenador como son


Unidad Central de Procesamiento (CPU), memoria y dispositivos de
entrada/salida (E/S), etc.

Sistema Operativo: Es un programa que actúa como intermediario entre el


usuario y el hardware de un computador y su propósito es proporcionar un
entorno en el cual el usuario pueda ejecutar programas optimizando los
recursos disponibles.

Programas de aplicación: Programas que se ejecutan sobre el sistema


operativo, como son los compiladores, sistemas de bases de datos,
videojuegos, programas para negocios, etc.

Usuarios: Personas que interactúan con el sistema ya sea como usuario que
utiliza los programas de aplicación o como usuario que programa en el sistema.

Existen múltiples definiciones para describir qué es un sistema operativo. La


mayoría de ellas son correctas porque definen de forma clara cuales son las
funciones que desempeña.

¿Qué es un Sistema Operativo? 5


Formación Abierta

1.2. Definiciones breves de Sistema


Operativo

Definición 1

Un programa que sirve de intermediario entre los


usuarios y el hardware.

Definición 2

Un sistema de software cuyo fin es que un sistema


informático sea operativo (utilizable).

Definición 3

Conjunto de programas que gestionan los recursos del


sistema, optimizan su uso y resuelven conflictos.

Definición 4

Un sistema operativo es un conjunto de programas o


software destinado a permitir la comunicación del usuario
con un ordenador y gestionar sus recursos de manera
cómoda y eficiente. Comienza a trabajar cuando se
enciende el ordenador y gestiona el hardware de la
máquina desde los niveles más básicos.

Hoy en día un sistema operativo se puede encontrar normalmente en ordenadores


o productos electrónicos como teléfonos móviles.

6 ¿Qué es un Sistema Operativo?


Sistemas Operativos I 01

1.3. Funciones y objetivos de un SO


Las funciones y objetivos han quedado claramente reflejadas en las secciones
anteriores a través de las múltiples definiciones existentes de un SO. De forma
esquematizada se podría decir que las principales funciones y objetivos de un
sistema operativo son:

Ejecutar las aplicaciones del usuario/programador


Las aplicaciones se ejecutan bajo la supervisión del SO, o dicho de otra manera, el
SO es el encargado de entender, analizar, supervisar y ejecutar las ordenes
lanzadas desde una aplicación.

Facilitar la interacción con el hardware


El SO actúa de traductor entre los componentes físicos (hardware) y los programas
y en última instancia del usuario.

Cuando un usuario emplea una aplicación y selecciona la opción de guardar


archivo, la aplicación manda una orden al SO que es el que se encarga de guardar
los datos físicamente en el dispositivo físico seleccionado

Esto sucede de esta manera porque cuando una aplicación quiere emplear algún
recurso de la máquina como por ejemplo el disco duro, la memoria, la impresora,
etc, lo hace a través del SO, actuando este último además como guardián y
supervisor para asegurar que se cumplen las políticas de seguridad del sistema
(evitar que una aplicación acceda a memoria utilizada por otra aplicación, que dos
programas no guarden información en el mismo sitio al mismo tiempo, etc)

Administrar eficientemente los recursos de la máquina


El SO operativo es el encargado de administrar los recursos de la máquina por lo
que una de sus funciones es realizarlo de la forma más eficiente posible con el
objetivo de aprovechar al máximo los recursos de la máquina.

Existen varias técnicas para conseguirlo como veremos más adelante en esta
unidad didáctica.

Tener capacidad de evolución


Los SO han evolucionado a lo largo de la historia adquiriendo nuevas
funcionalidades y mejorando las existentes. Es vital para un SO robusto tener
capacidad de evolucionar.

¿Qué es un Sistema Operativo? 7


Formación Abierta

4. ¿Qué es un SO?
Hasta ahora hemos visto que un sistema operativo tiene dos funcionalidades
básicas, por un lado es un administrador de recursos y por otro una interfaz con el
hardware. A continuación vamos a profundizar en estas dos funciones.

1. SO como administrador de recursos


Actúa como si fuera un supervisor y gestor del hardware, ejerciendo a modo de
programa de control. Para entender lo que supervisa en necesario conocer los
elementos que participan en el sistema: los procesos y los recursos.

1. Un proceso es un programa en ejecución


2. Un recurso puede ser real o virtual, físico o lógico
3. Los procesos compiten por el uso de recursos que son escasos.
Necesitamos un árbitro imparcial que asigne recursos a los procesos, de forma
justa y eficiente, es aquí donde entra en acción el sistema operativo.

Ahora bien, para gestionar de forma eficiente los recursos entre los procesos en SO
debe conocer más información de la descrita hasta ahora:

 Estado de los recursos: Debe conocer información detallada de los recursos


que el sistema posee para poder repartirlos de forma eficiente.

 Determinar a qué proceso se le cede el control, cuándo y durante cuánto


tiempo.

 Debe saber asociar recursos y desasociarlos.

1.4.2. SO como interfaz con el hardware


Al actuar como traductor entre el hardware y las aplicaciones tiene la posibilidad de
añadir características no existentes en dicho hardware. Del mismo modo, oculta
aquellas características que son inconvenientes del hardware.

Máquina extendida

El resultado es una máquina lógica que extiende las


posibilidades de la máquina física, lo que se denomina
máquina extendida.

8 ¿Qué es un Sistema Operativo?


Sistemas Operativos I 01

La máquina extendida es una capa entre el usuario y el hardware, por eso se le


denomina interfaz, aísla al usuario y a los procesos de la complejidad del acceso al
hardware.

La máquina extendida posee otra gran virtud, ofrece una


máquina lógica que no es más que es una abstracción de
la realidad. Esta abstracción es más cómoda, más
conveniente y más usable para el usuario y para el
programador.

Por último pero no menos importante, la máquina extendida puede ser


independiente del hardware con lo que ganamos portabilidad. Es decir, la máquina
extendida es capaz de hacernos ver dos sistemas con ha rdware distinto como si
fueran dos sistemas exactamente iguales.

Existen diferentes discos duros en el mercado y en un


sistema no se accede físicamente a ellos de la misma
forma, por lo que si no tuviéramos al SO ofreciéndonos
esta interfaz, a la hora de programar tendríamos que
aprender a acceder a todos los discos duros existentes
en el mercado.

Con el SO actuando a modo de interfaz, tan sólo tenemos que aprender una sola
manera y el SO se encargará de traducir nuestra petición de forma adecuada al
disco duro con el que estemos tratando.

¿Qué es un Sistema Operativo? 9


Sistemas Operativos I 02

1. Sistemas en serie
Al principio de los tiempos de la informática, los sistemas eran absolutamente
primitivos y se caracterizaban entre otros aspectos por su gran tamaño. Eran
máquinas prácticamente herméticas con una funcionalidad concreta y no disponían
de casi ningún medio de comunicación con el usuario/programador que tenía que
programar directamente en la máquina porque estas máquinas no admitían la
introducción de programas.

1. Organización del trabajo


Los usuarios que accedían eran tan sólo usuarios expertos, principalmente
programadores y los operadores que velaban por la máquina.

La forma de repartir la máquina era también primitiva aunque a la vez sencilla, se


repartía el tiempo entre los distintos usuarios que querían acceder a ella. Se hacía
una lista de reserva y el programador podía emplearla sólo en su turno, mientras
este estaba utilizándola nadie más disponía de ella.

2. Primeras mejoras
Pronto aparecieron las primeras mejoras para estas máquinas tan primitivas. Las
mejoras llegaron tanto a los dispositivos físicos como a los elementos lógicos.

Dispositivos físicos
 Lectoras de tarjetas: mecanismo de entrada, el programador escribía las
órdenes en tarjetas perforadas que eran introducidas en el sistema para ser
ejecutadas.
 Impresoras: mecanismo de salida mediante el cual el programador podía
sacar el resultado de las operaciones realizadas.

 Cintas magnéticas: mecanismo de almacenamiento

Elementos lógicos
Aparece el primer software de sistema como ayuda en las labores de programación.
Nacen los siguientes elementos:

 Ensambladores, compiladores, cargadores: programas permitían


interpretar, traducir y ejecutar los programas escritos por los programadores
en las tarjetas perforadas
 Manejadores de dispositivos: programas para acceder y emplear los
nuevos dispositivos físicos.

Evolución Histórica de los Sistemas Operativos 5


Formación Abierta

 Bibliotecas con subrutinas de uso frecuente: Primera optimización en


cuanto a código de los programadores se refiere. En todos los programas
que realizaban existían porciones de código que se repetían frecuentemente
porque se trataba de rutinas que hacían una función determinada. Por esta
razón se crearon las primeras bibliotecas donde estaban recogidas
subrutinas de uso frecuente, cuando el programador necesitaba de ellas en
vez de escribir el código empleaba el ya escrito en dichas bibliotecas.

El lenguaje de programación seguía siendo de bajo nivel (lenguaje cercano a la


máquina) y por lo tanto bastante complejo. Finalmente aparecieron los primeros
compiladores de lenguajes de alto nivel (lenguaje cercano al humano) para
FORTRAN y COBOL, simplificando la labor de programación pero aumentando la
carga de trabajo del ordenador ya que tenía que traducir el lenguaje de alto nivel a
lenguaje máquina.

2.1.3. Problemas
A pesar de las mejoras seguían existiendo muchos problemas que corregidos
sirvieron de evolución para los SO. Los dos principales problemas eran los
siguientes:

Los equipos eran muy caros y poca gente tenía acceso a ellos.
 El modo de trabajo hacía que la máquina estuviera parada mucho tiempo.
Este problema venía dado por muchos motivos:
 Se necesitaba un tiempo de puesta a punto cada vez que la máquina
arrancaba y cada vez que un programador hacía uso de su turno (setup
time).
 Dentro del tiempo asignado a cada programador se perdía mucho tiempo
corrigiendo manualmente los errores, recordar que el programador
introducía su programa escrito en las tarjetas perforadas pero podía tener
fallos que sólo eran descubiertos cuando la máquina leía las tarjetas.

 Raramente el programador terminaba antes su turno, pero en estos casos el


tiempo sobrante se perdía porque al siguiente no le tocaba hasta la hora
asignada.

6 Evolución Histórica de los Sistemas Operativos


Sistemas Operativos I 02

2.2. Sistemas por lotes


Como hemos visto, el principal problema de los sistemas en serie es el modo de
trabajar ya que se desperdicia mucho tiempo.

El objetivo de los sistemas por lotes es sacar más


provecho a la máquina gracias a una mejor organización
del trabajo.

Primer Paso
El primer paso es terminar con la lista de espera en la cual los programadores
tenían una franja horaria para utilizar la máquina. Nace la figura del operador que
es la persona encargada de mediar entre la máquina y los programadores con el fin
de aumentar la productividad de la máquina al estar menos tiempo parada.

El trabajo se organiza de la siguiente manera:


1. El programador no manipula directamente el equipo, entrega su trabajo (job)
al operador.
2. El operador somete la tarea al sistema y entrega los resultados al
programador.
3. El programador corrige sus errores mientras el operador sigue ejecutando
otras tareas.

Segundo Paso
El segundo paso para conseguir el objetivo es agrupar las tareas en lotes que se
procesan de forma automática, lo que se denomina procesamiento por lotes
(batch processing).

El operador prepara lotes con trabajos que requieren una misma operación como
por ejemplo cargar el compilador. El operador lanza el lote, y éste se ejecuta sin
más intervención (secuencia automática de trabajos).

Evolución Histórica de los Sistemas Operativos 7


Formación Abierta

Hasta este punto las mejoras aseguran un mejor aprovechamiento de la máquina


pero quedan aspectos que aún se pueden mejorar y para eso es necesario
automatizar ciertas acciones comunes:

Tratamiento de errores: los errores los recoge hasta la fecha el operador y se


incrementaría la productividad si los errores se trataran de forma automática.

Control de la finalización de tareas: la finalización de los programas es hasta la


fecha supervisada por el operador que tiene que estar atento hasta que el
programa termine.

Carga y ejecución automática de la siguiente tarea: Es indudable que se


mejoraría la productividad si la carga de la siguiente tarea se hiciera de forma
automática cuando acabe la anterior.

Conseguidas estas últimas mejoras cabe preguntarse si en lugar de dar órdenes al


operador, ¿Por qué no dárselas directamente a la máquina?

Nos encontramos ante el nacimiento del primer Sistema Operativo.

8 Evolución Histórica de los Sistemas Operativos


Sistemas Operativos I 02

3. El primer Sistema Operativo


El primer Sistema Operativo propiamente dicho nace cuando las tareas del
operador son sustituidas por un programa residente (monitor residente) que
realiza automáticamente las acciones que anteriormente realizaba el operador.

Con el fin de poder dar órdenes al monitor residente nacieron los primeros
lenguajes de control de sistema en los cuales los programadores indicaban
mediante la programación lo que querían hacer con las aplicaciones que habían
programado, por ejemplo: cargar trabajo, compilar, ejecutar, terminar, etc. ($FTN,
$ASM, $RUN, $JOB, $END). Estos lenguajes fueron llamados JCL, lenguajes de
control de tareas (job control language)

De este modo los programadores creaban dos tipos de tarjetas, las que contenían
el programa propiamente dicho y las que contenían las órdenes que el monitor tenía
que ejecutar (tarjetas de control).

Por su lado, el monitor residente era un programa fijo en memoria con rutinas
imprescindibles para que el sistema por lotes funcionara, como un intérprete de
JCL, un cargador de programas, rutinas de E/S, etc. El resultado es que el monitor
residente era capaz de automatizar las tareas del antiguo operador por lo que se
puede afirmar que fue el primer sistema operativo auténtico.

1. Protección del monitor residente


El hecho de que un programa, el monitor residente, se encargue de las tareas que
antes realizaba una persona obliga a implementar unos mecanismos de seguridad
para que ningún programador comprometa la estabilidad del ordenador valga el
siguiente ejemplo:

El monitor residente es un programa y como tal está


cargado en la memoria del ordenador. La estabilidad del
ordenador se vería afectada si un programador al
ejecutar su programa accediera al área de memoria
donde se encuentra el monitor residente ya que podría
dañarlo. Es por esto que el área de memoria donde se
encuentra dicho monitor ha de estar protegida.

Son tres las primeras implementaciones que el monitor adoptó en aspectos de


seguridad, todas ellas implementadas con cierto apoyo por parte del hardware:

 Evitar bloqueos de sistema: impedir que una tarea de un programador


dejara el sistema bloqueado.

Evolución Histórica de los Sistemas Operativos 9


Formación Abierta

En unidades didácticas posteriores estudiaremos los


diferentes algoritmos que emplea un SO actual para
solucionar este problema.

 Impedir accesos directo a E/S: Impedir que los programadores pudieran


acceder directamente a los dispositivos de E/S sin pasar por la supervisión
del monitor residente.
 Protección de la memoria utilizada por el monitor residente: Evitar que
un progama pudiera acceder al área de memoria utilizado por el monitor
porque podría dañarlo.

10 Evolución Histórica de los Sistemas Operativos


Sistemas Operativos I 02

2.4. Mejoras en acceso a dispositvos de


E/S
A fecha de entonces los ordenadores disponían de diversos dispositivos de entrada
y salida como impresoras, unidades de cinta, etc. Dichos dispositivos eran mucho
más lentos que las operaciones que la CPU del ordenador realizaba, por lo que dicha
CPU quedaba ociosa esperando que las operaciones de entrada y salida terminaran.

Tal y como ha ido sucediendo a lo largo de la evolución de los Sistemas Operativos,


el problema, de hardware en este caso, provocó la adopción de mejoras en los SO
que optimizasen el acceso a dispositivos de E/S. Las técnicas fueron las siguientes:

1. Operaciones OffLine (fuera de línea).


2. Utilización de búferes.
3. Técnica de spooling.

2.4.1. Operaciones OffLine


Como hemos visto anteriormente el problema es que la CPU se queda esperando a
que los dispositivos de E/S terminen. Esta técnica se basa en distribuir la unidad de
proceso. El ordenar central sólo dialogará con aquellos dispositivos de E/S
más rápidos, como eran las cintas magnéticas. Los dispositivos que son más
lentos, como las impresoras, tarjetas, etc, dialogarán con un pequeño
ordenador, también llamado satélite o canal.

El resultado de utilizar la técnica de operaciones OffLine


es el mejor aprovechamiento del procesador central así
como la ejecución paralela de cálculos al disponer de
varias unidades de procesamiento en paralelo. Además,
esta técnica permite incrementar la velocidad utilizando
más de un satélite.

El encargado de elegir la unidad de proceso central o uno de los satélites, para


acceder al dispositivo de E/S solicitado por el programa no es el programador, sino
el SO, por lo que los programas anteriores a utilizar esta técnica no tuvieron que ser
recompilados. De esta forma se asegura la independencia del dispositivo.

Evolución Histórica de los Sistemas Operativos 11


Formación Abierta

2.4.2. Utilización de búferes

Un búfer es un área de memoria de almacenamiento temporal.

La técnica de utilización de búferes se basa en no acceder


directamente al dispositivo de E/S. Los datos son leídos y escritos
en un área de memoria intermedia (búfer). Las operaciones
hechas en el búfer se reflejan físicamente en el dispositivo de E/S
(por ejemplo una impresora) sólo cuando el dispositivo está
preparado.

La utilización de búferes optimizan el rendimiento ya que la CPU no tiene que


esperar a que el dispositivo de E/S esté preparado, en vez de esperar sigue
mandando la información al búfer hasta que el dispositivo quede libre.

Como puede adivinarse, los búferes mejoran la velocidad en las operaciones de


E/S pero no son un remedio infalible porque podemos llenar el búfer y que el
dispositivo de E/S siga sin estar disponible. Si se produce esta situación la CPU no
tendrá más remedio que esperar. Es por ello que podemos afirmar que
principalmente su eficacia se percibe amortiguando picos temporales de alta
actividad en operaciones de E/S.

2.4.3. Técnica de spooling

Spooling viene del inglés “Simultaneous Peripheral Operation


On-Line”: Se trata de un proceso mediante el cual múltiples
programas pueden utilizan un dispositivo de E/S de forma
simultánea sin tener que esperar a que dicho dispositivo esté
disponible. El programa lee y escribe sobre el disco en vez de
hacerlo directamente sobre el dispositivo de E/S.

Como hemos visto anteriormente la idea de los búferes es buena, más aun
considerando que los búferes emplean la memoria ya que se trata del medio más
rápido. Es por esta razón, la rapidez, que la memoria está siendo continuamente
demandada por los distintos componentes y programas que están ejecutándose en
el ordenador. Debido a esto, no se puede abusar de ella como mecanismo de
almacenamiento temporal.

12 Evolución Histórica de los Sistemas Operativos


Sistemas Operativos I 02

De nuevo, una mejora en hardware, en este caso la creación de los discos, provoca
una mejora en el SO. Los discos permiten ser utilizados como enormes búferes
donde almacenar la información temporal. Son más lentos que la memoria pero hay
más cantidad, hecho que los hacen perfectos para guardar la información temporal
que se produce en la comunicación con los dispositivos de E/S.

Utilizando los discos como enormes búferes los


programas no tienen que esperar a los dispositivos de
E/S ya que leen y escriben directamente sobre el disco.
Será el SO el encargado de revisar los distintos trabajos
pendientes que están en el disco y llevarlos a los
dispositivos de E/S según un orden establecido.

Al tener todos los trabajos en el disco el Sistema Operativo puede elegir cual es el
más adecuado en cada momento, por lo que la optimización es doble. A esta
técnica de seleccionar un trabajo u otro se denomina “job pool”.

Evolución Histórica de los Sistemas Operativos 13


Formación Abierta

2.5. Multiprogramación

Es la técnica que permite que dos o más programas


ocupen la misma unidad de memoria principal y que
sean ejecutados al mismo tiempo.

Así por ejemplo mientras se ejecutan operaciones


de entrada y salida de un programa, la unidad
central de proceso puede ocuparse en realizar
operaciones distintas de las de E/S pertenecientes a
otros programas. La multiprogramación se refiere a
dos o más programas corriendo o procesándose al
mismo tiempo; La multiprogramación se controla a
través del sistema.

Las técnicas de spooling, offline y búferes creadas con el fin de optimizar las
operaciones de E/S, mejoran sensiblemente el rendimiento de la CPU pero no
aseguran que la CPU vaya a estar ociosa en algún momento. Dichas técnicas son
sin duda un gran avance ya que hacen que la ejecución de un programa no se
detenga por no estar disponible el dispositivo de E/S, pero no aseguran que un
segundo programa tenga que esperar hasta que el primero acabe sus
operaciones de E/S.

Antes de la llegada de la Multiprogramación los programas se ejecutaban en serie,


es decir, mientras se estaba ejecutando las operaciones de E/S de una aplicación
la CPU quedaba ociosa, quedándose el resto de programas que necesitaban el uso
de la CPU esperando.

Con la llegada de la Multiprogramación los procesos se entrelazan trabajando al


mismo tiempo la CPU y las E/S, mejorando de nuevo el rendimiento del ordenador.
El resultado es que se terminan más trabajos en menos tiempo.

Figura 2.1. Sin Multiprogramación.

14 Evolución Histórica de los Sistemas Operativos


Sistemas Operativos I 02

Figura 2.2. Con Multiprogramación.

Las figuras anteriores demuestran de forma gráfica que con multiprogramación los
procesos se ejecutan antes. Tenemos dos procesos, P1 y P2, ambos son procesos
que necesitan primero el uso de la CPU, luego realizar operaciones de entrada y
salida y para terminar de nuevo CPU.

Como se puede observar, con multiprogramación, mientras el proceso uno (P1)


está realizando sus operaciones de entrada y salida, el proceso dos (P2) ocupa la
CPU. Cuando a P2 le toca realizar sus operaciones E/S las hace sin problema, a
pesar de que P1 está también con sus operaciones E/S. Esto es posible porque,
como hemos aprendido anteriormente, las técnicas de spooling permiten que un
proceso realice sus operaciones de E/S aunque el dispositivo de E/S no esté listo.

Los sistemas con multiprogramación son mucho más


complejos porque surgen nuevos problemas derivados de
poder entrelazar la ejecución de varios procesos. Por
ejemplo, con multiprogramación cuando un proceso deja
libre la CPU el SO tiene que elegir qué proceso tiene
derecho a utilizarla.

1. Nuevos retos propios de multiprogramación


Efectivamente, la multiprogramación conlleva solucionar una serie de problemas
que antes no existían ya que los procesos se ejecutaban uno detrás de otro. No
había riesgo de que la máquina se quedara bloqueada debido a una mala
planificación de la CPU, en donde el proceso uno se queda esperando que el
proceso dos termine y a su vez que el proceso dos se queda esperando a que el
proceso uno finalice. Los nuevos aspectos a tener en cuenta con la
multiprogramación son los siguientes:

 Planificación de la CPU: El SO tiene que elegir qué proceso va a utilzar la


CPU.

 Planificación de dispositivos: El SO tiene que evitar conflictos por acceso


simultáneo de la E/S.

Evolución Histórica de los Sistemas Operativos 15


Formación Abierta

 Gestión de memoria: Al haber varios procesos en memoria tiene que


repartirla y gestionarla entre los procesos existentes.
 Nuevos aspectos de protección: Al haber varios procesos en memoria
tiene asegurar que un proceso no va a escribir en zona de memoria utilizada
por otro proceso.
 Soluciones al interbloqueo: El sistema operativo tiene que evitar
situaciones en las que el ordenador se queda bloqueado porque un proceso
está esperanndo a que termine otro y dicho otro a que termine el uno.

En posteriores unidades didácticas veremos a fondo las


diferentes técnicas para evitar la situación de
interbloqueo.

16 Evolución Histórica de los Sistemas Operativos


Sistemas Operativos I 02

2.6. Tiempo compartido

En este recorrido por la evolución de los SO,


hemos visto que el programador dejaba su trabajo y
era el monitor residente el que se encargaba de
ejecutarlo, es decir no había interacción con el
ordenador por parte del usuario. El tiempo
compartido nace como respuesta a la interacción
entre uno o varios usuarios con el ordenador.

Tiempo compartido, también conocido en inglés


como “Time Sharing” es el producto de sumar dos
variables: Multiprogramación e interactividad por
parte del usuario.

Definición 1

Método de operación de grandes ordenadores que


permite la utilización simultánea por varios
usuarios.

Definición 2

Sistema de trabajo de un ordenador gracias al cual


se atienden peticiones de diferentes procesos de
forma aparentemente simultánea. Esta ilusión es
creada dando respuesta con la suficiente velocidad
a cada proceso creando la sensación de dedicación
exclusiva. Internamente el procesador alterna su
dedicación entre los distintos procesos pendientes
de forma concurrente y no simultánea.

Definición 3

Todos los programas que se encuentran en la


memoria se consideran como si estuvieran
ejecutándose. Cada programa se ejecuta, según su
turno, por la CPU durante un tiempo prefijado al
cabo del cual se produce una interrupción y pasa a
ejecutar el programa siguiente.

Evolución Histórica de los Sistemas Operativos 17


Formación Abierta

Hemos visto anteriormente en esta unidad didáctica que en los sistemas por lotes el
usuario no interviene durante la ejecución del programa, por lo que el sistema
operativo, conocido como el monitor residente, agrupaba las tareas a ejecutar
basándose en si realizaban tareas similares o no.

Con la llegada de la interactividad el SO tiene que organizarse de otra manera para


poder dar servicio a todos los usuarios. Si el SO siguiera organizándose de la
misma manera que hasta entonces se hubieran producido grandes injusticias en las
que un usuario podría monopolizar el ordenador durante gran cantidad de tiempo
mientras el resto se queda esperando hasta que sus procesos entren en la CPU.

El objetivo de la nueva planificación es que todos los usuarios tengan la impresión


de tener un ordenador para ellos solos.

¿Cómo se consigue este objetivo? El truco está en


repartir el tiempo de la CPU entre los distintos procesos
de los usuarios. Cada proceso dispone de una rodaja de
tiempo periódica. Si el periodo es lo bastante pequeño, el
usuario no lo percibe.

Con el tiempo compartido se pierde productividad de


CPU, pero se gana en productividad humana.

18 Evolución Histórica de los Sistemas Operativos


Sistemas Operativos I 02

2.7. Ordenadores personales

Hasta el momento hemos estado continuamente


hablando de grandes ordenadores y por supuesto, caros,
a los que tenían accesos pocas personas.

En los años 80, la aparición del microprocesador permitió fabricar computadores


baratos asequibles para el consumo de masas. El resultado fue el nacimiento de los
primeros ordenadores personales también llamados microordenadores.

Oficialmente el término ordenador personal o computadora personal, en inglés


“Personal Computer” o simplemente PC, tiene varios significados:

La gama de ordenadores personales de IBM que


originaron el uso del término.

Término genérico utilizado para referirse a


microordenadores que son compatibles con las
especificación de IBM.

Término genérico utilizado a veces para referirse a todos


los microordenadores.

A diferencia de los grandes ordenadores, el uso de los microordenadores estaba


destinado al uso individual y no al experto. Los sistemas operativos de los
ordenadores personales daban máxima importancia a la facilidad de uso y a
ofrecían bajos tiempos de respuesta, renunciando a otros aspectos más complejos
como la protección, multiprogramación, etc.). De esta nueva filosofía nacieron los
primeros interfaces de usuario “amigables”, los llamados WIMP.

WIMP: windows, icons, menus, pointers.

Evolución Histórica de los Sistemas Operativos 19


Formación Abierta

2.8. Sistemas paralelos multiprocesador

Los sistemas operativos han ido evolucionando por


cambios y mejoras en el hardware, adaptándose y
ofreciendo soluciones a los nuevos retos que se les
ha ido presentando. Hasta el momento, hemos dado
por hecho que el ordenador tenía un único
procesador porque así era. La incorporación de
varios procesadores en un ordenador supuso un
nuevo reto para los sistemas operativos.

Los ordenadores con más de un procesador pueden


ejecutar varias instrucciones simultáneamente,
en paralelo, compartiendo una memoria común.
Por restricciones de tecnología tan sólo es posible
añadir decenas o centenares de procesadores dentro
de un mismo ordenador.

Ventajas
Aumento de velocidad de procesamiento con bajo coste: Un procesador no
supone un gran coste, sin embargo aumenta notablemente la capacidad de
procesamiento al poder realizar varios procesos al mismo tiempo.

Cierta tolerancia a fallos: Si uno de los dos procesadores queda inservible


siempre disponemos del resto.

Inconvenientes:
Necesidad de sincronización entre procesos: Como hay varios procesadores
es necesario sincronozar lso prcesos que se ejecutan en uno y en otro.

20 Evolución Histórica de los Sistemas Operativos


Sistemas Operativos I 02

2.9. Sistemas distribuídos


Con la idea de aumentar la capacidad de procesamiento que hemos estudiado con
los sistemas paralelos multiprocesador nacen los sistemas distribuidos.

Los sistemas distribuidos son múltiples procesadores


conectados mediante una red de ordenadores. En vez
de meter varios procesadores dentro de un ordenador, se
comunican entre ellos compartiendo el proceso de una
tarea entre todos. Se dice que son sistemas débilmente
acoplados porque los procesadores no comparten
memoria ni reloj.

Ventajas
Altamente escalable: Se pueden conectar hasta millones de procesadores, por
ejemplo a través de Internet.

Compartición de recursos dispersos: Se comparten ordenadores alo largo y


ancho del mundo a través de redes que los interconectan.

Ayuda al trabajo cooperativo de equipos humanos: Equipos humanos


cooperan ejecutando con sus ordenadores porciones de una aplicación. Luego
juntan el resultado parcial de cada uno de ellos y obtienen el resultado

Aumento de velocidad: Múltiples procesadores provocan por supuesto un


aumento de velocidad de proceso.

Fiabilidad elevada: Si un ordenador se rompe no es un gran mal porque el


resto sigue funcionando.

Inconvenientes
No comparten memoria: la comunicación es más compleja y no se puede
tener un estado global.

Red de comunicaciones no fiable: si los conductos de la red se estropean los


ordenadores dejan de estar comunicados.

Heterogeneidad de los nodos: Cada ordenador puede ser completamente


distinto a otro. Aunque pueda parecer a priori una ventaja, se trata de una
desventaja porque es complejo programar y sincronizar procesos que se van a
ejecutar en procesadores y sistemas operativos completamente diferentes los
unos de los otros.

Evolución Histórica de los Sistemas Operativos 21


Formación Abierta

A finales de los años 90 se hicieron muy famosos


salvapantallas que actuaban a modo de sistemas
distribuidos ya que ejecutaban en millones de
ordenadores el mismo programa, concretamente se hizo
muy famoso uno que trataba de encontrar vida
extraterrestre.

Los sistemas distribuidos también se han utilizado mucho


para intentar romper algoritmos de cifrado empleados en
seguridad informática. A un ordenador le costaría siglos
resolver un algoritmo de cifrado, sin embargo millones de
ellos operando conjuntamente le puede llegar a costar
relativamente poco.

22 Evolución Histórica de los Sistemas Operativos


Sistemas Operativos I 02

2.10. Sistemas en tiempo real


Hay casos en los que el tiempo compartido puede ser un problema más que una
ventaja. Hay escenarios en los que es esencial que se ejecute
satisfactoriamente una tarea en un tiempo fijado. Si el SO asigna tiempos de
proceso a otros procesos puede poner en jaque la terminación del proceso crítico
dentro del tiempo establecido. Estos escenarios son por ejemplo sistemas de
control industrial, sistemas multimedia, etc.

Existen muchas definiciones de sistemas de Tiempo Real, muchas de ellas


contradictorias. Desafortunadamente el tema es controversial y no parece haber
algún acuerdo al 100% sobre la terminología.

Definición 1

La definición canónica de un sistema de tiempo real de


Donald Gillies es la siguiente: “Un sistema de tiempo real
es aquel en el que, para que las operaciones
computacionales estén correctas, no depende sólo de
que la lógica e implementación de los programas
computacionales sea correcto, sino también en el tiempo
en el que dicha operación entregó su resultado. Si las
restricciones de tiempo no son respetadas el sistema
se dice que ha fallado.”

Definición 2

Otros han agregado: “Por lo tanto, es esencial que las


restricciones de tiempo en los sistemas sean cumplidas.
El garantizar el comportamiento en el tiempo requerido
necesita que el sistema sea predecible. Es también
deseable que el sistema obtenga un alto grado de
utilización a la vez que cumple con los requerimientos de
tiempo.”

Tipos de sistemas en tiempo real

Existen dos tipos de sistemas en tiempo real

Crítico: para tareas que siempre deben cumplir los plazos de terminación.
Adecuados para la industria. Muy simples, incompatibles con tiempo
compartido, memoria virtual, etc.

No críticos: intentan cumplir los lazos, pero no los garantizan al 100%.


Adecuados para multimedia, etc.

Evolución Histórica de los Sistemas Operativos 23


Formación Abierta

Resumen

El objetivo de los sistemas por lotes es sacar más provecho a la máquina


gracias a una mejor organización del trabajo.

El primer Sistema Operativo propiamente dicho nace cuando las tareas del
operador son sustituidas por un programa residente (monitor residente) que
realiza automáticamente las acciones que anteriormente realizaba el operador.

Tal y como ha ido sucediendo a lo largo de la evolución de los Sistemas


Operativos, el problema, de hardware en este caso, provocó la adopción de
mejoras en los SO que optimizasen el acceso a dispositivos de E/S. Las
técnicas fueron las siguientes: Operaciones OffLine (fuera de línea).
Utilización de búferes y la técnica de spooling.

Multiprogramación es la técnica que permite que dos o más programas ocupen


la misma unidad de memoria principal y que sean ejecutados al mismo tiempo.

Tiempo compartido, también conocido en inglés como “Time Sharing” es el


producto de sumar dos variables: Multiprogramación e interactividad por parte
del usuario.

Los ordenadores con más de un procesador pueden ejecutar varias


instrucciones simultáneamente, en paralelo, compartiendo una memoria
común. Por restricciones de tecnología tan sólo es posible añadir decenas o
centenares de procesadores dentro de un mismo ordenador.

Los sistemas distribuidos son múltiples procesadores conectados mediante


una red de ordenadores. En vez de meter varios procesadores dentro de un
ordenador, se comunican entre ellos compartiendo el proceso de una tarea
entre todos. Se dice que son sistemas débilmente acoplados porque los
procesadores no comparten memoria ni reloj.

Tiempo Real: Hay escenarios en los que es esencial que se ejecute


satisfactoriamente una tarea en un tiempo fijado como por ejemplo en
aplicaciones multimedia.

24 Evolución Histórica de los Sistemas Operativos


Formación Abierta

Introducción

Para comprender a fondo las funciones de un sistema operativo es necesario


conocer primero los dispositivos de E/S que lo componen y cómo estos se
comunican con la CPU.

Una vez que hayamos comprendido el proceso de comunicación entre dichos


componentes y la CPU, estaremos preparados para entender uno de los procesos
más importantes, la carga del sistema operativo.

Cuando el sistema operativo se ha cargado, se deja paso a que el usuario


interaccione con el ordenador pudiendo ejecutar programas de usuario. Dichos
programas podrían comprometer la estabilidad del sistema si no hubiera unas
medidas de protección, las cuales también veremos en profundidad en esta unidad
didáctica.

4 Estructura de un ordenador
Sistemas Operativos I 03

3.1. Estructura de la E/S


En unidades didácticas anteriores hemos aprendido que los dispositivos de E/S han
jugado un papel importante en la evolución y mejora de los sistemas operativos. A
continuación vamos a ver en detalle los mecanismos mediante los cuales los
dispositivos se comunican con la CPU

3.1.1. Comunicación entre dispositivos

Figura 3.1. Estructura de la E/S.

Comunicación física
Los distintos dispositivos de E/S están conectados físicamente con la CPU a través
de un cable denominado bus del sistema.

Sin embargo, la comunicación entre los dispositivos de E/S y la CPU no es directa.


Los dispositivos se conectan al bus del sistema a través de los llamados
controladores de E/S.

Comunicación lógica
Cuando la CPU se quiere comunicar con un dispositivo lo hace claro está a través
de su controlador asociado. Para ello la CPU utiliza instrucciones especiales o
utiliza unas direcciones de memoria concretas. En el caso de las direcciones de
memoria, ambos la CPU y la controladora establecen primeramente un espacio de
memoria que utilizarán para comunicarse, la CPU notifica en dicho espacio de
memoria las órdenes a ejecutar y el controlador lee de dicha memoria las órdenes y
las ejecuta.

Estructura de un ordenador 5
Formación Abierta

Como vimos en la unidad didáctica anterior, los


dispositivos de E/S suelen ser lentos. Para mejorar el
acceso a ellos, cada controlador tiene un búfer local.
La CPU envía y recoge datos del búfer.

Una vez que la CPU le ha dicho al controlador lo que tiene que hacer se
desentiende y se pone en marcha con otras funciones, mientras tanto la
controladora realiza su trabajo. La CPU en vez de estar revisando continuamente el
estado de la controladora delega en el controlador la responsabilidad de la
comunicación. Será el controlador el encargado de avisar a la CPU cuando lo vea
oportuno, como por la finalización de una operación o la llegada de nuevos. El
mecanismo mediante el cual el controlador se comunica con la CPU se denomina
interrupción.

3.1.2. Interrupciones
Cuando llega una señal de interrupción a la CPU, ésta suspende lo que está
haciendo y ejecuta una rutina de servicio de interrupción (RSI).

Antes de ejecutar la RSI, hay que guardar el estado de la CPU, para que pueda
reanudar lo que estaba haciendo después de completar la RSI.

¿Cómo sabe la CPU qué dispositivo ha interrumpido?

La CPU tiene dos formas de saber que dispositivo es el que ha realizado la


interrupción:

1. Polling: La CPU se recorre todos los dispositivos instalados y les pregunta


uno a uno si ha sido el que ha realizado la interrupción. En el momento que
uno de ellos le contesta afirmativamente deja de preguntar.
2. Interrupciones vectorizadas: El dispositivo envía un número que lo
identifica unívocamente entre todos los dispositivos. Dicho número lo envía
a través del bus y cuando llega a la CPU esta ya sabe de quién procede,
evitando preguntar uno a uno a todos los dispositivos.

6 Estructura de un ordenador
Sistemas Operativos I 03

Vector de interrupciones: La CPU utiliza una tabla en


memoria con las direcciones de las distintas RSI que
puede ejecutar. El dispositivo que interrumpe envía un
número por el bus de datos. Este número sirve de índice
en el vector de interrupciones, y la CPU ejecuta la RSI
correspondiente.

¿Cuándo se carga en memoria dicho vector de


interrupciones?

¿Cómo se carga en memoria dicho vector de


interrupciones?

La respuesta a la primera pregunta es relativamente sencilla, efectivamente, la


carga del vector de interrupciones se realiza con la carga del sistema operativo.

La respuesta a la segunda pregunta ya no es tan sencilla, para entender el cómo


tendríamos que adentrarnos en el proceso de carga del sistema operativo.

3.1.3. Acceso directo a memoria (DMA)

El Acceso directo a memoria (DMA, del inglés Direct


Memory Access) permite a cierto tipo de componentes de
ordenador acceder a la memoria del sistema para leer y/o
escribir independientemente de la CPU principal. Muchos
sistemas hardware utilizan DMA, incluyendo
controladores de unidades de disco, tarjetas gráficas, y
tarjetas de sonido.

Estructura de un ordenador 7
Formación Abierta

DMA es una característica esencial en todos los


ordenadores modernos, ya que permite a dispositivos de
diferentes velocidades comunicarse sin someter a la CPU
a una carga masiva de interrupciones ya que dichos
dispositivos pueden acceder a la memoria principal sin
intervención de la CPU. Con el DMA se puede realizar en
una sola operación/interrupción lo que en otros sistemas
requeriría varias operaciones entre CPU y E/S.

Una transferencia DMA consiste principalmente en copiar un bloque de memoria de


un dispositivo a otro. En lugar de que la CPU inicie la transferencia, la transferencia
se lleva a cabo por el controlador DMA. Un ejemplo típico es mover un bloque de
memoria desde una memoria externa a una interna más rápida. Tal operación no
ocupa el procesador y como resultado puede ser planificado para efectuar otras
tareas. Las transferencias DMA son esenciales para aumentar el rendimiento de
aplicaciones que requieran muchos recursos.

El DMA Scatter-gather permite la transferencia de datos a


varias áreas de memoria en una transacción DMA simple.
Es equivalente al encadenamiento de múltiples peticiones
DMA simples. De nuevo, el objetivo es liberar a la CPU
de las tareas de copia de datos e interrupciones de
entrada/salida múltiples.

8 Estructura de un ordenador
Sistemas Operativos I 03

3.2. Proceso de carga del Sistema


Operativo
Llegados a este punto y teniendo en cuenta los conocimientos adquiridos con las
unidades didácticas anteriores ya estamos preparados para comprender uno de los
procesos clave de un ordenador, la carga del sistema operativo así como los
elementos que forman parte en dicho proceso.

Para ver de forma correcta el proceso de arranque primero vamos a ver por
separado los elementos que forman parte y luego pasaremos a ver cómo
interactúan entre ellos.

1. Elementos del proceso de arranque


Antes de adentrarnos en el proceso de arranque es necesario que tengamos claro
el significado de algunos de los componentes y definiciones que forman parte de
dicho proceso:

 Memoria ROM.
 Memoria RAM.
 BIOS.

Memoria ROM

ROM es el acrónimo de Read-Only Memory (memoria


de sólo lectura). Es una “memoria de semiconductor” no
destructible, es decir, que no se puede escribir sobre ella,
y que conserva intacta la información almacenada,
incluso en el caso de interrupción de corriente. La ROM
suele almacenar la configuración del sistema o el
programa de arranque del ordenador.

La memoria de sólo lectura o ROM es utilizada como medio de almacenamiento de


datos en los ordenadores. Debido a que no se puede escribir fácilmente, su uso
principal reside en la distribución de programas que están estrechamente ligados al
soporte físico del ordenador, y que seguramente no necesitarán actualización. Por
ejemplo, una tarjeta gráfica puede realizar algunas funciones básicas a través de
los programas contenidos en la ROM.

Estructura de un ordenador 9
Formación Abierta

Hay una tendencia a poner cada vez menos programas en la estática ROM, y más
en los discos, haciendo los cambios mucho más fáciles. Los ordenadores
domésticos a comienzos de los 80 venían con todo su sistema operativo en ROM.
No había otra alternativa razonable ya que las unidades de disco eran generalmente
opcionales. La actualización a una nueva versión significa usar un soldador o un
grupo de interruptores DIP y reemplazar el viejo chip de ROM por uno nuevo.

En el año 2000 los sistemas operativos en general ya no van en ROM. Todavía los
ordenadores pueden dejar algunos de sus programas en memoria ROM, pero
incluso en este caso, es más frecuente que vaya en memoria flash. Los teléfonos
móviles y los asistentes personales digitales (PDA) suelen tener programas en
memoria ROM (o, por lo menos en memoria flash).

Algunas de las consolas de videojuegos que utilizan


programas basados en la memoria ROM son la Super
Nintendo, la Mega Drive o la Game Boy. Estas memorias
ROM, pegadas a cajas de plástico aptas para ser
utilizadas e introducidas repetidas veces, son conocidas
como cartuchos.

Por extensión la palabra ROM puede referirse también a


un archivo de datos que contenga una imagen del
programa que se distribuye normalmente en memoria
ROM, como una copia de un cartucho de videojuego.

Una razón de que todavía se utilice la memoria ROM para almacenar datos es la
velocidad ya que los discos son más lentos. Aún más importante, no se puede leer
un programa que es necesario para ejecutar un disco desde el propio disco.

La memoria RAM normalmente es más rápida de leer que la mayoría de las


memorias ROM, por lo tanto el contenido ROM se suele trasvasar normalmente a la
memoria RAM cuando se utiliza.

Memoria RAM

RAM es el acrónimo inglés de Random-Access Memory


(memoria de acceso aleatorio). Memoria de
semiconductor en la que se puede tanto leer como
escribir. Se trata de una memoria volátil, es decir, pierde
su contenido al desconectar la energía eléctrica. Se
utilizan normalmente como memorias temporales para
almacenar resultados intermedios y datos similares no
permanentes.

10 Estructura de un ordenador
Sistemas Operativos I 03

Su denominación surge en contraposición a las denominadas memorias de acceso


secuencial. Debido a que en los comienzos de la computación las memorias
principales (o primarias) de los ordenadores eran siempre de tipo RAM y las
memorias secundarias (o masivas) eran de acceso secuencial (cintas o tarjetas
perforadas), es frecuente que se hable de memoria RAM para hacer referencia a la
memoria principal de un ordenador.

En estas memorias se accede a cada celda (generalmente se direcciona a nivel de


bytes) mediante un cableado interno, es decir, cada byte tiene un camino prefijado
para entrar y salir, a diferencia de otros tipos de almacenamiento, en las que hay
una cabeza lector-grabadora que tiene que ubicarse en la posición deseada antes
de leer el dato deseado.

Se dicen "de acceso aleatorio" porque los diferentes


accesos son independientes entre sí. Por ejemplo: si un
disco rígido debe hacer dos accesos consecutivos a
sectores alejados físicamente entre sí, se pierde un
tiempo en mover la cabeza hasta la pista deseada (o
esperar que el sector pase por debajo, si ambos están en
la misma pista), tiempo que no se pierde en la RAM.

Se dividen en estáticas y dinámicas. Una memoria RAM estática mantiene su


contenido inalterado mientras esté alimentada. La información contenida en una
memoria RAM dinámica se degrada con el tiempo, llegando ésta a desaparecer, a
pesar de estar alimentada. Para evitarlo hay que restaurar la información contenida
en sus celdas a intervalos regulares, operación denominada refresco.

Las memorias se agrupan en módulos, que se conectan a la placa madre del


ordenador. Según los tipos de conectores que lleven los módulos, se clasifican en
Módulos SIMM (Single In-line Memory Module) con 30 o 72 contactos. Y los
Módulos DIMM con 168 contactos.

BIOS

Definición 1

BIOS es la abreviatura de Basic Input/Output System e


identifica al software o conjunto de programas que
arrancan el computador (antes de encontrarse un disco
de sistema) cuando se pulsa el botón de encendido.

La BIOS se encuentra físicamente almacenada en la


ROM cuyo almacenamiento es permanente, pero no en la
RAM pues al apagar el computador se borraría.

Estructura de un ordenador 11
Formación Abierta

Definición 2

BIOS: El sistema básico de entrada/salida Basic Input-


Output System es un código de interfaz que localiza y
carga el sistema operativo en la RAM.

La BIOS proporciona la comunicación de bajo-nivel,


operación y configuración con el hardware del sistema,
que como mínimo maneja el teclado y proporciona salida
básica durante el arranque. La BIOS usualmente está
escrita en lenguaje ensamblador.

El primer término BIOS, apareció en el sistema operativo CP/M, y describe la parte


de CP/M que se ejecutaba durante el arranque que iba unida directamente al
hardware (las máquinas de CP/M usualmente tenían un simple cargador arrancable
en la ROM, y nada más). La mayoría de las versiones de MS-DOS tiene un archivo
llamado "IBMBIO.COM" o "IO.SYS"que es análogo al CP/M BIOS.

En los primeros sistemas operativos para ordenadores PC (como el DOS), la BIOS


todavía estaba en funcionamiento tras el arranque y funcionamiento del sistema
operativo. El acceso a dispositivos como la disquetera y el disco duro se hacían a
través del BIOS. Sin embargo, los sistemas operativos más modernos realizan
estas tareas por sí mismos, sin necesidad de llamadas a las rutinas de la BIOS.

Al encender la computadora, la BIOS se carga


automáticamente en la memoria principal (RAM) y se
ejecuta por la CPU (aunque en algunos casos la CPU
ejecute la BIOS directamente desde la ROM si cargarla
en la memoria RAM).

Realiza una rutina de verificación e inicialización de los


componentes presentes en la computadora, a través de
un proceso denominado POST (Power On Self Test).

Al finalizar esta fase, busca el código de inicio del sistema


operativo (bootstrap) en algunos de los dispositivos de
memoria secundaria (discos duros, etc.) presentes, lo
carga en memoria y transfiere el control de la
computadora a éste.

12 Estructura de un ordenador
Sistemas Operativos I 03

3.2.2. Cargador de arranque

Un cargador de arranque o de bootaje es un programa


que no tiene las plenas funcionalidades de un sistema
operativo, pero está hecho a medida, por lo que puede
cargar los programas suficientes para que comience el
sistema operativo.

Normalmente se utilizan los cargadores de arranque multi-etapas, en los que varios


pequeños programas se suman los unos a los otros, hasta que el último de ellos
carga el sistema operativo.

En los ordenadores modernos, el proceso de arranque


comienza con la CPU ejecutando los programas
contenidos en la memoria ROM en una dirección
predefinida (se configura la CPU para ejecutar este
programa, sin ayuda externa, al encender el ordenador).

3.2.3. Cargador de arranque de segundo nivel

Son programas contiene funcionalidades rudimentarias


para buscar unidades que se puedan seleccionar para
participar en el arranque, y cargar un pequeño programa
desde una sección especial de la unidad más
prometedora.

El pequeño programa no es en sí mismo un sistema


operativo, sino simplemente un cargador de arranque de
segundo nivel, como Lilo o Grub, que es capaz de cargar
el sistema operativo propiamente dicho, y finalmente,
transferirle el control. El sistema se auto-iniciará y puede
cargar controladores de dispositivos y otros programas
que son necesarios para el normal funcionamiento del
sistema operativo.

Estructura de un ordenador 13
Formación Abierta

El proceso de arranque se considera completo cuando el ordenador está preparado


para contestar a los requerimientos del exterior. El ordenador moderno típico
arranca en aproximadamente un minuto (del cual, 15 segundos son empleados por
los cargadores de arranque preliminares, y el resto por el cargador del sistema
operativo), mientras que los grandes servidores pueden necesitar varios minutos
para arrancar y comenzar todos los servicios; para asegurar una alta disponibilidad,
ofrecen unos servicios antes que otros.

La mayoría de los “sistemas empotrados” deben arrancar casi instantáneamente,


por ejemplo, esperar un minuto para poder ver la TV se considera inaceptable. Por
ello, tienen el sistema operativo en la ROM o memoria flash, gracias a lo que
pueden ser ejecutados de forma casi instantánea.

3.2.4. Secuencia de arranque

Arranque, bootaje o booteo es un proceso que inicia el


sistema operativo cuando el usuario enciende un sistema
informático. En inglés se conoce como booting.

Fue traducido del término en inglés boot, como


"arranque" ó "inicialización" de un ordenador o
dispositivo, concretamente suele referirse al arranque del
sistema operativo.

En informática, una secuencia de arranque es la serie de operaciones que el


ordenador ejecuta cuando es encendido y que cargan un sistema operativo

Cuando el usuario pulsa sobre el botón de arrancar se pone en marcha el proceso o


secuencia de arranque:

1. La CPU accede a la memoria ROM y carga la BIOS, la cual toma el


control gestionando el proceso inicial de arranque. También gestiona las
operaciones básicas de entrada y salida, como por ejemplo la entrada por
teclado.
2. La BIOS identifica al software o conjunto de programas que arrancan el
computador (cargador de arranque). Una vez identificado el cargador de
arranque lo carga en memoria y lo ejecuta, cediéndole el control del proceso
de arranque. Los cargadores pueden ser:
a. Cargador de primer nivel: Toma el control del proceso de carga e
inicia la carga del sistema operativo.

14 Estructura de un ordenador
Sistemas Operativos I 03

b. Cargador de segundo nivel: se encarga de buscar los cargadores de


arranque de primer nivel para cederles el control a uno de ellos. Si el
ordenador tiene varios sistemas operativos instalados es usual que
haya cargadores de segundo nivel que ofrecen al usuario la opción de
seleccionar el SO con el que quiere arrancar. Cuando el usuario
selecciona una opción en realidad lo que está haciendo es decirle al
cargador de arranque de segundo nivel el cargador de arranque de
primer nivel al que tiene que cederle el control.
c. En la carga del S.O. se detecta el Hardware instalado ya que va a ser
gestionado por él. En este proceso de detección de Hardware se
detectan los dispositivos y se instalan todas las RSI (rutinas de servicio
de interrupción) en el vector de interrupciones.
d. Cuando el S.O. termina de cargarse, queda en espera o bien cede el
control a algún programa inicial de usuario.

3.2.5. El SO, Software guiado por eventos

Una vez que el S.O. se ha cargado quedan en espera o


bien cede el control a algún programa inicial de usuario.

El sistema operativo sólo se activa cuando ocurre un evento que tiene que atender,
es por esta razón que se dice que es un software guiado por eventos. Ahora bien,
hay varios tipos de eventos que pueden activar al operativo:

 Interrupciones del hardware.


 Interrupciones de software.
 Llamadas al sistema.
 Excepciones.

Cada tipo de evento activa una RSI diferente, indexada a


través del vector de interrupciones.

Estructura de un ordenador 15
Formación Abierta

Hasta ahora hemos visto cómo funcionan las interrupciones de hardware a través
de los dispositivos de E/S. Las llamadas al sistema y las excepciones funcionan
como interrupciones del software: se gestionan igual que las interrupciones del
hardware, pero las provoca la propia CPU.

Nosotros al programar podemos provocar interrupciones de software, ya sea


adrede (realizando una llamada al sistema o lanzando una excepción), o sin querer
(cuando la aplicación que hemos programado falla y desencadena una excepción
que no hemos atrapado en la programación).

16 Estructura de un ordenador
Sistemas Operativos I 03

3.3. Protección del Hardware


Hemos visto en unidades didácticas anteriores que para que el sistema operativo
funcione adecuadamente hay que impedir que los programas de usuario puedan
realizar libremente ciertas operaciones:

Acceso a la memoria del S.O. y de otros programas.

Acceso directo a los dispositivos de E/S.

Utilizar la CPU todo el tiempo que quieran.

¿Cómo hace el sistema operativo para evitar estas


situaciones?

La solución es el denominado modo dual de operación.

Modo dual de operación


El sistema operativo distingue entre dos modos de ejecución, en los cuales se
permiten realizar distintos tipos de operaciones:

Modo privilegiado/supervisor/sistema: se pueden hacer todas las


operaciones. Este modo se activa cuando se ejectua código del código del S.O.

Modo no privilegiado/usuario: si se intenta ejecutar una instrucción


privilegiada, la CPU interrumpe la ejecución y genera una excepción. Este modo
se activa cuando se ejecuta código del usuario.

¿Cómo sabe el Sistema Operativo si una instrucción es


privilegiada o no?

En el proceso de carga del Sistema Operativo se define un repertorio de


instrucciones y las identifica como privilegiadas.

Estructura de un ordenador 17
Formación Abierta

¿Cuándo y cómo se cambia de modo?

 Por defecto la CPU arranca en modo privilegiado.


 Cuando el S.O. cede el control al usuario, conmuta
previamente a modo no privilegiado.
 Sólo se vuelve a modo privilegiado cuando el S.O.
recupera el control, es decir, cuando ocurre una
interrupción, una llamada al sistema o una excepción.

Figura 3.2. Cambio de modo.

Llamadas al sistema y modo dual


Cuando programamos podemos conmutar a modo sistema a través de una
interrupción de software, por ejemplo podemos generar una excepción o invocar
una llamada al sistema desde nuestro código. Al provocar una interrupción de
software estamos demandando la atención del sistema operativo. Antes de atender
nuestra llamada se conmuta a modo privilegiado porque se va a ejecutar código del
sistema operativo.

18 Estructura de un ordenador
Sistemas Operativos I 03

Ejemplo de llamada al sistema para realizar E/S

1. Protección de E/S
Uno de los aspectos a proteger es el acceso directo a los dispositivos de Entrada y
Salida. Toda operación de E/S ha de ser gestionada por el Sistema Operativo, por
lo que las operaciones de E/S se consideran privilegiadas.

El Sistema Operativo se comunica con los dispositivos mediante de dos maneras:

 Con instrucciones especiales (in,out).


 A través de la memoria (memory mapped):
Para proteger la E/S las instrucciones especiales han de ser privilegiadas y el
acceso a las direcciones que usa la E/S debe estar prohibido en modo usuario.

2. Protección de memoria
Para asegurar la protección de memoria hay que impedir que un programa de
usuario acceda a la memoria empleada por otro programa de usuario, o lo que es
aún más peligroso, que acceda a la memoria del Sistema Operativo.

Para conseguir esta protección se divide la memoria entre los procesos que se
están ejecutando. Cuando un proceso entra en ejecución se le asigna una dirección
de memoria base y una dirección de memoria límite, no pudiendo acceder a
ninguna otra área de memoria fuera del rango que le han establecido.

Estructura de un ordenador 19
Formación Abierta

Figura 3.3. Protección de memoria.

3.3.3. Protección contra abusos de CPU


El último de los aspectos de protección mencionados es el abuso de la CPU. Hay
que evitar que un proceso acapare indefinidamente el tiempo de CPU, por ejemplo
al entrar en un bucle infinito. Si esto ocurre y no hubiera ningún mecanismo de
control o estos fallaran, el programa de usuario se estaría ejecutando
continuamente, no dejando que ningún otro proceso se ejecute, incluido el propio
sistema operativo, el resultado se conoce coloquialmente como “cuelgue del sistema”.

¿Cómo evitar este tipo de abusos?

Parece complicado pero en realidad es bastante sencillo. La solución pasa por


utilizar un temporizador, el cual genera una interrupción tras un tiempo
especificado, así el S.O. recupera el control pudiendo asignar tiempo de CPU otro
proceso o simplemente “matar” el que se ha quedado en un bucle infinito:

El temporizador se inicializa a un valor determinado y se va decrementando con


cada pulso de reloj del sistema. Cuando el contador llega a cero, genera una
interrupción. El temporizador se usa también para implementar el tiempo
compartido como veremos en próximas unidades didácticas

Por supuesto, el acceso al temporizador se considera privilegiado para que un


programa de usuario no pueda modificarlo a su antojo.

20 Estructura de un ordenador
Sistemas Operativos I 03

Resumen

Los distintos dispositivos de E/S están conectados físicamente con la CPU a


través de un cable denominado bus del sistema. Los dispositivos se conectan
al bus del sistema a través de los llamados controladores de E/S

El mecanismo mediante el cual el controlador se comunica con la CPU se


denomina interrupción. Cuando llega una señal de interrupción a la CPU, ésta
suspende lo que está haciendo y ejecuta una rutina de servicio de interrupción
(RSI). Vector de interrupciones: La CPU utiliza una tabla en memoria con las
direcciones de las distintas RSI que puede ejecutar. El dispositivo que
interrumpe envía un número por el bus de datos. Este número sirve de índice
en el vector de interrupciones, y la CPU ejecuta la RSI correspondiente.

DMA es una característica esencial en todos los ordenadores modernos, ya


que permite a dispositivos de diferentes velocidades comunicarse sin someter
a la CPU a una carga masiva de interrupciones ya que dichos dispositivos
pueden acceder a la memoria principal sin intervención de la CPU. Con el
DMA se puede realizar en una sola operación/interrupción lo que en otros
sistemas requeriría varias operaciones entre CPU y E/S.

ROM es el acrónimo de Read-Only Memory (memoria de sólo lectura). Es una


“memoria de semiconductor” no destructible, es decir, que no se puede escribir
sobre ella, y que conserva intacta la información almacenada, incluso en el
caso de interrupción de corriente. La ROM suele almacenar la configuración
del sistema o el programa de arranque del ordenador.

RAM es el acrónimo inglés de Random-Access Memory (memoria de acceso


aleatorio). Memoria de semiconductor en la que se puede tanto leer como
escribir. Se trata de una memoria volátil, es decir, pierde su contenido al
desconectar la energía eléctrica. Se utilizan normalmente como memorias
temporales para almacenar resultados intermedios y datos similares no
permanentes.

BIOS es la abreviatura de Basic Input/Output System e identifica al software o


conjunto de programas que arrancan el computador (antes de encontrarse un
disco de sistema) cuando se pulsa el botón de encendido.

La BIOS se encuentra físicamente almacenada en la ROM cuyo


almacenamiento es permanente, pero no en la RAM pues al apagar el
computador se borraría.

Estructura de un ordenador 21
Formación Abierta

Al encender la computadora, la BIOS se carga y se ejecuta por la CPU.


Realiza una rutina de verificación e inicialización de los componentes
presentes en la computadora. Al finalizar esta fase, busca el código de inicio
del sistema operativo (bootstrap) en algunos de los dispositivos de memoria
secundaria (discos duros, etc.) presentes, lo carga en memoria y transfiere el
control de la computadora a éste.

Un cargador de arranque o de bootaje es un programa que no tiene las plenas


funcionalidades de un sistema operativo, pero está hecho a medida, por lo que
puede cargar los programas suficientes para que comience el sistema
operativo.

El sistema operativo distingue entre dos modos de ejecución, en los cuales se


permiten realizar distintos tipos de operaciones: Modo
privilegiado/supervisor/sistema y Modo no privilegiado/usuario.

22 Estructura de un ordenador
Sistemas Operativos I 04

Objetivos

Conocer los componentes de un Sistema Operativo.

Conocer las responsabilidades que un Sistema. Operativo tiene sobre los


diferentes componentes que lo forman.

Conocer los servicios que ofrece un Sistema Operativo, tanto al programador


como al usuario.

Conocer los mecanismos mediante los cuales el usuario y el programador


pueden hacer uso de los servicios que el S.O. ofrece.

Conocer los distintos modelos arquitectónicos de S.O clasificados por el tipo de


kernel que poseen.

Estructura de un Sistema Operativo 3


Formación Abierta

Introducción

En unidades didácticas anteriores hemos aprendido cual es el proceso de carga de


un Sistema Operativo.

En esta unidad didáctica conoceremos en profundidad los distintos componentes y


las funciones que desempeñan cada uno de ellos.

Toda la funcionalidad del S.O está disponible para desarrolladores y usuarios para
que hagan uso de ella. Veremos en esta unidad didáctica las distintas interfaces
que el S.O habilita para hacer uso de sus servicios.

Una vez que conozcamos dichos elementos nos adentraremos en la parte


fundamental de un S.O, el núcleo o también llamado kernel.

Existen varios tipos de kernel que dan lugar a los diferentes modelos arquitectónico
de S.O., Veremos las ventajas e inconvenientes de cada uno de ellos.

4 Estructura de un Sistema Operativo


Sistemas Operativos I 04

4.1. Componentes de un SO
Los componentes típicos de un Sistema Operativo son los siguientes:

Procesos.

Memoria.

Entrada/Salida.

Redes.

Protección.

Archivos.

Intérprete de órdenes.
Veamos a continuación las responsabilidades que tiene el Sistema Operativo en
cada uno de los componentes.

4.1.1. Gestión de procesos

Un proceso es un programa en ejecución. Para poder


ejecutarse, un proceso necesita tiempo de CPU, una
porción de memoria, archivos, E/S y demás recursos.

El S.O. tiene unas responsabilidades con respecto a los procesos. En posteriores


unidades didácticas ahondaremos en dichas responsabilidades. Son las siguientes:

 Creación y eliminación de procesos.


 Planificación de procesos: repartir la CPU entre los procesos activos.
 Sincronización entre procesos.
 Comunicación entre procesos.

Estructura de un Sistema Operativo 5


Formación Abierta

4.1.2. Gestión de memoria principal

La memoria es un recurso escaso por el que compiten


los distintos procesos.

El S.O. tiene unas responsabilidades con respecto a la memoria principal. Son las
siguientes:

 Conocer qué zonas de memoria están libres y cuáles están ocupadas.


 Decidir qué procesos hay que cargar cuando haya memoria libre.
 Reservar y liberar zonas de memoria según se solicite.
 Memoria virtual: utilizar el almacenamiento secundario como una extensión
de la memoria principal.

4.1.3. Gestión de la E/S

La E/S es un conjunto de dispositivos muy variados y


complejos de programar.

Los objetivos del S.O. respecto la E/S son:

 Proporcionar una interfaz uniforme para el acceso a los dispositivos


(independencia del dispositivo).

 Proporcionar manejadores para los dispositivos concretos.


 Tratar automáticamente los errores más típicos.
 Para los dispositivos de almacenamiento, utilizar cachés.
 Para los discos, planificar de forma óptima las peticiones.

6 Estructura de un Sistema Operativo


Sistemas Operativos I 04

4.1.4. Sistema de archivos

Un archivo es un conjunto de datos identificado por un


nombre. Los archivos se almacenan en dispositivos de
E/S. Un archivo es un concepto de alto nivel que no
existe en el hardware.

Funciones del S.O. en este caso son:

 Manipulación de archivos: crear, borrar, leer, escribir...


 Manipulación de directorios.
 Ubicar los archivos y directorios en los dispositivos de almacenamiento
secundario.
 Automatizar ciertos servicios: copia de seguridad, versiones, etc.

4.1.5. Sistema de protección

La protección abarca los mecanismos destinados a


controlar el acceso de los usuarios a los recursos, de
acuerdo con los privilegios que se definan.

Los objetivos del S.O son los siguientes:


 Definir el esquema general de protección: clases de usuarios, clases de
permisos/privilegios, etc.

 Definir mecanismos de acceso a los recursos: contraseñas, llaves,


capacidades, etc.
 Controlar el acceso a los recursos, denegando el acceso cuando no esté
permitido.

Estructura de un Sistema Operativo 7


Formación Abierta

4.1.6. Redes

En un sistema distribuido, existen varios ordenadores con


sus propios recursos locales (memoria, archivos, etc.),
conectados mediante una red.

En estos ambientes los objetivos del S.O. son:


 Proporcionar primitivas para conectarse con equipos remotos y acceder
de forma controlada a sus recursos: primitivas de comunicación (enviar y
recibir datos).
 Llamada remota a procedimiento (RPC: Remote Procedure Call): El
sistema Operativo ha de proporcionar mecanismos seguros para ejecutar
procesos que están en otra máquina de la red.

4.1.7. Intérprete de órdenes

Es una interfaz básica para que un usuario pueda


dialogar directamente con el S.O.

Con un intérprete de órdenes el usuario puede:

 Cargar programas.
 Abortar programas.
 Introducir datos a los programas.
 Trabajar con archivos.
 Trabajar con redes.

JCL (Job Control Language) en sistemas por lotes.

COMMAND.COM en MS-DOS.

shell en UNIX.

8 Estructura de un Sistema Operativo


Sistemas Operativos I 04

2. Servicios del SO
El S.O. ofrece a los programas una serie de servicios para trabajar en el ordenador,
de esta manera la labor de programación se simplifica a la vez que se consiguen
programas más robustos porque es el S.O. el que se encarga de realizar estas
tareas. Los servicios que el S.O. ofrece a los programas son:

Ejecución de programas.

Operaciones de E/S.

Manipulación de archivos y directorios.

Comunicación entre procesos.

Comunicación con equipos remotos.

Administración de la protección y seguridad.

Leer el estado del sistema (hora, nº de procesos, etc.).

1. Servicios adicionales
Aparte de los servicios básicos, el S.O. puede ofrecer algunas funciones más
avanzadas para optimizar el uso del sistema:

 Compartición de recursos: permite compartir un recurso entre varios


procesos, por ejemplo la memoria, dispositivos de E/S, etc.
 Contabilidad (accounting): Conocer el consumo de cada uno de los
recursos.

4.2.2. Interfaces con los servicios del SO

¿Cómo se accede a estos servicios del Sistema


Operativo?

Estructura de un Sistema Operativo 9


Formación Abierta

El sistema Operativo ofrece dos interfaces para poder utilizar estos servicios,
dependiendo de si accedemos como programadores o como usuarios accederemos
de una manera u otra:

Para el programador:
 Llamadas al sistema en lenguaje máquina o en alto nivel (ej. lenguaje C).

Para el usuario:

 Intérprete de órdenes.
 Programas del sistema que se exponen los sevicios del S.O al usuario de
forma cómoda. El usuario ejecuta estos programas desde el intérprete de
órdenes.

10 Estructura de un Sistema Operativo


Sistemas Operativos I 04

4.3. Llamadas al sistema

El S.O. ofrece una gama de servicios a los programas.

Los programas acceden a estos servicios mediante


llamadas al sistema.

Las llamadas al sistema son la única forma en la que un programa puede solicitar
operaciones y servicios de S.O. Es por esto que se dice son la interfaz entre el
programa en ejecución y el S.O.

Ejemplo Windows

Handle = OpenFile(“mifichero”,ofstruct, OF_READ)

Ejemplo UNIX

fd = open(“mifichero”,O_RDONLY);

Ejemplo MSDOS
mov ah, servicio

mov al, modo

lea es:cx, cadena

int 21h

Estructura de un Sistema Operativo 11


Formación Abierta

4.3.1. Implementación de las llamadas al sistema

¿Cómo se implementa la llamada al sistema?

Habitualmente, cuando queremos realizar una llamada al sistema lo hacemos


mediante una instrucción especial de la máquina, como por ejemplo syscall, int,
trap, etc.

Es habitual invocar instrucciones especiales aunque en la mayoría de los casos no


somos conscientes de ello. Cuando programamos en un lenguaje de alto nivel (C++,
Visual basic, etc.), escribimos la llamada al sistema como una subrutina propia del
lenguaje con el que estamos programando. Cuando compilamos el programa el
compilador es el encargado de sustituirla por la instrucción especial de máquina.

Cuando invocamos una instrucción especial estamos


realizando una llamada al sistema. El sistema operativo
cambia automáticamente a modo privilegiado.

Ejemplo: llamadas al sistema de UNIX


Veamos a continuación a modo de ejemplo las distintas llamadas que se pueden
realizar en un sistema Unix organizadas mediante los distintos componentes de un S.O:

 Procesos: crear proceso, enviar señal a un proceso, tratar señales, etc.


 Memoria: pedir más memoria, liberar memoria, etc.
 Archivos: abrir, crear, cerrar, leer, escribir, borrar, crear directorio, crear
enlace, bloquear fichero, etc.

 Redes: abrir conexión (socket), cerrar conexión, etc.


 Protección: cambiar permisos, cambiar propietario.

12 Estructura de un Sistema Operativo


Sistemas Operativos I 04

4.4. Programas del sistema

Uno de los medios mediante el cual el S.O. expone sus


servicios al usuario es con los programas de sistema.

Las llamadas al sistema nos proporcionan una interfaz para el programador, pero el
usuario también tiene una interfaz para realizar llamadas. Un usuario final interactúa
con el S.O. mediante programas previamente compilados.

Los programas del sistema son programas compilados que suele proveer el S.O.
con utilidades básicas para el usuario. Estas utilidades básicas son para:

Manipular ficheros: Ej: comandos en unix ls, cp, etc.

Editar documentos: Ej: emacs, edit, etc.

Darnos un entorno de trabajo: Ej. escritorio de Windows.

Desarrollar programas: Ej: Compiladores, enlazadores, etc.

Comunicarnos con otros equipos: Ej: telnet, ftp, etc.

4.4.1. El núcleo

Se suele llamar núcleo (kernel) al software del sistema


operativo que reside permanentemente en memoria y que
atiende las llamadas al sistema y demás eventos básicos.

En informática, el kernel (también conocido como núcleo)


es la parte fundamental de un sistema operativo. Es el
software responsable de facilitar a los distintos
programas acceso seguro al hardware de la
computadora. Como hay muchos programas y el acceso
al hardware es limitado, el núcleo también se encarga de
decidir qué programa podrá hacer uso de un
dispositivo de hardware y durante cuánto tiempo (lo que
se conoce como multiplexado).

Estructura de un Sistema Operativo 13


Formación Abierta

Acceder al hardware directamente puede ser realmente complejo, por lo que los
núcleos suelen implementar una serie de abstracciones del hardware. Esto
permite esconder la complejidad, y proporciona una interfaz limpia y uniforme al
hardware subyacente, lo que facilita su uso para el programador.

No necesariamente se necesita un núcleo para usar una computadora. Los


programas pueden cargarse y ejecutarse directamente en una computadora
«vacía», siempre que sus autores quieran desarrollarlos sin usar ninguna
abstracción del hardware ni ninguna ayuda del sistema operativo. Ésta era la forma
normal de usar muchas de las primeras computadoras: para usar distintos
programas se tenía que reiniciar y reconfigurar la computadora cada vez. Con el
tiempo, se empezó a dejar en memoria (aún entre distintas ejecuciones) pequeños
programas auxiliares, como el cargador y el depurador, o se cargaban desde
memoria de sólo lectura. A medida que se fueron desarrollando, se convirtieron en los
fundamentos de lo que llegarían a ser los primeros núcleos de sistema operativo.

Hay cuatro grandes tipos de núcleos:

 Los núcleos monolíticos facilitan abstracciones del


hardware subyacente realmente potentes y variadas.
 Los micronúcleos (o microkernel) proporcionan un
pequeño conjunto de abstracciones simples del
hardware, y usan las aplicaciones llamadas servidores
para ofrecer mayor funcionalidad.
 Los híbridos (micronúcleos modificados) son muy
parecidos a los micronúcleos puros, excepto porque
incluyen código adicional en el espacio de núcleo para
que se ejecute más rápidamente.
 Los exonúcleos no facilitan ninguna abstracción, pero
permiten el uso de bibliotecas que proporcionan mayor
funcionalidad gracias al acceso directo o casi directo al
hardware.

14 Estructura de un Sistema Operativo


Sistemas Operativos I 04

4.5. Modelos arquitectónicos de SO

1. Estructura de un SO
Hemos visto que un S.O. posee en su interior una cierta estructura, una
organización y unas funciones determinadas. Existen varios tipos de estructuras
internas que dan origen a los distintos modelos arquitectónicos de un Sistema Operativo.

 Un bloque único y sólido de servicios: sistemas monolíticos.


 Capas de software delimitadas y jerarquizadas: sistemas por capas.
 Modelo de máquinas virtuales.
 Modelo Cliente-Servidor.
 Modelo Micronúcleos.

A continuación vamos a detallar las distintas estructuras existentes:

2. Sistemas monolíticos
Es la arquitectura más simple para un S.O. ya que se trata de un núcleo compacto,
que contiene todas las rutinas de S.O.

Figura 4.1. Sistema Monolítico.

Estructura de un Sistema Operativo 15


Formación Abierta

4.5.3. Sistemas por capas


El S.O. se construye en niveles jerárquicos, cada uno de los cuales aprovecha los
servicios del nivel inferior. Se trata de un diseño más modular y escalable que el
monolítico.

Figura 4.2. Sistema por Capas I.

Cada capa del SO consiste en la implementación de un objeto abstracto

 Datos.
 Operaciones.

Figura 4.3. Sistema por Capas II.

Ejemplo: Sistema Operativo THE con seis niveles


 L5: programas.
 L4: buffering.
 L3: consola del operador.
 L2: gestión de memoria paginada.
 L1: planificación de procesos.
 L0: hardware.

16 Estructura de un Sistema Operativo


Sistemas Operativos I 04

Ventajas

La principal ventaja es la modularidad ya que simplifica los siguientes aspectos:


 Depuración y verificación: Una vez depurada la primera capa se puede dar por
sentado su funcionamiento correcto mientras se trabaja con la segunda capa.
 Mantenimiento: Es posible por ejemplo cambiar las rutinas de bajo nivel
siempre que la interfaz externa de la rutina no cambie y la rutina realice la
misma tarea anunciada.

Desventajas
El principal problema es la definición apropiada de las distintas capas, si se abusa
de número de capas se tienden a ser menos eficiente.

Las llamadas entre capas implican pasar parámetros entre ellas, que en definitiva
supone un gasto extra.

La tendencia es obtener un equilibrio: menos capas con más funcionalidad, obteniendo:

 Ventajas de la modularidad.
 Evitan los problemas de definición e interacción entre capas.

4.5.4. Máquinas virtuales

Mediante software, se proporciona a los programas la


emulación de un hardware que no existe.

El software emulador convierte las peticiones hechas a la


máquina virtual en operaciones sobre la máquina real.

Se pueden ejecutar varias máquinas virtuales al mismo


tiempo (ej. mediante tiempo compartido).

Los recursos reales se reparten entre las distintas


máquinas virtuales.

El concepto de máquina virtual surge con el sistema VM/370 de IBM en 1972. La


idea principal es la de permitir ejecutar varios sistemas operativos
simultáneamente sobre el mismo hardware. Para ello, separa las dos funciones
básicas que realiza un sistema de tiempo compartido: multiprogramación y
abstracción del hardware.

El corazón del sistema es conocido como monitor de máquina virtual, y se ejecuta


sobre el hardware proporcionando varias máquinas virtuales al siguiente nivel de
software. Estas máquinas virtuales, son copias exactas del hardware desnudo. Por
esto, cada una puede estar ejecutando cualquier sistema operativo.

Estructura de un Sistema Operativo 17


Formación Abierta

Recientemente, ha surgido VMWare, de forma que un


usuario puede estar ejecutando sistemas como Windows
NT y Linux de forma simultánea.

También ha sido llevada esta idea de máquina virtual a


lenguajes de programación como Java o Microsoft .NET.

Ejemplos
 IBM VM: ofrecía a cada usuario su propia máquina virtual monotarea; las
m.v. se planificaban con tiempo compartido.
 Java: los programas compilados en Java corren sobre una máquina virtual
(JVM).
 Microsoft .NET: los programas compilados en .NET corren sobre una
máquina virtual denominada .NET FrameWork.
 VMWare: en un PC, es capaz de ejecutar al mismo tiempo varias sesiones
Windows, Linux, OS/2, etc.
 Nachos: S.O. que se ejecuta en una máquina virtual MIPS, cuyo emulador
corre sobre UNIX.

Ventajas e inconvenientes
Una gran ventaja, e inconveniente al mismo tiempo, es la protección, ya que cada
máquina virtual está aislada de las otras y no puede interferir las unas con las otras.

Ventajas:

 Investigación y desarrollo: se puede desarrollar y ejecutar para un


hardware que no tenemos.
 Independencia del hardware: Los programa hechos en. Java o .NET son
independientes del hardware y del sistema operativo que tenga debajo ya
que es su máquina virtual la que gestiona la ejecución del programa.
 Pervivencia de sistemas antiguos: ej. Emuladores de MSDOS.

Inconvenientes:

 La implementación de la máquina virtual puede ser compleja y lenta.

18 Estructura de un Sistema Operativo


Sistemas Operativos I 04

4.5.5. Modelo Cliente-Servidor

Según este modelo, el SO consiste en un conjunto de módulos


autónomos, cada uno de los cuales tiene a disposición del resto
una serie de servicios (competencias).

Podemos ver un módulo como un servidor de determinados


servicios que atiende las peticiones de otros módulos y que su
vez puede ser cliente de otros módulos.

Podemos extender el modelo cliente servidor hasta el infinito si consideramos cada


módulo del sistema como un conjunto de módulos con relaciones cliente-servidor

Este modelo es indicado para sistemas distribuidos.

4.5.6. Modelo Micronúcleos

La idea es trasladar todos los componentes no esenciales


del kernel implementándolos como programas del
sistema y de nivel de usuario. De esta manera tenemos
un pequeño núcleo del SO que proporciona las bases
para ampliaciones modulares.

Las funciones básicas del micronúcleo son:

 Administración mínima de procesos.


 Administración memoria a bajo nivel.
 Servicio de comunicaciones entre procesos.

El resto de módulo se acoplan al kernel a modo de módulos cliente-servidor.

Ventajas

Facilidad de extender el sistema:

 Se pueden agregar nuevos módulos sin tener que modificar y recompilar el


kernel.
 Cuando hay que modificar el kernel hay que realizar menos cambios.

Flexibilidad:

 Adaptable en función del tipo de usuarios que usará el sistema, acoplando


más o menos módulos.

Estructura de un Sistema Operativo 19


Formación Abierta

Portabilidad:
 Menos cambios a la hora de portar el sistema a otra arquitectura.

Fiabilidad:

 Cuanto mayor es el tamaño de un producto software, más difícil es


garantizar su fiabilidad.
 Además muchos servicios se ejecutan como procesos de usuario (más que
como procesos del kernel). Si un servicio falla, el resto del SO permanece
intacto.

Problemas
No se ha determinado de forma clara cuánto de pequeño tiene que ser el núcleo
para ser calificado de micronúcleo.

Existen diferentes opiniones sobre el modo en que deben ejecutarse las


operaciones que no son del núcleo, unos dicen que en el espacio de memoria del
núcleo (modo privilegiado) y otros que en el del usuario (modo usuario).

20 Estructura de un Sistema Operativo


Sistemas Operativos I 04

Resumen

Un proceso es un programa en ejecución. Para poder ejecutarse, un proceso


necesita tiempo de CPU, una porción de memoria, archivos, E/S y demás
recursos.

El S.O. tiene unas responsabilidades con respecto a los procesos:

 Creación y eliminación de procesos.


 Planificación de procesos: repartir la CPU entre los procesos activos.
 Sincronización entre procesos.
 Comunicación entre procesos.

Interprete de órdenes (shell) es una interfaz básica para que un usuario pueda
dialogar directamente con el S.O.

El S.O ofrece una serie de servicios a los programas y al usuario a través de


varias interfaces. Los servicios son los siguientes.

 Ejecución de programas.
 Operaciones de E/S.
 Manipulación de archivos y directorios.
 Comunicación entre procesos.
 Comunicación con equipos remotos.
 Administración de la protección y seguridad.
 Leer el estado del sistema (hora, nº de procesos, etc.).

Se suele llamar núcleo (kernel) al software del sistema operativo que reside
permanentemente en memoria y que atiende las llamadas al sistema y demás
eventos básicos.

El Kernel es la parte fundamental de un sistema operativo. Es el software


responsable de facilitar a los distintos programas acceso seguro al hardware de
la computadora. Como hay muchos programas y el acceso al hardware es
limitado, el núcleo también se encarga de decidir qué programa podrá hacer uso
de un dispositivo de hardware y durante cuánto tiempo (lo que se conoce como
multiplexado).

Estructura de un Sistema Operativo 21


Formación Abierta

El tipo de kernel dicta el modelos arquitectónico del S.O:

 Un bloque único y sólido de servicios: sistemas monolíticos.


 Capas de software delimitadas y jerarquizadas: sistemas por capas.
 Modelo de máquinas virtuales.
 Modelo Cliente-Servidor.
 Modelo Micronúcleos.

22 Estructura de un Sistema Operativo


Formación Abierta

Introducción

En anteriores unidades didácticas hemos nombrado innumerables veces a los


procesos, sin embargo no conocemos mucho de ellos.

En esta unidad didáctica vamos a estudiar a fondo los procesos. Vamos a ver todo
su proceso de vida, desde que se crea hasta que termina.

Como ya sabemos el S.O operativo es el encargado de darle tiempo de CPU a un


proceso o a otro. En esta unidad didáctica vamos a ver en detalle dicho proceso,
veremos cómo los planificadores son los encargados de seleccionar el proceso a
ejecutar.

Por último en esta unidad estudiaremos el concepto de hilo (Thread) así como las
diferencias que hay con los procesos.

4 Procesos
Sistemas Operativos I 05

5.1. Concepto de proceso

Proceso es cualquier programa en ejecución desde el


punto de vista del sistema operativo, quien se encarga de
proporcionar a todos los procesos el reparto del tiempo
de CPU y del resto de recursos del computador. El
sistema operativo es también el encargado de cargar los
programas desde el disco a la memoria, de iniciar su
ejecución y de liberar los recursos asignados al proceso
tras su terminación.

Un proceso es un programa en ejecución. Necesita


recursos para poder ejecutarse: memoria, dispositivos de
E/S, la CPU, etc.

Un proceso utiliza tres áreas de la memoria:

Código: código fuente (compliado) del programa.


Datos: se almacenan variables los valores de las variables globales, memoria
dinámica, valores de variables que corresponden a tipos de datos por referencia
(object), etc.

Pila: parámetros y variables locales de subrutinas, valores de variables que


corresponden a tipos de datos primitivos (int, byte, decimal, etc).

1. Estados de un proceso
Un proceso no es permanece siempre en memoria de la misma forma, a medida
que se ejecuta, desde que se crea hasta que muere, va cambiando de estado:

 Nuevo: el procso está recién creado por el S.O.


 En ejecución: está en la CPU ejecutando instrucciones.
 Bloqueado: está esperando a que ocurra algún evento (ej. una operación
de E/S).
 Preparado: listo y a la espera de que le asignen un procesador para
ejecutar instrucciones.
 Terminado: no ejecutará más instrucciones y el S.O. le retirará los recursos
que consume.

Procesos 5
Formación Abierta

Figura 5.1. Estados de un proceso.

6 Procesos
Sistemas Operativos I 05

5.2. Estructuras de datos: BCP y colas de


procesos

Con multiprogramación y tiempo compartido un proceso


no tiene siempre la CPU para él. El S.O operativo va
asignando tiempos de CPU entre todos los procesos
existentes.

Para cada proceso, el S.O. debe guardar su estado y cualquier otra información que
debe mantenerse mientras no está en ejecución para que al asignarle de nuevo
CPU pueda seguir en el punto exacto de ejecución en el que se quedó.

La estructura donde el S.O almacena la información de un proceso se denomina


Bloque de control de proceso (BCP). La información que se guarda de un
proceso es, entre otras, la siguiente:

Estado actual: preparado, en espera, etc.


Registros de la CPU: contador de programa para saber la línea de código
última que ha ejecutado, etc.

Información del planificador: id de proceso, prioridad, etc.


Zonas de memoria del proceso: puntero a la noza de memoria donde se
guardan los datos del proceso (variables globales, etc).

Información de contabilidad: tiempo consumido por el proceso, etc.


Información de E/S: dispositivos por los que espera, lista de archivos abiertos,
etc.

Etc.

Procesos 7
Formación Abierta

5.3. Niveles de planificación

Para optimizar los recursos parece claro que hay que


compartir los recursos.

El objetivo de la multiprogramación es maximizar el


aprovechamiento de la CPU.

El objetivo del tiempo compartido es conmutar la CPU


entre procesos con tal frecuencia que los usuarios
puedan interactuar con cada programa durante su
ejecución.

En los sistemas con un sólo procesador, a pesar de


estas técnicas, los procesos tienen que esperar por CPU
y por dispositivos de E/S.

5.3.1. Cola de planificación

Una cola de planificación es un conjunto de procesos


esperando por la utilización de un determinado recurso.

Generalmente se implementa mediante una lista encadenada, donde cada


elemento es una estructura de control que representa la petición a servir

Su administración se lleva a cabo de acuerdo con la política de planificación


ejecutada por el planificador del recurso.

Figura 5.2. Planificador.

8 Procesos
Sistemas Operativos I 05

5.3.2. Colas de procesos


El S.O. organiza los BCP en colas de espera por el procesador o por los
dispositivos de E/S. (colas de planificación: cola de procesos, colas de dispositivos).

Figura 5.3. Cola de procesos.

3. Niveles de planificación
 En los sistemas por lotes, existe un planificador de largo plazo (PLP) o de
alto nivel, que suministra procesos a la cola de preparados.
 El planificador de corto plazo o de bajo nivel es el que asigna y desasigna
la CPU. El PLP trata de conseguir una mezcla adecuada de trabajos
intensivos en CPU y en E/S.

 Planificador de medio plazo. Envía al disco procesos de poco interés, para


abrir memoria principal para nuevos procesos => Intercambio (swapping).

Figura 5.4. Niveles de planificación.

Procesos 9
Formación Abierta

5.3.4. Cambio de contexto

Es la operación que consiste en desalojar a un proceso


de la CPU y reanudar otro.

Hay que guardar el estado del proceso que sale en su


BCP, y recuperar los registros del proceso que entra.

El cambio de contexto es tiempo perdido, así que debe


ser lo más rápido posible. El hardware a veces tiene
instrucciones para facilitar el cambio de contexto (ej.
PUSHA = guardar todos los registros).

Figura 5.5. Cambio de contexto.

10 Procesos
Sistemas Operativos I 05

5.4. Creación y finalización de procesos

5.4.1. Creación de procesos

Un proceso se crea mediante una llamada al sistema. El


proceso creador se denomina padre, y el creado, hijo.

Cuando el proceso crea el proceso puede establecer unas propiedades que


configuran las variantes en las relaciones padre/hijo:

 Compartición de recursos: ¿todos, algunos, ninguno?.


 Espacio de memoria: ¿Qué tipo de memoria comparten?.
 Sincronización del padre: si el padre quiere terminar su proceso, ¿Ha de
esperar a que el hijo termine primero?.
 Terminación: si termina el padre, ¿Ha de matar anteriormente a los
procesos hijos?.

Ejemplos de llamadas al sistema Windows

CreateProcess: se indica el fichero ejecutable donde está el código del hijo.

Ejemplos de llamadas al sistema Unix

fork: crea un proceso hijo que es un duplicado del padre.


exec: sustituye el código por un nuevo fichero ejecutable (no crea un nuevo
proceso).

2. Terminación
Un proceso puede terminar por varios motivos:

 El proceso invoca su finalización: invoca a una llamada al sistema específica


(ej. exit).
 El proceso genera una excepción: el S.O. recoge la excepción y puede
decidir abortarlo o no.

 Otro proceso invoca su finalización: otro proceso, ya sea el propio sistema


operativo, otro programa o un usuario a través del intérprete de órdenes,
invoca una llamada específica al sistema (ej: kill -9 numProceso).

Procesos 11
Formación Abierta

3. Relaciones de comunicación entre procesos


Los procesos pueden tener distintas relaciones de comunicación entre sí:
 Independientes/competidores: Los procesos independientes compiten por
el uso de recursos escasos (ej. CPU, E/S).
 Cooperantes: Los procesos cooperantes colaboran entre sí para llevar a
cabo un objetivo común.

12 Procesos
Sistemas Operativos I 05

5.5. Hilos

Un hilo o proceso ligero es una unidad básica de


ejecución, con su propio:

 Contador de programa.
 Registros de CPU.
 Pila (stack).

Los hilos dentro de una misma aplicación comparten:

 Código y datos.
 Recursos del S.O.: fichero.

Muchos lenguajes de programación (como Java o .NET), y otros entornos de


desarrollo soportan los llamados hilos o hebras (en inglés, threads). Los hilos son
similares a los procesos en que ambos representan una secuencia simple de
instrucciones ejecutada en paralelo con otras secuencias. Los hilos son una
forma de dividir un programa en dos o más tareas que corren
simultáneamente.

Un ejemplo de hilos es tener un hilo atento a la interfaz


gráfica (iconos, botones, ventanas), mientras otro hilo
hace una larga operación internamente. De esta manera
el programa responde más ágilmente a la interacción con
el usuario.

Una ventaja de los programas multihilo es que pueden operar más rápido en
sistemas de computadores con múltiples CPUs o a través de grupo de máquinas
ya que los hilos del programa se prestan verdaderamente para ejecución
concurrente. En tal caso el programador necesita ser cuidadoso para evitar condiciones
de carrera (problema que sucede cuando diferentes hilos o procesos alteran datos que
otros también están usando), y otros comportamientos no intuitivos.

Los hilos generalmente requieren reunirse para procesar los datos en el orden
correcto. Es posible que los hilos requieran de operaciones atómicas para impedir
que los datos comunes sean cambiados o leídos mientras estén siendo
modificados. El descuido de esto puede generar estancamiento.

El uso de hilos en programación frecuentemente causa una inconsistencia de


estado. Un error común es crear una variable global e invocar subprogramas que
dependen de ésta.

Procesos 13
Formación Abierta

Los Sistemas Operativos generalmente implementan


hilos de dos maneras:

 Multihilo preventivo: Permite al S.O. determinar


cuándo debe haber un cambio de contexto. La
desventaja de esto es que el sistema puede hacer un
cambio de contexto en un momento inadecuado.
 Multihilo cooperativo: Depende del mismo hilo
abandonar el control cuando llega a un punto de
detención lo cual puede traer problemas cuando el
hilo espera un recurso para estar disponible.

El soporte de hardware para software es provisto por


multihilos simultáneos. Esta característica fue introducida
por Intel en el Pentium 4, bajo el nombre de
HyperThreading.

5.5.1. Procesos pesados e hilos


Existen dos niveles de procesos:
 Procesos pesados: contiene uno o varios hilos que comparten la misma
memoria y recursos.

 Procesos ligeros o hilos.

¿Quién implementa los hilos?

Los hilos pueden ser implementados por:


 El propio Sistema Operativo: cuando lo vea conveniente para optimizar el
rendimiento de la máquina

 El programa de usuario: el prgramador decide crear un hilo para subdividir


su programa en dos procesos.

14 Procesos
Sistemas Operativos I 05

2. ¿Por qué los hilos?


El objetivo es facilitar la escritura de aplicaciones concurrentes cooperativas:
 Dado que todos los hilos comparten los recursos, un proceso pesado puede
contener decenas de hilos sin mucho coste adicional (sólo los pequeños
BCP de sus hilos).
 La comunicación entre los hilos del proceso es más sencilla (usando la
memoria que comparten).

 El cambio de contexto entre hilos de un mismo proceso pesado es menos


costoso.

Procesos 15
Sistemas Operativos I 05

Resumen

Proceso es cualquier programa en ejecución desde el punto de vista del sistema


operativo, quien se encarga de proporcionar a todos los procesos el reparto del
tiempo de CPU y del resto de recursos del computador. El sistema operativo es
también el encargado de cargar los programas desde el disco a la memoria, de
iniciar su ejecución y de liberar los recursos asignados al proceso tras su
terminación

Los estados de un proceso son: Nuevo, En ejecución, Bloqueado, Preparado,


Terminado

La estructura donde el S.O almacena la información de un proceso se denomina


Bloque de control de proceso

Una cola de planificación es un conjunto de procesos esperando por la


utilización de un determinado recurso

Niveles de planificación: planificador de largo plazo, planificador de corto plazo,


y Planificador de medio plazo.

Cambio de contexto es la operación que consiste en desalojar a un proceso de


la CPU y reanudar otro.

Un proceso se crea mediante una llamada al sistema. El proceso creador se


denomina padre, y el creado, hijo

Los hilos son una forma de dividir un programa en dos o más tareas que corren
simultáneamente.

Procesos 17
Sistemas Operativos I 06

Índice

OBJETIVOS 3
INTRODUCCIÓN 4
6.1. Modelo del sistema y criterios de rendimiento 5
6.1.1. Ráfagas de CPU y E/S 5
6.1.2. Histograma de tiempos de ráfaga de CPU 5
6.1.3. Criterios de rendimiento 5
6.1.4. Políticas expulsivas (preemptive) 6
6.1.5. Despachador (dispatcher) 7
6.2. Algoritmo FCFS (en orden de llegada) 8
6.3. Algoritmo SJF (primero el más corto) 9
6.4. Métodos basados en prioridades 10
6.4.1. Planificación por prioridades 10
6.5. Turno rotatorio (Round-Robin) 11
6.6. Métodos multicolas 12
6.7. Multiprocesadores 14
6.8. Evaluación de políticas 15
6.8.1. Modelo determinista 15
6.8.2. Modelos de colas 16
6.8.3. Simulaciones 17
6.8.4. Implementación 17
6.8.5. Conclusiones 18
RESUMEN 19

Planificación de procesos 1
Sistemas Operativos I 06

Objetivos

Conocer los criterios de rendimiento existentes para saber si el algoritmo que


está empleando el planificador es acertado.

Conocer las políticas expulsivas y las no expulsivas.

Conocer las funciones del Despachador (Dispatcher).

Conocer el algoritmo FCFS.

Conocer el algoritmo SJF.

Conocer el algoritmo SRFF.

Conocer el algoritmo Round Robin.

Conocer los algoritmos que tratan con múltiples colas. Conocer

los algoritmos que tratan con múltiples procesadores.

Planificación de procesos 3
Formación Abierta

Introducción

Sabemos por otras unidades didácticas que los planificadores son los encargados
de gestionar las colas de preparados.

En esta unidad didáctica vamos a conocer los distintos algoritmos mediante los
cuales los planificadores determinan a qué proceso le toca tiempo de CPU.

Examinaremos todas las posibilidades. Políticas expulsivas, no expulsivas, con una


cola de preparados, con múltiples colas de preparados, con un procesador o con
varios.

4 Planificación de procesos
Sistemas Operativos I 06

6.1. Modelo del sistema y criterios de


rendimiento

6.1.1. Ráfagas de CPU y E/S

Podemos considerar que la vida activa de un proceso es


una sucesión de:

 Ráfagas de CPU: el proceso ejecuta instrucciones.


 Ráfagas de E/S: el proceso utiliza o espera por la E/S.

Según la utilización de los recursos, se observan:

 Procesos intensivos en CPU: ej. Cálculos numéricos.


 Procesos intensivos en E/S: ej. Interactivos.

6.1.2. Histograma de tiempos de ráfaga de CPU

6.1.3. Criterios de rendimiento


Tanto para conocer si un algoritmo está realizando correctamente como para
compararlo con otros algoritmos es necesario medir. Se usan varias magnitudes
para medir el rendimiento de los algoritmos de planificación:

Planificación de procesos 5
Formación Abierta

 Utilización de CPU: % de tiempo que la CPU está ocupada.


 Tiempo de retorno: tiempo transcurrido entre la llegada de un proceso y su
finalización.

 Tiempo de espera: tiempo que un proceso permanece en la cola de


preparados.
 Tiempo de respuesta: tiempo que un proceso bloqueado tarda en entrar en
CPU, desde que ocurre el evento que lo bloquea.

Posibles objetivos de la planificación:

 Minimizar el tiempo medio de espera o de


retorno.
 Maximizar la utilización de CPU.
 Mantener el tiempo de respuesta por debajo de
un valor máximo.

Nota: Se pueden considerar las medias, valores


extremos o varianzas de estas magnitudes.

A priori no existe una política de planificación óptima. La bondad de un método depende


de varios factores como Tipo de procesos o simplemente el criterio que se aplica.

4. Políticas expulsivas (preemptive)


Los planificadores actúan de dos formas, de forma expulsiva y de forma no expulsiva.
 No expulsivas: el proceso que está en CPU la abandona cuando quiere,
como por ejemplo el algoritmo FCFS que veremos más adelante en
profundidad. Con esta política surge el famoso problema de acaparamiento
injusto de la CPU muy dado en Sistemas Operativos algo primitivos como
era Windows 3.11.

 Expulsivas: el planificador puede desalojar al proceso que está en CPU.


Para implementar tiempo compartido y tiempo real es necesaria una
planificación expulsiva.

El hecho de aplicar una política expulsiva supone un costo ya que tiene que
controlar el acceso a datos compartidos. Es decir, tiene que coordinar los procesos
que comparten datos.

6 Planificación de procesos
Sistemas Operativos I 06

Además, es necesario evitar que estructuras de datos del núcleo puedan quedar
inconsistentes por quitar y poner procesos (cambios de contexto).

6.1.5. Despachador (dispatcher)


Es el módulo que asigna CPU al proceso seleccionado por el planificador a corto
plazo. Es el encargado de realizar las siguientes tareas:

Cambia de contexto: quita el proceso que está


ejecutando y pone el nuevo.

 Cambia a modo usuario: cambia a modo usuario o a modo privilegiado


dependiendo del proceso.
 Saltar al punto apropiado del programa de usuario: cuando asigna tiempo
de CPU a un proceso que no es nuevo, se encarga de buscar el punto
exacto en el que se había quedado para que el proceso continue justo en el
mismo punto.

Planificación de procesos 7
Formación Abierta

6.2. Algoritmo FCFS (en orden de llegada)

Calcular el tiempo de espera, tiempo de retorno y tiempo medio de espera si


aplicamos el algoritmo FCFS (First Came First Served) suponiendo que llegan en
el mismo instante en el siguiente orden: P1, P2, P3.

Realizar los mismos cálculos suponiendo que llegan en el siguiente orden: P2, P3 y P1.

Características
La cola de preparados se gestiona como una FIFO ( First Input, First Output).

Simple de implementar.

Muy sensible al orden de llegada de los procesos. Perjudica

a los procesos intensivos en E/S (efecto convoy).

8 Planificación de procesos
Sistemas Operativos I 06

6.3. Algoritmo SJF (primero el más corto)

Calcular el tiempo medio de espera que resulta de aplicar un algoritmo SJF (Sort
Job First) no expulsivo.

Calcular el tiempo medio de espera que resulta de aplicar un algoritmo SJF


expulsivo (SRTF: Sort Remaining Time First).

Características
Entra en CPU el proceso con la ráfaga de CPU más breve.

Minimiza el tiempo de espera medio.

Riesgo de inanición de los procesos de larga duración.


No es implementable. Se pueden estimar las duraciones de los procesos, egún
su historia reciente.

Versión expulsiva (SRTF): el proceso en CPU es desalojado si llega a la cola


un proceso con duración más corta.

Planificación de procesos 9
Formación Abierta

6.4. Métodos basados en prioridades

6.4.1. Planificación por prioridades

Cada proceso tiene asignada un valor de prioridad.

Los planificadores por prioridades asignan tiempo de CPU a aquellos procesos que
tienen mayor prioridad. Al igual que en el caso del algoritmo SJF, puede ser
expulsivo o no.

¿Quién asigna la prioridad a un proceso?

Desventajas
Riesgo de inanición de los procesos con menos prioridad: La solución es la
denominada técnica del envejecimiento. Se trata de aumentar progresivamente la
prioridad a los procesos en espera.

10 Planificación de procesos
Sistemas Operativos I 06

6.5. Turno rotatorio (Round-Robin)

Quantum =4

Características

Adecuado para implementar tiempo compartido.


Es como el FCFS, pero cada proceso dispone de un cuanto de tiempo máximo. Si
cuando expira el cuanto de tiempo el proceso continúa en CPU, el planificador lo
desaloja y lo ingresa al final de la cola de preparados.

La cola de preparados se gestiona como FIFO.


Si el cuanto de tiempo es Q y hay N procesos en cola, el tiempo de respuesta es
como mucho Q·(N-1).

Influencia del cuanto de tiempo (Q)


Si Q es muy grande, los procesos terminan sus ráfagas de CPU antes de que
termine el cuanto: se comporta como un FCFS.

Si Q tiende a 0, se tiende a un sistema en el que cada proceso dispone de un


procesador a 1/N de la velocidad del procesador real (procesador compartido).

Ojo, si Q es muy pequeño, ocurren más cambios de


contexto y baja el rendimiento.

Planificación de procesos 11
Formación Abierta

6.6. Métodos multicolas


Hasta ahora hemos visto algoritmo que trataban con una única cola, pero en la
realidad de los Sistemas Operativos los procesos se organizan en varias colas de
preparados, cada una de ellas gestionada con una política diferente.

¿Cómo gestionar varias colas de preparados si además


cada una de ella aplica un algoritmo distinto?

Las colas se reparten la CPU según alguna política, por ejemplo:

Por prioridad absoluta.

Un % de tiempo para cada cola.

¿Podemos complicar aún más esto?

La respuesta es sí, existe la posibilidad de que un proceso se mueva de una cola a


otra, por ejemplo si a un proceso le cambian su prioridad puede que no encaje en
los criterios de su cola y tenga que pasar a otra cola de preparados. A estas colas
que permiten pasar procesos de unas a otras se denominan Multicolas con
realimentación.

En Unix un proceso que lleva mucho tiempo en espera


se mueve a una cola de más prioridad.

12 Planificación de procesos
Sistemas Operativos I 06

Planificación de procesos 13
Formación Abierta

6.7. Multiprocesadores
En el momento en que entra en juego más de un procesador las normas del juego
cambian porque se pueden ejecutar procesos en paralelo.

Se utilizan dos técnicas principalmente cuando hay varios procesadores:

Una cola por procesador: corremos el peligro de que la carga quede mal
repartida y uno de los dos procesadores se quede parado.

Una cola común: aquí tenemos un reparto equilibrado, pero hay riesgos de
inconsistencia si varios procesadores manipulan simultáneamente la cola.

14 Planificación de procesos
Sistemas Operativos I 06

6.8. Evaluación de políticas

Con tanta política y algoritmo, ¿Cómo elegir una política


de planificación?

Cada caso es un mundo y a los que uno les parece muy bueno a otros les parece
muy malo. Para evaluar políticas hay que realiza dos pasos:

1. Definir los criterios de rendimiento.


2. Evaluar los diferentes algoritmos de planificación.

¿Cómo evaluamos?

Existen varios modelos para evaluar:

Modelo determinista: se someten las políticas a una carga de trabajo


representativa.

Modelos de colas (estadísticos): Se trabaja con modelos estadísticos de las


cargas de trabajo.

Simulaciones: se construye un modelo informático de la máquina y se le


inyecta una carga de procesos simulada.

Implementación: se modifica el S.O. y se prueba en condiciones reales.

1. Modelo determinista
Estos son los pasos a seguir para evaluar una política según el modelo
determinista:

1. Definir los criterios de rendimiento.


2. Establecer el conjunto de algoritmos candidatos.
3. Establecer una carga de trabajo representativa del sistema.

Planificación de procesos 15
Formación Abierta

4. Para cada algoritmo:


a. Sometemos la carga de trabajo a su planificación.
b. Evaluamos su rendimiento en función de los criterios definidos en el
punto 1.

5. Seleccionamos el que mejor se comporte.

Características del modelo determinista

Cómoda de realizar.

Proporciona magnitudes exactas con las que comparar las estrategias.

Presenta la limitación de su validez general en cuanto a que se somete a una carga


concreta de trabajo.

Ejemplo

Criterio: Tiempo de retorno.

Conjunto de estrategias: FCFS, SJF, RR (Q=10).

Carga de trabajo:

6.8.2. Modelos de colas


Trata de salvar la limitación que presenta el modelo determinista.

¿Cómo se puede salvar la limitación de tener que


proponer cargas de trabajo? ¿Qué ocurre si las cargas de
trabajo con las que hemos probado no son suficientes?

16 Planificación de procesos
Sistemas Operativos I 06

El modelo de colas define distribuciones estadísticas para representar:

 Ciclos de CPU y E/S de los procesos.


 Llegada de tareas al sistema.

Por otro lado, el sistema informático se define como:

 Conjunto de servidores para cada recurso (planificadores).


 Un conjunto de colas asociadas a cada servidor (colas de espera).

3. Simulaciones
Se establece un modelo informático simulado

Los principales componentes del Sistema Operativo se crean de forma abstracta:

 Dispositivos.
 Planificadores.
 Estructuras de control.
Sin embargo, los datos que conducen a la simulación se generan mediante
números aleatorios o mediante trazas (sistema real)

 Procesos.
 Ciclos de CPU y E/S.

Ventajas e inconvenientes

Las simulaciones permiten obtener una evaluación más cercana a la realidad.


El problema que presenta es su alto coste de implementación y de recursos para su
ejecución.

4. Implementación
Se trata del método más fiable pues consiste simplemente en dotar al sistema de
un planificador real y ver cómo se comporta en condiciones reales.

Inconvenientes

Implica un coste elevado ya hay que modificar el sistema operativo.

Descontento de los usuarios cada vez que el Sistema Operativo tiene que ser
actualizado.

Planificación de procesos 17
Formación Abierta

5. Conclusiones
Se podría plantear un esquema híbrido. Por ejemplo:
1. Análisis preliminar de las políticas candidatas mediante modelos
deterministas.

2. Simulación de la opción u opciones más ventajosas.


3. Implementación de la óptima:
a. Primero en un sistema de desarrollo (sistema de pruebas).
b. Finalmente en el sistema de producción.

Inconvenientes
El mundo de los sistemas Operativos es un entorno dinámico y variable, la política
óptima de hoy no será la mejor para los ordenadores de dentro de unos tiempo, ya
que continuamente hay cambios en el hardware y en el software que provienen de
la evolución.

Característica deseable: planificación flexible

18 Planificación de procesos
Sistemas Operativos I 06

Resumen

Podemos considerar que la vida activa de un proceso es una sucesión de:

 Ráfagas de CPU: el proceso ejecuta instrucciones.


 Ráfagas de E/S: el proceso utiliza o espera por la E/S.

Magnitudes para medir el rendimiento de los algoritmos de planificación

 Utilización de CPU: % de tiempo que la CPU está ocupada.


 Tiempo de retorno: tiempo transcurrido entre la llegada de un proceso y su
finalización.
 Tiempo de espera: tiempo que un proceso permanece en la cola de
preparados.
 Tiempo de respuesta: tiempo que un proceso bloqueado tarda en entrar en
CPU, desde que ocurre el evento que lo bloquea.

Objetivos de la planificación:

 Minimizar el tiempo medio de espera o de retorno.


 Maximizar la utilización de CPU.
 Mantener el tiempo de respuesta por debajo de un valor máximo.

Los planificadores actúan de dos formas, de forma expulsiva y de forma no


expulsiva. En técnicas expulsivas el planificador puede desalojar al proceso
que está en CPU.

El Dispatcher cambia de contexto: quita el proceso que está ejecutando y pone


el nuevo. Cambia a modo usuario y saltar al punto apropiado del programa de
usuario.

ALGORITMO FCFS (EN ORDEN DE LLEGADA)

 La cola de preparados se gestiona como una FIFO ( First Input, First


Output).

 Simple de implementar.
 Muy sensible al orden de llegada de los procesos.
 Perjudica a los procesos intensivos en E/S (efecto convoy).

Planificación de procesos 19
Formación Abierta

ALGORITMO SJF (PRIMERO EL MÁS CORTO)

 Entra en CPU el proceso con la ráfaga de CPU más breve.


 Minimiza el tiempo de espera medio.
 Riesgo de inanición de los procesos de larga duración.
 No es implementable. Se pueden estimar las duraciones de los procesos,
según su historia reciente.

ALGORITMO SJF Expulsivo: SRTF(PRIMERO EL MÁS CORTO)

 Es la versión expulsiva de SJF: el proceso en CPU es desalojado si llega a


la cola un proceso con duración más corta.

PLANIFICACIÓN POR PRIORIDADES

 Asignan tiempo de CPU a aquellos procesos que tienen mayor prioridad.


 Riesgo de inanición: La solución es la técnica del envejecimiento.

TURNO ROTATORIO (ROUND-ROBIN)

 Adecuado para implementar tiempo compartido.


 Es como el FCFS, pero cada proceso dispone de un cuanto de tiempo
máximo. Si cuando expira el cuanto de tiempo el proceso continúa en CPU,
el planificador lo desaloja y lo ingresa al final de la cola de preparados.

 La cola de preparados se gestiona como FIFO.

MÉTODOS MULTICOLAS

 Las colas se reparten la CPU según alguna política, por ejemplo: Por
prioridad absoluta, un % de tiempo para cada cola.

MULTIPROCESADORES

 Una cola por procesador.


 Una cola común.

20 Planificación de procesos
Sistemas Operativos I 07

Objetivos

Conocer el problema del interbloqueo.

Conocer la forma de representar gráficamente los elementos que intervienen en


el interbloqueo.

Conocer las condiciones necesarias para que se produzca el interbloqueo.

Conocer las estrategias de tratamiento para el interbloqueo.

Conocer los métodos de prevención.

Conocer los métodos de evitación.

Conocer los mecanismos del S.O para recuperarse de un interbloqueo.

Interbloqueo 3
Formación Abierta

Introducción

La multiprogramación y el tiempo compartido permiten que varios procesos vayan


empleando los recursos durante franjas de tiempo controladas por los
planificadores.

Esta práctica puede originar un problema que puede dejar al S.O inoperante, se
trata del interbloqueo. En esta unidad didáctica abordaremos este tema en
profundidad.

En esta unidad vamos a estudiar el problema del interbloqueo, la forma de


representar gráficamente los elementos que intervienen en el.

Para poder emplear estrategias de tratamiento, es necesario las condiciones


necesarias para que se produzca. Junto con esto, estudiaremos los métodos de
prevención y de evitación.

Para acabar, estudiaremos los mecanismos que tiene el S.O para recuperarse de
un interbloqueo.

4 Interbloqueo
Sistemas Operativos I 07

7.1. Caracterización del interbloqueo

7.1.1. Modelo del sistema


El interbloqueo es un problema que afecta a procesos concurrentes que utilizan
recursos en un sistema.

Los procesos solicitan recursos al sistema y los liberan cuando ya no los necesitan.
Un recurso puede estar disponible o bien asignado a algún proceso.

Ejemplares

Puede haber varios ejemplares de un mismo tipo de


recurso (ej. varias impresoras). En este caso, cuando un
proceso solicita un recurso, se le concede cualquiera de
los ejemplares que esté disponible.

Si un proceso solicita un recurso que no tiene ejemplares disponibles, el proceso


queda bloqueado, esperando hasta que se le asigna un ejemplar.

Esquema de funcionamiento normal:

¿Cómo saber en qué estados están los recursos?

El Sistema guarda en una tabla de sistema si cada recurso está libre o asignado, y
si un recurso está asignado, a qué proceso se le asignó.

Interbloqueo 5
Formación Abierta

2. El problema
Un conjunto de procesos bloqueados, cada uno de ellos esperando por un recurso
que retiene otro proceso de ese conjunto. Es este estado:

 Ningún proceso del conjunto puede avanzar.


 Interbloqueo, bloqueo mutuo, abrazo mortal (deadlock).

Muchas veces, el interbloqueo no es responsabilidad de


las aplicaciones, sino del sistema de gestión de recursos.

Ejemplo: Los procesos A y B se pueden interbloquear,


aunque están escritos correctamente.

Proceso A Proceso B
Pide (escáner) Pide (impresora)
Pide (impresora) Pide (escáner)
usa impr. Y escáner usa impr. y escáner
Libera (impresora) Libera (escáner)
Libera (escáner) Libera (impresora)

6 Interbloqueo
Sistemas Operativos I 07

7.2. Grafo de asignación de recursos


Sirve para representar el estado de un sistema de asignación de recursos. Muestra
esta información:

Cuántos ejemplares hay de cada tipo de recurso.

Los procesos activos en el sistema.

Qué recursos están asignados y a qué proceso.

Qué procesos están bloqueados y por cuáles recursos.

Ejemplo de grafo de asignación

P1, P2 y P3 están en interbloqueo.

Interbloqueo 7
Formación Abierta

7.3. Condiciones para el interbloqueo


Si en un sistema se produce una situación de interbloqueo, entonces se cumplen
simultáneamente estas cuatro condiciones:

Exclusión mutua. Los recursos no se pueden compartir.


Retención y espera. Un proceso que retiene uno o varios recursos se
encuentra esperando por recursos asignados a otros procesos.

No expropiación. Un recurso sólo puede ser liberado por el proceso que lo


retiene, voluntariamente.

Espera circular. Existe una serie de procesos en espera {Po,P1,...Pn} en la


que todo Pi espera por un recurso retenido por Pi+1; y Pn espera por un recurso
retenido por Po.

8 Interbloqueo
Sistemas Operativos I 07

7.4. Estrategias de tratamiento del


interbloqueo
Hay cuatro estrategias para tratar el interbloqueo:

Prevención: diseñar el sistema de manera que nunca se cumpla alguna de las


cuatro condiciones del interbloqueo.

Evitación: tratar de no caer nunca en un estado de interbloqueo.


Permitir la aparición de interbloqueos y recuperarse cuando ocurran
necesitamos un sistema de detección y un mecanismo de recuperación.

No tratar el problema: si hay interbloqueos, el usuario tiene que intervenir.

Interbloqueo 9
Formación Abierta

7.5. Métodos de prevención


Se trata de eliminar la aparición de alguna de las cuatro condiciones necesarias
para el interbloqueo.

Exclusión mutua.

Depende de la naturaleza del recurso, así que esta condición no se puede eliminar.

Retención y espera.

Hay que garantizar que un proceso no pueda quedar bloqueado si retiene algún recurso.

¿Cómo conseguirlo?

1. El proceso tiene que pedir todos sus recursos de una vez, por ejemplo
antes de empezar a ejecutarse. Tiene un efecto negativo: muchos recursos
retenidos pero no usados.
2. Un proceso sólo puede solicitar recursos cuando no tiene ninguno asignado
También tiene un efecto negativo: puede ocurrir que tengamos que liberar
un recurso y volver a pedirlo para poder solicitar otros recursos.

En ambos caso puede que un proceso nunca se ejecute (inanición).

No expropiación.
Permitir que el S.O. desasigne recursos a un proceso bloqueado, de tal manera que
si un proceso se bloquea por un recurso, los recursos retenidos quedan a
disposición de los procesos activo.

El proceso bloqueado tiene ahora que esperar por todos los recursos.

Penaliza a los procesos que necesitan muchos recursos.

10 Interbloqueo
Sistemas Operativos I 07

Nota 1

Es posible seguir este protocolo en recursos cuyo estado


se puede guardar fácilmente y después restaurarse
(registros de CPU, espacio de memoria, etc.).

Nota 2

Generalmente no puede aplicarse a recursos tales como


impresoras y unidades de cinta.

Espera circular
Se puede evitar forzando un orden en la petición de los recursos:

Cada recurso tiene asignado un número de orden.

Los recursos se deben pedir en orden ascendente.


Aconsejable: el orden de petición de los recursos se establezca según el orden
de uso normal de los recursos de un sistema.

Efectos negativo

 Se limita la libertad de escritura de código.


 Se puede inducir a una mala utilización de los
recursos.

Interbloqueo 11
Formación Abierta

7.6. Métodos de evitación

7.6.1. Algoritmo del banquero

Se trata de conceder los recursos sólo cuando no


representen un riesgo futuro de interbloqueo. Lo procesos
han de declarar por anticipado la cantidad máxima de
recursos que van a utilizar a lo largo de su vida.

Estado seguro

Es un estado en el cual no hay riesgo inminente de


interbloqueo. Un estado es seguro si en él podemos
encontrar una secuencia segura con todos los procesos
del sistema.

{P1, P2, ...,PN} es una secuencia segura si los recursos


que Pi puede pedir en el peor caso se pueden atender
con lo que hay disponible más los recursos poseídos por
todos los procesosPj,j<i.

Sólo concedemos recursos si el estado resultante tras la


petición es seguro.

¿Qué significa una secuencia segura?

1. Nos ponemos en el peor caso del sistema, que todos los procesos soliciten
al mismo tiempo el máximo de recursos a los que tiene derecho.
2. El primer proceso de la secuencia es uno que podría finalizar en ese peor
caso, con los recursos disponibles en el sistema.
3. El segundo proceso es uno que puede finalizar con lo que hay disponible
más los recursos que liberaría el primer proceso.
4. De la misma forma, los siguientes procesos pueden finalizar con los
recursos que han liberado los anteriores en la secuencia.

5. Y si todos los procesos pueden terminar, es que no hay interbloqueo.

12 Interbloqueo
Sistemas Operativos I 07

Cuando un proceso realiza una petición, el SO calcula si tras conceder los recursos
el sistema pasa a un estado seguro. Si el nuevo estado es seguro, se concede la
petición. Si el nuevo estado no es seguro, el proceso queda bloqueado (aunque
existan recursos suficientes para atender la petición). La petición se concede
cuando se observa que no hay riesgo de interbloqueo.

Ejemplo

Dos recursos R1 y R2, con 5 y 6 ejemplares.

En el instante actual quedan libres 1 y 1 ejemplares.


Asignado Máximo Necesidades

Pa 1 0 2 2 1 2

Pb 1 3 3 4 2 1

Pc 2 2 3 2 1 0

El estado es seguro porque existe la secuencia segura {Pc, Pa, Pb}

¿Qué pasa si Pa pide un ejemplar de R1 y se lo damos?

El sistema quedará en un estado inseguro.

Interbloqueo 13
Formación Abierta

7. Detección del interbloqueo


El interbloqueo se puede detectar comprobando si existe una secuencia de
terminación de procesos (similar a la secuencia segura):

Sea L la lista de procesos del sistema y R el conjunto de recursos disponibles.


1. Buscar en L un proceso que puede continuar con los recursos disponibles
en R.

2. Si no se encuentra ningún proceso, ir al paso 5.


3. Suponer que P termina (lo retiramos de L) y que libera los recursos que
retiene (los añadimos a R).

4. Volver al paso 1.

5. Si L no está vacía, hay interbloqueo.

14 Interbloqueo
Sistemas Operativos I 07

7.8. Recuperación tras un interbloqueo


Un sistema que pretenda recuperarse del interbloqueo, debe invocar a un algoritmo
de detección cuando lo considere oportuno (ej. periódicamente).

Formas de intentar la recuperación:

Terminación de procesos.

Expropiación de recursos.

Terminación de procesos

Existen tres formas de matar procesos:

Matando a todos los procesos implicados: es demasiado drástico.


Matando a uno de los procesos:el sistema operativo tiene que elegir un criterio
para matarlo: el que más recursos libere o el que menos tiempo lleve en
ejecución.

Retrocediendo la ejecución de algún proceso (rollback): este método es muy


complicado de implementar y necesita que el programa esté diseñado para que
pueda retroceder.

Expropiación de recursos

Aquí también hay dos formas de expropiar recursos

Selección de la víctima: El sistema Operativo tiene que seleccionar los prcesos


y recueross a expropiar.

Retroceso: Existen el problema de qué hacer con el proceso al que se le ha


expropiado un recurso de un proceso.

En ambos casos (terminación de procesos o expropiación de recursos) hay que


tener cuidado de no provocar la inanición de procesos.

Interbloqueo 15
Sistemas Operativos I 07

Resumen

Puede haber varios ejemplares de un mismo tipo de recurso (ej. varias


impresoras). En este caso, cuando un proceso solicita un recurso, se le
concede cualquiera de los ejemplares que esté disponible.

Si un proceso solicita un recurso que no tiene ejemplares disponibles, el


proceso queda bloqueado, esperando hasta que se le asigna un ejemplar.

Un conjunto de procesos bloqueados, cada uno de ellos esperando por un


recurso que retiene otro proceso de ese conjunto. Es este estado:

 Ningún proceso del conjunto puede avanzar.


 Interbloqueo, bloqueo mutuo, abrazo mortal (deadlock).

Si en un sistema se produce una situación de interbloqueo, entonces se


cumplen simultáneamente estas cuatro condiciones:

 Exclusión mutua.
 Retención y espera.
 No expropiación.
 Espera circular.

Hay cuatro estrategias para tratar el interbloqueo::

 Prevención.
 Evitación.
 Permitir la aparición de interbloqueos y recuperarse.
 No tratar el problema.

MÉTODOS DE EVITACIÓN: ALGORITMO DEL BANQUERO: Se trata de


conceder los recursos sólo cuando no representen un riesgo futuro de
interbloqueo. Lo procesos han de declarar por anticipado la cantidad máxima
de recursos que van a utilizar a lo largo de su vida.

 Estado seguro: Es un estado en el cual no hay riesgo inminente de


interbloqueo. Un estado es seguro si en él podemos encontrar una
secuencia segura con todos los procesos del sistema.

Interbloqueo 17
Formación Abierta

 Cuando un proceso realiza una petición, el SO calcula si tras conceder los


recursos el sistema pasa a un estado seguro. Si el nuevo estado es seguro,
se concede la petición. Si el nuevo estado no es seguro, el proceso queda
bloqueado (aunque existan recursos suficientes para atender la petición). La
petición se concede cuando se observa que no hay riesgo de interbloqueo.

RECUPERACIÓN TRAS UN INTERBLOQUEO

 Terminación de procesos.
 Expropiación de recurso.

18 Interbloqueo
Sistemas Operativos I 08

Objetivos

Conocer la historia de Unix.

Conocer la historia de Linux.

Conocer cómo se numeran hoy las versiones en Linux .

Conocer cuál es el logro de Linux.

Conocer las características de Linux.

Conocer cómo son los programas de Linux.

Introducción a Unix/Linux 3
Formación Abierta

Introducción

A lo largo del tiempo, numerosos Sistemas Operativos han ido naciendo y


adaptándose a los nuevos tiempos. Son muchos los Sistemas Operativos que han
llegado hasta nuestros tiempos pero tanto Unix como Linux son Sistemas
Operativos que gozan de buena salud y están cada vez más presentes.

Como veremos en esta unidad didáctica, Unix y Linux no son la misma cosa
aunque compartan la misma filosofía. Hemos elegido estos S.O. para poner en
práctica los conocimientos teóricos adquiridos en las unidades didácticas
anteriores, porque se tratan de Sistemas Operativos completamente abiertos. Esta
característica nos permite echar un vistazo en cualquier momento al código fuente
para saber cómo está programado.

Tanto Unix como Linux son Sistemas Operativos que implementan todas las
funcionalidades propias de un Sistema Operativo robusto, multi-usuario y multi-proceso.

4 Introducción a Unix/Linux
Sistemas Operativos I 08

8.1. Historia de Unix


En 1965, los Bell Telephone Laboratorios (Bell Labs, una división de AT&T)
estaba trabajando con General Electric y el Proyecto MAC del MIT para escribir un
sistema operativo llamado Multics.

Para hacer más corta una historia de por sí larga, Bell Labs decidió que el proyecto
no estaba yendo a ninguna parte y disolvió el grupo. Esto, sin embargo, dejó a la
Bell sin un buen sistema operativo.

Ken Thompson y Dennis Ritchie decidieron esbozar un sistema operativo que


supliera las necesidades de la Bell Labs. Cuando Thompson llegó a necesitar un
entorno de desarrollo (1970) que corriera en una PDP-7, aprovechó para poner en
práctica sus ideas. Brian Kernighan le dio el nombre de Unix como un juego de
palabras contra Multics.

Un tiempo después, Dennis Ritchie inventó el lenguaje de programación "C". En 1973,


se reescribió el sistema operativo Unix en C, en lugar del ensamblador original.

Lenguaje ensamblador es un lenguaje de computadoras


muy elemental, y que está indisolublemente ligado a un
tipo particular de ordenador.

En 1977, se movió Unix a una nueva máquina distinta de las PDP en las que había
corrido previamente, mediante un proceso que se denomina migración. El hecho de
que Unix estaba escrito en C facilitó la migración, pues gran parte del código ya
escrito necesitó sólo una simple recompilación y no una reescritura.

Al final de los 70, AT&T tenía prohibido competir en la industria de la computación,


por lo que otorgó licencias económicas de Unix a varios colegios y
universidades. Unix se difundió lentamente fuera de las instituciones académicas,
pero pronto también se hizo popular en el ámbito comercial.

Introducción a Unix/Linux 5
Formación Abierta

El Unix de la actualidad es distinto del Unix de 1970.


Existen dos corrientes principales: System V de los Unix
System Laboratories (USL), que es una subsidiaria de
Novell2, y BSD de Berkeley Software Distribution.

La mayoría de las versiones de Unix son desarrolladas por compañías de software


y derivan de uno de los dos agrupamientos. Las versiones que se utilizan
actualmente incorporan características de ambas variaciones.

6 Introducción a Unix/Linux
Sistemas Operativos I 08

8.2. Historia de Linux


El autor primario de Linux es Linus Torvalds. A partir de la versión original, ha sido
mejorado por incontables personas de todo el mundo.

Se trata de un clon del sistema operativo Unix, escrito


desde cero. Ni USL, ni la Universidad de California,
Berkeley, tuvieron participación en la escritura de Linux.
Una de las cosas más interesantes de Linux es que el
desarrollo ocurre simultáneamente alrededor del mundo.
La gente ha contribuido desde Australia a Finlandia y
esperamos que lo siga haciendo.

Linux comenzó como un proyecto para explorar el chip 386. Uno de los primeros
proyectos fue un programa que pueda alternar entre la impresión de AAAA y BBBB.
Esto luego evolucionó hacia Linux.

Linux ha sido registrado bajo los términos de la Licencia


Pública General GNU (GNU General Public License) o
GPL. Esta licencia, escrita por la Free Software
Foundation (FSF), está diseñada para evitar que alguna
persona restrinja la distribución de software. En pocas
palabras, dice que aunque usted cobre a alguien por
entregarle una copia, no podrá impedir que ese alguien la
regale.

También significa que debe estar disponible el código


fuente. Esto es útil para los programadores.

Cualquiera puede modificar Linux y distribuir sus


modificaciones, siempre que mantenga el código bajo la
misma licencia.

En Linux puede correr la mayoría del software popular en Unix, incluyendo el


Sistema de ventanas X. X se desarrolló en el Instituto Tecnológico Massachusetts,
para permitir a los sistemas Unix la creación de ventanas gráficas, y la cómoda
interacción con las mismas. En la actualidad, el sistema X se usa en todas las
versiones disponibles de Unix.

Introducción a Unix/Linux 7
Formación Abierta

Además de las dos variaciones de Unix, System V y BSD,


existe un conjunto de documentos de estandarización
publicados por la IEEE denominados POSIX. Linux antes
que nada satisface los documentos POSIX-1 y POSIX-2.
Su apariencia se asemeja mucho a la de BSD en ciertas
partes, mientras que es parecido a System V en otras.
Es una combinación (y para la mayoría de las personas,
una buena) de los tres estándares.

Algunas de las utilidades incluidas con las distribuciones de Linux proceden de la


Free SoftwareFoundation y son parte del proyecto GNU. El proyecto GNU es un
esfuerzo para escribir un avanzado sistema operativo portable con el estilo de Unix.

"Portable" significa que pueda correr en una variedad de


máquinas distintas, no sólo en PCs Intel, Macintosh, o lo
que sea.

El sistema operativo del Proyecto GNU se llama Hurd.


La principal diferencia entre el Linux y el GNU Hurd no se
encuentra en la interfaz del usuario, sino en la del
programador, el Hurd es un sistema operativo moderno,
mientras que Linux es más parecido al diseño original de
Unix.

La historia precedente de Linux olvida mencionar otra


persona más allá de Linus Torvalds. Por ejemplo, H. J. Lu
se ha ocupado de mantener gcc y la biblioteca C de Linux
(dos elementos necesarios para todos los programas en
Linux) casi desde el principio de la vida del sistema
operativo. Usted puede encontrar una lista de personas
que merecen reconocimiento por su trabajo en cada
sistema Linux, en el archivo /usr/src/linux/CREDITS.

8 Introducción a Unix/Linux
Sistemas Operativos I 08

Evolución paso a paso

Linux, el núcleo o kernel de GNU/Linux, se desarrolló


originalmente como un proyecto que Linus Torvalds
emprendió en su tiempo libre. Se inspiró en Minix, un
sistema Unix básico desarrollado por Andy Tanenbaum.

Las primeras discusiones acerca del núcleo Linux tuvieron lugar en el grupo de
noticias de Usenet comp.os.minix. Estas discusiones se centraban sobre todo en
el desarrollo de un sistema pequeño y académico de Unix para usuarios de Minix
que querían algo más.

El primitivo desarrollo del núcleo Linux se centró en las características


multitarea del interfaz en modo protegido del 80386, escrito en código
ensamblador.

Linus escribe:

“Después de todo, ha sido una navegación tranquila; el


código era tremendo, pero tenía algunos dispositivos, y la
depuración fue más fácil. En esta etapa comencé a usar
C, y ciertamente acelera el desarrollo. También fue
entonces cuando me empecé a poner serio en mi
megalomaníaca idea de hacer ‘un Minix mejor que Minix’.
Esperaba poder recompilar gcc bajo el núcleo Linux
algún día. . . ”

Linus escribe:

“Dos meses para la configuración básica, pero luego sólo


un poco más hasta que tuve un controlador de disco
(gravemente plagado de errores, pero resultó que
funcionaba en mi ordenador) y un pequeño sistema de
ficheros. Fue por aquel entonces cuando dejé disponible
la versión 0.01 (más o menos a finales de agosto de
1991): no era bonito, no tenía controlador de disquetera,
y no podía hacer mucho en ningún sentido. No creo
siquiera que nadie compilara jamás esa versión.

Pero para entonces ya estaba enganchado, y no quería


parar hasta conseguir dejar fuera a Minix”.

Introducción a Unix/Linux 9
Formación Abierta

Nunca se hizo un anuncio de la versión 0.01. Las fuentes del 0.01 ni siquiera eran
ejecutables. Contenían sólo los rudimentos básicos de las fuentes del núcleo y
daban por supuesto que se tenía acceso a una máquina con Minix para compilarlas
y experimentar con ellas.

El 5 de octubre de 1991 Linus anunció la primera versión “oficial” del núcleo


Linux, la versión 0.02.

En este punto, Linus podía ejecutar bash (el GNU Bourne Again Shell) y gcc (el
compilador C GNU) pero no mucho más. De nuevo, estaba pensado como un
sistema para hackers. La orientación principal fue el desarrollo del núcleo; el
soporte de usuarios, la documentación y la distribución todavía no habían sido
atendidos. Aún hoy, la comunidad GNU/Linux parece que aún trata estas cosas
como secundarias frente a la “programación de verdad” (el desarrollo del núcleo).

Según escribió Linus en comp.os.minix,

“¿Suspiras por los fabulosos días de Minix-1.1, cuando


los hombres eran hombres y escribían sus propios
controladores de dispositivo? ¿Te encuentras sin un
buen proyecto y te mueres por hincar los dientes a un
sistema operativo que puedas intentar modificar para tus
necesidades?”

“¿Encuentras frustrante que todo en Minix funcione? ¿Se


acabaron las amanecidas para conseguir que funcione
ese programa cañero? Entonces este mensaje puede
que sea para ti.”

“Tal y como mencioné hace un mes, estoy trabajando en


una versión libre de una especie de Minix para
ordenadores AT-386. Por fin ha alcanzado el estado en
el que incluso se puede usar (aunque a lo mejor no se
puede, depende de para qué lo quieras), y deseo dejar el
código fuente libre para que alcance mayor distribución.
Sólo es la versión 0.02. . . , pero ya he ejecutado con
éxito bash, gcc, gnu-make, gnu-sed, compress,
etcétera, bajo este sistema”.

Después de la versión 0.03 Linus dio el salto a la versión 0.10, según empezó a
trabajar más gente en el sistema.

Después de varias revisiones posteriores, Linus incrementó el número de versión a


la 0.95 en marzo de 1992 para reflejar su impresión de que el sistema estaba
preparado para un inminente lanzamiento “oficial”.

10 Introducción a Unix/Linux
Sistemas Operativos I 08

Generalmente a un programa no se le numera con la


versión 1.0 hasta que no está en teoría completo o libre
de errores.

Casi año y medio después, a finales de diciembre de 1993, el núcleo de GNU/Linux


estaba todavía en la versión 0.99.p114, acercándose asintóticamente a la versión 1.0.

Casi todos los paquetes de programas UNIX importantes libremente redistribuibles


han sido portados a GNU/Linux, y también hay abundante software comercial. La
lista de hardware soportado es mayor que la del núcleo original. Mucha gente ha
ejecutado benchmarks (pruebas de rendimiento) en sistemas Linux 80486 y han
encontrado que es comparable a estaciones de trabajo de Sun Microsystems y
Digital Equipment Corporation.

¿Quién hubiera adivinado que este “pequeño” clónico de


UNIX iba a crecer tanto como para dominar el mundo de
la computación personal en su totalidad?

Introducción a Unix/Linux 11
Formación Abierta

8.3. Linux hoy

1. Numeración de versiones en Linux


Linux va evolucionando y se van creando nuevas versiones que mejoran las
anteriores o simplemente corrigen fallos de las anteriores. La nomenclatura
numérica que se utiliza para controlar las versiones es la siguiente:

 La primera cifra en el número de versión de Linux indica revisiones


realmente importantes en alcance.
 Los segundos números cuando son pares representan versiones más
estables, en las que uno puede confiar plenamente; cuando son impares
indican versiones en desarrollo, que son más propensas a contener errores.

 La última cifra es el número menor de lanzamiento cada vez que se libera


una nueva versión, que tal vez sólo arregla unos pocos problemas o agrega
unas pocas características, se incrementa en uno este número.

Linux es un sistema grande y desafortunadamente contiene errores que los


desarrolladores reparan al encontrarlos. Aun cuando algunas personas puedan
experimentar malfuncionamientos regularmente, esto se debe normalmente a causa
de piezas de hardware que no son estándares o que están defectuosas; los errores
que afectan a todos los usuarios son escasos y no se dan seguido.

Por supuesto, esos son los errores del núcleo. Los errores pueden presentarse en
casi cada aspecto del sistema, y los usuarios de poca experiencia tienen problemas
para diferenciar los distintos programas entre sí.

Por ejemplo, cierto problema puede hacer que todos los


caracteres aparezcan como un galimatías, ¿Es un error o
una característica?

Sorpresivamente es una característica. Existen ciertas secuencias de control que al


aparecer provocan el galimatías.

12 Introducción a Unix/Linux
Sistemas Operativos I 08

8.3.2. El logro de Linux


Muy posiblemente GNU/Linux sea el logro más importante del Software Libre desde
el Space War original, más recientemente, GNU/Emacs. GNU/Linux se ha
convertido en un sistema operativo para las empresas, la educación y la
productividad personal. GNU/Linux ya ha dejado de ser sólo para aquellos
expertos de Unix que se sientan durante horas ante una consola parpadeante, si
bien podemos asegurarle de buena tinta que muchos usuarios entran dentro de tal
categoría. Este libro le ayudará a sacarle el mayor partido a su GNU/Linux.

GNU/Linux (pronunciado con una i breve como en Línux)


es un sistema operativo, clónico de Unix, que se ejecuta
en varias plataformas, principalmente en PCs
(computadoras personales) con un procesador Intel
80386 o superior. Soporta una amplia variedad de
programas, desde el sistema de procesado de
documentos TEX hasta el sistema X-Window, pasando
por gcc (compilador GNU de C/C++) y TCP/IP. Es una
implementación de Unix versátil, libremente redistribuible
en los términos de la Licencia Pública General GPL.

GNU/Linux puede convertir un computador personal 80386 o superior en una


estación de trabajo que pone al alcance de su mano toda la potencia de Unix.

Las empresas instalan GNU/Linux en redes enteras de


máquinas, y utilizan este sistema operativo para
gestionar registros financieros y hospitalarios,
entornos informáticos distribuidos y
telecomunicaciones. Las Universidades del mundo
entero usan GNU/Linux para impartir cursos de
programación y diseño de sistemas operativos. Los
aficionados a la informática de todo el mundo usan
GNU/Linux en su casa para programar, para
productividad personal y para el hackeo sano en general.

Introducción a Unix/Linux 13
Formación Abierta

El que sea una implementación libre de Unix es lo


que hace a GNU/Linux tan diferente. Se desarrolló y
sigue desarrollándose de forma cooperativa,
principalmente a través de Internet, por parte de un grupo
de voluntarios que intercambian código fuente, informan
de los errores y solucionan los problemas en un entorno
abierto. Cualquiera es bienvenido a sumarse al esfuerzo
de desarrollar GNU/Linux. Todo lo que se necesita es
interés en hackear un clónico libre de Unix y ciertos
conocimientos de programación.

8.3.3. Características del sistema


GNU/Linux soporta características que también se encuentran en otras
implementaciones de UNIX, y otras muchas que no se encuentran en ninguna otra.
En esta sección, daremos un rápido paseo por las características del núcleo de
GNU/Linux.

GNU/Linux es un sistema operativo de multitarea real y multiusuario, como lo


son todas las otras versiones de UNIX. Esto significa que muchos usuarios pueden
autentificarse en el sistema y ejecutar programas y hacerlo de forma simultánea.

El sistema GNU/Linux es en su mayoría compatible con varios estándares de


UNIX (hasta donde pueda tener estándares el UNIX) en lo que respecta al código
fuente de los programas, entre ellos los estándares POSIX.1, UNIX System V, and
Berkely System Distribution UNIX. GNU/Linux se ha desarrollado con la idea de que
el código fuente sea portable de un sistema a otro, y así es fácil encontrar
características de uso general que son compartidas por más de una plataforma.

Gran parte del software para UNIX disponible en Internet y en otros lugares
compila para GNU/Linux sin hacer modificaciones. Además, es libremente
redistribuible todo el código fuente del sistema GNU/Linux, a saber, el núcleo, los
controladores de dispositivo, las bibliotecas, los programas de usuario y las
herramientas de desarrollo.

Otros rasgos internos específicos de GNU/Linux incluyen control de tareas POSIX


(que utilizan intérpretes de órdenes como chs y bash, pseudoterminales
(dispositivos tty), y soporte para teclados nacionales o personalizados que se
cargan dinámicamente.

GNU/Linux soporta consolas virtuales que le permiten cambiar entre sesiones


de login en una única consola del sistema. Los usuarios del programa screen
encontrarán familiar la implementación de la consola virtual de GNU/Linux.

14 Introducción a Unix/Linux
Sistemas Operativos I 08

El kernel puede emular instrucciones del coprocesador 387; los sistemas sin un
coprocesador matemático pueden ejecutar programas que requieren capacidades
matemáticas de coma flotante.

El sistema operativo soporta varios sistemas de ficheros para almacenar los


datos, como el sistema de ficheros ext2, diseñado específicamente para
GNU/Linux.

Hay soporte para los sistemas de ficheros de Xenix y UNIX System V, así como los
sistemas de ficheros de MS-DOS y el VFAT de Windows 98, en disco duro y en
disquete.

El sistema de ficheros de CD-ROM ISO 9660 también está soportado.


GNU/Linux proporciona una implementación completa del software de redes
TCP/IP. Incluidos controladores de dispositivo para muchas tarjetas Ethernet
habituales, y también SLIP (Serial Line Internet Protocol) y PPP (Point-to-Point
Protocol), que proporcionan acceso a una red TCP/IP a través de una conexión
serie, PLIP (Parallel Line Internet Protocol), y NFS (Network File System - Sistema
de Ficheros de Red).

También está soportada toda la gama de clientes y servicios TCP/IP, lo que incluye
FTP, telnet, NNTP y SMTP.

El núcleo de GNU/Linux se ha desarrollado para utilizar las características del


modo protegido del procesador 80386 o superior. En particular, GNU/Linux usa el
paradigma de manejo de la memoria basado en descriptores y en modo protegido.
Cualquiera que esté familiarizado con el modo protegido del 386 sabe que fue
diseñado para sistemas multitarea como el Unix. GNU/Linux explota esta
funcionalidad.

El núcleo soporta ejecutables con paginación por demanda: sólo aquellos


segmentos de un programa que realmente se utilizan se pasan a la memoria desde
el disco. Igualmente, se comparten las páginas de memoria de los ejecutables
mediante la técnica copy-on-write. Si varias copias de un programa se están
ejecutando a la vez, comparten la memoria física, lo cual reduce su uso global.

Para conseguir aumentar la cantidad total de memoria disponible, GNU/Linux


implementa también la paginación de disco: Memoria Swap. Puede reservarse
en el disco hasta un Gigabyte de espacio de intercambio en hasta 8 particiones
de 128 megas cada una). Cuando el sistema requiere más memoria física, manda
al fichero de intercambio las aplicaciones inactivas, permitiéndole ejecutar
aplicaciones más grandes y dar servicio a otros usuarios. Aun así, el intercambio de
páginas al disco no sustituye a la memoria RAM, que es mucho más rápida.

Introducción a Unix/Linux 15
Formación Abierta

El espacio de intercambio no tendría que llamarse así; no


se mandan al espacio de intercambio procesos enteros,
sino más bien determinadas páginas. Claro está que en
la mayoría de los casos irán al fichero de intercambio
procesos enteros, pero esto no siempre es cierto.

El núcleo de GNU/Linux implementa también una unificación de la memoria física y


de la memoria de intercambio en el disco. Toda la memoria que quede libre es
usada para intercambio, y se reduce al ejecutar programas grandes.

Los ejecutables usan bibliotecas compartidas; esto significa que los ejecutables
comparten el código común de las bibliotecas en un único fichero, como sucede en
SunOS. Los ficheros ejecutables ocupan menos espacio en disco, especialmente
cuando usan funciones de muchas bibliotecas distintas.

También existen bibliotecas enlazadas estáticamente para el depurado de objetos y


para mantener ficheros ejecutables “completos” cuando las bibliotecas dinámicas
no están instaladas. Las bibliotecas se enlazan dinámicamente en tiempo de
ejecución, y el programador puede usar sus propias rutinas en lugar de las rutinas
de la biblioteca estándar.

Para facilitar la depuración de programas, el núcleo genera volcados de memoria


core dump para el análisis post-mortem cuando una aplicación falla. Mediante los
core dump y un ejecutable enlazado con soporte de depuración, los
programadores pueden determinar la causa de que el programa haya fallado.

8.3.4. Programas en Linux

Prácticamente ha sido portada a GNU/Linux cualquier


utilidad que pudiera encontrarse en un sistema UNIX
estándar, entre ellas las órdenes básicas como ls, awk,
tr, sed, bc y more. El entorno de trabajo familiar en
otros sistemas UNIX se ha replicado en GNU/Linux. Se
incluyen todas las órdenes y utilidades.

Editores de texto
Están disponibles muchos editores de texto, entre ellos vi, ex, pico, jove y
GNU Emacs, y variantes como Lucid emacs, que incorpora extensiones para el
sistema X-Window, y joe. Es muy posible que el editor de texto al que este
acostumbrado haya sido portado a GNU/Linux.

16 Introducción a Unix/Linux
Sistemas Operativos I 08

Es interesante la cuestión de elegir un editor de texto. Muchos usuarios de UNIX


prefieren editores “sencillos” como vi. Pero vi tiene muchas limitaciones debido
a su antigüedad, y los modernos editores como emacs han ganado
popularidad. GNU Emacs soporta un completo lenguaje e intérprete de macros
basado en Lisp, una potente sintaxis de órdenes y otras extensiones.

Hay paquetes de macros para emacs que te permiten leer correo electrónico y
noticias, editar el contenido de directorios, e incluso atreverse con sesiones de
psicoterapia de inteligencia artificial.

Muchas de las utilidades básicas de GNU/Linux son


software GNU. Las utilidades GNU soportan
características avanzadas que no se encuentran en las
versiones estándar de los programas de BSD y System V.

Por ejemplo el clon GNU de vi, llamado elvis, incluye


un lenguaje estructurado de macros que difiere de la
interpretación original. Sin embargo, se pretende que las
utilidades GNU permanezcan compatibles con sus
homólogos de BSD y System V. Mucha gente considera
que las versiones GNU son superiores a los originales.

Shell

Una shell o intérprete de órdenes es un programa que


lee y ejecuta órdenes del usuario. Además muchas shells
proporcionan características como el control de tareas,
manejo de varias tareas a la vez, redirección de las
entradas y salidas, y un lenguaje de órdenes para escribir
shell scripts, un guión de órdenes.

Un guión de órdenes es un programa escrito en el lenguaje de órdenes de la shell,


análogo a un fichero .bat del DOS.

Están disponibles para GNU/Linux muchos tipos de shells. La diferencia más


importante entre las shells es el lenguaje de órdenes. Por ejemplo, el C SHell (csh)
utiliza un lenguaje de órdenes similar al lenguaje de programación C. El clásico
Bourne SHell sh usa un lenguaje de órdenes diferente.

Introducción a Unix/Linux 17
Formación Abierta

La elección de una shell se basa a menudo en el


lenguaje de órdenes que proporciona, y determina en
gran medida la calidad de tu entorno de trabajo en
GNU/Linux.

La Bourne Again Shell GNU (bash) es una variante de la Bourne Shell que incluye
muchas características avanzadas como el control de tareas, el historial de
órdenes, conclusión de órdenes y nombres de ficheros, un interface tipo emacs
para editar líneas de órdenes y otras poderosas extensiones al lenguaje estándar
de la shell Bourne estándar.

Otra shell popular es tcsh, una versión de la C Shell con funciones avanzadas
similares a las que encontramos en bash.

Otras shells son zsh, una shell pequeña similar a la Bourne shell; y la ash del
BSD.

Si es la única persona que va a usar el sistema y planea


usar sólo vi y bash como editor y shell,
respectivamente, no hay razón para instalar otros
editores o shells. Esta actitud de “hágalo usted mismo” es
la tónica general entre los usuarios y hackers de
GNU/Linux.

18 Introducción a Unix/Linux
Sistemas Operativos I 08

Resumen

En 1965, los Bell Telephone Laboratorios (Bell Labs, una división de AT&T)
estaba trabajando con General Electric y el Proyecto MAC del MIT para escribir
un sistema operativo llamado Multics. Bell Labs decidió que el proyecto no
estaba yendo a ninguna parte y disolvió el grupo.

Ken Thompson y Dennis Ritchie decidieron esbozar un sistema operativo que


supliera las necesidades de la Bell Labs. Cuando Thompson llegó a necesitar un
entorno de desarrollo (1970) que corriera en una PDP-7, aprovechó para poner
en práctica sus ideas. Brian Kernighan le dio el nombre de Unix como un juego
de palabras contra Multics.

Un tiempo después, Dennis Ritchie inventó el lenguaje de programación "C". En


1973, se reescribió el sistema operativo Unix en C.

El autor primario de Linux es Linus Torvalds. A partir de la versión original, ha


sido mejorado por incontables personas de todo el mundo.

Se trata de un clon del sistema operativo Unix, escrito desde cero. Ni USL, ni la
Universidad de California, Berkeley, tuvieron participación en la escritura de
Linux. Una de las cosas más interesantes de Linux es que el desarrollo ocurre
simultáneamente alrededor del mundo. La gente ha contribuido desde Australia
a Finlandia y esperamos que lo siga haciendo.

Además de las dos variaciones de Unix, System V y BSD, existe un conjunto de


documentos de estandarización publicados por la IEEE denominados POSIX.
Linux antes que nada satisface los documentos POSIX-1 y POSIX-2. Su
apariencia se asemeja mucho a la de BSD en ciertas partes, mientras que es
parecido a System V en otras. Es una combinación (y para la mayoría de las
personas, una buena) de los tres estándares.

Muy posiblemente GNU/Linux sea el logro más importante del Software Libre
desde el Space War original, más recientemente, GNU/Emacs. GNU/Linux se ha
convertido en un sistema operativo para las empresas, la educación y la
productividad personal. GNU/Linux ya ha dejado de ser sólo para aquellos
expertos de Unix que se sientan durante horas ante una consola parpadeante, si
bien podemos asegurarle de buena tinta que muchos usuarios entran dentro de
tal categoría. Este libro le ayudará a sacarle el mayor partido a su GNU/Linux.

Introducción a Unix/Linux 19
Formación Abierta

GNU/Linux (pronunciado con una i breve como en Línux) es un sistema


operativo, clónico de Unix, que se ejecuta en varias plataformas, principalmente
en PCs (computadoras personales) con un procesador Intel 80386 o superior.
Soporta una amplia variedad de programas, desde el sistema de procesado de
documentos TEX hasta el sistema X-Window, pasando por gcc (compilador
GNU de C/C++) y TCP/IP. Es una implementación de Unix versátil, libremente
redistribuible en los términos de la Licencia Pública General GPL.

El que sea una implementación libre de Unix es lo que hace a GNU/Linux tan
diferente. Se desarrolló y sigue desarrollándose de forma cooperativa,
principalmente a través de Internet, por parte de un grupo de voluntarios que
intercambian código fuente, informan de los errores y solucionan los problemas
en un entorno abierto. Cualquiera es bienvenido a sumarse al esfuerzo de
desarrollar GNU/Linux. Todo lo que se necesita es interés en hackear un clónico
libre de Unix y ciertos conocimientos de programación.

Una shell o intérprete de órdenes es un programa que lee y ejecuta órdenes del
usuario. Además muchas shells proporcionan características como el control de
tareas, manejo de varias tareas a la vez, redirección de las entradas y salidas, y
un lenguaje de órdenes para escribir shell scripts, un guión de órdenes.

20 Introducción a Unix/Linux
Sistemas Operativos I 09

Objetivos

Conocer en profundidad que ocurre cuando una computadora con Linux.

Conocer en profundidad que ocurre cuando Linux despierta.

Conocer cómo entra un usuario en Linux.

Conocer cómo sale un usuario en Linux.

Conocer cómo apagar la computadora en Linux.

Entrar y salir del sistema 3


Formación Abierta

Introducción

Ya sabemos qué es Linux y las características que tiene. En esta unidad didácticas
vamos a aprender lo esencial para poder empezar a trabajar y lo que es aún más
importante, qué hacer cuando nos cansemos de trabajar con él.

Como hemos estudiado en anteriores unidades didácticas anteriores, son muchos


los procesos que se suceden cuando un Sistema Operativo arranca. En esta unidad
didáctica veremos de forma práctica que es lo que sucede en un Sistema operativo
Linux.

El proceso de apagado en un Sistema Operativo también es crucial. En esta unidad


vamos a estudiar dicho proceso y las diferencias entre abandonar una sesión y
apagar la computadora.

4 Entrar y salir del sistema


Sistemas Operativos I 09

9.1. Proceso de arranque


Tal vez ha tenido experiencia con MS-DOS u otro sistema operativo monousuario,
como OS/2 o el de Macintosh. En esos sistemas operativos, usted no tiene que
identificarse frente a la computadora antes de poder utilizarla. Siempre se supone
que es el único usuario en el sistema y que puede acceder a todo lo que quiera.
Por el contrario, Unix es un sistema operativo multiusuario no sólo puede
utilizarlo más de una persona a la vez, sino que las distintas personas recibirán
distinto trato.

Para poder identificar las personas, Unix necesita un usuario para que el proceso
denominado autenticación pueda identificarlo o identificarla. Apenas se enciende
una computadora, tiene lugar un complejo proceso antes que la misma esté lista
para ser usada. A continuación veremos qué es lo que sucede durante la secuencia
de arranque.

9.1.1. La computadora despierta

Lo primero que sucede cuando se conecta la


alimentación a su computadora es la ejecución de un
programa denominado BIOS. Su nombre proviene de las
iniciales de Basic Input/Output System, que significa
Sistema de Entrada/Salida Básico.

Este programa está almacenado de manera permanente


dentro de la computadora en chips que normalmente son
del tipo de lectura solamente.

Para nuestros propósitos, el BIOS es un programa que nunca se puede cambiar. Al


funcionar, realiza ciertas comprobaciones mínimas y luego se fija si hay un
disquete en la disquetera.

Si encuentra alguno, mira en su "sector de arranque" y comienza a ejecutar su


código, si lo hay.

Si hay un disquete pero no contiene un sector de


arranque, el BIOS mostrará el siguiente mensaje:

Non-system disk or disk error

Entrar y salir del sistema 5


Formación Abierta

Si quitamos el disquete y apretamos una tecla, el proceso de arranque continuará.


Si no existe un disquete en la disquetera, el BIOS se fija si existe un registro
maestro de arranque (MBR: master boot record) en el disco duro. Si es así
comienza a ejecutar el código que allí encuentra, que se ocupa de cargar el sistema
operativo.

En los sistemas Linux, el cargador se llama LILO por LInux LOader, puede ocupar
el MBR y en ese caso cargará Linux.

La distribución en particular que esté utilizando puede


manejar el arranque desde el disco duro de otra manera,
así que debe controlar esto en la documentación que se
incluye con la distribución.

9.1.2. Linux despierta


La BIOS

Después de la BIOS le pasa el control a LILO, LILO a su


vez le pasa el control al núcleo de Linux. El núcleo es el
programa central del sistema operativo, que controla a
todos los demás.

Lo primero que hace Linux una vez que comienza su


ejecución es cambiar la CPU a modo protegido.

6 Entrar y salir del sistema


Sistemas Operativos I 09

El procesador 80386 (o simplemente 386) y sus


derivados (Pentium, Pentium Pro, etc.) que controla su
computadora tiene dos modos que se denominan "modo
real" y "modo protegido". El sistema operativo DOS
corre en modo real, al igual que la BIOS. Sin embargo,
los sistemas operativos más avanzados necesitan correr
en modo protegido.

A continuación, Linux mira qué clase de hardware tiene debajo. Necesita saber
qué clase de discos duros tiene, si hay o no un ratón, si está conectado a una red, y
otras trivialidades como esas. Linux no puede recordar ciertas cosas luego de
apagado, de manera que las pregunta cada vez que arranca. Afortunadamente, no
se las pregunta a usted se las pregunta al hardware

Durante el arranque, el núcleo de Linux muestra unos cuantos mensajes,


aunque con ciertas variaciones. Este proceso de consulta puede causar algunos
problemas con el sistema, pero si lo hace, lo hará probablemente cuando instale Linux
por primera vez. Si tiene problemas, consulte la documentación de la distribución.

El núcleo solamente se ocupa de administrar los otros programas, entonces cuando


está satisfecho con que todo anda bien debe arrancar otro programa para que haga
los trabajos útiles.

Proceso Init

El programa que el núcleo arranca se llama init. Una


vez que el núcleo arranca init, no lanza ningún otro
programa. El núcleo se transforma así en un
administrador y proveedor, no en un programa activo.

Por lo tanto, para saber qué es lo que hace la computadora luego que el núcleo
arranca, deberemos examinar init.

La complicada secuencia de arranque por la que


atraviesa init no es idéntica en todas las computadoras.
Para Linux existen varias versiones de init, y cada una
hace las cosas a su manera. Además también influye si
su máquina está en red, e incluso la distribución utilizada
para instalar Linux.

Entrar y salir del sistema 7


Formación Abierta

Algunas de las cosas que pueden suceder cuando init arranca son:

 El control de integridad del sistema de archivos.

Un sistema de archivos es la disposición de los archivos


en el disco duro. Además permite que Unix sepa cuales
partes del disco duro están ocupadas y cuáles no.

Desafortunadamente, ciertos factores como los cortes


en el suministro de energía hacen que la información
que el sistema de archivos tiene sobre la disposición en
el disco de los archivos no coincida con la disposición
real. En estos casos se ve la utilidad de un programa
llamado fsck, que es capaz de encontrar estas
situaciones y (con suerte) corregirlas.

 Se lanzan programas especiales de encaminamiento para las redes.


Estos programas informan a su computadora cómo se supone que puede
comunicarse con las otras.

 Se borran los archivos temporales que crean ciertos programas.


 Se actualiza correctamente el reloj del sistema. Esto es más complicado
de lo que puede parecer, pues Unix de manera predeterminada, necesita la
hora en UCT (Universal Coordinated Time), también conocido como hora de
Greenwich, y el reloj de la CMOS que es alimentado por una batería dentro
de la computadora muy probablemente estará configurado con la hora local.
Esto significa que debe tener algún programa que lea la hora del reloj de la
CMOS y la corrija transformándola en hora UCT.

Después que init termina con sus actividades de


arranque, comienza con sus tareas planificadas. init se
convierte así en el padre de todos los procesos del
sistema Unix.

Un proceso es simplemente un programa que está


corriendo; como cualquier programa puede correr más de
una vez, entonces puede haber más de un proceso para
un programa dado en particular.

8 Entrar y salir del sistema


Sistemas Operativos I 09

En Unix, los procesos se crean mediante una llamada al


sistema que es un servicio provisto por el núcleo
denominada fork. Se lo llama "fork" (bifurcación) porque
un proceso se bifurca en dos independientes. init bifurca
unos cuantos procesos, los cuales a su vez bifurcan
otros.

En su sistema Linux con toda seguridad init corre varias


instancias de un programa llamado getty. getty es el
programa que le permitirá iniciar el autenticación al
usuario, y que a continuación lanzará el programa
autenticación.

9.1.3. La actuación del usuario


La autenticación

Lo primero que hay que hacer para poder utilizar una


máquina con Unix es identificarse frente a la misma. Este
proceso, conocido en inglés como logging es la manera
que tiene Unix de saber cuáles son los usuarios
autorizados para utilizar el sistema.

Durante la autenticación se le preguntará un nombre de cuenta y una contraseña.


Los nombres de las cuentas son por lo general parecidos a los nombres de las
personas, y se lo asignará el administrador del sistema. Si usted es el administrador
del sistema deberá crearse una cuenta para poder trabajar sin los cuidados
especiales que requiere la cuenta root.

Después de tener lugar la secuencia de procedimientos durante el arranque, verá


en la pantalla algo como lo que se muestra a continuación:

Welcome to the saschaServer.

saschaServer login:

Entrar y salir del sistema 9


Formación Abierta

Sin embargo, puede ser que lo que el sistema le


presente al arrancar no se parezca a esto. Por ejemplo,
puede que en lugar de una aburrida pantalla de texto nos
muestre una pantalla gráfica. Aún en este caso, la
computadora le pedirá sus datos de autenticación y más
o menos de la misma manera. Si éste es el caso en su
sistema, entonces el entorno de trabajo que utilizará es el
sistema X-Window. De cualquier manera, el proceso de
autenticación será similar en ambos casos.

A lo largo de este texto utilizaremos el usuario ficticio (o


no tan ficticio, dependiendo de su máquina) larry.

Donde vea larry debe poner el nombre de su propia


cuenta.

Los nombres de las cuentas se basan en general en los


nombres reales; los sistemas Unix más grandes y serios
tienen cuentas que usan el apellido del usuario, alguna
combinación de nombre y apellido, y aún se da el caso
que deban agregarle algunos dígitos. Por ejemplo,
nombres de cuentas posibles para Larry Greenfield
podrían ser: larry, greenfie, lgreenfi.

saschaServer será, de la misma manera, el


"nombre" de la máquina sobre la que trabajaremos.

pitufaServer cuando necesite de un segundo sistema


por razones de claridad o de contraste.

Luego de teclear larry y apretar la tecla intro, nos encontramos con lo siguiente:

saschaServer login: larry

Password:

10 Entrar y salir del sistema


Sistemas Operativos I 09

Linux está solicitando su contraseña. Cuando escriba su contraseña no podrá


ver lo que está tecleando, en razón de la privacidad necesaria a dicha palabra.
Escriba cuidadosamente: puede borrar caracteres, pero no podrá ver lo que está
editando. No escriba muy despacio si hay gente mirándole podrían llegar a
descubrirla. En cualquier caso, si se equivoca no se haga problemas, pues el
sistema le dará otra oportunidad de autenticarse.

Después de autenticarse con su nombre de cuenta o nombre de usuario y su


contraseña, aparecerá un corto mensaje denominado "mensaje del día" que se
obtiene del archivo /etc/motd.

Este archivo se utiliza para dar a conocer cualquier clase


de información a los usuarios con respecto al estado del
sistema y es responsabilidad del administrador del
sistema fijar su contenido.

Después de estos procesos aparece un prompt.

Un prompt es un símbolo que nos indica que la


computadora está lista para recibir un comando.

/home/larry$

Si está utilizando X Window, el prompt aparecerá en


alguna de las "ventanas" que hay en pantalla. (Las
"ventanas" son simples cajas rectangulares.) Para
escribir en el prompt, mediante el ratón, mueva el
cursor del mismo (probablemente se ve como una gran
"X" o una flecha) dentro de la ventana.

Entrar y salir del sistema 11


Formación Abierta

9.2. Al abandonar la computadora

¡No apague la computadora directamente!

Se arriesga a perder valiosos datos.

A diferencia de la mayoría de las versiones de DOS, no es una buena idea apagar la


llave de alimentación de la computadora así como así, cuando termine de utilizarla.

Si reinicia la máquina (con el botón de reset) sin antes


tomar las debidas precauciones será igual de pernicioso.
Linux tiene una antememoria o caché que mejora el
rendimiento del disco. Esto significa que temporalmente
guarda en RAM información perteneciente al sistema de
almacenamiento permanente.

Las diferencias entre lo que Linux cree que hay en el


disco y lo que efectivamente está almacenado en el
disco se sincronizan cada 30 segundos. Si desea
apagar o reiniciar la computadora, necesitará ejecutar
algún procedimiento que indique a Linux que debe
detener el sistema de caché y actualizar la información en
el disco.

9.2.1. Cerrar la sesión abierta


Si ya ha terminado sus tareas con la computadora, pero aún está dentro del
sistema (ya tecleó su nombre de usuario y su palabra clave), lo primero que debe
hacer es registrar la salida (logout) del sistema.

Para ello, teclee el comando logout.

Todos los comandos se envían oprimiendo la tecla


marcada como Enter, Return ó Intro.

12 Entrar y salir del sistema


Sistemas Operativos I 09

/home/larry$ logout
Welcome to the saschaServer.

saschaServer login:

Ahora puede autenticar otro usuario.

9.2.2. Apagar la computadora


Si el suyo se trata de un sistema en el cual trabaja un único usuario puede desear
apagar la computadora cuando haya finalizado su trabajo con ella. Para apagarlo
ordenadamente deberá autenticar a una cuenta especial denominada root.

La cuenta del root es la cuenta del administrador del


sistema y puede acceder a todos los archivos que existen
en el sistema.

Si desea apagar la computadora, en inglés shutdown, deberá obtener la palabra


clave que utiliza el administrador del sistema. Por favor, autentíquese entonces
como root:

saschaServer login: root

Password:

Linux (root@saschaServer) #1 Mon Jan 9 14:56:26 EST


2006

/# shutdown now

Why? fin del día de trabajo

La diferencia entre "RAM" y un disco duro es como la diferencia entre la memoria


de corto plazo y la de largo plazo. Al quitar la alimentación de la computadora es
como si le diéramos un fortísimo golpe en la cabeza y olvidará todo lo que tenía en
la memoria de corto plazo. Pero las cosas guardadas en la memoria de largo plazo,
el disco duro estarán bien. El disco es miles de veces más lento que la RAM.

Entrar y salir del sistema 13


Formación Abierta

Para evitar el debilitamiento prematuro de ciertos


componentes de hardware, es mejor que apague la
computadora sólo cuando ya no la vaya a utilizar por el
resto del día. Encender y apagar una vez al día la
computadora probablemente es el mejor compromiso
entre ahorrar energía y machacar el sistema.

El comando "shutdown now" prepara al sistema para que pueda apagarse o


reiniciarse. Debe esperar por el mensaje que dice que es seguro apagar o reiniciar
el sistema.

Cuando el sistema le pregunta "Why?, sólo le está preguntando una razón para
decirle a los otros usuarios. Como no hay otra persona utilizando el sistema cuando
lo baja, puede responderle con lo que se le ocurra, o con nada.

Un pequeño dato para el perezoso: como alternativa al


enfoque de logout/login se puede utilizar el comando su.
Mientras está trabajando con su nombre de cuenta
habitual (larry a nuestros efectos) escriba "su" y luego
pulse la tecla Intro. Se le solicitará la palabra clave del
administrador del sistema. Si se autentica correctamente
tendrá a partir de dicho momento los privilegios que le
corresponden al mismo. Ahora, con estos privilegios
agregados, podrá bajar el sistema mediante el comando
"shutdown now".

14 Entrar y salir del sistema


Sistemas Operativos I 09

Resumen

Unix es un sistema operativo multiusuario no sólo puede utilizarlo más de una


persona a la vez.

Para poder identificar las personas, Unix necesita un usuario para que el
proceso denominado autenticación pueda identificarlo o identificarla.

Después de la BIOS le pasa el control a LILO, LILO a su vez le pasa el control


al núcleo de Linux. El núcleo es el programa central del sistema operativo, que
controla a todos los demás.

Lo primero que hace Linux una vez que comienza su ejecución es cambiar la
CPU a modo protegido.

A continuación, Linux mira qué clase de hardware tiene debajo.

El programa que el núcleo arranca se llama init. Una vez que el núcleo arranca
init, no lanza ningún otro programa. El núcleo se transforma así en un
administrador y proveedor, no en un programa activo.

Después que init termina con sus actividades de arranque, comienza con sus
tareas planificadas. init se convierte así en el padre de todos los procesos del
sistema Unix.

Lo primero que hay que hacer para poder utilizar una máquina con Unix es
identificarse frente a la misma. Este proceso, conocido en inglés como logging
es la manera que tiene Unix de saber cuáles son los usuarios autorizados para
utilizar el sistema.

Un prompt es un símbolo que nos indica que la computadora está lista para
recibir un comando.

Si reinicia la máquina (con el botón de reset) sin antes tomar las debidas
precauciones será igual de pernicioso. Linux tiene una antememoria o caché
que mejora el rendimiento del disco. Esto significa que temporalmente guarda
en RAM información perteneciente al sistema de almacenamiento permanente.

Entrar y salir del sistema 15


Formación Abierta

Las diferencias entre lo que Linux cree que hay en el disco y lo que
efectivamente está almacenado en el disco se sincronizan cada 30 segundos.
Si desea apagar o reiniciar la computadora, necesitará ejecutar algún
procedimiento que indique a Linux que debe detener el sistema de caché y
actualizar la información en el disco.

Si ya ha terminado sus tareas con la computadora, pero aún está dentro del
sistema (ya tecleó su nombre de usuario y su palabra clave), lo primero que
debe hacer es registrar la salida (logout) del sistema.

Si el suyo se trata de un sistema en el cual trabaja un único usuario puede


desear apagar la computadora cuando haya finalizado su trabajo con ella. Para
apagarlo ordenadamente deberá autenticar a una cuenta especial denominada
root.

La cuenta del root es la cuenta del administrador del sistema y puede acceder
a todos los archivos que existen en el sistema.

16 Entrar y salir del sistema


Sistemas Operativos I 10

Objetivos

Conocer cómo funciona una shell.

Conocer cómo crear una cuenta para poder acceder al sistema.

Conocer cómo cambiar su contraseña.

Conocer el comando who.

Conocer el concepto de consola virtual.

Conocer el árbol de directorios típico en un sistema Linux.

Conocer el directorio de trabajo actual de trabajo.

Conocer los comandos para poder movernos por los directorios.

Conceptos básicos de Linux 3


Formación Abierta

Introducción

En unidades anteriores aprendimos a autenticarnos en el sistema. Una vez


autenticados podemos empezar a trabajar con él. Es precisamente lo que vamos a
realizar en esta unidad didáctica.

Conoceremos qué es una shell, sus tipos y cómo trabaja internamente.


Los primeros pasos que vamos a dar con la shell van a ser para saber movernos en
la estructura de directorios de nuestro sistema.

Los Sistemas Linux tienen una estructura de directorios por defecto. En esta unidad
didáctica también haremos un repaso de la utilidad de los distintos directorios que
se instalan por defecto con Linux.

4 Conceptos básicos de Linux


Sistemas Operativos I 10

10.1. La Shell
Cuando entra al sistema Unix, se enfrenta con algo más o menos como lo que se
muestra a continuación:

/home/larry$

Ese “algo" se denomina prompt. Como su nombre sugiere, le solicita que indique
un comando.

Todos los comandos Unix consisten de una secuencia de letras, números y


caracteres. No son válidos los espacios dentro del nombre del comando. Algunos
comandos válidos son mail, cat, ls, etc.

Unix además hace diferencia entre mayúsculas y


minúsculas, lo que significa que Cat y cat son comandos
distintos.

El prompt se muestra como resultado del accionar de un


programa especial denominado intérprete de comandos.
El intérprete de comandos o shell acepta los comandos
que escribe el usuario y los ejecuta. Los comandos
pueden formar programas en el lenguaje del intérprete de
comandos, y a dichos programas se los denomina scripts
(guiones) de shell.

Apenas se autentica por primera vez, el prompt que ve es producto de la acción de


bash, en otras palabras: está corriendo su primer programa Unix, el shell bash.
Mientras esté conectado, el shell bash estará permanentemente funcionando.

Conceptos básicos de Linux 5


Formación Abierta

Tipos de Shell de Unix

Los shell en Unix se clasifican en dos grandes grupos:

Los tipo Bourne: Los shell tipo Bourne toman su nombre a partir de su
inventor, Steven Bourne. Steven Bourne escribió el shell original de Unix,
denominado sh; a partir de entonces, la mayoría de los shells tienen un nombre
con el sufijo sh para indicar que son extensiones de la idea original. Existen
varias implementaciones de este shell, que colectivamente llevan el nombre de
shells Bourne.

Los tipo C: fue implementado por Bill Joy. Tienen ventajas en cuanto a sus
mejores características interactivas, aunque son más difíciles de programar.

Tradicionalmente, los shell Bourne se han utilizado para los scripts de shell y por
razones de compatibilidad con el sh original, mientras que los shells C han sido más
comunes en su aplicación interactiva.

Linux viene con un shell Bourne denominado bash,


escrito por la organización Free Software Foundation. El
nombre bash proviene de BourneAgain Shell, uno de los
tantos juegos de palabras en Unix. Se trata de un shell
Bourne que se encuentran en todos los shells Bourne y
además varias de las características interactivas que se
encuentran en los shells C. bash es el shell
predeterminado cuando uno usa Linux.

Empleando la Shell de Linux


Para la mayoría de sus exploraciones en el mundo de GNU/Linux, usted le hablará
al sistema a través de un shell (intérprete de órdenes), un programa que recibe
las órdenes que escribe y los traduce en instrucciones al sistema operativo. Esto se
puede comparar al programa COMMAND.COM de MS-DOS, que hace esencialmente
lo mismo.

Un intérprete de órdenes es únicamente un interfaz para


GNU/Linux. Hay muchos interfaces disponibles, como el
sistema X Window, que le permite ejecutar órdenes
usando el ratón y el teclado.

6 Conceptos básicos de Linux


Sistemas Operativos I 10

A la vez que entra en el sistema, éste inicia el intérprete de órdenes, y usted ya


puede comenzar a introducir órdenes. Aquí tenemos un ejemplo rápido. Larry entra
en el sistema y el indicador “indicador de órdenes” del intérprete de órdenes
queda a la espera de órdenes.

saschaServer login: larry


Password: larry’s password

Welcome to SaschaServer!

/home/larry#

La última línea de este texto es el indicador del intérprete de órdenes, comunicando


que está listo para recibir órdenes. Probemos a decirle al sistema que haga algo
interesante:

/home/larry# make love

make: *** No way to make target ‘love’. Stop.

/home/larry#

Bien, como podemos ver, make es el nombre de un programa que hay en el


sistema, y el intérprete de órdenes ejecutó este programa cuando le dimos la orden.
(Desgraciadamente, el sistema se mostró antipático.).

Esto nos lleva a la siguiente pregunta: ¿Qué es una


orden? ¿Qué ocurre cuando escribe “make love”?

La primera palabra en la línea de órdenes,”make”, es el nombre de la orden que


debe ser ejecutada. Todo lo demás en la línea de órdenes se toma como
argumentos para esta orden.

Conceptos básicos de Linux 7


Formación Abierta

Ejemplo:

/home/larry# cp foo bar

El nombre de esta orden es “cp”, y los argumentos son “foo” y bar”.

Cuando introduce una orden, el intérprete de órdenes hace varias cosas.

Primero, comprueba la orden para ver si es interno al intérprete de órdenes.


También comprueba si la orden es un alias, o nombre sustitutorio, para otra
orden.

Si no se cumple ninguna de estas dos condiciones, el intérprete de órdenes


busca un programa, en el disco, que tenga el nombre especificado.

Si tiene éxito, el intérprete de órdenes ejecuta el programa, mandándole los


argumentos especificados en la línea de órdenes.

En nuestro ejemplo, el intérprete de órdenes busca un


programa llamado make, y lo ejecuta con el argumento
love.

La orden make es un programa usado a menudo para


compilar grandes programas, y toma como argumentos
el nombre de un ”objetivo”para compilar.

En el caso de ”make love”, le dijimos a make que


compilara el objetivo love.

Como make no puede encontrar un objetivo con ese


nombre, falla con un divertido mensaje de error, y nos
lleva de nuevo al indicador del intérprete de órdenes.

¿Qué ocurre si escribimos una orden en el intérprete de


órdenes y éste no puede encontrar un programa que
tenga el nombre especificado?

8 Conceptos básicos de Linux


Sistemas Operativos I 10

Bien, podemos probar lo siguiente:

/home/larry# eat dirt

eat: command not found

/home/larry#

Bastante simple, si el sistema no puede encontrar un programa con el nombre dado


en la línea de órdenes (aquí, ”eat”), imprime un mensaje de error. A menudo se
encontrará con ese mensaje de error si se equivoca con la orden (por ejemplo, si
hubiera escrito “mkae love” en lugar de “make love”).

Conceptos básicos de Linux 9


Formación Abierta

10.2. Registrarse en el sistema


A la hora de entrar en el sistema, verá algo como esto:

saschaServer login:

Introduzca su nombre y pulse la tecla Enter.

Nuestro héroe, larry, escribiría:


saschaServer login: larry

Password:

Seguidamente, introduzca su contraseña. Los caracteres que introduzca no serán


mostrados en la pantalla, así que escriba con cuidado. Si se equivoca con la
contraseña, verá:

Login incorrect

Y tendrá que probar de nuevo.


Una vez que haya introducido correctamente su nombre y contraseña, habrá
entrado oficialmente en el sistema y podrá comenzar a trabajar.

10 Conceptos básicos de Linux


Sistemas Operativos I 10

10.2.1. Creación de una cuenta


Antes de que pueda usar un sistema GNU/Linux recién instalado, debe configurar
una cuenta para sí mismo.

No suele ser una buena idea usar la cuenta root para


un uso diario; debería reservar la cuenta root para
ejecutar órdenes privilegiadas y para el mantenimiento
del sistema.

Para crear una cuenta para usted mismo, acceda al sistema como root y use la
orden useradd o adduser.

10.2.2. Cambiar la contraseña


También debería saber cómo cambiar su contraseña.
La orden passwd le pide su antigua contraseña y una nueva. Además le pide que
vuelva a introducir la nueva contraseña para darla por válida.

Tenga cuidado de no olvidar su contraseña, si lo hace,


tendrá que pedirle al administrador del sistema que la
reinicie por usted.

10.2.3. La orden who


La orden who muestra los usuarios activos en ese momento en el sistema y
cuando han iniciado su respectiva sesión. Si le damos los parámetros am i, es
decir, who am i, nos devuelve la información relativa a nosotros mismos.

Conceptos básicos de Linux 11


Formación Abierta

10.3. Consolas Virtuales


La consola del sistema es el monitor y el teclado conectados directamente al
sistema (debido a que GNU/Linux es un sistema operativo multiusuario, puede
tener otros terminales conectados a los puertos serie de su sistema, pero éstos no
constituirán la consola). GNU/Linux, como otras versiones de UNIX, facilita el
acceso a consolas virtuales (o CVs), que le permiten tener más de una sesión
en la consola a la vez.

Para comprobar esto, entre en el sistema.

Entonces, pulse Alt-F2.

Debería ver de nuevo

login:

Usted está viendo la segunda consola virtual.

Para cambiar a la primera CV, pulse Alt-F1.

Voila!. Ha vuelto a su primera sesión.

Un sistema GNU/Linux recién instalado le permite acceder sólo a las primeras seis
(más o menos) CVs, presionando de Alt-F1 hasta Alt-F6, o hasta cuantas CVs
estén configuradas en su sistema.

Es posible habilitar hasta 12 CVs (una para cada tecla de


función en su teclado). Como puede ver, el uso de CVs
puede ser muy poderoso porque puede trabajar en
diferentes sesiones a la vez.

Aunque el uso de CVs es algo limitado (después de todo, sólo puede ver una CV a
la vez), debería permitirle hacerse una idea de las capacidades multiusuario de
GNU/Linux. Mientras esté trabajando en la primera CV, puede cambiar a la
segunda CV y trabajar en otra cosa diferente.

12 Conceptos básicos de Linux


Sistemas Operativos I 10

10.4. Ficheros y directorios

Bajo la mayoría de sistemas operativos (incluyendo


GNU/Linux), existe el concepto de fichero, que es
simplemente un conjunto de información con un nombre
(llamado nombre de fichero).

Ejemplos de ficheros podrían ser su examen de historia,


un correo electrónico (e-mail), o un programa que pueda
ser ejecutado.

Básicamente, cualquier cosa almacenada en el disco es guardado en un fichero


individual.

Los ficheros se identifican por sus nombres de fichero. Por ejemplo, el fichero
que contiene su examen de historia podría estar almacenado con el nombre de
fichero history-paper. Estos nombres normalmente identifican el fichero y su
contenido de una forma que tenga algún significado para usted.

No existe ningún formato estándar para los nombres de fichero, al contrario de


lo que ocurre bajo MS-DOS y algunos otros sistemas operativos; en general, un
nombre de fichero puede contener cualquier carácter (excepto el carecer ‘/’) y
está limitado a 256 caracteres de longitud.

Junto con el concepto de ficheros tenemos el concepto


de directorios. Un directorio es una colección de ficheros.
Puede entenderse como una ”carpeta” que contiene
muchos ficheros diferentes.

Los directorios tienen nombres, con los que se les


identifica. Además, los directorios se mantienen en una
estructura de tipo árbol; es decir, los directorios pueden
contener otros directorios.

Conceptos básicos de Linux 13


Formación Abierta

Por tanto, puede referirse a un fichero por su nombre de ruta, que está compuesto
del nombre del fichero, precedido por el nombre del directorio que lo contiene.

Por ejemplo, supongamos que Larry tiene un directorio


llamado papers, que contiene tres ficheros: history-
final, english-lit, y masters-thesis.

Cada uno de estos tres ficheros contiene información


para tres proyectos de Larry. Para referirnos al fichero
english-lit, Larry puede especificar el nombre de la
ruta del fichero:

papers/english-lit

Como puede ver, el directorio y el nombre del fichero están separados por una
única barra (/). Por esta razón, los nombres de los ficheros no pueden contener el
carácter /.

Los usuarios de MS-DOS encontrarán familiar está


convención, aunque en el mundo de MS-DOS se usa la
barra invertida (\) en su lugar.

Como ya mencionamos, los directorios pueden anidarse unos en otros.

Por ejemplo, supongamos que hay otro directorio en


papers, llamado notes. El directorio notes contiene
los ficheros math-notes y cheat-sheet. El nombre
de la ruta del fichero cheat-sheet sería

papers/notes/cheat-sheet

Por tanto, el nombre de la ruta es realmente como la ruta hasta el fichero. El


directorio que contiene un subdirectorio dado es conocido como directorio padre. En
nuestro caso, el directorio papers es el padre del directorio notes.

14 Conceptos básicos de Linux


Sistemas Operativos I 10

10.4.1. El árbol de directorios

La mayoría de los sistemas GNU/Linux usa una


distribución de ficheros estándar para los ficheros de
forma que los recursos del sistema y los programas
puedan ser fácilmente localizados. Esta distribución
forma el árbol de directorios, que comienza en el
directorio “/”, también conocido como ”directorio raíz”.

Directamente debajo de / están importantes subdirectorios: /bin, /etc, /dev, y


/usr, entre otros.

Estos directorios contienen otros directorios que contienen ficheros de configuración


del sistema, programas, etcétera.

En particular, cada usuario tiene un directorio de usuario,


que es el directorio preparado para que el usuario
almacene sus propios ficheros.

En los ejemplos anteriores, todos los ficheros de Larry (como cheat-sheet y


history-final) están contenidos en el directorio de usuario de Larry.

Normalmente, los directorios de usuario están contenidos


bajo /home, y se nombran con el nombre de usuario al
que pertenecen. El directorio de usuario de Larry es
/home/larry.

Conceptos básicos de Linux 15


Formación Abierta

Figura 10.1. Árbol de directorios típico.

10.4.2. Directorio de trabajo actual

En cualquier momento, se asume que los órdenes que


introduce se refieren a su directorio de trabajo actual.
Puede entender directorio de trabajo como el directorio
en el que “se encuentra” en ese momento.

Cuando accede por primera vez al sistema, su directorio de trabajo se configura


como su directorio de usuario.

/home/larry, en nuestro caso.

Es muy probable que su configuración de shell muestre dicho directorio como parte
del prompt: /home/larry. Si no lo hace, pruebe el comando pwd, que proviene
de la sigla de las palabras present working directory.

Algunas veces el prompt muestra el nombre de la


máquina. Esto sólo es útil realmente en un entorno de
red en el cual hay una gran cantidad de máquinas
diferentes.

16 Conceptos básicos de Linux


Sistemas Operativos I 10

SaschaServer>pwd

/home/larry

SaschaServer>

Cuando haga referencia a un fichero, puede referirse a él en relación a su


directorio de trabajo actual, en vez de especificar el nombre de la ruta completa
del fichero.

Aquí tenemos un ejemplo. Larry tiene el directorio papers, y


papers contiene el fichero history-final. Si Larry quiere ver
el contenido de este fichero, puede usar la orden:

/home/larry# more /home/larry/papers/history-final

La orden more simplemente muestra por pantalla un fichero, pantalla a pantalla.


Como el directorio de trabajo actual de Larry es /home/larry, se puede referir al
fichero en relación con su localización actual usando la orden:

/home/larry# more papers/history-final

Si comienza el nombre del fichero (como papers/final) con un carácter diferente


de /, se está refiriendo al fichero en términos relativos a su directorio de trabajo
actual. Esto se conoce como nombre de ruta relativa.

Por otra parte, si comienza el nombre del fichero con una /, el sistema lo interpreta
como el nombre de la ruta absoluta, es decir, un nombre de ruta que incluye la ruta
completa hasta el fichero, comenzando en el directorio raíz, /. Esto se conoce
como nombre de ruta absoluta.

10.4.3. Refiriéndose al directorio inicial


Bajo tcsh y bash puede especificar su directorio de usuario con el carácter de la
virgulilla2 (˜
).

Conceptos básicos de Linux 17


Formación Abierta

Por ejemplo, la orden:

/home/larry# more /̃papers/history-final

es equivalente a:

/home/larry# more /home/larry/papers/history-final

El intérprete de órdenes reemplaza el carácter ˜por el nombre de su directorio de


trabajo.

Puede especificar también los directorios de usuario de otros usuarios con el


carácter virgulilla. La ruta: k̃arl/letters es expandido a
/home/karl/letters por el intérprete de órdenes (si /home/kart es el
directorio de usuario de Karl).

El uso de la virgulilla es simplemente un atajo; no existe


ningún directorio llamado ˜ (es sólo una ayuda
proporcionada por el intérprete de órdenes).

10.4.4. Explorando el sistema de ficheros


Un sistema de ficheros es la colección de ficheros y la jerarquía de directorios de
un sistema. Ha llegado la hora de acompañarle en un viaje alrededor del sistema de
ficheros.

Usted ya tiene habilidad y conocimiento como para entender el sistema de ficheros


de GNU/Linux y tiene un mapa de carreteras.

Primero, cambie al directorio raíz (cd /), e introduzca ls -F para que aparezca
una lista con su contenido.

Probablemente verá los siguientes directorios: bin, dev, etc, home, install,
lib, mnt, proc, root, tmp, user, usr, y var.

18 Conceptos básicos de Linux


Sistemas Operativos I 10

Ahora, veamos cada uno de estos directorios:

 /bin /bin es la abreviatura de “binarios”, o ejecutables, y es donde


residen muchos de los programas imprescindibles del sistema. Utilice ls -
F /bin para listar los ficheros que contiene. Si repasa la lista, puede que
reconozca algunas ordenes, como cp, ls, y mv. Estos son realmente los
programas que corresponden a esas órdenes. Cuando utiliza la orden cp,
está ejecutando el programa /bin/cp.

Usando ls -F, verá que muchos (si no todos) los ficheros


en /bin tienen un asterisco (”*”) añadido a sus nombres
de fichero. Esto indica que los ficheros son ejecutables.

 /dev Los ”ficheros” en /dev son controladores de dispositivos—


acceden a los dispositivos del sistema y a recursos como discos duros,
módems y memoria. Igual que su sistema puede leer datos de un fichero,
también puede leer la entrada del ratón accediendo a /dev/mouse.

Los ficheros cuyos nombres comienzan por fd son


dispositivos de discos flexibles. fd0 es la primera
disquetera y fd1 es la segunda. Puede que se haya dado
cuenta de que hay más dispositivos de disco flexible que los
dos anteriores: éstos representan tipos específicos de discos
flexibles. Por ejemplo, fd1H1440 accede a discos 3.5” de
alta densidad en la disquetera 1.

Puede que vea otros, y puede que no los vea todos. Cada
distribución de GNU/Linux es diferente en ciertos aspectos.

Lo siguiente es una lista de algunos de los ficheros de dispositivo más comúnmente


utilizados.

Conceptos básicos de Linux 19


Formación Abierta

Aunque puede que no tenga alguno de los dispositivos


físicos que se listan debajo, puede ocurrir que aun así
tenga controladores en dev para ellos.

 /dev/console se refiere a la consola del sistema—es decir, al monitor


conectado directamente a su sistema.

Los diversos dispositivos /dev/ttyS y /dev/cua se usan para acceder a


los puertos serie. /dev/ttyS0 se refiere a ”COM1” bajo MS-DOS. Los
dispositivos cuyos nombres comiencen por hd acceden a discos duros.

 /dev/cua son dispositivos de ”llamada” , y se usan con un módem.

 /dev/hda se refiere a todo el primer disco duro, mientras que /dev/hda1


se refiere a la primera partición de /dev/hda.

Los dispositivos cuyos nombres comienzan por sd son


discos SCSI. Si tiene un disco duro SCSI, en lugar de
acceder a él a través de /dev/hda, accedería con
/dev/sda. A las cintas SCSI se accede vía dispositivos
st, y a los CD-ROM SCSI vía dispositivos sr. Los
dispositivos cuyos nombres comienzan por lp acceden
a los puertos paralelos.

 /dev/lp0 es lo mismo que ”LPT1” en el mundo MS-DOS.


 /dev/null se utiliza como ”agujero negro”: los datos enviados a este
dispositivo se pierden para siempre. ¿Por qué es útil esto? Bueno, si quiere
evitar que la salida de una orden salga por la pantalla, puede dirigir esa
salida a /dev/null. Hablaremos de ello más adelante.
 Los dispositivos cuyos nombres comienzan por /dev/tty seguidos de un
número se refieren a las ”consolas virtuales” de su sistema (a las que se
accede pulsando Alt-F1 , Alt-F2 , y así sucesivamente). /dev/tty1
se refiere a la primera consola virtual, /dev/tty2 se refiere a la segunda,
y así sucesivamente.
 Los dispositivos cuyos nombres comienzan por /dev/pty son pseudo-
terminales, que se usan para proporcionar un “terminal” a las sesiones
iniciadas remotamente. Por ejemplo, si su máquina está en una red, las
sesiones de telnet entrantes utilizarán uno de los dispositivos /dev/pty.

20 Conceptos básicos de Linux


Sistemas Operativos I 10

 /etc contiene un buen número de ficheros de configuración del sistema.


Estos incluyen /etc/passwd (la base de datos de usuarios), /etc/rc (la
macro de inicio del sistema), y así sucesivamente.
 /sbin contiene binarios imprescindibles para el sistema que se usan para
su administración.

 /home contiene los directorios de inicio de los usuarios.

Por ejemplo, /home/larry es el directorio de inicio del


usuario ”larry”. En un sistema recién instalado, puede
que no haya ningún usuario en este directorio.

 /lib contiene las imágenes de las bibliotecas compartidas, que son


ficheros que contienen código que comparten muchos programas. Mejor que
cada programa use sus propias copias de estas rutinas compartidas, es que
todas se guarden en un lugar común, en /lib.

Esto hace que los ficheros ejecutables sean más


pequeños y ahorra espacio en el sistema.

 /proc En /proc se mantiene un ”sistema de ficheros virtual”, donde los


ficheros se guardan en memoria, no en disco. Estos ”ficheros” hacen
referencia a los diversos procesos que corren en el sistema, y permiten
obtener información sobre los procesos y programas en ejecución en un
instante dado.
 /tmp Muchos programas guardan información temporalmente en un fichero
que se borra cuando el programa finaliza su ejecución. La localización
estándar de estos ficheros es /tmp.

 /usr es un directorio muy importante que contiene subdirectorios que


albergan algunos de los programas más importantes y útiles usados en el
sistema.

Conceptos básicos de Linux 21


Formación Abierta

Los diversos directorios descritos arriba son


imprescindibles para que el sistema funcione, pero
muchos de los elementos que se encuentran en /usr
son opcionales. Sin embargo, son esos elementos
opcionales los que hacen un sistema útil e interesante.
Sin /usr, se tendría un sistema aburrido que sólo
soportaría programas como cp y ls. /usr contiene
muchos de los grandes paquetes de software y los
ficheros de configuración que los acompañan.

 /usr/X11R6 contiene el sistema X Window, si se instaló. El sistema X


Window es un enorme y potente entorno gráfico que proporciona un gran
número de utilidades gráficas y programas, que aparecen en ”ventanas” en
la pantalla. Si usted está familiarizado con Microsoft Windows o el entorno
Macintosh, X Window le será muy familiar. El directorio /usr/X11R6
contiene todos los ejecutables de X Window, ficheros de configuración y
ficheros de apoyo. Todo esto se cubre con más detalle en el Capítulo 5.5.
 /usr/bin es el auténtico almacén de software en cualquier sistema
GNU/Linux, y contiene la mayoría de los ejecutables de programas que no
se encuentran en otros sitios, como /bin.
 /usr/etc Como /etc contiene diferentes ficheros de configuración y
programas del sistema, /usr/etc contiene incluso más que el anterior. En
general, los ficheros que se encuentran en /usr/etc/ no son esenciales
para el sistema, a diferencia de los que se encuentran en /etc, que sí lo
son.

 /usr/include contiene los ficheros de cabecera para el compilador de


C. En estos ficheros (muchos de los cuales terminan en .h, por ”header”) se
declaran nombres de estructuras de datos, subrutinas, y constantes usadas
al programar en el nivel de sistema UNIX. Si está familiarizado con el
lenguaje de programación C, aquí encontrará ficheros de cabecera como
stdio.h, en el que se declaran funciones como printf().

 /usr/g++-include contiene ficheros de cabecera para el compilador de


C++ (muy parecido a /usr/include).

 /usr/lib contiene las bibliotecas ”stub” y ”estatic” equivalentes a los


ficheros situados en /lib. Cuando se compila un programa, el programa se
”enlaza” con las bibliotecas situadas en /usr/lib, que ordenarán al
programa que mire en /lib cuando necesite el código real de la librería.
Por añadidura, otros programas diversos guardan ficheros de configuración
en /usr/lib.

22 Conceptos básicos de Linux


Sistemas Operativos I 10

 /usr/local se parece mucho a /usr—contiene diversos programas y


ficheros que no son imprescindibles para el sistema, pero que lo hacen
divertido y excitante. En general, los programas en /usr/local son
específicos de cada sistema consecuentemente, /usr/local varía mucho
entre los diversos sistemas GNU/Linux.
 /usr/man Este directorio contiene las páginas del manual. Hay dos
subdirectorios en él para cada ”sección” de páginas del manual (use la
orden man man para más detalles). Por ejemplo, /usr/man/man1
contiene las fuentes (es decir, el original sin formatear) de la páginas del
manual de la sección 1, y /usr/man/cat1 contiene las páginas del
manual formateadas de la sección 1.
 /usr/src contiene el código fuente (las instrucciones sin compilar) de
diversos programas del sistema. El directorio más importante aquí es
/usr/src/linux, que contiene el código fuente del núcleo de GNU/Linux.
 /var En /var se mantienen directorios que a veces cambian de tamaño o
tienden a crecer. Muchos de estos directorios solían residir en /usr, pero
desde que aquéllos que mantienen.

GNU/Linux intentan conservarlo relativamente sin


cambios, los directorios que cambian a menudo se han
pasado a /var. Algunas distribuciones de GNU/Linux
guardan las bases de datos de sus paquetes de software
en directorios bajo /var.

 /var/log contiene diversos ficheros de interés para el administrador del


sistema, específicamente, los registros del sistema, que recogen errores o
problemas con el sistema. Otros ficheros recogen entradas e intentos
fallidos de entrar el sistema.
 /var/spool contiene ficheros que son encolados para otro programa. Por
ejemplo, si su máquina está conectada a una red, el correo entrante se
guarda en /var/spool/mail hasta que se lee o se borra. Los artículos
de noticias entrantes o salientes están en /var/spool/news, y así
sucesivamente.

Conceptos básicos de Linux 23


Sistemas Operativos I 10

Resumen

Para crear una cuenta para usted mismo, acceda al sistema como root y use la
orden useradd o adduser.

La orden passwd le pide su antigua contraseña y una nueva. Además le pide


que vuelva a introducir la nueva contraseña para darla por válida.

La orden who muestra los usuarios activos en ese momento en el sistema y


cuando han iniciado su respectiva sesión. Si le damos los parámetros am i, es
decir, who am i, nos devuelve la información relativa a nosotros mismos.

Consolas virtuales (o CVs), le permiten tener más de una sesión en la consola


a la vez.

Bajo la mayoría de sistemas operativos (incluyendo GNU/Linux), existe el


concepto de fichero, que es simplemente un conjunto de información con un
nombre (llamado nombre de fichero).

No existe ningún formato estándar para los nombres de fichero, puede


contener cualquier carácter (excepto el carecer ‘/’ )

Los directorios tienen nombres, con los que se les identifica. Además, los
directorios se mantienen en una estructura de tipo árbol; es decir, los
directorios pueden contener otros directorios.

La mayoría de los sistemas GNU/Linux usa una distribución de ficheros


estándar para los ficheros de forma que los recursos del sistema y los
programas puedan ser fácilmente localizados. Esta distribución forma el árbol
de directorios, que comienza en el directorio “/”, también conocido como
”directorio raíz”.

En particular, cada usuario tiene un directorio de usuario, que es el directorio


preparado para que el usuario almacene sus propios ficheros.

En cualquier momento, se asume que los órdenes que introduce se refieren a


su directorio de trabajo actual. Puede entender directorio de trabajo como el
directorio en el que “se encuentra” en ese momento.

El comando pwd, que proviene de la sigla de las palabras present working


directory, muestra el directorio actual de trabajo.

Conceptos básicos de Linux 25


Formación Abierta

La orden more simplemente muestra por pantalla un fichero, pantalla a


pantalla.

Si comienza el nombre del fichero (como papers/final) con un carácter


diferente de /, se está refiriendo al fichero en términos relativos a su directorio
de trabajo actual. Esto se conoce como nombre de ruta relativa.

Si comienza el nombre del fichero con una /, el sistema lo interpreta como el


nombre de la ruta absoluta, es decir, un nombre de ruta que incluye la ruta
completa hasta el fichero, comenzando en el directorio raíz, /. Esto se conoce
como nombre de ruta absoluta.

26 Conceptos básicos de Linux


Formación Abierta

Introducción

Es fundamental el saber movernos con agilidad dentro de un Sistema Operativo.


Una vez que hemos entrado en el sistema tenemos que saber movernos, copiar
ficheros, borrarlos, crear carpetas, etc.

En esta unidad didáctica vamos a aprender los comandos básicos para poder
interactuar con la estructura de directorios. Aprenderemos a movernos, a crear
mover y eliminar directorios.

En esta unidad didáctica vamos a aprender los comandos básicos para poder
interactuar con ficheros. Aprenderemos a ver su contenido, a moverlos y a
eliminarlos.

Es bastante usual el querer acceder desde Linux a u fichero de otro Sistema


Operativo. En esta unidad didáctica vamos a aprender a acceder a la información
de ficheros grabados con MSDOS.

Es requisito imprescindible para seguir aprendiendo por uno mismo, saber buscar
ayuda. No siempre vamos a tener todo al alcance de la mano, serán en estas
ocasiones cuándo tendremos que demostrar nuestras aptitudes. En esta unidad
didáctica aprenderemos a utilizar el manual de ayuda: MAN.

4 Primeros comandos GNU / Linux


Sistemas Operativos I 11

11.1. Primeros Pasos en GNU/Linux


Antes de que empecemos, es importante saber que todos los nombres de ficheros y
órdenes en un sistema GNU/Linux son case-sensitive (que diferencian entre
mayúsculas y minúsculas a diferencia de sistemas operativos como MS-DOS).

Por ejemplo, la orden make es muy diferente de Make o


MAKE. Lo mismo se cumple para nombres de ficheros y
directorios.

Primeros comandos GNU / Linux 5


Formación Abierta

11.2. Moviéndonos por la estructura de


directorios
Ahora que puede entrar en el sistema y que sabe cómo referenciar los ficheros
usando las rutas de los mismos.

¿Cómo puede cambiar el directorio de trabajo actual,


para hacer la vida más fácil?

La orden para moverse por la estructura de directorios es


cd, que es una abreviatura de ”cambiar directorio”.

Muchas de las órdenes más usadas en GNU/Linux son de dos o tres letras. La
forma de usar la orden cd es cd directorio donde directorio es el nombre del
directorio que quiere que se convierta en el directorio de trabajo actual.

Como se mencionó antes, cuando entra en el sistema, comienza en su directorio de


usuario. Si Larry quisiera cambiar al subdirectorio papers, usaría la orden.

/home/larry# cd papers

/home/larry/papers#

Como puede ver, el indicador de Larry cambia para reflejar su directorio de trabajo
actual (de forma que sabe dónde se encuentra).

Ahora que está en el directorio papers, puede ver


history-final con la orden /home/larry/papers#
more history-final

6 Primeros comandos GNU / Linux


Sistemas Operativos I 11

Ahora, Larry está atascado en el subdirectorio papers. Para regresar al directorio


superior (o padre), ejecute la orden.

/home/larry/papers# cd ..

/home/larry#

Observe los espacios entre “cd” y “..”. Cada directorio tiene una entrada llamada
“..” que se refiere al directorio padre. De forma similar, cada directorio tiene una
entrada llamada “.” que se refiere a sí mismo. Por lo tanto la orden siguiente no
lleva a ninguna parte:

/home/larry/papers# cd .

tcsh y bash son dos intérprete de órdenes que


funcionan bajo GNU/Linux. El intérprete de órdenes es
un programa que lee los órdenes del usuario y los
ejecuta; la mayoría de los sistema GNU/Linux habilitan
tcsh o bash para las cuentas.

Con la orden cd se pueden usar también rutas absolutas. Para cambiar al


directorio de usuario de Karl, se puede usar la orden.

/home/larry/papers# cd /home/karl

/home/karl#

Primeros comandos GNU / Linux 7


Formación Abierta

Además, la orden cd sin argumentos le llevará a su propio directorio de usuario.

/home/karl# cd

/home/larry#

8 Primeros comandos GNU / Linux


Sistemas Operativos I 11

11.3. Mirando el contenido de los


directorios

Ahora que sabe cómo moverse por los directorios, podría


pensar, ¿Y qué?.

Dar vueltas por los directorios no tiene mucho sentido por sí mismo, así que
introduzcamos una orden nueva, ls.

La orden ls muestra un listado de ficheros y


directorios, por omisión del directorio actual.

/home/larry# ls

Mail

letters

papers

/home/larry#

Aquí podemos darnos cuenta de que Larry tiene tres entradas en su directorio
actual: Mail, letters, y papers.

Esto no nos dice mucho ¿Qué son, directorios o ficheros? Podemos usar la
opción -F de la orden ls para obtener información más detallada.

/home/larry# ls --F

Mail/

letters/

papers/

/home/larry#

Primeros comandos GNU / Linux 9


Formación Abierta

Por la / que aparece en cada nombre, sabemos que estas tres entradas son, de
hecho, subdirectorios.

Ejecutando ls -F puede también aparecer un “*” al final de un nombre en la lista


resultante, lo que indicaría que el fichero es un ejecutable o un programa que
puede ejecutarse. Si no aparece nada al final de un nombre al usar ls -F, el
fichero es un “plain old file”, es decir, no es ni un directorio ni un ejecutable.

En general, cada orden puede tomar un cierto número de


opciones además de otros argumentos.

Estas opciones normalmente comienzan con un “-”, como se vio arriba con la
opción -F. La opción -F le dice a ls que dé más información acerca del tipo de
ficheros involucrados, en nuestro caso, imprimiendo una / después de cada
nombre de directorio.

Si le da a ls el nombre de un directorio, el sistema listará los contenidos de ese


directorio.

/home/larry# ls --F papers

english-lit

history-final
masters-thesis

notes/

/home/larry#

Si es un usuario de MS-DOS, puede que se dé cuenta


de que los nombres de ficheros pueden ser mayores
de 8 caracteres, y pueden contener puntos en
cualquier posición. Puede incluso usar más de un
punto en un nombre de fichero.

10 Primeros comandos GNU / Linux


Sistemas Operativos I 11

Vayamos a la parte superior del árbol de directorios, y luego bajemos a otro


directorio con las órdenes.

/home/larry# cd ..

/home# cd ..

/# cd usr

/usr# cd bin

/usr/bin#

Puede también moverse a los directorio en un sólo paso,


haciendo cd /usr/bin.

Pruebe a moverse por varios directorios, usando ls y cd. En algunos casos,


puede que le aparezca el mensaje de error “Permission denied”. Esto es
debido simplemente “al sistema de seguridad UNIX”: para poder usar las órdenes
ls o cd, debe tener permisos para hacerlo.

Primeros comandos GNU / Linux 11


Formación Abierta

11.4. Creación de directorios nuevos


Es hora de aprender cómo crear directorios. Esto requiere el uso de la orden
mkdir. Pruebe lo siguiente:

/home/larry# mkdir foo


/home/larry# ls -F

Mail/

foo/

letters/

papers/

/home/larry# cd foo

/home/larry/foo# ls

/home/larry/foo#

¡Felicidades! Ha creado un nuevo directorio y se ha metido en él. Como no hay


ficheros en este nuevo directorio, aprendamos cómo copiar ficheros de un lugar a otro.

12 Primeros comandos GNU / Linux


Sistemas Operativos I 11

11.5. Copiando ficheros


Para copiar ficheros, use la orden cp, como se muestra aquí:

/home/larry/foo# cp/etc/termcap.

/home/larry/foo# cp/etc/shells.

/home/larry/foo# ls --F

shells termcap

/home/larry/foo# cp shells bells

/home/larry/foo# ls --F

bells shells termcap

/home/larry/foo#

La orden cp copia los ficheros escritos en la línea de órdenes al fichero o


directorio dados como último argumento. Usamos “.” para referirnos al
directorio actual.

Primeros comandos GNU / Linux 13


Formación Abierta

11.6. Moviendo ficheros


La orden mv mueve ficheros, en vez de copiarlos. La sintaxis es muy parecida:

/home/larry/foo# mv termcap sells


/home/larry/foo# ls -F

bells sells shells

/home/larry/foo#

El fichero termcap ha sido renombrado a shells. Puede además usar la orden


mv para mover un fichero a un directorio completamente nuevo.

mv y cp sobrescribirán un fichero de destino que tiene el


mismo nombre sin preguntárselo. Tenga cuidado cuando
mueva un fichero a otro directorio. Puede que haya un
fichero con el mismo nombre en ese directorio, ¡que será
sobrescrito!

14 Primeros comandos GNU / Linux


Sistemas Operativos I 11

11.7. Borrando ficheros y directorios


Para borrar un fichero, use la orden rm, que proviene de ”remove”, como se
muestra aquí:

/home/larry/foo# rm bells sells


/home/larry/foo# ls -F

shells

/home/larry/foo#

rm no le preguntará antes de borrar un fichero, así que


tenga cuidado.

Una orden relacionada con rm es rmdir. Este orden borra un directorio, pero sólo
si el directorio está vacío. Si el directorio contiene algún fichero o subdirectorio,
rmdir protestará.

Primeros comandos GNU / Linux 15


Formación Abierta

11.8. Mirando en los ficheros


Las órdenes more y cat se usan para ver el contenido de los ficheros. El orden
more muestra un fichero, una pantalla completa cada vez, mientras que cat
muestra el fichero completo de una vez.

Para ver el contenido del fichero shells, use la orden:

/home/larry/foo# more shells

En caso de que esté interesado en lo que contiene shells, es una lista de


intérpretes de órdenes (shell) válidos en su sistema. En la mayoría de los sistemas,
esto incluye /bin/sh, /bin/bash y /bin/csh.

Mientras esté usando more, presione Space para ver la


siguiente página de texto, y b para ver la página anterior.
Hay otras órdenes disponibles en more, éstos son sólo
los básicos.

Salga de more y pruebe cat /etc/termcap. Probablemente el texto irá


demasiado rápido para que pueda leerlo. El nombre “cat” proviene de hecho de
“concatenate”, que es el verdadero uso del programa.

La orden cat puede usarse para ”encadenar” los contenidos de varios


ficheros y guardar el resultado en otro fichero. Volveremos a esto más adelante

16 Primeros comandos GNU / Linux


Sistemas Operativos I 11

11.9. Obteniendo ayuda en línea


Casi todos los sistemas UNIX, incluyendo GNU/Linux, facilitan lo que se conoce
como páginas del manual. Estas páginas contienen documentación acerca de
órdenes del sistema, recursos, ficheros de configuración, etc.

La orden usada para acceder a las páginas del manual es man. Si está
interesado en aprender nuevas opciones de la orden ls puede escribir.

/home/larry# man ls

Y se mostrará la página del manual para ls.

Por desgracia, la mayoría de las páginas de manual están escritas por personas
que ya tienen alguna idea de lo que la orden o recurso hace. Por esta razón, las
páginas del manual, a menudo, contienen sólo los detalles técnicos de la orden, sin
mucha explicación. De todos modos, las páginas del manual pueden constituir un
recurso muy valioso para refrescar su memoria si se le olvida la sintaxis de una orden.

Pruebe man para las órdenes que ya hemos visto y


cuando veamos alguno nuevo.

Algunas de estas órdenes no tendrán página de manual, por distintas razones:

Primero, las páginas de manual puede que no se hayan escrito todavía. El


proyecto de documentación de GNU/Linux también es responsable de las
páginas de manual de GNU/Linux.

Segundo, la orden podría ser una orden interna del shell, o un alias la cual
podría no tener una página de manual propia.

Primeros comandos GNU / Linux 17


Formación Abierta

Un ejemplo es cd, que es una orden interna


del shell. El shell por sí sólo procesa la
orden cd, no hay un programa separado que
implemente esta orden.

18 Primeros comandos GNU / Linux


Sistemas Operativos I 11

11.10. Acceder a los ficheros MS-DOS


Si por cualquier razón quiere acceder a ficheros de MS-DOS, lo podrá hacer
fácilmente desde GNU/Linux.

La manera normal de acceder a los ficheros de MS-DOS es montar una partición


MS-DOS o un disco flexible bajo GNU/Linux, lo cual permite acceder a los ficheros
directamente a través del sistema de ficheros.

Por ejemplo, si tiene un disco flexible MS-DOS en


/dev/fd0, la orden:

# mount -t msdos /dev/fd0 /mnt

Lo montará en /mnt.

También puede montar una partición MS-DOS de su disco duro para que sea
accesible desde GNU/Linux.

Si tiene una partición MS-DOS en /dev/hda1, la orden


siguiente la monta:

# mount -t msdos /dev/hda1 /mnt

Asegúrese de desmontar (umount) la


partición cuando haya terminado de usarla.

Primeros comandos GNU / Linux 19


Formación Abierta

También se puede hacer que una partición MS-DOS se monte automáticamente


en el momento del arranque si incluye la entrada en /etc/fstab. La siguiente
línea en /etc/fstab monta una partición MS-DOS en /dev/hda1 en el
directorio /dos.

/dev/hda1 /dos msdos defaults

El software Mtools también puede ser usado para


acceder a ficheros MS-DOS. Las órdenes mcd, mdir,
y mcopy se comportan todas como sus equivalentes
MS-DOS. Si instala las Mtools, debería tener páginas
del manual disponibles para estas órdenes.

Nota: Acceder a ficheros MS-DOS es una cosa;


ejecutar programas MS-DOS es otra.

Sin embargo, GNU/Linux y MS-DOS son sistemas operativos marcadamente


diferentes. La potencia de cualquier emulador de MS-DOS bajo UNIX está limitada.

20 Primeros comandos GNU / Linux


Sistemas Operativos I 11

11.11. Caracteres comodín


Una característica importante de la mayoría de sistemas GNU/Linux es la
posibilidad de referirse a más de un fichero usando caracteres especiales.

Estos caracteres comodín le permiten referirse a todos los nombres de fichero que
contengan el carácter “n”.

El comodín ‘*” especifica cualquier carácter o cadena


de caracteres en el nombre de un fichero. Cuando usa
el carácter “*” en un nombre de fichero, el intérprete de
órdenes lo reemplaza con todas las posibles
sustituciones de los nombres de fichero en el directorio
al que esté haciendo referencia.

Suponga que Larry tiene los ficheros frog, joe y


stuff en su directorio actual.
/home/larry# ls

frog joe stuff

/home/larry#

Para especificar todos los ficheros que contienen la letra “o” en el nombre de
fichero, use la instrucción.

/home/larry# ls *o*

frog joe

/home/larry#

Como puede ver, cada instancia de “*” es reemplazada con todas las sustituciones
que coinciden con los nombres de fichero del directorio actual.

El uso de “*” sólo, simplemente coincide con todos los nombres de fichero, porque
todos los caracteres coinciden con el comodín.

Primeros comandos GNU / Linux 21


Formación Abierta

Ejemplo 1

/home/larry# ls *

frog joe stuff

/home/larry#

Ejemplo 2

/home/larry# ls f*

frog

Ejemplo 3

/home/larry# ls *ff

stuff

Ejemplo 4

/home/larry# ls *f*

frog stuff

22 Primeros comandos GNU / Linux


Sistemas Operativos I 11

Ejemplo 5

/home/larry# ls *ff

stuff

Ejemplo 6

/home/larry# ls s*f

stuff

/home/larry#

El proceso de cambiar un “*” en una serie de nombres de fichero se llama


expansión de comodines y lo hace el intérprete de órdenes. Esto es importante:
una orden individual, como ls, nunca ve el “*” en su lista de parámetros. El
intérprete de órdenes expande el comodín para incluir todos los nombres de fichero
que coinciden.

Ejemplo 7

Así, la orden

/home/larry# ls *o*

es expandido por el intérprete de órdenes a

/home/larry# ls frog joe

Una nota importante del comodín “*” : no ve las


coincidencias de los nombres de fichero que empiezan
con un único punto (“.”). Estos ficheros se tratan como
ficheros ocultos, aunque no están realmente
escondidos, no aparecen en los listados normales con ls
y no son afectados por el uso del comodín “*”.

Primeros comandos GNU / Linux 23


Formación Abierta

He aquí un ejemplo. Mencionamos antes que cada directorio contiene dos entradas
especiales: “.” Se refiere al directorio actual, y “..” , que se refiere al directorio
padre. Sin embargo, cuando usa ls, estas dos entradas no se muestran.

Ejemplo 8

/home/larry# ls

frog joe stuff

/home/larry#

Si usa el parámetro -a con ls, sin embargo, puede visualizar los nombres de
fichero que empiezan con “.”.

Ejemplo 9

/home/larry# ls -a

. .. .bash profile .bashrc frog joe stuff

/home/larry#

El listado contiene las dos entradas especiales, “.” y “..”, así como otros dos
ficheros “ocultos”, .bash profile y .bashrc. Estos dos ficheros son ficheros de
inicio usados por bash cuando larry entra en el sistema.

Hay que fijarse en que cuando usa el comodín “*”, ninguno de los nombres de
fichero que empiezan por “.” son visualizados.

Ejemplo 10

/home/larry# ls *

frog joe stuff

/home/larry#

Esto es una característica de seguridad: si el comodín “*” tiene coincidencias con


nombres de fichero que empiecen por “.”, también tendría coincidencia con los
nombres de directorios “.” y “..”. Esto puede ser peligroso al usar ciertas órdenes.

24 Primeros comandos GNU / Linux


Sistemas Operativos I 11

Otro comodín es “?”. El comodín “?” sólo se expande a un carácter. Así, “ls ?”
muestra todos los nombres de fichero de un sólo carácter. Y “ls termca?”
mostraría “termcap” pero no “termcap.backup”.

Aquí hay otros ejemplos:

Ejemplo 11

/home/larry# ls j?e

joe

Ejemplo 12

/home/larry# ls f??g

frog

Ejemplo 13

/home/larry# ls ????f

stuff

/home/larry#

Como puede ver, los comodines le permiten especificar muchos ficheros a la vez.

Las órdenes cp y mv realmente pueden copiar o mover


más de un fichero a la vez. Por ejemplo,

/home/larry# cp /etc/s* /home/larry

copia todos los ficheros de /etc cuyo nombre empieza


por “s” al directorio /home/larry.

Primeros comandos GNU / Linux 25


Formación Abierta

El formato de la orden cp es realmente cp ficheros destino donde


ficheros lista los nombres de fichero a copiar, y destino es el fichero o
directorio destino.

La orden mv tiene una sintaxis idéntica.

Si está copiando o moviendo más de un fichero, el


destino tiene que ser un directorio. Sólo puede copiar
o mover un único fichero a otro fichero.

26 Primeros comandos GNU / Linux


Sistemas Operativos I 11

11.12. Sumario de órdenes básicas


Esta sección introduce algunas de las más útiles órdenes básicas de un sistema
UNIX, incluyendo aquéllas que son cubiertas en la sección anterior.

Fíjese en que las opciones suelen empezar con “-”, y en la mayoría de los casos es
posible especificar más de una opción con un único “-”. Por ejemplo, en vez de
usar ls -l -F, se puede escribir ls -lF.

En lugar de dar una lista de cada una de las opciones de una orden, ahora sólo
vamos a presentar órdenes útiles o importantes. De hecho, la mayoría de estas
órdenes tienen muchas opciones que nunca usará. Puede usar man para echar un
vistazo a las páginas de manual de cada orden, el cuál lista todas las opciones
disponibles.

Muchas de estas órdenes toman como argumento una lista de ficheros o


directorios, indicados en esta tabla por “fichero1 . . . ficheroN”.

Por ejemplo, la orden cp toma como argumentos una


lista de ficheros para copiar, seguido del fichero o
directorio destino. Cuando va a copiar más de un fichero,
el destino debe ser un directorio.

cd

Cambia el directorio de trabajo actual.

Sintaxis: cd directorio.

Donde directorio es el directorio al que se quiere cambiar. “.” hace referencia


al directorio actual, “..” al directorio padre. Si no se especifica ningún directorio le
lleva, por omisión, a su directorio de usuario.

cd ../foo

Sube el directorio actual un nivel, y entonces, se


introduce en el directorio foo.

Primeros comandos GNU / Linux 27


Formación Abierta

ls

Muestra información acerca de los ficheros y directorios nombrados.

Sintaxis: ls ficheros.

Donde ficheros consiste en los nombres de ficheros o directorios que se quieren


listar. Las opciones que más se usan son -F (para mostrar el tipo de fichero) y -l
(para mostrar una lista ” ampliada” incluyendo el tamaño de los ficheros,
propietario, permisos, etc.).

ls -lF /home/larry

Muestra los contenidos del directorio /home/larry.

cp

Copia uno o más ficheros a otro fichero o directorio.

Sintaxis: cp ficheros destino.

Donde ficheros indica los ficheros que hay que copiar, y destino es el fichero
o directorio destino.

cp ../frog joe

Copia el fichero ../frog al fichero o directorio joe.

mv

Mueve uno o más ficheros a otro directorio. Esta orden hace el equivalente de una
copia seguido del borrado del fichero original. Puede usar esto para renombrar
ficheros, como con la orden de MS-DOS RENAME.

Sintaxis: mv ficheros destino.

Donde ficheros indica los archivos que hay que mover, y destino es el fichero
o directorio destino.

28 Primeros comandos GNU / Linux


Sistemas Operativos I 11

mv ../frog joe

Mueve el fichero ../frog al fichero o directorio joe.

rm

Borra ficheros. Cuando borra un fichero bajo UNIX, son irrecuperables (al contrario
que con MS-DOS, donde normalmente se puede ”desborrar” el fichero).

Sintaxis: rm ficheros.

Donde ficheros describe el nombre de los ficheros que hay que borrar.

La opción -i le pide confirmación antes de borrar el fichero.

rm -i /home/larry/joe /home/larry/frog

Borra los ficheros joe y frog en /home/larry.

mkdir

Crea nuevos directorios.

Sintaxis: mkdir dirs.

Donde dirs son los directorios que hay que crear.

mkdir /home/larry/test

Crea el directorio test en /home/larry.

Primeros comandos GNU / Linux 29


Formación Abierta

rmdir

Borra directorios vacíos. Cuando use rmdir, el directorio de trabajo actual no debe
estar dentro del directorio que se pretende borrar.

Sintaxis: rmdir dirs.

Donde dirs define los directorios que hay que borrar.

rmdir /home/larry/papers

Borra el directorio /home/larry/papers, si está vacío.

man

Muestra la página de manual para la orden o recurso dado, es decir, no una utilidad
del sistema que no sea una orden, como una función de biblioteca.

Sintaxis: man command.

Donde command es el nombre de la orden o recurso del que se quiere conseguir ayuda.

man ls

Le da información acerca de la orden ls.

more

Muestra información del contenido de los ficheros nombrados, pantalla por pantalla.

Sintaxis: more ficheros.

Donde ficheros indica los ficheros que se quieren mostrar.

more papers/history-final

Muestra el fichero papers/history-final.

30 Primeros comandos GNU / Linux


Sistemas Operativos I 11

cat

Oficialmente usado para concatenar ficheros, cat también se usa para mostrar los
contenidos de un fichero por pantalla.

Sintaxis: cat ficheros.

Donde ficheros indica los ficheros que se quieren mostrar.

cat letters/from-mdw

Muestra el fichero letters/from-mdw.

echo

Muestra en la pantalla los argumentos que se le pasan a la orden.

Sintaxis: echo args.

Donde args indica los argumentos que se quieren mostrar.

echo ‘‘Hello world’’

Muestra la cadena “Hello world”.

grep

Muestra cada línea en uno o más ficheros que contiene un patrón dado.

Sintaxis: grep pattern ficheros.

Donde pattern es un patrón, y ficheros indica los ficheros donde se quiere


buscar dicho patrón.

grep loomer /etc/hosts

Muestra cada línea en el fichero /etc/hosts que


contiene el patrón “loomer”.

Primeros comandos GNU / Linux 31


Sistemas Operativos I 11

Resumen

La orden para moverse por la estructura de directorios es cd, que es una


abreviatura de ”cambiar directorio”.

La orden ls muestra un listado de ficheros y directorios, por omisión del


directorio actual.

En general, cada orden puede tomar un cierto número de opciones además de


otros argumentos. Para poder usar las órdenes debe tener permisos para
hacerlo.

La orden cp copia los ficheros escritos en la línea de órdenes al fichero o


directorio dados como último argumento. Usamos “.” para referirnos al
directorio actual.

La orden mv mueve ficheros, en vez de copiarlos.

mv y cp sobrescribirán un fichero de destino que tiene el mismo nombre sin


preguntárselo. Tenga cuidado cuando mueva un fichero a otro directorio.
Puede que haya un fichero con el mismo nombre en ese directorio, ¡que será
sobrescrito!.

Para borrar un fichero, use la orden rm, que proviene de ”remove”.

Las órdenes more y cat se usan para ver el contenido de los ficheros. El
orden more muestra un fichero, una pantalla completa cada vez, mientras que
cat muestra el fichero completo de una vez.

La orden cat puede usarse para ”encadenar” los contenidos de varios


ficheros y guardar el resultado en otro fichero.

Casi todos los sistemas UNIX, incluyendo GNU/Linux, facilitan lo que se


conoce como páginas del manual. Estas páginas contienen documentación
acerca de órdenes del sistema, recursos, ficheros de configuración, etc.

La orden usada para acceder a las páginas del manual es man.

Primeros comandos GNU / Linux 33


Formación Abierta

Si por cualquier quiere acceder a ficheros de MS-DOS, lo podrá hacer


fácilmente desde GNU/Linux. La manera normal de acceder a los ficheros de
MS-DOS es montar una partición MS-DOS o un disco flexible bajo GNU/Linux,
lo cual permite acceder a los ficheros directamente a través del sistema de
ficheros.

Una característica importante de la mayoría de sistemas GNU/Linux es la


posibilidad de referirse a más de un fichero usando caracteres especiales. El
comodín “*” especifica cualquier carácter o cadena de caracteres en el nombre
de un fichero. Cuando usa el carácter “*” en un nombre de fichero, el intérprete
de órdenes lo reemplaza con todas las posibles sustituciones de los nombres
de fichero en el directorio al que esté haciendo referencia.

34 Primeros comandos GNU / Linux


Formación Abierta

Introducción

Por defecto, el resultado de los comandos se muestra por pantalla, sin embargo
esto es así porque la salida estándar está configurada de esta forma. En esta
unidad didáctica estudiaremos el concepto de entrada y salida y aprenderemos a
cambiar el comportamiento por defecto para, por ejemplo, guardar el resultado de
una orden en un fichero en vez de mostrarlo por pantalla.

En muchas ocasiones queremos ejecutar dos órdenes una detrás de la otra, de tal
manera que la segunda orden toma como información el resultado de la primera.
¿Por ejemplo, cómo hacer para que el resultado de la orden ls sea ordenado por
fecha a través de la orden sort? La respuesta está en el uso de las tuberías
(pipes). En esta unidad didáctica aprenderemos todo lo necesario para entender y
aplicar tuberías.

En esta unidad didáctica también vamos a estudiar como Linux gestionan los
permisos sobre ficheros, los enlaces a ficheros y el control de tareas.

4 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

12.1. Fontanería GNU/Linux

12.1.1. Entrada y salida estándar


Muchas instrucciones de GNU/Linux toman la entrada de lo que se llama standard
input y mandan su salida a standard output (a menudo abreviados como stdin
y stdout). El intérprete de órdenes arregla las cosas de forma que la entrada
estándar es su teclado y la salida estándar es la pantalla.

He aquí un ejemplo en el que se usa la orden cat. Normalmente, cat lee datos de
todos los argumentos especificados por la línea de órdenes y manda estos datos
directamente a stdout.

Por tanto usando la orden

/home/larry/papers# cat history-final masters-thesis

Se muestra el contenido del fichero history-final seguido por


masters-thesis.

Sin embargo, si no especifica un nombre de fichero, cat lee datos de stdin y los
devuelve a stdout.

Aquí hay un ejemplo:

/home/larry/papers# cat

Hello there.

Hello there.
Bye.

Bye.

Ctrl-D

/home/larry/papers#

Cada línea que escriba será repetida inmediatamente por cat. Cuando se lee
de la entrada estándar, se le indica que la entrada ha ”finalizado” enviando una
señal EOT (end-of-text , final de texto), que se genera pulsando Ctrl-D .

Conceptos avanzados GNU / Linux 5


Formación Abierta

He aquí otro ejemplo. La orden sort lee líneas de texto (de nuevo, de stdin, a no
ser que le especifique uno o más nombres de ficheros) y manda la salida ordenada
a stdout.

/home/larry/papers# sort

bananas

zanahorias
manzanas

Ctrl-D

bananas

manzanas

zanahorias

/home/larry/papers#

12.1.2. Redirección de la entrada y la salida


Ahora, digamos que quiere mandar la salida de sort a un fichero, para guardar
nuestra lista de la compra en el disco. El intérprete de órdenes le permite
redireccionar la salida estándar a un nombre de fichero, usando el símbolo “>”.
Aquí está cómo funciona:

/home/larry/papers# sort > listacompra

bananas

zanahorias

manzanas

Ctrl-D

/home/larry/papers#

6 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

Como puede ver, el resultado de la orden sort no se visualiza, pero se guarda en


el fichero llamado listacompra. Veamos este fichero:

/home/larry/papers# cat listacompra

bananas

manzanas

zanahorias

/home/larry/papers#

Ahora puede ordenar su lista de la compra ¡y guardarla también!. Pero supongamos


que está guardando la lista de la compra original sin ordenar en el fichero items.

Un modo de ordenar la información y guardarla en un


fichero sería darle a sort el nombre del fichero a ser
leído, en lugar de la entrada estándar, y redireccionar la
salida estándar como lo hicimos arriba.

Como sigue:

/home/larry/papers# sort items >


listacompra

/home/larry/papers# cat listacompra

bananas

manzanas

zanahorias

/home/larry/papers#

Sin embargo, hay otra forma de hacer esto. No sólo puede redireccionar la salida
estándar, también puede redireccionar la entrada estándar, usando el símbolo “<”.

Conceptos avanzados GNU / Linux 7


Formación Abierta

/home/larry/papers# sort < items

bananas

manzanas

zanahorias

/home/larry/papers#

Técnicamente, sort < items es equivalente a sort items, pero vamos a


demostrar lo siguiente:

Sort < items se comporta como si los datos del fichero items fueran
tecleados a la entrada estándar. El intérprete de órdenes maneja el
redireccionamiento. A sort no se le dio el nombre del fichero (items) a leer; en lo
que concierne a sort, él todavía lee de la entrada estándar como si hubiera
tecleado los datos desde su teclado.

Esto introduce el concepto de filtro.

Un filtro es un programa que lee datos de la entrada


estándar, los procesa de alguna forma, y manda los datos
procesados a la salida estándar. Usando la redirección, la
entrada y salida estándar pueden ser referenciadas
desde ficheros.

Como se mencionó más arriba stdin y stdout son por omisión el teclado y la
pantalla respectivamente. El programa sort es un filtro simple. Ordena los datos
entrantes y manda el resultado a la salida estándar. Más sencillo aún es cat. No
hace nada con los datos entrantes, sólo devuelve todo lo que se le entrega.

12.1.3. Uso de tuberías


Ya mostramos como usar sort como un filtro. Sin embargo, estos ejemplos dan
por hecho que usted tiene los datos guardados en alguna parte o que tecleará los
datos desde la entrada estándar.

8 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

¿Qué pasa si los datos que quiere ordenar vienen de la


salida de otro programa, como ls?

La opción -r de sort ordena los datos en orden alfabético inverso. Si quiere


listar los ficheros de su directorio actual en orden inverso una forma de hacerlo es
como sigue:

/home/larry/papers# ls

english-listhistory-final masters-thesis
notes

Ahora el redireccionamiento envía la salida de la orden ls a un fichero llamado


file-list:

/home/larry/papers# ls > file-list

/home/larry/papers# sort -r file-list

notes masters-thesis history-final


english-list

/home/larry/papers#

Aquí, usted guarda la salida de un ls en un fichero, y luego ejecuta sort -r con


ese fichero. Pero esto es incómodo y usa un fichero temporal para guardar los
datos de ls.

La solución es la canalización. Esta es una posibilidad del


intérprete de órdenes, que conecta una serie de órdenes
mediante una “tubería.” La stdout del primer programa se
envía a la stdin del segundo programa. En este caso,
queremos enviar la stdout de ls a la stdin de sort.
Se utiliza el símbolo “|” para crear una tubería.

Conceptos avanzados GNU / Linux 9


Formación Abierta

/home/larry/papers# ls | sort -r

notes

masters-thesis

history-final

english-list

/home/larry/papers#

Este programa es más corto y más fácil de teclear.

He aquí otro útil ejemplo, la orden:

/home/larry/papers# ls /usr/bin

muestra una lista larga de ficheros, la mayoría de los cuáles salen de


la pantalla demasiado rápido como para que lo pueda leer. Así que,
usamos more para mostrar la lista de ficheros de /usr/bin.

/home/larry/papers# ls /usr/bin | more

Ahora ya puede paginar las listas de ficheros cómodamente.

¡Pero lo mejor no termina aquí! Puede hacer canalizaciones entre más de dos
programas juntos.

El programa head es un filtro que muestra las primeras líneas


de un flujo entrante, en este caso, entrada de una canalización.

Si quiere mostrar el último nombre de fichero en orden alfabético


del directorio actual, use estas órdenes:

/home/larry/papers# ls | sort -r | head -1

notes

/home/larry/papers#

Donde head -1 muestra la primera línea de entrada que recibe,


en este caso, el flujo de datos ordenados inversamente de ls.

10 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

12.1.4. Redirección no destructiva de la salida


Usar “>” para redireccionar la salida a un fichero es destructivo: en otras palabras,
la orden siguiente sobrescribe el contenido del fichero file-list:

/home/larry/papers# ls > file-list

Si en su lugar, redirecciona con el símbolo “>>”, la salida


será concatenada al final del fichero, en vez de
sobrescribirlo.

Por ejemplo:

/home/larry/papers# ls >> file-list

Añade la salida de la orden ls a file-list.

Tenga presente que el redireccionamiento y las


canalizaciones son características del intérprete de
órdenes, que da soporte al uso de “>”, “>>” y “|”. No
tiene nada que ver con las órdenes propiamente dichas.

Conceptos avanzados GNU / Linux 11


Formación Abierta

12.2. Permisos de fichero

12.2.1. Conceptos de permisos de fichero


Como normalmente hay más de un usuario en un sistema GNU/Linux, éste
proporciona un mecanismo conocido como permisos de fichero, que protege los
ficheros de los usuarios de las intromisiones de otros usuarios. Este mecanismo
permite que los ficheros y directorios sean “propiedad” de un usuario en concreto.

Por ejemplo, como Larry creó los ficheros en su directorio


de usuario, Larry es el dueño de esos ficheros y tiene
acceso a ellos.

GNU/Linux también permite que los ficheros sean compartidos por usuarios y
grupos de usuarios. Si Larry quisiera, podría denegar el acceso a sus ficheros de
forma que ningún otro usuario tuviera acceso a ellos. Sin embargo, en la mayoría
de sistemas está predefinido el permitir a otros usuarios la lectura de sus ficheros,
pero nunca modificarlos o borrarlos.

Todo fichero es propiedad de un usuario particular. Sin embargo, los ficheros


también son propiedad de un grupo, que es un grupo definido de usuarios del
sistema. Cada usuario se coloca en, al menos, un grupo al crearse su cuenta de
usuario. Sin embargo, el administrador del sistema puede conceder al usuario el
acceso a más de un grupo.

Los grupos se definen normalmente por el tipo de usuarios que accede a la máquina.

Por ejemplo, en un sistema GNU/Linux universitario


los usuarios pueden ser situados en los grupos
student, staff, faculty o guest. También
hay unos pocos grupos definidos por el sistema
(como bin y admin) usados por el propio sistema
para controlar el acceso a los recursos. Es muy raro
que usuarios de verdad pertenezcan a estos grupos
de sistemas.

12 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

Hay tres clases principales de permisos: de lectura,


escritura y ejecución. Estos permisos pueden ser
concedidos a tres tipos de usuarios: al propietario del
fichero, al grupo al que pertenece el fichero y a todos los
usuarios, independientemente del grupo.

 Los permisos de lectura permiten a un usuario leer el contenido de un


fichero, o, en el caso de un directorio, listar su contenido (usando ls).

 Los permisos de escritura permiten a los usuarios escribir y modificar un


fichero. Para directorios, los permisos de escritura permiten al usuario crear
nuevos ficheros o borrar ficheros dentro de ese directorio.
 Finalmente, los permisos de ejecución permiten al usuario ejecutar el
fichero como un programa o guión de intérprete de órdenes (si el fichero es
un programa o un guión del intérprete de órdenes). En cuanto a los
directorios, tener permisos de ejecución permite al usuario hacer un cd al
directorio en cuestión.

12.2.2. Interpretando los permisos de fichero


Veamos un ejemplo de demostración de los permisos de fichero. Usando la orden
ls con la opción -l se muestra un listado de ficheros en formato largo, incluyendo
los permisos de los ficheros.

/home/larry/foo# ls -l stuff

-rw-r--r-- 1 larry users 505 Mar 13 19:05


stuff

/home/larry/foo#

El primer campo en el listado representa los permisos del fichero. El tercer campo
es el propietario del fichero (larry) y el cuarto campo es el grupo al que pertenece
el fichero (users). Obviamente, el último campo es el nombre del fichero (stuff).
Explicaremos los demás campos después.

El propietario de este fichero es larry, y pertenece al grupo users. La cadena -


rw-r--r-- lista, en orden, los permisos concedidos al propietario del fichero, al
grupo al que pertenece el fichero y a todos los demás.

Conceptos avanzados GNU / Linux 13


Formación Abierta

El primer carácter de la cadena de permisos (“-”) representa el tipo de


fichero. Un “-” significa que es un fichero normal (a diferencia de un directorio o un
controlador de dispositivo). Los tres caracteres siguientes (“rw-”) representan los
permisos concedidos al dueño del fichero, larry. La “r” viene de “read” (lectura)
y la “w” viene de “escritura” (escritura). Así, larry tiene permisos de lectura y
escritura al fichero stuff.

Como ya se ha dicho, además de los permisos de lectura y escritura, hay también


un permiso de ejecución, representado por una “x”. Sin embargo, un “-” es listado
aquí en el lugar de una “x”, así que Larry no tiene permiso de ejecución de este
fichero. Esto está bien, ya que el fichero stuff no es un programa de ningún tipo.
Naturalmente, como Larry es el propietario del fichero, se puede conceder a sí
mismo el permiso de ejecución si así lo desea.

Los tres caracteres siguientes,(“r--”), representan los permisos del grupo sobre
el fichero. El grupo al que pertenece este fichero es users. Como sólo aparece una
‘r” aquí, cualquier usuario que pertenezca al grupo users podrá leer este fichero.

Los tres últimos caracteres, también (“r--”), representan los permisos concedidos
al resto de usuarios en el sistema (otros que no sean el propietario del fichero ni
los del grupo users). De nuevo, como sólo está presente la “r”, los otros usuarios
podrán leer el fichero, pero no escribir en él o ejecutarlo.

Aquí hay algunos otros ejemplos de permisos:

-rwxr-xr-x El propietario del fichero puede leer,


escribir, y ejecutar el fichero. Los usuarios del grupo del
fichero, y todos los demás usuarios, pueden leer y
ejecutar el fichero.

-rw------- El dueño del fichero puede leer y escribir


en el fichero. Ningún otro usuario puede acceder a este
fichero.

-rwxrwxrwx Todos los usuarios pueden leer, escribir y


ejecutar el fichero.

14 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

12.2.3. Dependencias

Los permisos concedidos a un fichero dependen también


de los permisos del directorio en el que esté localizado el
fichero.

Aunque un fichero esté fijado a -rwxrwxrwx, otros


usuarios no podrán acceder al fichero si no tienen acceso
de lectura y de ejecución al directorio en el que se
encuentra el fichero.

Si Larry quisiera restringir el acceso a todos sus ficheros,


podría fijar los permisos de su directorio principal de
usuario /home/larry a -rwx------.

De esta forma, ningún otro usuario tendrá acceso a su


directorio, ni a todos los ficheros y directorios dentro de
él. Larry no tiene que preocuparse de los permisos
individuales de cada fichero.

En otras palabras, para que todos puedan acceder a un


fichero, se debe tener acceso en ejecución para todos los
directorios a lo largo del camino del fichero, y acceso en
lectura (o en ejecución) para el propio fichero.

Normalmente, los usuarios de un sistema GNU/Linux son muy abiertos con sus
ficheros. Los permisos típicos que se le dan a los ficheros son -rw-r--r--, que
permiten a otros usuarios leer el fichero pero nunca cambiarlo. A los directorios se
les suele dar los permisos -rwxr-xr-x, que permiten a otros usuarios mirar por
tus directorios, pero no crear o borrar ficheros dentro de ellos.

Sin embargo, muchos usuarios desean mantener a los demás lejos de sus ficheros.
Si se establecen los permisos de un fichero a -rw------- se conseguirá que
cualquier otro usuario no pueda acceder al fichero.

De la misma forma, al fijarse los permisos de un directorio como -rwx------ se


mantiene a otros usuarios fuera del directorio en cuestión.

Conceptos avanzados GNU / Linux 15


Formación Abierta

12.2.4. Cambio de permisos

La instrucción chmod se usa para establecer los permisos


de un fichero.

Sólo el propietario de un fichero puede cambiar los permisos de ese fichero. La


sintaxis de chmod es chmod {a,u,g,o}{+,-}{r,w,x} nombre fichero.

Brevemente, puede poner uno o más de estos: all (todos), user (usuario), group
(grupo), u other (otros).Después especifica si estás añadiendo derechos (+) o
quitándolos (-). Finalmente, especifica uno o más de estos: read (lectura), write
(escritura), y execute (ejecución). Algunos ejemplos de instrucciones correctas son:

chmod a+r stuff

Da a todos los usuarios permiso de lectura al fichero.

chmod +r stuff

Lo mismo que arriba. Si ninguno de a, u, g, o o se


especifica, se toma a como predeterminado.

chmod og-x staff

Quita el permiso de ejecución de todos los usuarios


menos del propietario.

16 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

chmod u+rwx stuff

Permite al propietario, leer, escribir y ejecutar el fichero.

chmod o-rwx stuff

Quita los permisos de lectura, escritura y ejecución de los


usuarios que no son el dueño ni los usuarios del grupo
del fichero.

Conceptos avanzados GNU / Linux 17


Formación Abierta

3. Gestión de enlaces a ficheros


Los enlaces permiten darle a un fichero más de un nombre. Realmente, el sistema
identifica los ficheros por su número de inodo, que es el único identificador del
fichero para el sistema de ficheros. Un directorio es en realidad una lista de
números de inodos con sus correspondientes nombres de fichero. Cada nombre de
fichero dentro de un directorio es un enlace a un inodo concreto.

1. Enlaces rígidos

La orden ln se utiliza para crear múltiples enlaces a un


fichero.

Por ejemplo, digamos que tiene un fichero llamado foo en un directorio. Usando
ls -i, puede ver el número de inodo de este fichero.

/home/larry# ls -i foo

22192 foo

/home/larry#

Aquí, foo tiene un número de inodo de 22192 en el sistema de ficheros.

Puede crear otro enlace a foo, llamado bar, como sigue:

/home/larry# ln foo bar

18 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

Con ls -i, puede comprobar que los dos ficheros tienen el mismo número de inodo.

/home/larry# ls -i foo bar

22192 bar 22192 foo

/home/larry#

Ahora, especificando tanto foo como bar se accederá al mismo fichero. Si hace
cambios en foo, esos cambios aparecen también en bar. A todos los efectos,
foo y bar son el mismo fichero. A este tipo de enlaces se les conoce como
enlaces rígidos porque directamente crean el enlace al inodo.

Tenga en cuenta que puede crear enlaces rígidos sólo cuando estén en el mismo
sistema de ficheros; los enlaces simbólicos (ver debajo) no tienen esta restricción.

Cuando borra un fichero con rm, realmente sólo está


borrando uno de los enlaces a ese fichero.

Si usa la orden /home/larry# rm foo entonces sólo el enlace llamado foo se borra,
bar todavía existirá.

Un fichero sólo se borra realmente del sistema cuando no


tiene enlaces.

Normalmente, los ficheros tienen un único enlace, por lo que usando la orden rm
se borra el fichero. Sin embargo, si un fichero tiene múltiples enlaces, usando rm
sólo se borrará un enlace simple; para borrar el fichero, deberá borrar todos los
enlaces a él.

La orden ls -l muestra el número de enlaces a un fichero (entre otra información).

Conceptos avanzados GNU / Linux 19


Formación Abierta

/home/larry# ls -l foo bar

-rw-r--r-- 2 root root 12 Aug 5 16:51 bar

-rw-r--r-- 2 root root 12 Aug 5 16:50 foo

/home/larry#

La segunda columna del listado, ”2”, especifica el número de enlaces al fichero.

Así resulta que un directorio no es realmente más que un


fichero que contiene información sobre asociaciones
enlaces-a-inodos. Además, cada directorio contiene al
menos dos enlaces rígidos: ”.” (un enlace apuntando a él
mismo) y ”..” (un enlace apuntando a su directorio
padre). El enlace ”..” del directorio raíz (/) simplemente
vuelve a apuntar a /. (En otras palabras, el directorio
padre del directorio raíz es él mismo.).

12.3.2. Enlaces simbólicos


Los enlaces simbólicos son otro tipo de enlace, diferente al enlace rígido. Un
enlace simbólico permite dar otro nombre a un fichero, pero no enlaza el
fichero mediante el inodo.

La orden ln -s crea un enlace simbólico a un fichero. Por ejemplo, si utiliza la


orden.

/home/larry# ln -s foo bar

Creará un enlace simbólico llamado bar que apunte al fichero foo. Si utiliza ls -
i, verá que los dos ficheros tienen diferentes inodos.

20 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

/home/larry# ls -i foo bar

22195 bar 22192 foo

/home/larry#

Sin embargo, usando ls -l, vemos que el fichero bar es un enlace simbólico
apuntando a foo.

/home/larry# ls -l foo bar

lrwxrwxrwx 1 root root 3 Aug 5 16:51 bar -> foo

-rw-r--r-- 1 root root 12 Aug 5 16:50 foo

/home/larry#

Los permisos de fichero de un enlace simbólico no se utilizan (siempre


aparecen como rxwrxwrxw).

En su lugar, los permisos del enlace simbólico están determinados por los permisos
del destino del enlace simbólico (en nuestro ejemplo, el fichero foo).

Diferencias entre enlaces simbólicos y rígidos

Funcionalmente, los enlaces rígidos y simbólicos son similares, pero hay diferencias.
 Se pueden crear enlaces simbólicos a ficheros que no existen, cosa que no
sucede con los enlaces rígidos.

 Los enlaces simbólicos son procesados de manera distinta a los rígidos por
el núcleo, lo que constituye una mera diferencia técnica pero que a veces
puede resultar importante.
 Los enlaces simbólicos son de ayuda porque identifican al fichero al que
apuntan; con enlaces rígidos, no hay una manera fácil de determinar qué
ficheros están enlazados al mismo inodo.

Los enlaces se utilizan en muchos lugares dentro de un sistema GNU/Linux. Los


enlaces simbólicos son especialmente importantes para las bibliotecas compartidas
en /lib.

Conceptos avanzados GNU / Linux 21


Formación Abierta

4. Control de tareas

1. Tareas y procesos

El control de tareas es una característica que incluyen


muchos intérpretes de órdenes (incluyendo bash y
tcsh) que permiten controlar múltiples órdenes o tareas
ejecutándose a la vez.

Antes de ir más lejos, hay que hablar de los procesos: Cada vez que se ejecuta un
programa, se arranca lo que se denomina un proceso.

La orden ps muestra una lista de los procesos actualmente en ejecución, como se


ve aquí:

/home/larry# ps

PID TT STAT TIME COMMAND

24 3 S 0:03 (bash)

161 3 R 0:00 ps

/home/larry#

En la primera columna aparece el PID o identificador de proceso, un número


único dado a cada proceso en ejecución. La última columna, COMMAND, es el
nombre de la orden en ejecución. Aquí, estamos viendo únicamente los procesos
que está ejecutando el propio Larry. (También hay otros muchos procesos en
ejecución en el sistema—”ps -aux” los lista todos.) Estos son bash (el
intérprete de órdenes de Larry) y la propia orden ps. Como puede ver, bash se
ejecuta al mismo tiempo que la orden ps. bash hizo que se ejecutara ps cuando
Larry escribió la orden. Cuando ps ha finalizado su ejecución (después de haber
mostrado la tabla de procesos), el proceso bash vuelve a tomar el control, y
muestra el símbolo del sistema, listo para recibir otra orden.

22 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

A un proceso en ejecución se le llama también tarea. Los


términos proceso y tarea son intercambiables.

Sin embargo, nos referimos a un proceso como ”tarea”


cuando lo usamos en conjunción con control de tareas.
Una característica del intérprete de órdenes que
permite conmutar entre varios procesos independientes.

En muchos casos, los usuarios ejecutan una única tarea a la vez (cualquiera que
fuera la última orden que escribieron). Sin embargo, usando el control de tareas,
se puede ejecutar varias tareas a la vez y conmutar entre ellas cuando haga falta.

¿Para qué puede ser esto útil?

Digamos que está editando un fichero de texto y quiere interrumpir la edición para hacer
cualquier otra cosa. Mediante el control de tareas, puede suspender temporalmente el
editor, volver al símbolo del intérprete de órdenes y empezar a trabajar en otra
cosa. Cuando haya terminado, puede volver al editor donde lo dejó, como si no lo
hubiera abandonado. Hay otros muchos usos prácticos del control de tareas.

12.4.2. Primer plano y segundo plano

Las tareas pueden estar tanto en primer plano como en


segundo plano.

Sólo puede haber una tarea en primer plano cada vez.

La tarea que está en primer plano es aquella con la que


se interactúa (recibe la entrada desde el teclado y envía
la salida a la pantalla, a menos que, por supuesto, se
haya redireccionado la entrada o la salida)

Por otro lado, las tareas que están en segundo plano no reciben entradas desde el
terminal. En general, se ejecutan tranquilamente sin necesidad de interacción.

Conceptos avanzados GNU / Linux 23


Formación Abierta

Algunas tareas tardan mucho tiempo en acabar y no hacen nada interesante


mientras se están ejecutando. Compilar programas es una de esas tareas, como
también lo es comprimir un fichero grande. No hay ningún motivo para estar
sentado y aburrido mientras espera a que estas tareas acaben; simplemente
ejecútelos en segundo plano. Mientras esas tareas corren en segundo plano, existe
libertad para ejecutar otros programas.

Las tareas también pueden ser suspendidas. Una tarea


suspendida es una tarea que está detenida
temporalmente.

Después de suspender una tarea, se puede hacer que continúe en primer o segundo
plano cuando haga falta. Reanudar una tarea suspendida no cambia el estado de la
tarea de ninguna manera (la tarea continúa su ejecución por donde se quedó).

Suspender una tarea no es lo mismo que interrumpirla.

Cuando se interrumpe un proceso en ejecución (pulsando la tecla de interrupción,


que suele ser Ctrl-C ), se mata ese proceso, para siempre. Una vez que se
mata el proceso, no hay manera de que se reanude. Hay que ejecutar la orden
otra vez. Además, algunos programas capturan la interrupción, de manera que
pulsar Ctrl-C no matará inmediatamente al proceso. Esto permite al programa
llevar a cabo cualquier operación de limpieza necesaria antes de salir. De hecho, algunos
programas no permitirán de ningún modo que se les mate mediante interrupción.

24 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

Comencemos con un ejemplo simple.

La orden yes es una orden inútil en apariencia que


manda una cadena infinita de ys a la salida estándar. (En
realidad sí es útil. Si se enlaza mediante una tubería la
salida de yes a otra orden que realice una serie
preguntas de sí o no, la cadena de yes confirmará todas
las preguntas.)

/home/larry# yes

Las ys continuarán ad infinitum.

Puede matar el proceso pulsando la tecla de interrupción, que normalmente es


Ctrl-C . Para que no tengamos que aguantar la molesta cadena de y, redirijamos
la salida estándar de yes a /dev/null.

Si recuerda, /dev/null actúa como un ”agujero negro”


para los datos. Cualquier dato que se le envíe
desaparece. Es un modo muy efectivo de silenciar un
programa charlatán.

/home/larry# yes > /dev/null

Ah, mucho mejor. No aparece nada, pero el símbolo del intérprete de órdenes no
vuelve. Esto es porque yes está todavía en ejecución, y está mandando esas
inútiles ys a /dev/null. Para matar otra vez, la tarea, pulse la tecla de
interrupción.

Supongamos que quiere que la orden yes continúe su ejecución pero conservando
el símbolo del intérprete de órdenes para que pueda trabajar en otras cosas.
Puede pasar yes a segundo plano, permitiendo su ejecución, sin necesidad
de interactuar.

Conceptos avanzados GNU / Linux 25


Formación Abierta

Una manera de poner un proceso en segundo plano es


añadir un ”&” al final de la orden.

/home/larry# yes > /dev/null &

[1] 164

/home/larry#

Como puede ver, el símbolo del intérprete de órdenes ha vuelto. Pero:

¿Qué es este ”[1] 164”? Y ¿está ejecutándose


realmente la orden yes?

 ”[1]” representa el número de tarea para el proceso yes. :El intérprete de


órdenes asigna un número de tarea a cada tarea en ejecución. Dado que
yes es la única tarea que estamos ejecutando, tiene asignado el número de
trabajo 1.

 ”164” es el identificador de proceso, o PID, el número otorgado a la tarea


por el sistema. Se puede usar cualquiera de los números para referirse a la
tarea, como se verá más adelante.

Ahora tenemos el proceso yes ejecutándose en segundo plano, mandando


continuamente una cadena de ys a /dev/null.

Para comprobar el estado de este proceso, utilizamos la


orden interna del intérprete de órdenes jobs.

26 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

/home/larry# jobs

[1]+ Running yes >/dev/null &

/home/larry#

Efectivamente, ahí está. También se podría haber utilizado la orden ps tal y como
se mostró arriba para comprobar el estado de la tarea.

Para acabar con la tarea, utilice la orden kill. Esta


orden toma un número de tarea o un identificador de
proceso como argumento.

Esta era la tarea número 1, así que usando la siguiente orden se mata la tarea.

/home/larry# kill %1

Cuando se identifica la tarea con su número de tarea, se debe anteponer al número


un carácter de tanto por ciento (” %”).

Ahora que ha matado la tarea, utilice jobs otra vez para comprobarlo:

/home/larry# jobs

[1]+ Terminated yes >/dev/null

/home/larry#

Desde luego, la tarea está muerta, y si utiliza la orden jobs otra vez, no debería
aparecer ya nada.

Conceptos avanzados GNU / Linux 27


Formación Abierta

También se puede matar la tarea usando el número de identificación del proceso


(PID), que aparece junto con el número de tarea cuando lo arranca. En nuestro
ejemplo, el identificador de proceso es 164, así que la orden:

/home/larry# kill 164

Equivale a:

/home/larry# kill %1

No necesita usar ” %” para hacer referencia a una tarea mediante su identificador de


proceso.

12.4.3. Parando y relanzando tareas


Hay otra manera de pasar una tarea a segundo plano. Puede arrancar la tarea
normalmente (en primer plano), suspender la tarea, y reiniciarla en segundo plano.

Primero, arranque el proceso yes en primer plano, como hizo antes:

/home/larry# yes > /dev/null

Otra vez, como yes está ejecutándose en primer plano, no debería ver el símbolo
del intérprete de órdenes.

Ahora, mejor que interrumpir la tarea con Ctrl-C, suspéndala. Suspender una
tarea no la mata: sólo la detiene temporalmente hasta que se la reinicia de nuevo.
Para hacer esto, pulse la tecla de suspensión, que normalmente es Ctrl-Z.

/home/larry# yes > /dev/null

ctrl-Z

[1]+ Stopped yes >/dev/null

/home/larry#

28 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

Mientras la tarea está suspendida, simplemente no está en ejecución. No se


emplea tiempo de CPU para esa tarea. Sin embargo, puede reiniciar la tarea, lo que
provoca que se ejecute otra vez como si nada hubiera pasado. Continuará su
ejecución por donde se quedó.

Para reiniciar la tarea en primer plano, utilice la orden


fg (de ”foreground”).

/home/larry# fg

yes >/dev/null

El intérprete de órdenes muestra el nombre de la orden otra vez para que esté al
tanto de qué tarea acaba de mandar a primer plano. Detenga la tarea otra vez con
Ctrl-Z. Esta vez, use la orden bg para pasar la tarea a segundo plano. Esto
provoca que la orden se ejecute como si lo hubiera arrancado con ”&”, como en la
última sección.

/home/larry# bg

[1]+ yes >/dev/null &

/home/larry#

Y aquí tiene su símbolo del intérprete de órdenes de vuelta. jobs debería


informar que yes está ciertamente ejecutándose, y puede matar la tarea con kill
como hicimos antes.

¿Cómo se puede detener la tarea otra vez?

Conceptos avanzados GNU / Linux 29


Formación Abierta

Utilizar Ctrl-Z no funcionará, porque la tarea está en segundo plano. La


respuesta es pasar la tarea a primer plano con fg, y luego detenerla. Tal y como
parece, puede utilizar fg tanto en tareas detenidas como en tareas en segundo plano.

Hay una gran diferencia entre una tarea en segundo


plano y una tarea detenida. Una tarea detenida no está
en ejecución, no está usando tiempo de CPU, y no está
haciendo nada (la tarea todavía ocupa memoria del
sistema, aunque puede haber sido volcada a disco). Una
tarea en segundo plano sí está ejecutándose y usando
memoria, al tiempo que completa alguna acción mientras
usted hace otra cosa.

Sin embargo, una tarea en segundo plano puede intentar mostrar texto por el
terminal, lo que puede resultar molesto si está intentando trabajar en otra cosa. Por
ejemplo, si utilizó la orden:

/home/larry# yes &

Sin redirigir stdout a /dev/null, una cadena de ys estará apareciendo en la


pantalla, sin posibilidad de interrumpirla.

No se puede usar Ctrl-C para interrumpir tareas en


segundo plano. Para detener las infinitas ys, utilice la
orden fg para pasar la tarea a primer plano, y luego
utilice Ctrl-C para matarla.

Las órdenes fg y bg normalmente afectan a la última tarea detenida (indicado


por un ”+” junto al número de tarea cuando se usa la orden jobs). Si está
ejecutando diversas tareas a la vez, puede pasar tareas a primer o segundo plano
pasando el número de tarea como argumento a fg o bg.

/home/larry# fg %2

Para pasar la tarea número 2 a primer plano, o:

/home/larry# bg %3

Para pasar la tarea número 3 a segundo plano.

30 Conceptos avanzado GNU / Linux


Sistemas Operativos I 12

No se pueden usar identificadores de proceso (PID) con fg o bg. Además, usar el


número de tarea solamente:

/home/larry# %2

Equivale a:

/home/larry# fg %2

Recuerde que el control de tareas es una


característica del intérprete de órdenes. Las
instrucciones fg, bg y jobs son internas del
intérprete de órdenes.

Si por cualquier motivo usted utiliza un intérprete de


órdenes que no soporte control de tareas, no espere
encontrar estas instrucciones disponibles.

Conceptos avanzados GNU / Linux 31


Sistemas Operativos I 12

Resumen

El intérprete de órdenes le permite redireccionar la salida estándar a un


nombre de fichero, usando el símbolo “>”. Si en su lugar, redirecciona con el
símbolo “>>”, la salida será concatenada al final del fichero, en vez de
sobrescribirlo.

Un filtro es un programa que lee datos de la entrada estándar, los procesa de


alguna forma, y manda los datos procesados a la salida estándar. Usando la
redirección, la entrada y salida estándar pueden ser referenciadas desde ficheros.

Como normalmente hay más de un usuario en un sistema GNU/Linux, éste


proporciona un mecanismo conocido como permisos de fichero, que protege
los ficheros de los usuarios de las intromisiones de otros usuarios. Este
mecanismo permite que los ficheros y directorios sean “propiedad” de un
usuario en concreto.

GNU/Linux también permite que los ficheros sean compartidos por usuarios y
grupos de usuarios.

Todo fichero es propiedad de un usuario particular. Sin embargo, los ficheros


también son propiedad de un grupo, que es un grupo definido de usuarios del
sistema.

Hay tres clases principales de permisos: de lectura, escritura y ejecución.


Estos permisos pueden ser concedidos a tres tipos de usuarios: al propietario
del fichero, al grupo al que pertenece el fichero y a todos los usuarios,
independientemente del grupo.

Los permisos concedidos a un fichero dependen también de los permisos del


directorio en el que esté localizado el fichero. Aunque un fichero esté fijado a -
rwxrwxrwx, otros usuarios no podrán acceder al fichero si no tienen acceso
de lectura y de ejecución al directorio en el que se encuentra el fichero.

La instrucción chmod se usa para establecer los permisos de un fichero.

Conceptos avanzados GNU / Linux 33


Formación Abierta

Los enlaces permiten darle a un fichero más de un nombre. Realmente, el


sistema identifica los ficheros por su número de inodo, que es el único
identificador del fichero para el sistema de ficheros. Un directorio es en
realidad una lista de números de inodos con sus correspondientes nombres de
fichero. Cada nombre de fichero dentro de un directorio es un enlace a un
inodo concreto.

La orden ln se utiliza para crear múltiples enlaces a un fichero. Un fichero


sólo se borra realmente del sistema cuando no tiene enlaces.

El control de tareas es una característica que incluyen muchos intérpretes de


órdenes (incluyendo bash y tcsh) que permiten controlar múltiples órdenes o
tareas ejecutándose a la vez.

Las tareas pueden estar tanto en primer plano como en segundo plano.

Sólo puede haber una tarea en primer plano cada vez.

La tarea que está en primer plano es aquella con la que se interactúa (recibe la
entrada desde el teclado y envía la salida a la pantalla, a menos que, por
supuesto, se haya redireccionado la entrada o la salida).

Las tareas también pueden ser suspendidas. Una tarea suspendida es una
tarea que está detenida temporalmente.

Suspender una tarea no es lo mismo que interrumpirla.

Una manera de poner un proceso en segundo plano es añadir un ”&” al final de


la orden.

Para comprobar el estado de este proceso, utilizamos la orden interna del


intérprete de órdenes jobs.

Para acabar con la tarea, utilice la orden kill. Esta orden toma un número de
tarea o un identificador de proceso como argumento.

Para reiniciar la tarea en primer plano, utilice la orden fg (de ”foreground”).

34 Conceptos avanzado GNU / Linux

También podría gustarte