UNIDAD VIII

Conceptos básicos sobre sistemas operativos.

Definimos sistema operativo como un conjunto de programas implementados tanto en software como en firmware que hacen asequible el hardware, de forma que lo hacen disponible de la manera más adecuada al usuario y aumentan su rendimiento total, es decir, su rendimiento específico o throughput (volumen de trabajo por unidad de tiempo) y su disponibilidad (tiempo de respuesta mínimo).
Un ordenador no es una máquina dedicada sino que esta construido para un propósito general con el fin de ejecutar aplicaciones de diversa índole. En líneas generales el ordenador dispone además de una unidad central de proceso y de la memoria, de diversos periféricos (pantallas, impresoras, teclados, etc) que son compartidos en gran medida por todas las aplicaciones porque todas las aplicaciones de un computador utilizan los mismos recursos físicos y los mismos recursos lógicos.
Los sistemas operativos nacen porque sería extremadamente complejo que cada una de las aplicaciones soportadas por el ordenador contuviese todos los programas necesarios para manejar el hardware y el software que comparten muchas aplicaciones.
Además el sistema operativo hace de intermediario entre el hardware y el usuario creando un entorno adecuado que se adapte a los diferentes usuarios y aplicaciones.


Figura 4.1. Descripción interna del S.O.
Por tanto el sistema operativo es un gestor de recursos, tratando de sacar de ellos el mayor rendimiento posible, por lo que debe poseer las siguientes funciones; organiza los archivos en diversos dispositivos de almacenamiento; supervisa y gestiona ejecuciones, errores hardware y la pérdida de datos; coordina y manipula el hardware de la computadora y tiene que evitar usos inadecuados además de responder a cualquier evento que se produzca.

4.1.1- Clasificación de los sistemas operativos.

Existen muchas clasificaciones diferentes de sistemas operativos dependiendo del criterio en el que se basen. Nosotros los clasificaremos basándonos en dos criterios:

1º- Según el punto de vista del usuario:

Existen los SISTEMAS MONOUSUARIO en los cuales la máquina virtual (la presentada por el S.O. al usuario) tiene un solo usuario y generalmente está dedicada a una sola función. Por tanto el interface del S.O. constará básicamente de un gestor de ficheros sencillo, utilidades que proporcionen facilidades de E/S y un intérprete de comandos sencillo, es decir un OSCL(Lenguaje de Control del S.O.); y sus cualidades son fiabilidad, eficacia, sencillez de uso y facilidad de extensión.

Se puede representar de las siguientes maneras según el modo en que se trabaje:


Figura 4.2. Representaciones Batch y On-Line de sistemas monousuario.

También existen los SISTEMAS DE TIEMPO REAL que tienen en común la necesidad de dar respuestas a unas entradas con un tiempo de proceso informático limitado. Por los que sus funciones principales serán interactuar con dispositivos externos (sensores, válvulas,...), reacción inmediata ante cualquier suceso externo, registrar la información (fichero registro), tener noción de tratamientos prioritarios y realizar una planificación eficiente, siempre teniendo en cuenta el tiempo físico (tiempo real).

Su cualidad principal debe ser la fiabilidad de forma que garantice la seguridad del sistema en cualquier caso (tolerancia a fallos) debiendo ofrecer unos servicios mínimos (disponibilidad) Los sistemas en tiempo real se utilizan en muchos campos como gestión de centralitas telefónicas, pilotaje de aviones, seguimiento de trayectorias, vigilancia médica, control de robots, ..., y control de procesos en general..

En general responden al siguiente esquema:
Figura 4.3. Esquema de un sistema de tiempo real.

Como evolución de los sistemas operativos aparecieron los SISTEMAS TRANSACCIONALES que se caracterizan por poseer las siguientes funciones; gestionar un gran volumen de información (Bases de Datos) desde distintos y numerosos puntos de acceso y de transacciones desarrollándose simultáneamente (de forma paralela  concurrencia) y por la ejecución de operaciones predefinidas, muy a menudo interactivas.

Sus cualidades son fiabilidad y disponibilidad.(servicios mínimos)

Son ejemplos de sistemas transaccionales los sistemas de reservas de plazas en líneas aéreas, gestión de cuentas bancarias, consulta de documentos, etc...

Más tarde aparecieron los SISTEMAS TS/MULTIPROGRAMADOS, donde los sistemas Time-Sharing se caracterizan por prestar servicio a un conjunto de usuarios simultáneamente, dividiendo el tiempo de utilización de la máquina en quantums para cada usuario.

Mientras que los sistemas multiprogramados se caracterizan por la ejecución simultanea de varios programas (procesamiento concurrente). En ambos sistemas el S.O. será el encargado de conmutar los recursos entre los diversos procesos y/o usuarios.

Por tanto las funciones que debe proporcionar el S.O. serán todas las de los sistemas monousuario y las de los sistemas transaccionales: definición de la máquina virtual a presentar a cada usuario, ofrecer la utilización compartida y asignación de los recursos físicos comunes (conmutación), gestión de la información compartida. Sus cualidades serán: disponibilidad, fiabilidad y seguridad, facilidad de extensión y adaptación a los diferentes usuarios, facilidad de uso y eficacia.

También existen los SISTEMAS MULTIPROCESADOR que se caracterizan por la existencia de varios procesadores centrales compartiendo a veces memoria y periféricos en la ejecución de instrucciones en paralelo (concurrencia real).

Sus funciones son todas las de los sistemas TS/Mutiprogramados, las de los sistemas de tiempo real y además las de gestión de los ‘n’ procesadores: asignación, conmutación, comunicación, etc... Por otro lado, si estos procesadores están a cierta distancia y se comunican por las líneas de transmisión de datos (sistemas distribuidos) tendrán como función la gestión teleinformática.

Sus cualidades serán todas las de los tipos anteriores, pero haciendo especial hincapié en la fiabilidad.

2º- Según la arquitectura del computador:

Existen los SISTEMAS MONOLÍTICOS que están diseñados como un conjunto de rutinas (rutinas de servicio y rutinas de utilidad o auxiliares) compiladas por separado, que pueden llamarse entre sí y que se montan para formar el S.O., que será la rutina principal (gestor de interrupciones).

El principal problema de los sistemas operativos monolíticos es su diseño poco apropiado para sistemas operativos grandes, ya que es muy difícil de especificar, codificar, probar y depurar. La solución sería introducir estructura en el S.O.

Como ejemplos de S.O. monolíticos están DOS/VS 360 y UNIX.

También se desarrollaron los SISTEMAS POR NIVELES O CAPAS en los cuales los sistemas operativos están diseñados como una jerarquía de niveles, en la que cada nivel hace uso de las facilidades que le proporcionan el hard y los niveles inferiores a él, sin necesidad de conocer los detalles de operación de dichos niveles.

Por tanto el S.O. está constituido por una serie de módulos pequeños y fáciles de manejar, cada uno de ellos especializado en una única función y con interfaces con otros módulos.(ocultamiento de información) Son ejemplos de S.O. por niveles MINIX y THE :

La principal ventaja de estos sistemas es su facilidad de mantenimiento que incrementa la fiabilidad del sistema, y su principal problema reside en la dificultad de elegir las funciones que deben asignarse a cada nivel.

Figura 4.4. Representación gráfica de un sistema por capas

Como extensión del enfoque de capas surgieron los SISTEMAS DE MÁQUINA VIRTUAL en los cuales se separa la parte del S.O. que proporciona la máquina virtual (la máquina adaptada al usuario) de la parte que posibilita la compartición de recursos.

Se pueden instalar diferentes S.O.s sobre las máquinas virtuales, lo cual proporciona gran flexibilidad al sistema y la posibilidad de experimentar y reducir tiempos de desarrollo con nuevo S.O.s sin interferir con el trabajo habitual.

Ejemplo : VM de IBM













