RESUMEN DE LA CLASE DEL 11 AL 18 DE NOVIEMBRE Y DEL 2 DE DICIEMBRE DEL 2015
1. INTRODUCCIÓN
Los conceptos básicos en los que se basan todos los sistemas
operativos son los procesos, la administración de memoria, la administración de
E/S, el sistema de archivos y la seguridad.
El corazón de cualquier sistema operativo es el conjunto de llamadas
al sistema que puede manejar, estas llamadas indican lo que realmente hace el sistema
operativo. Para UNIX, tenemos cuatro grupos de llamadas al sistema: el primer grupo
se relaciona con la creación y terminación de procesos, el segundo grupo es para
leer y escribir en archivos, el tercer grupo es para administrar directorios, y
el cuarto grupo contiene una miscelánea de llamadas.
Los sistemas operativos se pueden estructurar en varias formas,
las más comunes son: como un sistema monolítico, una jerarquía de capas, microkernel,
cliente-servidor, máquina virtual o exokernel.
2. OBJETIVO
Comprender conceptos y
estructura sobre los sistemas operativos, y conocer acerca de los procesos e
hilos de éstos.
3. MARCO TEÓRICO
3.1. CONCEPTOS DE LOS SISTEMAS OPERATIVOS
La mayoría de los sistemas operativos proporcionan ciertos conceptos
básicos y abstracciones tales como procesos, espacios de direcciones y archivos,
que son la base para comprender su funcionamiento.
3.1.1. PROCESOS
Es un programa en ejecución. Cada proceso tiene asociado un espacio
de direcciones que contiene el programa ejecutable, los datos del programa y
su pila. También hay asociado a cada proceso un conjunto de recursos, que incluye
información necesaria para ejecutar el programa. En muchos sistemas operativos,
la información acerca de cada proceso se almacena en una tabla de procesos.
Las llamadas al sistema de administración de procesos clave son las que se encargan
de la creación y la terminación de los procesos. Un proceso puede crear uno o más
procesos aparte y estos procesos a su vez pueden crear procesos hijos.
Figura 1. Un árbol de proceso. El
proceso A creó dos procesos hijos, B y C. El proceso B creó tres procesos hijos,
D, E y F
Cada persona autorizada para utilizar un sistema recibe una UID
(User Identification) que el administrador del sistema le asigna. Cada
proceso iniciado tiene el UID de la persona que lo inició. Un proceso hijo tiene
el mismo UID que su padre. Los usuarios pueden ser miembros de grupos, cada uno
de los cuales tiene una GID (Group Identification).
3.1.2. ESPACIOS DE DIRECCIONES
Cada computadora tiene cierta memoria principal que utiliza para
mantener los programas en ejecución. En un sistema operativo muy simple sólo hay
un programa a la vez en la memoria. Para ejecutar un segundo programa se tiene que
quitar el primero y colocar el segundo en la memoria. Los sistemas operativos más
sofisticados permiten colocar varios programas en memoria al mismo tiempo. Hoy en
día existe una técnica llamada memoria virtual, en la cual el sistema operativo
mantiene una parte del espacio de direcciones en memoria principal y otra parte
en el disco, moviendo pedazos de un lugar a otro según sea necesario.
3.1.3. ARCHIVOS
Un sistema de archivos es un conjunto
de tipo de datos abstractos que son implementados para el almacenamiento, la organización
jerárquica, la manipulación, el acceso, el direccionamiento y la recuperación de
datos. Los sistemas de archivos comparten mucho en común con la tecnología de las
bases de datos. Los sistemas de archivos pueden ser representados de forma textual
(ej.: el shell de DOS) o gráficamente (ej.: Explorador de archivos en Windows) utilizando
un gestor de archivos.
Figura 2. Administración
de archivos por el sistema operativo
Los archivos son administrados
por el sistema operativo como se muestra en la Fig. 2. Su estructura, nombre, forma de acceso, uso, protección e implantación
son temas fundamentales en el diseño de un sistema operativo.
3.1.4. ENTRADA/SALIDA
Todas las computadoras tienen dispositivos físicos para adquirir
entrada y producir salida. Existen muchos tipos de dispositivos de entrada y de
salida, incluyendo teclados, monitores, impresoras, etc. Es responsabilidad del
sistema operativo administrar estos dispositivos. En consecuencia, cada sistema
operativo tiene un subsistema de E/S para administrar sus dispositivos de E/S.
3.1.5. PROTECCIÓN
Las computadoras contienen grandes cantidades de información
que los usuarios comúnmente desean proteger y mantener de manera confidencial. Es
responsabilidad del sistema operativo administrar la seguridad del sistema de manera
que los archivos, por ejemplo, sólo sean accesibles para los usuarios autorizados.
Además de la protección de archivos, existen muchas otras cuestiones de seguridad.
Una de ellas es proteger el sistema de los intrusos no deseados, tanto humanos como
no humanos (por ejemplo, virus).
3.1.6. EL SHELL
El intérprete de comandos es la interfaz entre el usuario y el
sistema operativo, por este motivo se le da el nombre "shell",
que en castellano significa "caparazón".
Figura 3. Shell
Por lo tanto, el shell es un archivo ejecutable que actúa como
un intermediario entre el sistema operativo y el usuario utilizando líneas de comando
introducidas por dicho usuario. Su función consiste en la lectura de la línea de
comandos, la interpretación de su significado, la ejecución del comando y luego
la devolución del resultado a través de las salidas. Existen muchos tipos de shell: Los más comunes son: sh (llamado
"Bourne shell"), bash ("Bourne
again shell"), csh ("C
Shell"), Tcsh ("Tenex C shell"), ksh ("Korn
shell"), y zsh ("Zero shell"). Generalmente, sus nombres coinciden
con el nombre del ejecutable. Cada usuario tiene un shell predeterminado, que se
activará al abrirse el aviso del comando.
3.1.7. LLAMADAS AL SISTEMA
Cada SO implementa un conjunto
propio de llamadas al sistema. Ese conjunto de llamadas es la interfaz del SO frente
a las aplicaciones. Constituyen el lenguaje que deben usar las aplicaciones para
comunicarse con el SO. Todo procesador moderno posee al menos dos modos de
funcionamiento distintos modo kernel y modo usuario. A grandes rasgos las diferencias
entre estos dos modos son las siguientes:
- En modo kernel se encuentran disponibles todas las instrucciones y funcionalidades que la arquitectura del procesador es capaz de brindar. Es en este modo en el cual corre el kernel (núcleo) del sistema operativo.
- En modo usuario tan sólo un subconjunto de las instrucciones y funcionalidades que la arquitectura del procesador ofrece se encuentran disponibles. En este modo se ejecutan los procesos de los usuarios del sistema.
La interface entre los
programas de usuario y el sistema operativo se define mediante un conjunto de llamadas
al sistema, Linux proporciona unas llamadas definidas en el sistema por un nombre
“open”, “read”, “mmap”,… y tiene alrededor de 200 llamadas al sistema, idénticas
a UNIX V7 (estándar POSIX). En nombre, función y parámetros. Existe unas librerías
de procedimientos en /usr/lib/ para poder
realizar llamadas desde un programa escrito en C.
Ejemplo de llamada: count = read(file, buffer, nbyte);
- read.- Nombre de la llamada al sistema.
- file.- Fichero de donde leer.
- buffer.- Zona de memoria donde colocar los datos.
- nbytes.- Nº de bytes a leer.
- count.- Nº de bytes leídos, si count es - 1, hay error, que se coloca en la variable global errno.
3.1.7.1. LLAMADAS AL SISTEMA LLAMADAS
AL SISTEMA PARA LA ADMINISTRACIÓN DE PROCESOS, ARCHIVOS Y DIRECTORIOS.
El primer grupo de llamadas en la figura se encarga de la administración
de los procesos. fork es la única manera de crear un nuevo proceso en POSIX. Crea
un duplicado exacto del proceso original, incluyendo todos los descriptores de archivos,
registros y todo lo demás. Después de fork, el proceso original y la copia (el padre
y el hijo) se van por caminos separados.
Figura 4. Algunas de las principales llamadas al sistema POSIX.
3.1.7.2. MISCELÁNEA DE LLAMADAS
AL SISTEMA
También existe una variedad de otras llamadas al sistema. Sólo
analizaremos cuatro de ellas aquí. La llamada a chdir, chmod, kill, y time.
Figura 5. Llamadas varias al sistema POSIX
3.1.7.3. LA API WIN32 DE WINDOWS
Un programa de UNIX consiste en código que realiza una cosa u
otra, haciendo llamadas al sistema para realizar ciertos servicios. En contraste,
un programa de Windows es por lo general manejado por eventos. El programa principal
espera a que ocurra cierto evento y después llama a un procedimiento para manejarlo.
Los eventos comunes son las teclas que se oprimen, el ratón que se desplaza, un
botón de ratón que se oprime o un CD-ROM que se inserta. Desde luego que Windows
también tiene llamadas al sistema. Microsoft ha definido un conjunto de procedimientos
conocidos como API Win32 (Application Program Interface, Interfaz
de programación de aplicaciones) que los programadores deben utilizar para obtener
los servicios del sistema operativo. Esta interfaz se proporciona (parcialmente)
en todas las versiones de Windows. Win32 significa la interfaz que soportan todas
las versiones de Windows. La API Win32 tiene un gran número de llamadas para administrar
ventanas, figuras geométricas, texto, tipos de letras, barras de desplazamiento,
cuadros de diálogo, menús y otras características de la GUI.
3.2. ESTRUCTURA DE UN SISTEMA OPERATIVO
Analizamos seis estructuras las cuales son: sistemas monolíticos,
sistemas de capas, microkernels, sistemas cliente-servidor, máquinas virtuales y
exokernels.
3.2.1. SISTEMAS MONOLÍTICOS
Se considera como la organización más común, todo el sistema
se escribe como una colección de procedimientos, enlazados entre sí en un solo programa
binario ejecutable extenso en modo kernel. Esta organización sugiere una estructura básica para el sistema
operativo:
- Un programa principal que invoca el procedimiento de servicio solicitado.
- Un conjunto de procedimientos de servicio que llevan a cabo las llamadas al sistema.
- Un conjunto de procedimientos utilitarios que ayudan a los procedimientos de servicio.
3.2.2. SISTEMAS DE CAPAS
Organiza el sistema operativo como una jerarquía de capas, cada
una construida encima de la que tiene abajo. El primer sistema construido de esta
forma fue el sistema THE, construido en Technische Hogeschool Eindhoven en Holanda
por E. W. Dijkstra (1968) y sus estudiantes. El sistema THE era un sistema simple
de procesamiento por lotes para una computadora holandesa, la Electrologica X8,
que tenía 32K de palabras de 27 bits (los bits eran costosos en aquel entonces).
El sistema tenía seis capas.
Figura 6. Estructura del sistema operativo THE.
3.2.3. MICROKERNELS
La idea básica detrás del diseño de microkernel es lograr una
alta confiabilidad al dividir el sistema operativo en módulos pequeños y bien definidos,
de los cuales solo el microkernel se ejecuta en modo kernel y el resto se ejecuta
como procesos de usuario ordinarios. Son en especial comunes en las aplicaciones
en tiempo real, industriales, aeronáuticas y militares que son de misión crítica
y tienen requerimientos de confiabilidad muy altos. Algunos de los microkernels
mejor conocidos son Integrity, K42, L4, PikeOS, QNX, Symbian y MINIX 3.
3.2.4. MODELO CLIENTE-SERVIDOR
Una ligera variación de la idea del microkernel es diferenciar
dos clases de procesos: los servidores, cada uno de los cuales proporciona
cierto servicio, y los clientes, que utilizan estos servicios. Este modelo
se conoce como cliente-servidor. La comunicación entre clientes y servidores
se lleva a cabo comúnmente mediante el paso de mensajes. Para obtener un servicio,
un proceso cliente construye un mensaje indicando lo que desea y lo envía al servicio
apropiado. Después el servicio hace el trabajo y envía de vuelta la respuesta.
3.2.5. MÁQUINAS VIRTUALES
Una máquina virtual (VM) es una
implementación de software de un ambiente de computación en el que se puede instalar
y ejecutar un sistema operativo o programa. Se crean dentro de una capa
de virtualización que funciona sobre un sistema operativo servidor o cliente. La VM
normalmente emula un ambiente de computación físico pero las demandas de CPU, memoria, disco duro, red
y otros recursos de hardware son gestionadas por una capa de virtualización que
traduce estas solicitudes a la infraestructura de hardware físico subyacente.
Normalmente, los sistemas operativos huéspedes y los programas,
no son conscientes de que operan en una plataforma virtual y, siempre que la plataforma
virtual de la VM esté respaldada, se puede instalar este software de igual forma
que si fuera un servidor físico.
3.2.6. EXOKERNELS
En vez de clonar la máquina actual, como se hace con las máquinas
virtuales, otra estrategia es particionarla; es decir, a cada usuario se le proporciona
un subconjunto de los recursos. En la capa inferior, que se ejecuta en el modo kernel,
hay un programa llamado exokernel, su trabajo es asignar recursos a las máquinas
virtuales y después comprobar los intentos de utilizarlos, para asegurar que ninguna
máquina trate de usar los recursos de otra. La ventaja del esquema del exokernel
es que ahorra una capa de asignación, ya que todo lo que tiene que hacer el exokernel
es mantener las máquinas virtuales separadas unas de las otras.
3.3. PROCESOS
Un proceso es
cualquier programa en ejecución. Este necesita ciertos recursos para realizar
satisfactoriamente su tarea:
- Tiempo de CPU.
- Memoria.
- Archivos.
- Dispositivos de E/S.
Necesitamos mecanismos para crear y terminar procesos.
3.3.1. CREACIÓN DE UN PROCESO
Existen 4 eventos principales que permiten la creación de un
proceso:
- Inicio del sistema.- Procesos interactivos (primer plano) VS demonios (segundo plano)
- Llamada al sistema para crear eventos.- Unix fork() +exec(), Win32.
- El usuario inicia un proceso.- Ya sea mediante modo gráfico o alfanumérico.
- Inicio de un trabajo por lotes.- Sistema mainframe.
3.3.2. TERMINACIÓN DE UN PROCESO
Una vez que
se crea un proceso empieza a ejecutarse y realiza el trabajo al que está
destinado. Sin embargo tarde o temprano termina ese proceso. Por lo general se
debe:
- Salida normal
- Salida por error
- Error fatal
- Eliminado por otro proceso
3.3.3. JERARQUÍA DE PROCESOS
Un proceso (padre) crea a otro (hijo). El proceso hijo puede
crear más procesos creando una jerarquía. Un proceso solo tiene un padre y 0 o
más hijos. En Windows no hay jerarquía: todos son iguales.
3.3.4. ESTADOS DE UN PROCESO
Un proceso puede
encontrarse en estado “en ejecución”, “bloqueado” o “listo”. A medida que un
proceso se ejecuta cambia de estado.
Figura 7. Transiciones entre
los estados un proceso
3.4. HILOS
Los hilos son un
concepto relativamente nuevo de los SO. En este contexto, un proceso recibe el
nombre de proceso pesado, mientras que un hilo recibe el nombre de proceso
ligero. El término hilo se refiere sintáctica y semánticamente a hilos de
ejecución. El término multi-hilo hace referencia a la capacidad de un SO para
mantener varios hilos de ejecución dentro del mismo proceso.
Figura 8. Hilos.
3.4.1. ESTADOS DE UN HILO
Los principales
estados de un hilo son: ejecución, preparado y bloqueado; y hay cuatro operaciones
básicas relacionadas con el cambio de estado de los hilos:
- Creación
- Bloqueo
- Desbloqueo
- Terminación
3.4.2. RECURSOS COMPARTIDOS Y NO
COMPARTIDOS
Los hilos permiten
la ejecución concurrente de varias secuencias de instrucciones asociadas a
diferentes funciones dentro de un mismo proceso, comparten un mismo espacio
de direcciones y las mismas estructuras de datos del núcleo.
3.4.2.1. RECURSOS COMPARTIDOS ENTRE LOS HILOS
- Código (instrucciones).
- Variables globales.
- Ficheros y dispositivos abiertos.
3.4.2.2. RECURSOS NO COMPARTIDOS ENTRE LOS HILOS
- Contador del programa: cada hilo puede ejecutar una sección distinta de código.
- Registros de CPU.
- Pila para las variables locales de los procedimientos a las que se invoca después de crear un hilo.
- Estado: distintos hilos pueden estar en ejecución, listos o bloqueados esperando un evento.
4. CONCLUSIÓN
El estudio de la estructura de los sistemas operativos nos permite saber cómo trabajan los sistemas operativos, y a pesar que su estudio es complejo es muy interesante e importante conocer sus funcionalidades, por ejemplo el de los procesos, los cuales son programas ejecutables que guardan
información requerida por un usuario para que realice cierta acción.
5. BIBLIOGRAFÍA
Ayala, I.; Francois, J.; Ortega, A.; Villagómez, C. 2015. Introducción al Shell. (En línea). Consultado, 5 de diciembre de 2015. Disponible en: http://es.ccm.net/contents/692-sistema-unix-el-shell
Bravo, D. 2009. Llamadas al Sistema en Linux. (En línea). Formato PDF. Consultado, 5 de diciembre de 2015. Disponible en: http://www.fceia.unr.edu.ar/~diegob/so/material/Llamadas_al_Sistema.pdf
Desai, A. 2011. Máquina Virtual VM - Definición. (En línea). Consultado, 5 de diciembre de 2015. Disponible en: http://searchdatacenter.techtarget.com/es/definicion/Copy-of-virtual-machine-VM
Martínez, M. s/f. Concepto de Sistema de archivos. (En línea). Consultado, 5 de diciembre de 2015. Disponible en: http://sistemasoperativos.angelfire.com/html/5.1.html
Tanenbaum, A. 2009. Sistemas Operativos Modernos. 3 ed. México. DF. PEARSON EDUCACIÓN. p. 37-71, 83-114
ULPGC, s/f. Universidad de Las Palmas de Gran Canaria - Llamadas al Sistema. (En línea). Formato PDF. Consultado, 5 de diciembre de 2015. Disponible en: http://sopa.dis.ulpgc.es/ii-dso/leclinux/miscelaneos/llamadas/LEC_llamadas.pdf
Velásquez, S. 2011. Llamadas al Sistema Operativo. (En línea). Consultado, 5 de diciembre de 2015.
Disponible en: http://soribel-velasquez.blogspot.com/p/llamadas-al-sistema-operativo_25.html
No hay comentarios:
Publicar un comentario