Download UNIDAD 1 Introducción a los sistemas operativos. Definición y

Document related concepts

Sistema operativo wikipedia , lookup

Anillo (seguridad informática) wikipedia , lookup

Proceso de arranque en Linux wikipedia , lookup

Multiseat wikipedia , lookup

Hilo de ejecución wikipedia , lookup

Transcript
UNIDAD 1 Introducción a los sistemas operativos.
Definición y concepto.
1.1 Sistema Operativo.- Colección de mecanismos de software destinados a servir de interface entre un
sistema informático y sus usuarios, el cual ofrece herramientas y facilidades para simplificar las tareas de
diseño, codificación, depuración, actualización, etc.
Administra los recursos hardware y software que constituyen el sistema informático a explotar.
Nació con la necesidad de llevar el control de quién utiliza los recursos software (usuario(s)).
Componentes principales: manejo de procesos, entrada/salida, manejo de memoria y del sistema de archivos.
Un sistema de computación consta de hardware, programas del sistema y programas de aplicación.
1.2 Funciones y características.
Las funciones básicas de un so son:
soporte para la ejecución de sw(software) de aplicación
elemento de diagnóstico de hw(hardware)
elemento de una red de computadoras
elemento que optimiza el aprovechamiento de los recursos lógicos y físicos de un sistema de cómputo
1.3 Evolución histórica.
Los primeros sistemas.
En un principio sólo existía el hardware de la computadora. Las primeras computadoras eran (físicamente)
grandes máquinas que se operaban desde una consola. Una sola persona programaba y operaba el equipo.
Accesos por operador
En 1955 se separaron las funciones informáticas: Programación, operación y mantenimiento. El operador se
encarga del manejo de la máquina (cargar programas, obtener resultados, hacer respaldos, etc.) y el
programador dejó de tener acceso a la computadora.
Los programadores daban al operador los trabajos, éste los reunía y los ejecutaba uno tras otro y recogía los
resultados entregándolos a los programadores.
Otra solución: El operador agrupaba los trabajos similares en requerimientos y los ejecutaba como si fueran
un bloque (todos los de cobol, todos los de fortran), así se cargaba sólo una vez el compilador.
Secuencia automática de trabajos
El trabajo del operador era muy rutinario y podía automatizarse. Se diseñó un programa que transfería
automáticamente el control de un trabajo a otro, el monitor residente (1er sistema operativo). Al encender el
equipo el control se daba al programa monitor, este lo pasaba al 1er trabajo, el cual al terminar regresaba el
control al monitor, y así sucesivamente. El monitor constaba de:
Secuenciador de trabajos,
Memoria
intérprete de tarjetas de control
($) y drivers de entrada/salida
drivers
secuenciador
Intérprete de tarjetas de control
Programa de usuario
Mejora del rendimiento
Aun quedaba mucho tiempo del cpu ocioso debido a la diferencia de velocidad entre este y los dispositivos
entrada/salida que eran mecánicos.
Off-Line
Aparecieron las cintas magnéticas, más rápidas que las tarjetas perforadas, pero secuenciales. Entonces se
perforaban los programas en tarjetas y de ahí se pasaban a una cinta, esta cinta en bloque se pasaba a
ejecución y los resultados en una nueva cinta y de ahí a la impresora. Las operaciones se hacían en
dispositivos distintos lo que aumentaba la velocidad
On line
Lector de tarjetas->CPU->Impresora
Off Line
Lector de tarjetas->Unidad de Cinta->CPU->unidad de cinta->Impresora
Se podían tener varias lectoras de tarjetas y unidades de cinta y mantener ocupado al CPU, la desventaja era
que el usuario debía esperar a que se llenara la cinta para ser atendido.
Buffering
Trata de mantener ocupados tanto el CPU como los dispositivos de E/S. Los datos se leen y se almacenan en
un buffer (memoria intermedia), una vez que los datos se han leído y el CPU va a iniciar la operación, el
dispositivo de entrada es instruido para iniciar inmediatamente la siguiente lectura. El CPU y el dispositivo de
entrada permanecen ocupados. Cuando el CPU esté libre para el siguiente grupo de datos, el dispositivo de
entrada habrá terminado de leerlos. El CPU podrá empezar el siguiente proceso y el dispositivo de entrada
iniciará la lectura de los datos siguientes.
Para la salida, los resultados se descargan en otro buffer hasta que el dispositivo de salida pueda procesarlos.
Todo depende del tamaño del buffer y de la velocidad de procesamiento CPU y los E/S.
Spooling (SPOOL Simultaneous Peripheral Operation On Line)
El problema con los sistemas de cintas es que una lectora de tarjetas no podía escribir sobre un extremo de la
cinta mientras el CPU leía el otro. Los sistemas de disco eliminaron esa dificultad, por su acceso directo. Las
tarjetas se cargan directamente desde la lectora sobre el disco. Cuando se ejecuta un trabajo sus peticiones de
entrada se satisfacen leyendo el disco. Cuando el trabajo solicita la salida, ésta se escribe en el disco. Cuando
la tarea se ha completado se escribe en la salida realmente.
Se usa el disco como un buffer muy grande para leer por anticipado como sea posible de los dispositivos de
entrada y para almacenar los archivos hasta que los dispositivos de salida sean capaces de aceptarlos.
La ventaja sobre el buffering es que el spooling traslapa la E/S de un trabajo con el procesamiento de otro.
Además mantiene una estructura de datos llama job spooling, que hace que los trabajos ya cargados
permanezcan en el disco y el sistema operativo puede seleccionar cual ejecutar, por lo tanto se hace posible la
planificación de trabajos mediante una cola por turno, tamaño o prioridad.
MULTIPROGRAMACIÓN
entrada/salida
Driver
entrada/salida
w1 w2
libre
w3
libre
S.O.
Planificador
CPU
Tipos de trabajo:
Limitados por proceso: La mayor parte de su tiempo ocupan CPU
Limitados por operaciones entrada/salida: La mayor parte de su tiempo ocupan e/s
Proceso limitado por E/S
Espera e/s
El segundo tipo dio origen a la Multiprogramación.- Modo de trabajo en el que se pueden ejecutar varios
programas simultáneamente aprovechando la inactividad del CPU en una operación e/s para optimizar el uso
de los recursos. Surge de la imposibilidad de que con un solo trabajo se puedan tener ocupados el cpu y los
entrada/salida todo el tiempo
Da la impresión que todos los procesos están siendo atendidos a la vez pero son conmutados
Programa 1
Programa 2
Mono
Inactividad del
CPU
Mult
i
Programa 1
Programa 2
Problemas:
1 El cpu debe tener reglas para ejecutar todos los trabajos
2 Se necesita administración de memoria porque será compartida por varios trabajos
3 Varios trabajos pueden necesitar el mismo recurso a la vez (concurrencia)
Surge el núcleo del sistema (Kernel): rutinas para gestión de memoria, cpu y demás recursos
Proceso por lotes (batch)
El que no necesita la intervención del usuario en la ejecución de los trabajos. Generalmente son trabajos
grandes que son solicitados y colocados en una cola FIFO, y el CPU va tomando un grupo y los ejecuta en
paralelo
Lista de
trabajos
Trabajos en
ejecución
Tiempo Compartido
El proceso por lotes no permite el diálogo entre usuario y proceso, surge la multiprogramación interactiva,
junto con las terminales interactivas (teclado-pantalla), donde el usuario ya
Comp
no tiene que dar todos los datos al inicio, sino darlos conforme se
Central
necesiten, e ir obteniendo respuesta inmediata.
La organización no es por trabajos sino por sesiones.
Sesión.- Conjunto de trabajos que se realizan desde que un usuario se
conecta a la computadora hasta que se despide. Existe un programa
llamado intérprete de comandos, que mantiene el diálogo entre usuario y
sistema operativo.
Características:
*Interactivos
*Varios usuarios * Tiempos de respuesta cortos
*Gestión de archivos y memoria
* Usa buffering y spooling
Con estos sistemas operativos surgen utilerías para facilitar el trabajo a los usuarios, como el editor de textos.
Tiempo real
Sistema multiprogramado con
tiempos de respuesta cortos.
Se usa en aplicaciones
Sistema
Control
dedicadas a sistemas de
Compu.
control con sensores como
Controlado
central
elementos de entrada. Un
sistema trabaja en tiempo real
si el tiempo de respuesta
Sensor
permite controlar el medio
sobre el que opera.
Tiene su uso en el control de procesos industriales
Características:
*Tiempo de respuesta en ms
*Información actualizada constantemente
*El sistema está dedicado a responder a eventos de entrada
Proceso distribuido
Compu1
Interconexión de computadoras compartiendo un
mismo almacenamiento para el intercambio de
información.
Cada computadora cuenta con interfaz, memoria y
cpu.
Comp3
Multiproceso
Han surgido aplicaciones muy demandantes donde
Compu2
un solo cpu no es capaz de procesar la información
en tiempo. Se hizo necesaria la descomposición de
los algoritmos en subalgoritmos más sencillos y que
puedan tratarse con cierta independencia. Al final se conjuntan los datos obteniendo el resultado final. Los
subalgoritmos pueden trabajar en paralelo. Una sola computadora puede tener varios cpu’s, ahorrando tiempo.
Su sistema operativo es complejo ya que debe administrar más de un cpu y repartir los trabajos
equilibradamente optimizando el proceso global.
cpu1
cpu2
cpu3
cpu4
e/s
Memoria
Sistema operativo
Trabajos de
Planificador
Usuario
Coordinador
De cpu’s
Cpu
1
Cpu
2
Cpu
3
Cpu
4
Comparación entre monoprocesador y multiprocesador
a
b
c
d
mono
1 cpu
multi
d
d
c
c
b
c
b
a
b
a
c
b
b b
a
t1
t2
4 cpu’s
d
c
b
a
t3
t3<t1
t3<t2
1.4 Clasificación.
Sistemas Operativos por Servicios
Esta clasificación es la más comúnmente usada y conocida desde el punto de vista del usuario final.
Monousuarios: un usuario a la vez, no importa el número de cpu’s, número de procesos que pueda ejecutar
en un mismo instante de tiempo. PC’s.
Multiusuarios: más de un usuario a la vez, por varias terminales conectadas a la computadora o por sesiones
remotas en una red de comunicaciones. No importa el número de cpu’s ni el número de procesos que cada
usuario puede ejecutar simultáneamente.
Monotareas: sólo una tarea a la vez por usuario. Puede darse el caso de un sistema multiusuario y monotarea,
varios usuarios al mismo tiempo pero cada uno de ellos puede estar haciendo solo una tarea a la vez.
Multitareas: realiza varias labores al mismo tiempo. interfases gráficas orientadas al uso lo cual permite un
rápido intercambio entre las tareas para el usuario,
Monoprocesador: solamente un CPU, de manera que si la computadora tuviese más de uno le sería inútil.
MS-DOS y MacOS.
Multiprocesador: más de un cpu y es capaz de usarlos todos para distribuir su carga de trabajo.
Trabajan de dos formas: simétrica o asimétricamente.
Asimétrica, el sistema operativo selecciona a uno de los procesadores el cual jugará el papel de
procesador maestro y servirá como pivote para distribuir la carga a los demás procesadores, que reciben
el nombre de esclavos.
Simétrica, los procesos o partes de ellos son enviados indistintamente a cualquiera de los procesadores
disponibles, teniendo, teóricamente, una mejor distribución y equilibrio en la carga de trabajo bajo este
esquema.
Considerar la forma de crear aplicaciones para aprovechar los varios procesadores. Existen aplicaciones que
fueron hechas para correr en sistemas monoprocesador que no toman ninguna ventaja a menos que el sistema
operativo o el compilador detecte secciones de código paralelizable, los cuales son ejecutados al mismo
tiempo en procesadores diferentes. El programador puede modificar sus algoritmos y aprovechar por sí mismo
esta facilidad, es costoso en horas hombre y muy tediosa, obligando al programador a ocupar tanto o más
tiempo a la paralelización que a elaborar el algoritmo inicial.
1.5 Estructura (niveles o estratos de diseño).
Estructura monolítica.
Primeros
sistemas
operativos
constituidos
fundamentalmente por un sólo programa compuesto de un
conjunto de rutinas entrelazadas de tal forma que cada una
puede llamar a cualquier otra (Ver Fig. 2).
Características:
1 Construcción del programa final a base de módulos
compilados separadamente que se unen a través del
encadenador (linker)
2 Buena definición de parámetros de enlace entre las
distintas rutinas existentes
3 Carecen de protecciones y privilegios al entrar a rutinas
que manejan diferentes aspectos de los recursos de la computadora
4 Generalmente hechos a la medida, eficientes y rápidos en ejecución y gestión
5 Poco flexibles para soportar diferentes ambientes de trabajo o aplicaciones.
Estructura jerárquica.
Mayores necesidades de los usuarios, mayor organización del software. Se dividió el sistema operativo en
pequeñas partes, cada una bien definida y con una clara interfase con el resto de elementos.
Se constituyó una estructura jerárquica, el primero de los cuales fue denominado THE (Technische
Hogeschool, Eindhoven)
Capa 5 – Control de programas de usuario
Capa 4 – Gestión de Archivos
Capa 3 – Control de operaciones entrada/salida
Capa 2 – Control de la Consola de operación
Capa 1 – Gestión de memoria
Capa 0 – Planificación de CPU
Capa -1 – Hardware
En esta estructura se basan la mayoría de los sistemas operativos actuales.
Otra forma es la de anillos.
Cada uno tiene una apertura por donde pueden entrar
las llamadas de las capas inferiores. Las zonas más
internas del sistema operativo o núcleo estarán más
protegidas de accesos indeseados desde las capas más
externas. Las internas serán más privilegiadas que las
externas.
Cliente-servidor
El más reciente, puede ser ejecutado en la mayoría de
las computadoras, para toda clase de aplicaciones, es
de propósito general.
El núcleo establece la comunicación entre los clientes
y los servidores. Los procesos pueden ser tanto
servidores como clientes. Por ejemplo, un programa
de aplicación normal es un cliente que llama al
servidor correspondiente para acceder a un archivo o realizar una operación de entrada/salida sobre un
dispositivo concreto. A su vez, un proceso cliente puede actuar como servidor para otro.
Proceso
Servidor de
Cliente
Archivos
Servidor de
…
Impresión
Núcleo
1.6 Núcleo.
El Núcleo.- Componente que interactúa directamente con el hardware. Contiene un conjunto de rutinas que
hacen posible la ejecución de los programas y la comunicación entre ellos y el Hardware, es el que gestiona
la entrada y salida del sistema, adaptándolas al hardware del sistema.
Núcleo (Kernel) y Niveles de un Sistema Operativo
Definición.
Es el software que constituye el núcleo del sistema
operativo, dónde se realizan las funcionalidades básicas
como la gestión de procesos, la gestión de memoria y de
entrada salida.
El “kernel” del sistema operativo controla todas las
operaciones que implican procesos y representa sólo una
pequeña porción del código de todo el Sistema
Operativo pero es de amplio uso.
Niveles del Sistema Operativo
Concepto de Kernel
Para que una computadora pueda arrancar y funcionar, no es necesario que tenga un núcleo para poder usarse.
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.
El kernel presenta al usuario o los programas de aplicación una interfaz de programación de alto nivel,
implementando la mayoría de las facilidades requeridas por éstos. Reúne el manejo de una serie de siguientes
conceptos ligados al hardware de nivel más bajo:
Procesos (tiempo compartido, espacios de direccionamiento protegidos);
Señales y Semáforos;
Memoria Virtual ("swapping", paginado);
Sistema de Archivos;
Tubos ("pipes") y Conexiones de red.
(Una tubería (pipe) se puede considerar como un canal de comunicación entre dos procesos.
Los mecanismos que se utilizan para manipular tuberías son los mismos que para archivos, con la
única diferencia de que la información de la tubería no se almacena en el disco duro, sino en la
memoria principal del sistema. Este mecanismo de comunicación consiste en la introducción de
información en una tubería por parte de un proceso (similar a la escritura en un archivo de disco).
Posteriormente otro proceso extrae la información de la tubería (similar a la lectura de información
almacenada en un archivo de disco) de forma que los primeros datos que se introdujeron en ella
son los primeros en salir. Este modo de funcionamiento se conoce como FIFO (First In, First Out; el
primero en entrar es el primero en salir). La comunicación mediante tuberías es de tipo half-duplex,
es decir, en un instante dado, la comunicación solamente puede tener lugar en un sentido. Si se
quiere que un proceso A pueda simultáneamente enviar y recibir información de otro B, en general
se debe recurrir a crear dos tuberías, una para enviar información desde A hacia B y otra para
enviar desde B hacia A.)
Una parte del kernel es independiente de los dispositivos presentes en el sistema, pero otra contiene los
controladores necesarios para manejar partes específicas del hardware. El kernel interpreta los pedidos de los
programas y los traduce en secuencias de bits que, presentadas a los registros de los controladores, operan
sobre los dispositivos físicos. Por ejemplo el código de un kernel de Linux está escrito casi todo en C, salvo
una pequeña parte en lenguaje ensamblador para los procesos de bajo nivel. El tamaño puede ir desde unos
400 KB hasta más de 50 MB de código fuente.
Funcionamiento del Kernel
Tipos de Núcleos.
En función del tamaño y de las funcionalidades que posea el kernel podemos clasificarlo. Realmente, y pese a
seguidores incondicionales en un modelo u otro, existe una tendencia básica a reducir el tamaño del núcleo
proporcionando menos funcionalidades, que son desplazadas a módulos que se cargan en tiempo de
ejecución. En función a esta idea tenemos tres tipos fundamentales de kernel:
Kernel monolítico
Todas las funcionalidades posibles están integradas en el sistema. Se trata de un programa de tamaño
considerable que deberemos recompilar al completo cada vez que se quiera añadir una nueva posibilidad. Esta
es la estructura original de Linux. Por tratarse de una técnica clásica y desfasada el creador de Linux fue muy
criticado. Ejemplos: los primeros kernels de Linux, UNIX y DOS
Kernel modular
Se trata de la tendencia actual de desarrollo. En el kernel se centran las funcionalidades esenciales como la
administración de memoria, la planificación de procesos, etc. Sin embargo no tiene sentido que el núcleo de
un sistema operativo englobe toda la parafernalia para comunicarse con todas las posibles de tarjetas de vídeo
o de sonido. En otros sistemas operativos esto se soluciona con unos archivos proporcionados por el
fabricante llamados drivers. En Linux se creó una interfaz adecuada para posibilitar el desarrollo de módulos
que cumplieran esas funcionalidades. Esos módulos pueden ser compilados por separado y añadidos al kernel
en tiempo de ejecución. Ejemplo: Actualmente el kernel de linux.
Estructura de Microkernel
Esta técnica pretende reducir a su mínima expresión el kernel, dejando a los niveles superiores el resto de las
funcionalidades. Existen algunos kernels que lo utilizan, si bien el que centra nuestra atención es Hurd. Se
trata del último kernel GNU llamado a sustituir a Linux como núcleo del sistema operativo. Aunque esta
estrategia de diseño es tan antigua como la modular, no ha sido tenida en cuenta hasta ahora debido a las
limitaciones de rendimiento que tenía. Ejemplos: AIX, La familia de micronúcleos L4, El micronúcleo Mach
(usado en GNU Hurd y en Mac OS X), Minix, MorphOS, QNX, RadiOS, VSTa
1.6.1 Interrupciones (FLIH).
La interrupción es el mecanismo mediante el cual otros módulos pueden interrumpir una secuencia normal de
procesamiento. Ejemplos:
Programa: división por cero
Temporizador: cuando se cumple un tiempo específico
E/S: cuando hay algo que comunicar
Hardware: cuando ocurre una falla.
La gestión de interrupciones la realiza el manipulador (controlador) de interrupciones (FLIH, First Level
Interrupt Handler) que es la parte del sistema operativo responsable de proporcionar la respuesta adecuada a
las señales procedentes tanto del exterior como del interior del sistema (interrupciones externas e internas).
1.6.2 Despachador(Scheduler).
Se encarga de asignar los procesadores a los diferentes procesos, por lo tanto debe actuar cuando se debe
comprobar si es necesario cambiar el proceso que está activo.
Esto involucra:
cambio de contexto
cambio a modo usuario
salto a la dirección de memoria que corresponda al programa de usuario para continuar su ejecución.
Criterios de Despachador
Utilización de CPU: mantener la CPU ocupada la mayor cantidad del tiempo posible
Productividad (Throughput): # de procesos por unidad de tiempo
Tiempo de servicio (Turnaround time): tiempo necesario para la ejecución de un proceso particular
Tiempo de espera (Waiting time): tiempo total que el proceso se encuentra en la fila ready
Tiempo de respuesta (Response time): tiempo que transcurre desde el requerimiento hasta que se produce
la primera respuesta (en ambientes de tiempo compartido)
Criterios de Optimización
Máxima utilización de CPU
Máxima productividad
Mínimo tiempo de servicio
Mínimo tiempo de espera
Mínimo tiempo de respuesta
1.6.3 Primitivas de comunicación (IPC).
Es una función básica de los Sistemas operativos. Los procesos pueden comunicarse entre sí a través de
compartir espacios de memoria, ya sean variables compartidas o buffers, o a través de las herramientas
provistas por las rutinas de IPC (Interprocess Communication).
La IPC provee un mecanismo que permite a los procesos comunicarse y sincronizarse entre sí. Normalmente a
través de un sistema de bajo nivel de paso de mensajes que ofrece la red subyacente. La comunicación se
establece siguiendo una serie de reglas (protocolos de comunicación).