Figura 4.5. Representación gráfica de un sistema máquina Virtual VM de IBM

El principal problema de estos sistemas es la dificultad de implementación.(proporcionar duplicados exactos de las máquinas)

Por último también existen los SISTEMAS BASADOS EN MICROKERNELS que incluyen en el núcleo sólo las funciones esenciales del S.O., estando el resto de funciones implementadas en módulos a nivel de usuario sobre el núcleo, que hace de base común para los procesos de usuario y el resto de servicios del S.O. 

Por tanto estos sistemas tienen un núcleo mínimo pero con un número suficiente de mecanismos eficientes, que le capacitan básicamente para gestionar mensajes y controlar los accesos al hardware.

Las principales ventajas de este tipo de S.O.s son su fácil adaptabilidad a los sistemas distribuidos; su alta fiabilidad (por tener un núcleo pequeño); su facilidad de idear; implementar y mantener; además de su facilidad con la que los servicios implementados pueden modificarse, recompilarse y cargarse sin afectar al resto.

La principal dificultad consiste en decidir qué funciones deben incluirse en el núcleo: las que necesiten rapidez o deban ejecutarse muy a menudo. En general habrá que lograr un equilibrio entre servicios rápidos e inflexibles, ya que cuanto menos se sobrecargue el núcleo más fácil será su mantenimiento.

4.1.2-Requisitos del sistema operativo multitarea.

Los sistemas operativos que soportan la multitarea manejan una lista de tareas pendientes de ser procesadas, que se ordena y organiza en función de diversos criterios, o bien, como sucede en los sistemas operativos de tiempo real, de acuerdo con la aparición de factores externos.

Para ello debe poseer ciertos requisitos. Un requisito imprescindible para la multitarea es la asignación de una zona exclusiva de memoria a cada tarea, en la que se almacenan su código y sus datos. Dicha zona de memoria recibe el nombre de área local.

Por otra parte, también deberá existir una zona de memoria común y compartida por todas las tareas, a la cual se denomina área global.

Cada tarea tendrá derecho a acceder a su propia área local y al área global; pero tendrá prohibido el acceso a las áreas locales de las restantes tareas.

En cada momento, el sistema operativo pone a disposición de la tarea en curso los recursos de la máquina, incluyendo los espacios de memoria adecuados.

Como se ha mencionado anteriormente, cada tarea tiene un tiempo asociado para su ejecución (“quantum”), pasado este tiempo, el sistema operativo provoca una conmutación de tareas poniendo la máquina a disposición de otra tarea.




Sebastián Cintes, Daiana Lis Gimenez 2 "B"



Bloqueo irreversible


¿Que es?

Cuando dos o más proceso están interactuando, a veces pueden meterse en alguna situación de estancamiento de la que no pueden salir. Tal situación se denomina bloqueo irreversible.
La mejor manera de presentar los bloqueos irreversibles es como un ejemplo del mundo real que todos conocemos, un bloqueo de trafico.
En una computadora, los procesos pueden experimentar una situación análoga en la que ya no pueden avanzar.
Entonces un bloqueo irreversible puede definirse de manera formal de la siguiente manera:
Un conjunto de procesos cae en un bloqueo irreversible si cada proceso del conjunto esta esperando un suceso que solo otro proceso del conjunto puede causar.


Condiciones para el bloqueo irreversible
Coffman et al. (1971) demostraron que deben cumplirse cuatro condiciones para que allá un bloqueo irreversible.
  1. Condición de exclusión mutua. Cada recurso esta asignado a exactamente un proceso, o esta disponible. 
  2. Condición de retención y espera. Los procesos que tiene recurso previamente otorgados pueden solicitar otros recursos. 
  3. Condición de no expropiación. Los recursos ya otorgados no pueden arrebatarse al proceso que los tiene; este debe liberarlos en forma explicita. 
  4. Condición de espera circular. Debe haber una cadena circular de dos o mas procesos, cada uno de los cuales esta esperando un recurso que esta en manos del siguiente miembro de la cadena. 
Deben existir estas cuatro condiciones para que ocurra un bloque irreversible. Si faltan algunas de ellas, no podrá ocurrir.
Vale la pena señalar que todas estas condiciones se relacionan con una política que un sistema puede tener o no tener.
En resumen: los bloqueos irreversibles son un problema que puede presentarse en cualquier sistema operativo. Ocurren cuando a cada proceso de un grupo se le ah otorgado acceso exclusivo a ciertos recursos, y cada uno quiere aun mas recursos que están en manos de otros proceso del grupo. Todos los procesos están bloqueados y ninguno podrá ejecutarse jamás.
Los bloqueos irreversibles pueden evitarse determinando cuales estados son seguros y cuales no. Un estado seguro es aquel en el que existe una serie de sucesos que garantiza que todos los procesos podrán terminar. Un estado inseguro no ofrece tal garantía. El algoritmo del banquero evita los bloqueos irreversibles al no conceder un recurso solicitado si ello colocara al sistema en un estado inseguro.
Los bloqueos irreversibles pueden prevenirse desde el punto de vista estructural, diseñando el sistema de tal modo que nunca puedan presentarse de manera deliberada. Por ejemplo, si solo se permite a un proceso retener un recurso en cualquier instante dado, se romperá la condición de espera circular necesaria para un bloqueo irreversible. Los bloqueos irreversibles también pueden prevenirse numerando todos los recursos y obligando a los procesos a solicitarlos en orden estrictamente ascendente. La inanición puede evitarse con una política de primero en llegar, primero en ser atendido.


Administración de la memoria


La parte del sistema operativo que administra la memoria se llama administrador de la memoria. Para ello existen diferentes esquemas de administración de memoria desde los mas simples hasta los mas elaborados entre los cuales se ubican:
  • Administración de la memoria sin intercambio o paginación. 
Los sistemas de administración de memoria se pueden clasificar en dos tipos. Los que desplazan los procesos de la memoria principal al disco y viceversa durante la ejecución (intercambio y paginación) y aquellos que no.
  • Monopogramación sin intercambio o paginación. 
Es en forma secuencial pues solo se tiene un objeto en memoria en cada instante, el usuario carga toda la memoria con un programa, esto implica que cada proceso debe contener controladores de dispositivo para cada uno de los dispositivos E/S que utilice.
  • Multiprogramación y uso de la memoria.
La multiprogramación facilita la programación de una aplicación al dividirla en dos o mas procesos. La mayoría de los procesos tardan cierto tiempo en la espera de datos de dispositivos E/S.
Un modelo para el uso y aprovechamiento de la CPU es el modelo probabilístico dado por la fórmula:
Uso de la CPU = 1 – pn
  • Multiprogramación con particiones fijas
El objetivo en todo esto es tener mas de un proceso en memoria a la vez, solución posible sería dividir la memoria en n partes al inicio de una sesión de uso de la máquina, pero aún así se obtiene el desperdicio de particiones grandes con una tarea pequeña, la respuesta puede ser tener particiones pequeñas también.
Las tareas que van llegando se forman hasta que una partición adecuada está disponible, en cuyo momento la tarea se carga en esa partición y se ejecuta hasta terminar.
  • Intercambio
En un sistema por lotes la organización de la memoria en particiones fijas es adecuado pero en un ambiente multiusuario la situación es distinta con el tiempo compartido, ya que existen mas usuarios de los que puede albergar la memoria, por lo que es conveniente albergar el exceso de los procesos en disco., por supuesto para ser ejecutados estos procesos deben ser trasladados a la memoria principal. Al traslado de procesos de disco a memoria y viceversa se le llama intercambio.
  • Multiprogramación con particiones variables.
Mediante un algoritmo de administración de memoria las particiones variables varían de forma dinámica durante el uso de la máquina, evitando desperdicio de memoria.

