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