Otros métodos de administración de memoria que tenemos son:
La administración de memoria con mapa de bits
La memoria se divide en unidades de asignación, a cada asignación le corresponden un bit en el mapa de bits, un mapa de bits es una forma sencilla para llevar un registro de las palabras de la memoria en una cantidad fija de memoria. 

La administración de memoria con listas ligadas
otra forma de mantener un registro en memoria es mediante una lista ligada donde cada entrada de la lista específica un hueco o un proceso.

la administración de memoria con el sistema de los asociados
basado en el sistema binario o utiliza para las direcciones.
  • Memoria Virtual
El método diseñado por Fotheringham en 1961 se conoce como Memoria Virtual, la idea es que el tamaño combinado de la pila, programa y datos puede exceder la memoria física disponible para ello. El S.O. mantiene en memoria aquellas partes del programa que se deben permanecer en memoria y el resto lo deja en disco, las partes entre el disco y la memoria se intercambian de modo que se vayan necesitando.
  • Paginación
El espacio de direcciones de cada proceso se divide en bloques de tamaño uniforme llamados páginas, los cuales se pueden colocar dentro de cualquier para página marco disponible en memoria. Cuando las tablas de páginas son muy grandes se puede utilizar un esquema de paginación de varios niveles para que las páginas se paginen a sí mismas.
Existen distintos niveles de paginación y a su vez distintos modelos de computadoras han trabajado con ellas.
Paginación de nivel 1: PDP-11
Paginación de 2 niveles: la VAX
Paginación de 3 niveles: la SPARC
Paginación de 4 niveles: la 68030

Memoria asociativa
En los algoritmos de paginación las tablas de páginas se mantienen en la memoria debido a su gran tamaño, en potencia este diseño tiene un efecto enorme en el rendimiento.
  • Algoritmos de reemplazo de páginas.
Cuando ocurre un fallo de página el sistema operativo debe elegir una página para retirarla de la memoria y hacer un espacio para la página por recuperar. Si la página por eliminar fue modificada mientras estaba en memoria, debe escribirla en el disco para mantener actualizada la copia del disco, si por el contrario la página no ha sido modificada la copia del disco ya está actualizada por lo que no es necesario volver a escribir, la página por leer sólo escribe encima de la página por retirar.
Aunque es posible elegir una página al azar para el reemplazo relacionado con un fallo de página, el rendimiento del sistema es mucho mejor si se elige una página de poco uso.
  • Algoritmo de reemplazo de páginas optimo
Mejor algoritmo posible para reemplazo de páginas pero irrealizable en la práctica.
Al momento de ocurrir un fallo de página cierto conjunto de páginas se encuentran en la memoria, en la siguiente instrucción se hará referencia a una de estas páginas, otras páginas no se utilizaran sino hasta mucho después, cada página puede ejecutarse con el número de instrucciones ejecutadas antes de la primera referencia a esa página, el algoritmo dice que se elimine la página con la mayor etiqueta; si una página no va a utilizase sino hasta mucho después que otra la eliminación de la primera retrasa el fallo de página lo mas posible, el único problema de este algoritmo es que es irrealizable. Al momento del fallo de página el S.O. no tiene forma de saber a qué página se hace referencia.
  • Algoritmo de página de uso no muy reciente.
En un fallo de página, el sistema operativo inspecciona todas las páginas y las divide en cuatro categorías según los valores actuales de los bits R y M
Clase 0: No se ha hecho referencia ni ha sido modificada
Clase 1: No se ha hecho referencia pero ha sido modificada
Clase 2: Se ha hecho referencia pero no ha sido modificada
Clase 3: Se ha hecho referencia y ha sido modificada
El algoritmo NRU implica una hipótesis que indica que es mejor eliminar una página modificada sin referencias al menos por lo general un intervalo de reloj, este algoritmo es fácil de comprender, de implantación eficiente y con un rendimiento que, aún sin ser el óptimo si es adecuado en muchos casos.
  • Algoritmo de reemplazo " primero en entrar, primero en salir FIFO"
El sistema operativo tiene una lista de todas las páginas que se encuentran en memoria, siendo la primera página la mas antigua y la última la mas reciente, en un fallo de página, se elimina la primera página y se añade la nueva al final de la lista.
  • Algoritmo de reemplazo de páginas de la segunda oportunidad
Una modificación simple del FIFO que evita deshacerse de una página de uso frecuente inspecciona el bit R de la página mas antigua, busca una página antigua sin referencias durante el anterior intervalo de tiempo.
  • Algoritmo de reemplazo de páginas del reloj
Aunque el anterior algoritmo es razonable un mejor enfoque es mantener las páginas en una lista circular con la forma de un reloj, una manecilla apunta hacia la mas antigua. Al ocurrir un fallo de página se inspecciona la página a la que apunta la manecilla si su bit R=0 se retira de la memoria, se inserta la nueva página en su lugar en el reloj y la manecilla avanza una posición, si R=1 la manecilla avanza una posición y el bit se limpia, esto continua hasta encontrar una página con R=0.
  • Segmentación
La memoria virtual que hemos analizado hasta ahora es unidimensional, puesto que cada segmento constituye un espacio independiente de direcciones, los distintos segmentos pueden crecer o reducirse en forma independiente sin afectar a los demás.

Una memoria segmentada tiene otras ventajas como hacer mas sencilla la administración de las estructuras de datos que crecen o se reducen, si cada procedimiento ocupa un segmento independiente con la posición inicial cero el ligado independiente de los procesos compilados es mucho mas sencillo.
Bit que se activa si se hace referencia a la página en cuestión
Bit que se activa si se modifica la página

Entrada y Salida (E/S) de los S.O.




El control de todos los dispositivos de entrada/ salida de la computadora lo realiza el sistema operativo. Este se ocupa de:
  • Enviar comandos a los dispositivos. 
  • Detectar las interrupciones. 
  • Controlar los errores. 
  • Presentar todos los periféricos pueden presentar una misma interfaz con el resto del sistema, lo que logra independencia de los mismos.
El Sistema Operativo maneja todas las operaciones de entrada/salida. La atención de los dispositivos de entrada/salida requiere de mucho esfuerzo por parte de la computadora, por lo tanto se deben realizar de forma eficiente.

Existen tres técnicas de entender a los dispositivos de Entrada/Salida:
  1. ENCUESTAS (POLLING)
    Técnica utilizada para dispositivos lentos. El dispositivo deberá tener una bandera que indica si está ocupado o listo, el procesador entrará en un bucle en el cual consultará ese bit cada cierto tiempo. El procesador se pasa mucho tiempo dentro de un bucle esperando que los dispositivos estén listos, por lo tanto, esta técnica es ineficiente.
  2. INTERRUPCIONES
    El procesador y el dispositivo realizan tareas simultáneamente, cuando el dispositivo terminó alguna tarea le avisa al procesador mediante una interrupción. Este método es eficiente.
  3. ACCESO DIRECTO A MEMORIA (DMA)
    Este método se utiliza para aquellos dispositivos capaces de transmitir o recibir datos a alta velocidad, por ejemplo los discos. El controlador del dispositivo transfiere bloques de datos desde su buffer a la memoria principal sin la intervención del procesador.
Archivos de S.O.

El sistema operativo es responsable de las siguientes actividades respecto a la administración de archivos: 
Creación de archivos y borrado. 
Creación de directorio y borrado. 
Soporte de primitivas de manipulación de archivos y directorios. 
Mapeo de archivos en memoria secundaria. 
Respaldo de archivos en un medio de almacenamiento estable (no-volatil).

Archivos: Los archivos o ficheros son unas unidades lógicas de almacenamiento que define el propio sistema operativo. No son mas que una serie de bits cuyo significado esta definido por su creador. Pongamos el ejemplo de un fichero grafico, de una escala de grises. Este archivo seria un conjunto de bits definidos por el creador, y que internamente seria una matriz numérica, cuyos elementos representan los niveles de grises de cada uno de los píxeles de la imagen que contiene el fichero.
Los ficheros o archivos se identifican por su nombre y su extensión. Según que sistema operativo se utilice, podemos introducir un mayor o menor numero de caracteres a este nombre. Por ejemplo, MSDOS, solo permite 8 caracteres para el nombre, de hay que si en Windows ficheros con un nombre de mas de 8 caracteres, MSDOS, los reemplaza por "~1" ((Alt. +126) 1). En Windows, en realidad como sistema operativo solo hace un apaño para esto, identifica solo los primeros caracteres, el resto de nombre de un fichero o archivo lo añade pero no lo identifica con él, es un apaño XD. En otros sistemas operativos como LINUX si permite la introducción de un nombre para ficheros con mas de 8 caracteres y si los identifica con cuantos sean.
Los ficheros almacenan dentro de ellos sus propias características, como son: la fecha de su creación, la fecha de su ultima modificación, sus atributos (solo lectura, etc.), su tamaño, etc.
Tipos y estructuras de los ficheros/archivos
La extensión que era la segunda parte que identificaba a un fichero, es la parte que define el tipo de fichero de que se trata. Así pues si tenemos un fichero con extensión: jpg, bmp, gif, estaremos hablando de un fichero de imagen. Si es con extensión doc, será de documentos, si es: exe (ejecutable), com (de comandos), bat (procesamiento por lotes (programación lineal)"baths") ficheros ejecutables.
Un sistema operativo puede o no tener conocimiento de los distintos tipos de extensión, lo que permite un mayor servicio y rapidez. UNIX solo reconoce e interpreta los ficheros de periféricos y los directorios. El resto de extensiones de los ficheros se los pasa a la hora de ejecución al programa con el que se han creado o son compatibles. 
En Windows pasa esto con ciertas extensiones. Cuando el usuario ejecuta un fichero, el sistema operativo mira haber si la extensión es reconocida por el mismo para pasar directamente al procesamiento del fichero. Si no la reconoce, coge y hace una llamada a un programa (que si reconozca esa extensión, que pueda crear ese tipo de ficheros, o que sea compatible con ellos) y junto a esa llamada al programa le pasa un parámetro (ruta \ nombre del fichero). Entonces el programa capta la orden y ejecuta el procesamiento del parámetro, el cual alberga la localización del fichero.Operaciones con los ficheros: Las principales operaciones que un sistema operativo puede llevar a cabo sobre un fichero son:


Directorio de archivos: Los directorios son tablas de ficheros donde cada entrada guarda información referida y relativa a ellos.
Así, pues un directorio no es mas que una tabla, con columnas y filas fijas variables. Esto es porque en un directorio podremos meter tantos ficheros como queramos y siempre podemos ir metiendo mas o quitando, de hay que sea obligatoriamente variable y redefinida cada vez que hacemos cambios dentro de un directorio. En cada casilla de esa tabla, podría decirse que se almacena un fichero. Llegando mas lejos, podríamos decir que un directorio viene a ser como otro tipo de archivo, el cual en vez de contener una imagen o un texto, contienen tablas de ficheros dentro del. Al igual que los ficheros un directorio también es una unidad lógica de almacenamiento, (no es tangible).
El sistema de directorios mas extendido es el del árbol. En un sistema operativo multiusuario, cada usuario dispone de su propia estructura jerárquica de directorios.

Otro de los problemas es: ¿Donde ubicar el almacenamiento de directorios con sus ficheros dentro?
Si pensamos en la rapidez lo más factible seria ubicarlos en la memoria principal (RAM). Pero esto ocuparía muchísimo espacio, así que se pensó en el disco duro, y de hay su existencia. Lo bueno de los ficheros y directorio es que estén en el ordenador, almacenados dentro del. Y que no haya que andar cargando con ellos en fuentes de almacenamiento externas como disquetes y CDS.
Bien, la estructura en árbol, es el tipo de estructura jerárquica y organizada más empleada para el sistema de directorios. Pero con ella también se plantea un problema. Y es: ¿cuál es la raíz de ese árbol?, ¿cual es el directorio raíz? Todo árbol nace de sus raíces y va creciendo y ramificando. Como sabemos cual es el principio, la raíz, el directorio donde comenzó.
Bueno, normalmente el directorio raíz es aquel donde se arranca el sistema. Donde se encuentra almacenado el sistema operativo y donde también se almacenan los ficheros de inicio del sistema.
Cuando pulsamos el botón de arranque del ordenador, lo que hacemos es mandar una determinada cantidad de corriente, que activa los componentes del hardware, este luego se comunica con el software que en primera instancia es el sistema operativo. Y es este el encargado de inicializar todo el software que requiere el ordenador para iniciarse.

Seguridad de SO

La protección es un mecanismo control de acceso de los programas, procesos o usuarios al sistema o recursos.

El sistema de protección debe: 
  • distinguir entre usos autorizados y no-autorizados. 
  • especificar el tipo de control de acceso impuesto. 
  • proveer medios para el aseguramiento de la protección. 


El Sistema operativo es normalmente solo una porción del total de software que corre en un sistema particular. Pero el Sistema Operativo controla el acceso a los recursos del sistema. La seguridad de los Sistemas Operativos es solo una pequeña parte del problema total de la seguridad en los sistemas de computación, pero éste viene incrementándose en gran medida. Hay muchas razones para que la seguridad de los Sistemas Operativos reciba especial atención hoy en día. 
La evolución de los sistemas de computación, ha sido en las últimas décadas de una magnitud asombrosa. Las computadoras se han tornado más accesibles, también se tiene un aumento en los riesgos vinculados con la seguridad. Pero hay una cosa que se ha mantenido constante a través de todo este tiempo, y es que los sistemas digitales se han vuelto cada vez más complejos. Los microprocesadores se han vuelto más complejos. Los sistemas operativos se han vuelto más complejos. Los ordenadores se han vuelto más complejos. Las redes se han vuelto más complejas. Las redes individuales se han combinado y han aumentado todavía más su complejidad. Ejemplo claro de ello es Internet, la gran red de computadoras, a medida que aumenta su complejidad va tornándose más insegura.
Si tenemos en cuenta que todo software no está libre fallos, entonces un software complejo es probable que falle y un porcentaje de estos fallos afecte a la seguridad.
También es importante mencionar que los sistemas complejos son necesariamente modulares, ya que de otra manera no se podría manejar su complejidad. Pero el aumento de la modularidad significa que la seguridad disminuye porque falla a menudo donde dos módulos se comunican.
La única manera razonable de probar la seguridad de un sistema es realizar evaluaciones de seguridad en él. Sin embargo, cuanto más complejo es el sistema, más dura se vuelve la evaluación de su seguridad. Un sistema más complejo tendrá más errores relacionados con la seguridad en su análisis, diseño y programación. Y desgraciadamente, el número de errores y la dificultad de evaluación no crece de acuerdo con la complejidad, crece mucho más rápido.
Cuanto más complejo es un sistema, más difícil es de entender. Hay toda clase de puntos de vulnerabilidad -interface entre usuario y máquina, interacciones del sistema- esto crece exponencialmente cuando no se puede mantener el sistema completo en la cabeza.
Cuanto más complejo es un sistema, más duro es hacer este tipo de análisis. Todo es más complicado: su análisis, su diseño, su programación y su uso.
Los sistemas operativos no escapan a esta realidad y se tornan cada vez más complejos. Un ejemplo es Microsoft Windows, que cuando se publicó en 1992 (Versión 3.1) tenía alrededor de 3 millones de líneas de código; Windows 95 alcanzó a los 15 millones y Windows 98 tiene 18 millones; Windows NT lanzado en 1992 tenía 4 millones de líneas de código; Windows NT 4.0 tiene 16.5 millones; Windows 2000 tiene entre 35 y 80 millones de líneas.
Como punto de comparación tenemos a Solaris que mantuvo su código fuente en aproximadamente 7 a 8 millones de líneas y Linux (Incluso con la suma del entorno gráfico X Windows y de Apache) que todavía se mantiene por debajo de los 5 millones de líneas.
En el pasado la seguridad física fue suficiente para resguardar un computadora contra ataques de intrusos, actualmente controles sofisticados deben instrumentarse para prevenir intentos de login desde terminales remotas y sobre otras redes de comunicación.
Por último, cabe destacar que el nivel de seguridad apropiado para un sistema en particular depende del valor de los recursos que se aseguran.



El ambiente de seguridad Sistemas Operativos.

Los términos seguridad y protección se utilizan en forma indistinta. Sin embargo, es útil hacer una distinción entre los problemas generales relativos a la garantía de que los archivos no sea leídos o modificados por personal no autorizado, lo que incluye aspectos técnicos, de administración, legales y políticos, por un lado y los sistemas específicos del sistema operativo utilizados para proporcionar la seguridad, por el otro. Para evitar la confusión, utilizaremos el término seguridad para referirnos al problema general y el término mecanismo de protección para referirnos a los mecanismos específicos del sistema operativo utilizado para resguardar la información de la computadora. Sin embargo, la frontera entre ellos no está bien definida. Primero nos fijaremos en la seguridad; más adelante analizaremos la protección.

La seguridad tiene muchas facetas. Dos de las más importantes son la pérdida de datos y los intrusos. Algunas de las causas más comunes de la perdida de datos son:
1. Actos divinos: Incendios, inundaciones, terremotos, guerras, revoluciones o ratas que roen las cintas o discos flexibles.
2. errores de Hardware o Software: Mal funcionamiento de la CPU, discos o cintas ilegibles, errores de telecomunicación o errores en el programa.
3. Errores Humanos: Entrada incorrecta de datos, mal montaje de las cintas o el disco, ejecución incorrecta del programa, perdida de cintas o discos.
La mayoría de estas causas se pueden enfrentar con el mantenimiento de los respaldos adecuados; de preferencia, en un lugar alejado de los datos originales.
Un problema más interesante es que hacer con los intrusos. Estos tienen dos variedades. Los intrusos pasivos solo desean leer archivos que no están autorizados a leer. Los intrusos activos son más crueles: Desean hacer cambios no autorizados a los datos. Si se desea diseñar un sistema seguro contra los intrusos, es importante tener en cuenta el tipo de intruso con el que se desea tener protección. Algunas de las categorías comunes son:
1. Curiosidad casual de usuarios no técnicos. Muchas personas tienen en sus escritorios terminales para sistemas con tiempo compartido y, por la naturaleza humana, algunos de ellos leerán el correo electrónico de los demás u otros archivos, si no existen barreras en frente de ellos. Por ejemplo la mayoría de los sistema UNÍS tienen pre definido que todos los archivos se pueden leer de manera pública.
2. Conocidos husmeando. Algunos estudiantes, programadores de sistemas, operadores y demás personal técnico consideran como un reto personal romper la seguridad del sistema de cómputo local. A menudo son muy calificados y están dispuestos a invertir una cantidad sustancial de su tiempo en este esfuerzo.
3. Un intento deliberado de hacer dinero. Algunos programadores en banco han intentado penetrar un sistema bancario con el fin de robarle al banco. Los esquemas han variado desde cambiar el software para truncar y no redondear el interés, para quedarse con una pequeña fracción de dinero, hasta sacar dinero de las cuentas que no se han utilizado en años o el “correo negro” .
4. Espionaje comercias o militar. El espionaje indica un intento serio y fundamentado por parte de un competidor u otro país para robar programas, secretos comerciales, patentes, tecnología, diseño de circuitos, planes de comercialización, etc. A menudo, este intento implica la cobertura de cables o el levantamiento de antenas hacia la computadora con el fin de recoger su radiación electromagnética.

Seguridad Interna y Externa
La seguridad interna está relacionada a los controles incorporados al hardware y al Sistema Operativo para asegurar los recursos del sistema.
La seguridad externa está compuesta por la seguridad física y la seguridad operacional. La seguridad física incluye la protección contra desastres (como inundaciones, incendios, etc.) y protección contra intrusos.

Seguridad Operacional
La seguridad operacional consiste en varias políticas y procedimientos implementados por el administrador del sistema de computación.
Mediante la autorización se determina qué acceso se permite y a qué entidad.
Como punto crítico se destaca la selección del personal y la asignación del mismo. Generalmente se dividen responsabilidades, de esta manera un operario no debe conocer la totalidad del sistema para cumplir con esas responsabilidades.
Se deben instrumentar diversos controles, y el personal debe saber de la existencia de dichos controles, pero desconocer cuáles son, para reducir la probabilidad de que intrusos puedan evadirlos.

Protección. Metas de la protección
Existen varios mecanismos que pueden usarse para asegurar los archivos, segmentos de memoria, CPU, y otros recursos administrados por el Sistema Operativo. 
Por ejemplo, el direccionamiento de memoria asegura que unos procesos puedan ejecutarse solo dentro de sus propios espacios de dirección. El timer asegura que los procesos no obtengan el control de la CPU en forma indefinida.
La protección se refiere a los mecanismos para controlar el acceso de programas, procesos, o usuarios a los recursos definidos por un sistema de computación. Seguridad es la serie de problemas relativos a asegurar la integridad del sistema y sus datos.
Hay importantes razones para proveer protección. La más obvia es la necesidad de prevenirse de violaciones intencionales de acceso por un usuario. Otras de importancia son, la necesidad de asegurar que cada componente de un programa, use solo los recursos del sistema de acuerdo con las políticas fijadas para el uso de esos recursos.
Un recurso desprotegido no puede defenderse contra el uso no autorizado o de un usuario incompetente. Los sistemas orientados a la protección proveen maneras de distinguir entre uso autorizado y desautorizado.

Mecanismos y Políticas
El rol de la protección es proveer un mecanismo para el fortalecimiento de las políticas que gobiernan el uso de recursos. Tales políticas se pueden establecer de varias maneras, algunas en el diseño del sistema y otras son formuladas por el administrador del sistema. Otras pueden ser definidas por los usuarios individuales para proteger sus propios archivos y programas. 
Las políticas son diversas, dependen de la aplicación y pueden estar sujetas a cambios a lo largo del tiempo. 
Un principio importante es la separación de políticas de los mecanismos. ‘Los mecanismos determinan cómo algo se hará. Las políticas deciden que se hará’.
La separación es importante para la flexibilidad del sistema.

Vigilancia
La vigilancia se compone de la verificación y la auditoria del sistema, y la identificación de usuarios. En la vigilancia se utilizan sistemas muy sofisticados, a tal punto, que a veces pueden surgir problemas en la autentificación generando un rechazo al usuario legítimo.

Monitoreo de amenazas
Una manera de reducir los riesgos de seguridad es tener rutinas de control en el sistema operativo para permitir o no el acceso a un usuario. Estas rutinas interactúan con los programas de usuario y con los archivos del sistema. De esta manera, cuando un usuario desea realizar una operación con un archivo, las rutinas determinan si se niega o no el acceso y en caso de que el mismo fuera permitido devuelven los resultados del proceso.
Además las rutinas de control permiten detectar los intentos de penetración al sistema y advertir en consecuencia.

Amplificación
Como ya dijimos, los programas de vigilancia interactúan con los programas de usuario y los archivos del sistema. A veces estos programas (los primeros) requieren de más derechos de acceso de los que posee el usuario para realizar una operación determinada. Esto se conoce como amplificación.
Protección por contraseña
Existen tres clases principalmente de elementos que permiten establecer la identidad de un usuario:
  • Algo sobre las personas. Esto incluye huellas digitales, reconocimiento de voz, fotografía y firmas. 
  • Algo poseído por la persona. Esto incluye distintivos, tarjetas de identificación y llaves. 
  • Algo conocido por el usuario. Esto incluye contraseñas, nombre de la suegra, combinación de cerraduras. El esquema de autentificación más común es la simple protección por contraseña. El usuario elige una palabra que se le viene a la memoria, y la tipea de inmediato para ganar admisión al sistema de computación.
    Muchos sistemas no muestran la contraseña tal como ha sido ingresada (mostrar asteriscos en lugar de letras).
    La protección por contraseña es un esquema débil. En el sentido de que los usuarios tienden a elegir contraseñas fáciles de recordar. Entonces alguien que conoce al usuario podría intentar ingresar al sistema usando nombres de gente que la persona conoce. Esto puede resultar en una violación de la seguridad por los intentos repetitivos de ingreso.
    Algunos sistemas usan contraseñas cortas lo que facilita la conformación rápida de la lista de todas las posibles combinaciones. Los sistemas actuales utilizan contraseñas largas para frenar tales intentos de penetración.
Auditoría
La auditoria normalmente es realizada en sistemas manuales “después del hecho”. Los auditores son llamados periódicamente para examinar las transacciones recientes de una organización y para determinar si ha ocurrido actividad fraudulenta. 
El registro de auditoria es un registro permanente de acontecimientos de importancia que ocurren en el sistema de computación. Se produce automáticamente cada vez que ocurren los eventos y es almacenado en un área protegida del sistema. 
Las auditorias periódicas prestan atención regularmente a problemas de seguridad; las auditorias al azar ayudan a detectar intrusos.

Controles de acceso
Los derechos de acceso definen qué acceso tienen los sujetos sobre los objetos. Los objetos son entidades que contienen información, pueden ser físicos o abstractos. Los sujetos acceden a los objetos, y pueden ser usuarios, procesos, programas u otras entidades. 
Los derechos de accesos más comunes son: acceso de lectura, acceso de escritura y acceso de ejecución. Estos derechos pueden implementarse usando una matriz de control de acceso.

Matriz de acceso
El modelo de protección del sistema se puede ver en forma abstracta como una matriz, la matriz de acceso.Las filas de la matriz representan dominios (o sujetos) y las columnas representan objetos. Las entradas de la matriz consisten en una serie de derechos de acceso. Por ejemplo, la entrada access(i,j)define el conjunto de operaciones que un proceso, ejecutándose en el dominio Di, puede invocar sobre un objeto Oj.

                                   Objeto
Dominio
F1
F2
F3
Lector  de tarjeta
Impresora
D1
Read

Read


D2



Read
Print
D3

Read
Execute


D4
Read Write

Read write



Políticas
El esquema de matriz de acceso provee el mecanismo para especificar una variedad de políticas. Se debe asegurar que un proceso que se ejecuta en el dominio Di puede acceder sólo a aquellos objetos especificados en la fila i.
Las decisiones de política concernientes a la protección pueden implementarse por la matriz de acceso. Las decisiones políticas definen qué derechos deben estar incluidos en las entradas (i,j). A veces decide el dominio de cada proceso ejecutable. Esta última política es generalmente decidida por el sistema operativo.
Los usuarios normalmente deciden el contenido de las entradas de la matriz de acceso. Cuando un usuario crea un nuevo objeto Oj, la columna Oj es agregada a la matriz de acceso con las entradas de inicialización apropiadas.

Criptografía 
La criptografía es usada para la transformación de datos para hacerlos incomprensibles para todos, excepto para el usuario destinatario. El problema de la privacidad tiene relación con la prevención de la no autorización para la extracción de información desde un canal de comunicación. Los problemas de autentificación están relacionados con la prevención contra intrusos que intentan modificar una transmisión o insertar falsos datos dentro de una transmisión. Los problemas de disputa están relacionados con la providencia de reserva de un mensaje con prueba legal de la identidad enviada.

Sistema de privacidad criptográfico
En un sistema de privacidad criptográfico, el remitente desea transmitir cierto mensaje no cifrado a un receptor legítimo, la transmisión ocurre sobre un canal inseguro asume ser monitoreado o grabado en cinta por un intruso.
El remitente pasa el texto a una unidad de encriptación que transforma el texto a un texto cifrado o criptograma; el mismo no es entendible por el intruso. El mensaje es transmitido entonces, sobre un canal seguro. Al finalizar la recepción el texto cifrado pasa a una unidad de descripción que regenera el texto.

Criptoanálisis
Criptoanálisis es el proceso de intentar regenerar el mensaje desde el texto cifrado pero sin conocimiento de las claves de encriptación. Esta es la tarea normal de los intrusos. Si el intruso o criptoanalista no puede determinar un mensaje desde el texto cifrado (sin la clave), entonces el sistema de criptografiado es seguro.

Sistemas de clave pública
Un sistema criptográfico de clave pública es tan seguro como su clave. La distribución de las claves debe ser manejada sobre canales altamente seguros. Esto suele consumir mucho tiempo. A veces, tales canales de seguridad no están disponibles.
Los sistemas de clave pública no tienen tal problema en la distribución de la clave. En el sistema criptográfico convencional el cifrado y descifrado están íntimamente relacionados. Estos sistemas usan una clave encriptada, E, y una clave descifrado, D, de manera que no es computacionalmente viable (dentro de un tiempo razonable) determinar E a partir de D.
De esta forma, E puede ser hecha pública sin comprometer la seguridad de D. Esto simplifica el problema de la distribución de la clave. Cada usuario genera una clave de cifrado y una de descifrado, la clave de cifrado está hecha pública y la clave cifrada se mantiene secreta. Así cualquiera puede enviar un mensaje encriptado a un usuario particular (porque la clave de cifrado es pública), pero solo aquellos usuarios pueden descifrar el mensaje (porque la clave de descifrado es privada). E es llamada una clave pública y D es llamada una clave privada.

Shell

Shell (intérprete de comandos):
El sistema operativo es el código que realiza las llamadas al sistema. Los editores, compiladores, ensambladores, enlazadores e intérpretes de comandos definitivamente no son parte del sistema operativo, aunque son importantes y útiles. El Shell es el intérprete de comandos, a pesar de no ser parte del sistema operativo, hace un uso intenso de muchas características del sistema operativo y por tanto sirve como un buen ejemplo de la forma en que se pueden utilizar las llamadas al sistema. También es la interfaz primaria entre un usuario situado frente a su terminal y el sistema operativo.
Cuando algún usuario entra al sistema, un "shell" se inicia. El shell tiene la terminal como entrada y como salida estándar. Este da inicio al teclear solicitud de entrada, carácter como un signo de pesos, el cual indica al usuario que el shell está esperando un comando. En MS-DOS normalmente aparece la letra de la unidad, seguida por dos puntos (:), el nombre del directorio en que se encuentra y por último el signo de "mayor que" (>). Esto es: C:\>


Llamadas al sistema
En informática, llamada al sistema (en inglés system call) es el mecanismo usado por una aplicación para solicitar un servicio al sistema operativo.

Mecanismo
Las llamadas al sistema comúnmente usan una instrucción especial de la CPU que causa que el procesador transfiera el control a un código privilegiado, previamente especificado por el mismo código. Esto permite al código privilegiado especificar donde va a ser conectado así como el estado del procesador.
Cuando una llamada al sistema es invocada, la ejecución del programa que invoca es interrumpida y sus datos son guardados, normalmente en su PCB (Bloque de Control de Proceso del inglés Process Control Block), para poder continuar ejecutándose luego. El procesador entonces comienza a ejecutar las instrucciones de código de alto nivel de privilegio, para realizar la tarea requerida. Cuando esta finaliza, se retorna al proceso original, y continúa su ejecución. El retorno al proceso demandante no obligatoriamente es inmediato, depende del tiempo de ejecución de la llamada al sistema y del algoritmo de planificación de CPU.

Gestión de procesos
Un proceso es simplemente, un programa en ejecución que necesita recursos para realizar su tarea: tiempo de CPU, memoria, archivos y dispositivos de E/S. El SO es el responsable de:
  • Crear y destruir los procesos. 
  • Parar y reanudar los procesos. 
  • Ofrecer mecanismos para que se comuniquen y sincronicen. 
La gestión de procesos podría ser similar al trabajo de oficina. Se puede tener una lista de tareas a realizar y a estas fijarles prioridades alta, media, baja por ejemplo. Debemos comenzar haciendo las tareas de prioridad alta primero y cuando se terminen seguir con las de prioridad media y después las de baja. Una vez realizada la tarea se tacha. Esto puede traer un problema que las tareas de baja prioridad pueden que nunca lleguen a ejecutarse. y permanezcan en la lista para siempre. Para solucionar esto, se puede asignar alta prioridad a las tareas más antiguas.

Operaciones con Archivos
Las llamadas más comunes al sistema relacionadas con los archivos son:
  • Create (crear): el archivo se crea sin datos. 
  • Delete (eliminar): si el archivo ya no es necesario debe eliminarse para liberar espacio en disco. Ciertos S. O. eliminan automáticamente un archivo no utilizado durante “n” días. 
  • Open (abrir): antes de utilizar un archivo, un proceso debe abrirlo. La finalidad es permitir que el sistema traslade los atributos y la lista de direcciones en disco a la memoria principal para un rápido acceso en llamadas posteriores. 
  • Close (cerrar): cuando concluyen los accesos, los atributos y direcciones del disco ya no son necesarios, por lo que el archivo debe cerrarse y liberar la tabla de espacio interno. 
  • Read (leer): los datos se leen del archivo; quien hace la llamada debe especificar la cantidad de datos necesarios y proporcionar un buffer para colocarlos. 
  • Write (escribir): los datos se escriben en el archivo, en la posición actual. El tamaño del archivo puede aumentar (agregado de registros) o no (actualización de registros). 
  • Append (añadir): es una forma restringida de “write”. Solo puede añadir datos al final del archivo. 
  • Seek (buscar): especifica el punto donde posicionarse. Cambia la posición del apuntador a la posición activa en cierto lugar del archivo. 
  • Get attributes (obtener atributos): permite a los procesos obtener los atributos del archivo. 
  • Set attributes (establecer atributos): algunos atributos pueden ser determinados por el usuario y modificados luego de la creación del archivo. La información relativa al modo de protección y la mayoría de las banderas son un ejemplo obvio. 
  • Rename (cambiar de nombre): permite modificar el nombre de un archivo ya existente.

Directorios

Los directorios generalmente, son utilizados por los S. O. para llevar un registro de los archivos
En muchos sistemas son a su vez también archivos.

Sistemas Jerárquicos de Directorios
El directorio contiene un conjunto de datos por cada archivo referenciado.
Una posibilidad es que el directorio contenga por cada archivo referenciado
El nombre.
Sus atributos.
Las direcciones en disco donde se almacenan los datos.
Otra posibilidad es que cada entrada del directorio contenga:
El nombre del archivo.
Un apuntador a otra estructura de datos donde se encuentran los atributos y las direcciones en disco.

Al abrir un archivo el S. O.:
Busca en su directorio el nombre del archivo.
Extrae los atributos y direcciones en disco.
Graba esta información en una tabla de memoria real.
Todas las referencias subsecuentes al archivo utilizarán la información de la memoria principal.
El número y organización de directorios varía de sistema en sistema:
Directorio único: el sistema tiene un solo directorio con todos los archivos de todos los usuarios (ver Figura 4.1)
Un directorio por usuario: el sistema habilita un solo directorio por cada usuario (ver Figura 4.2).

Un árbol de directorios por usuario: el sistema permite que cada usuario tenga tantos directorios como necesite, respetando una jerarquía general (ver Figura 4.3).


Operaciones con Directorios
Las llamadas al sistema permitidas para el manejo de los directorios tienen variación de sistema a sistema. Las más comunes son las siguientes:
  • Create (crear): se crea un directorio vacío. 
  • Delete (eliminar): se elimina un directorio, que debe estar vacío. 
  • Opendir (abrir directorio): se pueden leer los directorios: Antes de poder leer un directorio, éste debe ser abierto. 
  • Closedir (cerrar directorio): cuando se ha leído un directorio, éste debe ser cerrado para liberar el espacio correspondiente de la tabla interna. 
  • Readdir (leer directorio): regresa la siguiente entrada en un directorio abierto, sin importar el tipo de estructura de directorios que se utilice. 
  • Rename (cambiar de nombre): cambia el nombre de un directorio de manera similar al cambio para archivos. 
  • Link (ligar): es una técnica que permite que un archivo aparezca en más de un directorio: Especifica un archivo existente y el nombre de una ruta de acceso. Crea un enlace del archivo ya existente con el nombre especificado en la ruta de acceso. 
  • Unlink (desligar): se elimina una entrada del directorio: 
Si el archivo que se desea desligar aparece solo en un directorio (el caso normal): Se elimina del sistema de archivos. Si el archivo que se desea desligar, está presente en varios directorios: Solo se elimina la ruta de acceso especificada. Las demás rutas permanecen.

API WIN 32 WINDOWS

La interfaz de programación de aplicaciones de Windows, cuyo nombre en inglés es Windows API (Windows application programming interface), es un conjunto de funciones residentes en bibliotecas (generalmente dinámicas, también llamadas DLL por sus siglas en inglés, término usado para referirse a éstas en Windows) que permiten que una aplicación corra bajo un determinado sistema operativo.

Para comprender lo que es Win32 API, creemos que es necesario desglosar el nombre: Win32 y API.
En realidad, Win32 significa "Windows 32 bits". En otras palabras, hace referencia a todas las plataformas de 32 bits del sistema operativo Windows: Windows NT, Windows 95, Windows 98, Windows CE. Ahora que ya entendimos lo que es Win32, veamos lo que es API.
API viene del inglés Application Programming Interface o, lo que significa en español, Interfaz de Programación de Aplicaciones. Quizás, para una persona que nunca ha escuchado hablar sobre una interfaz, el nombre no diga mucho, pero simplemente es un conjunto de elementos de programación que son entregados por Microsoft (en el caso de Win32) para desarrollar aplicaciones. Cuando hablamos de elementos de programación, hablamos de funciones, tipos de datos y de otros elementos que escapan a esta introducción y que nombrarlos en esta parte sólo haría de esta introducción algo confuso.
En resumen, Win32 API es un conjunto de elementos de programación, escritos en lenguaje C, para el desarrollo de aplicaciones Windows y quien haya desarrollado alguna vez alguna aplicación o haya visto en ejecución una aplicación Windows, se dará cuenta que para desarrollar la aplicación se necesitan tres elementos básicos: uno que permita desarrollar la interfaz de usuario, otro que permita gestionar elementos como memoria y archivos, más otro que permita acceder a dispositivos como monitor e impresora. Existen muchos otros elementos, entre ellos están los que nos permiten acceder a bases de datos, mientras que otros nos permiten acceder a una red de computadores.
Los tres elementos básicos tienen su historia y vienen con Windows. Ellos son:
  • USER: Provee los mecanismos para la interfaz de usuario. En este módulo se encuentran las funciones necesarias para crear ventanas y botones. 
  • GDI: Del inglés Graphic Device Interface (Interfaz de Dispositivos Gráficos) es el módulo que permite el acceso a dispositivos como Impresoras, Monitores y a otros elementos gráficos como brochas, lápices y pinceles para "pintar" la pantalla. 
  • KERNEL: Quizás es el más complejo de todos y el que administra la mayoría de los objetos que un usuario no ve, pero que si no estuvieran, el usuario no podría ver a sus aplicaciones correr. Es decir, este módulo se encarga de los procesos, hilos, memoria, sistema de archivos. Todos estos elementos son controlados por el kernel.
Si bien a esta interfaz se le llama Win32 API, creemos que debería llamarse Win32 APIS (con "S" final), ya que no todas las funciones presentes en Windows NT, están disponibles en Windows 9x. En cambio, Windows CE, tiene funciones que no están ni en Windows NT, ni en Windows 9x. Lo que sí podemos decir es que todas parten de la misma base y esas diferencias entre las API de cada versión de Windows es comprensible ya que Windows NT tiene un objetivo totalmente distinto al de Windows 95/98, mientras que Windows CE tiene otro objetivo. Además, el hecho que partan todas estas API's de una misma base hace que sea muy fácil portar, por ejemplo, a Windows NT las aplicaciones escritas para Windows 95.

NOTA: Existe una interfaz llamada Win32s cuyo objetivo fue dar a las aplicaciones de Windows 3.x un acceso a un grupo restringido de funciones de Win32. En realidad, lo que hacia era llamar a una función Win32 pero la "traducía" a una función Win16. En este sitio web no consideraremos Win32s.


Daniel Martinez, Matias Fiori, Gerardo Zamer (2 "B")

Estructura de los Sistemas Operativos

Se considera la organización interna de los S. O. y conforme a ella se los clasifica de la siguiente manera, destacándose sus principales características:

Sistemas monolíticos:
  • Es muy común: no existe estructura propiamente dicha o es mínima. 
  • El S. O. es una colección de procedimientos que se pueden llamar entre si.
  • Cada procedimiento tiene una interfaz bien definida en términos de parámetros y resultados.
  • Para ejecutar los servicios del S. O. (llamadas al sistema).
    -    Se solicitan colocando los parámetros en lugares bien definidos (registros o pilas).
    -  Se ejecuta una instrucción especial de trampa: llamada al núcleo o llamada al supervisor.
    -  La instrucción cambia la máquina del modo usuario al modo núcleo (o modo supervisor).
    -     Se transfiere el control al S. O.
    -   El S. O. examina los parámetros de la llamada para determinar cuál de ellas se desea realizar.
    -  El S. O. analiza una tabla que contiene en la entrada “k” un apuntador al procedimiento que realiza la “k-ésima” llamada al sistema:
         -     Identifica al procedimiento de servicio llamado.
    -     La llamada al sistema termina y el control regresa al programa del usuario. 
Sistemas con capas:
  • Es una generalización del modelo de estructura simple para un sistema monolítico. 
  • Consiste en organizar el s. o. como una jerarquía de capas, cada una construida sobre la inmediata inferior. 
5 - Operador
4 - Programas del Usuario
3 - Control de Entrada - Salida
2 - Comunicaciones Operador - Proceso
1 - Administración de la Memoria y del Disco
0 - Asignación del Procesador y Multiprogramación
Tabla 1.1: Estructura del S.O. en capas "THE".

El primer sistema con este esquema fue el “THE” (Holanda - Dijkstra -1968).

“THE”: Technische Hogeschool Eindhoven.
  1. Capa 0:
    - Trabaja con la asignación del procesador.
    - Alterna entre los procesos cuando ocurren las interrupciones o expiran los cronómetros.
    - Proporciona la multiprogramación básica.
  2. Capa 1:
    - Administra la memoria.
    - Asegura que las páginas (porciones de memoria) requeridas de los procesos lleguen a memoria cuando fueran necesarias.
  3. Capa 2:
    - Administra la comunicación entre cada proceso y la consola del operador.
    - Por sobre esta capa, cada proceso tiene su propia consola de operador.
  4. Capa 3:
    - Controla los dispositivos de e / s y almacena en buffers los flujos de información entre ellos.
    - Por sobre la capa 3 cada proceso puede trabajar con dispositivos abstractos de e / s en vez de con dispositivos reales.
  5. Capa 4:
    - Aloja los programas del usuario.
    - Los programas. del usuario no tienen que preocuparse por el proceso, memoria, consola o control de e / s.
  6. Capa 5:
    - Localiza el proceso operador del sistema.
Una generalización mas avanzada del concepto de capas se presento con “Multics” (MIT, Bell Labs y General Electric):
  • “Multics”: multiplexed information and computing service. 
  • Presenta una estructura en anillos concéntricos, siendo los interiores los privilegiados. 
  • Un procedimiento de un anillo exterior, para llamar a un procedimiento de un anillo interior, debe hacer el equivalente a una llamada al sistema.
Máquinas virtuales:
Se separan totalmente las funciones de multiprogramación y de máquina extendida.

Existe un elemento central llamado monitor de la máquina virtual que:
  • Se ejecuta en el hardware. 
  • Realiza la multiprogramación. 
  • Proporciona varias máquinas virtuales a la capa superior.
Las máquinas virtuales instrumentan copias “exactas” del hardware simple, con su modo núcleo / usuario, e / s, interrupciones y todo lo demás que posee una máquina real.
Pueden ejecutar cualquier S. O. que se ejecute en forma directa sobre el hardware.
Las distintas máquinas virtuales pueden ejecutar distintos S. O. y en general así lo hacen.
Soportan periféricos virtuales.
Ejemplo de S. O. representativo de esta estructura: “VM/370” de IBM.


Las m. v. generalmente utilizaran, entre otros, el S. O. “CMS”: Conversational Monitor System. 
Cuando un programa “CMS” ejecuta una llamada al sistema:
La llamada es atrapada por el S. O. en su propia m. v.; no pasa directamente al “VM/370”. 
“CMS” proporciona las instrucciones de e / s en hardware para la lectura del disco virtual o lo necesario para efectuar la llamada. 
“VM/370” atrapa estas instrucciones de e / s y las ejecuta sobre el hardware verdadero. 

Modelo cliente - servidor:
Una tendencia en los S. O. modernos es la de explotar la idea de mover el código a capas superiores y mantener un núcleo mínimo, de manera similar al “VM/370”.
Implantar la mayoría de las funciones del S. O. en los procesos del usuario.
Para solicitar un servicio (por ej.: lectura de un bloque de cierto archivo) según el modelo cliente - servidor.

El proceso del usuario (proceso cliente) envía la solicitud a un proceso servidor:
Realiza el trabajo y regresa la respuesta.
El núcleo controla la comunicación entre los clientes y los servidores.
Se fracciona el S. O. en partes, cada una controlando una faceta:
Servicio a archivos, a procesos, a terminales, a memoria, etc., cada parte pequeña y más fácilmente controlable.
Los servidores se ejecutan como procesos en modo usuario:
  • No tienen acceso directo al hardware. 
  • Se aíslan y acotan más fácilmente los problemas. 
Se adapta para su uso en los sistemas distribuidos.

Si un cliente se comunica con un servidor mediante mensajes:
  • No necesita saber si el mensaje se atiende localmente o mediante un servidor remoto, situado en otra máquina conectada. 
  • Envía una solicitud y obtiene una respuesta. 
Algunas funciones del S. O., por ej. el cargado de comandos en los registros físicos del dispositivo de e / s, presentan problemas especiales y distintas soluciones:
  • Ejecución en modo núcleo, con acceso total al hardware y comunicación con los demás procesos mediante el mecanismo normal de mensajes. 
  • Construcción de un mínimo de mecanismos dentro del núcleo manteniendo las decisiones de política relativas a los usuarios dentro del espacio del usuario. 

Exokernels:
En la capa mas baja, ejecutanse en modo de kernel, esta un programa llamado exokernel. Su labor consiste en asignar recursos a las maquinas virtuales y luego examinar cualquier intento de usarlos para garantizar que ninguna maquina utilice los recursos de otra. Cada maquina virtual en nivel virtual puede ejecutar su propio sistema operativo.La ventaja del modelo de exokernel es que ahorra una capa de mapeo o correpondencia.


Leonela Cena, Alejandro Leyba ( 2 "B")