Prévia do material em texto
SISTEMAS OPERACIONALES Mateus Buogo 2SISTEMAS OPERACIONALES ÍNDICE CENTRO UNIVERSITÁRIO UNIFTEC Rua Gustavo Ramos Sehbe n.º 107. Caxias do Sul/RS, Brasil RECTOR Claudino José Meneguzzi Júnior PRORRECTORA ACADÉMICA Débora Frizzo PRORRECTOR ADMINISTRATIVO Altair Ruzzarin DIRECTORA DE EDUCACIÓN A DISTANCIA (EAD) Lígia Futterleib Desarrollado por el Núcleo de Educación a Distancia (EAD) Diseñadora Educativa Sabrina Maciel Diagramación, Ilustración y Alteración de Imagen Gabriel Olmiro de Castilhos, Jaimerson Cabral Traductora Paula Verónica L. S. Feiten, Renata Meneghel INTRODUCCIÓN 3 SISTEMAS OPERACIONALES 4 El Sistema Operacional 5 Historia 5 Tipos de Sistemas Operacionales 8 Estructura de los Sistemas Operacionales 8 System Call 10 Modos de Acceso 11 Síntesis Final 12 GESTIÓN DE PROCESO 14 La Gestión de Procesos 15 Planificación de Procesos 19 Turnaround 22 Síntesis Final 29 THREADS 31 Los Threads 32 ¿Por qué usar Threads? 34 Síntesis Final 34 COMUNICACIÓN ENTRE PROCESOS 36 La Comunicación 37 Regiones Críticas 38 Síntesis Final 42 DEADLOCK 44 El Deadlock 45 Síntesis Final 50 GESTIÓN DE MEMORIA 52 La Gestión de Memoria 53 Memoria RAM 55 Buffering 56 Mono programación sin cambio de procesos o paginación 57 Multiprogramación 57 Síntesis Final 62 GESTIÓN DE DISPOSITIVOS DE ENTRADA Y SALIDA 64 Dispositivos de Entrada y de Salida 65 Conceptos básicos del hardware 66 Chipset 67 Módulos de Entrada y de Salida 67 Drivers de Dispositivos 68 DMA 69 Discos Rígidos 70 Síntesis Final 72 SISTEMA DE ARCHIVOS 74 Los Sistema de Archivos 75 Archivo 76 Formatos 78 Directorios 78 Intercambio de Archivos 79 Trabas en Archivos y Semántica de Acceso 80 Control de Acceso 81 Sistemas de Archivos NTFS y EXT 81 Síntesis Final 83 EL LINUX 85 Historia 86 Entendiendo el sistema 88 Estructura del Sistema 89 Kernel 90 Directorios 91 El famoso ROOT 93 Seguridad en el Linux 94 Síntesis Final 97 REFERENCIAS 99 3SISTEMAS OPERACIONALES INTRODUCCIÓN Algún día usted ya se preguntó ¿cómo tantos aparatos tecnológicos son administrados? Ya se preguntó ¿cómo su videojuego funciona o cómo la computadora de a bordo de su coche controla tantos sensores? Usted sabe ¿cómo el traje del Hombre de Hierro consigue administrar tantas armas? La respuesta para todas esas preguntas es “Sistemas Operacionales”. Ellos están diseminados en varios disposi- tivos que ni podemos imaginar. Al término de esta materia, ustedes estarán con la mente más abierta y entenderán el motivo por el cual los sistemas dominan el mundo. Vamos a “surfear” entre sus GESTIÓNs y entender cómo todo es procesado y accedido. Al final, ustedes sabrán, no apenas cómo ellos funcionan, pero tendrán la capacidad de abstraer conceptos y aplicarlos en su día a día, al final, ¡de nada sirve un conocimiento que no puede ser aplicado! Vamos, ¡bienvenidos al mundo de los Sistemas Ope- racionales! 4SISTEMAS OPERACIONALES SISTEMAS OPERACIONALES ¿Sabía que los sistemas operacionales dominan el mundo y usted ni lo sabía? Sin ellos nuestra vida sería vacía, sin diversión y mucho más difícil. ¿Estoy exagerando? Vamos a desvelar los misterios de los Sistemas Operacionales, y usted sacará sus propias conclusiones. Algún día usted ya se preguntó ¿cómo tantos aparatos tecnológicos son administrados? Ya se preguntó ¿cómo su videojuego funciona o cómo la computadora de a bordo de su coche controla tantos sensores? Usted sabe ¿cómo el traje del Hombre de Hierro consigue administrar tantas armas? La respuesta para todas esas preguntas es “Sistemas Operacionales”. Ellos están diseminados en varios dispositivos que ni podemos imaginar. Al término de esta materia, ustedes estarán con la mente más abierta y entenderán el motivo por el cual los sistemas dominan el mundo. Desvendaremos los misterios de los Sistemas Operacionales, y usted sacará sus propias conclusiones. 5SISTEMAS OPERACIONALES Vamos a “surfear” entre sus GESTI- ÓNs y entender cómo todo es procesado y accedido. Al final, ustedes sabrán, no apenas cómo ellos funcionan, pero ten- drán la capacidad de abstraer conceptos y aplicarlos en su día a día, al final, ¡de nada sirve un conocimiento que no puede ser aplicado! Vamos, bienvenidos al mundo de los Sistemas Operacionales! El Sistema Operacional Actualmente, existen muchos sis- temas operacionales, los cuales son de- sarrollados con finalidades específicas, variando su complejidad y función. Un sis- tema operacional no está preso y restricto a una computadora, podemos tener siste- mas operacionales utilizados en máquinas industriales, cajero electrónico bancarias, robot, dispositivos médicos, máquinas de café, heladeras, coches, entre tantos otros. La principal función de un siste- ma operacional es la administración de recursos, siempre recuerde eso, un SO es responsable por administrar recursos de hardware tales como procesador, memo- ria, red, sonido, vídeo, almacenaje, entre otros. Otra función del SO es hacer la interface del hardware para el usuario, dejarlo transparente, facilitar la utilización del equipo, permitir que exista interacción entre el usuario y el hardware, de forma muy sencilla. Acostumbro a comparar el sistema operacional a un maestro de una orquesta. Pues, cada músico de la orquesta represen- ta un recurso de hardware que el sistema puede acceder. De esa manera, para que todo ocurra bien y sin problemas, debe existir harmonía entre todos los músicos (recursos), para que cada uno toque su instrumento de la manera correcta, a la hora cierta (intercambio de recursos) y la música sea creada. El SO orquesta todos los accesos a los recursos, pudiendo com- partirlos entre los procesos. Pero, antes de entender cómo ellos funcionan, estudiaremos un poco de la historia de ellos. Historia No nos alargaremos mucho en la his- toria de los sistemas operacionales, pues conocer la historia es muy interesante, pero en el contexto de tecnología, todo evolucio- na muy rápido y paradigmas son quebrados y tecnologías abandonadas, pero algunos conceptos aún son inmutables desde la dé- cada de 1950. En el inicio, la computación era sin forma y vacía. Computadoras enormes sur- gieron en 1950 y tenían que ser operadas por personas. No existía un concepto de sistema operacional, todas las operaciones eran realizadas en el propio hardware, de forma mecánica y sin ninguna diversión, apenas trabajo y más trabajo. Uno de los primeros sistemas fue el proyecto Mark I, de 1944, proyectado y desarrollado en conjunto entre IBM y la Univer- sidad de Harvard en EUA. En 1946, el gobierno americano presentó su compu- tadora electrónica digital, utilizada para cálculos militares, a la cual denominaron ENIAC (Electronic Numerical Integrator Analyzer and Computer). 6SISTEMAS OPERACIONALES ¿Notaron las fechas? La Segunda Guerra Mundial trajo un avance de tec- nología enorme. Infelizmente, la guer- ra hace que una corrida de tecnología empiece, donde el más actualizado lleva una enorme ventaja. Las primeras gran- des computadoras eran usadas para fines militares. Una curiosidad. ¿Saben el motivo por el cual llamamos a los errores de los sistemas de bug? Antiguamente las com- putadoras eran con válvulas. Entonces, ellos generaban mucho calor incandes- cente, lo que atraía insectos para dentro de las salas de las computadoras, al final, ellos adoran el calor de una ampolleta. Las válvulas eran sensibles y debían ser manoseadas con mucho cuidado, pero, los pobres insectos no sabían eso e iban corriendo, o mejor, volando hasta las válvulas y cuando tocaban en ellas, se quemaban. Así, cuando una válvula se quemaba, ¿qué era dicho? “¡Ocurrió un bug!”. En inglés, bug, significa insecto. Es por eso que hablamos que “ocurrió un bug” cuando ocurre algún error en el sistema. Un tiempo después, Von Neumann creó un nuevo concepto. Él inició los proyectos de sistemas computacionales basados en una arquitectura compuesta por tres elementos básicos, siendo: Proce- sador,Memoria y Dispositivos de Entrada y de Salida (I/O). Este concepto es apli- cado hasta los días de hoy, Von Neumann fue uno de los principales nombres de la era de la tecnología. Con un mismo har- dware, era posible efectuar varias tareas, sin necesitar alterar el hardware, como era hecho en las otras computadoras. En la estructura propuesta por Von Neumann, un mismo hardware tenía ca- pacidad para ejecutar diferentes tipos de tareas sin necesitar cualquier modifica- ción física, bastaba que una secuencia de instrucciones estuviera almacenada en la computadora. De esa manera, surgieron los conceptos de programas y computa- dora programable, junto con el concepto de programación de computadoras. De esa manera, fueron ocurriendo evoluciones en las computadoras y junto con ellas, los sistemas operacionales tam- bién evolucionaron. Podemos dividir las computadoras en 4 generaciones: Primera Generación • Generación de las Válvulas (Bugs) – 1937 hasta 1955 • Características: Existían muchas vál- vulas y después de horas de trabajo ellas paraban por sobrecalentamiento. Tenían un consumo de energía muy grande para mantener las válvulas. • Aplicación: Campo científico y mi- litar • Descripción: No había concepto de Sistema Operacional, todo el trabajo era realizado con lenguaje de máqui- na. En esta época surgió el lenguaje Asembly. Segunda Generación • Generación de los Transistores – 1955 hasta 1965. 7SISTEMAS OPERACIONALES • Características: La principal carac- terística era el menor consumo de energía y tamaño. • Aplicación: Área científica, militar, administrativa y gerencial. • Descripción: En esta generación surge el concepto de sistema ope- racional. Cuando el S.O. era único y vinculado a apenas una computado- ra, o sea, cada sistema creado rodaría solamente en una máquina X de la empresa Z, entonces, no era hecho en gran escala y sin gran soporte. El sistema era enyesado. Tercera Generación • Generación de los Circuitos Integra- dos – 1965 hasta 1975 • Características: Computadoras más compactas y rápidas, siendo que tam- bién consumían menos energía y es el inicio del desarrollo de Sistemas Operacionales. • Aplicación: Comercio y ramo Cien- tífico • Descripción: Las empresas que sobre- vivían del comercio empezaron a dar atención a las computadoras, que sólo eran usadas para cálculos científicos y de ingeniería. Luego, fue creada la Familia de Computadoras, que eran una serie de máquinas con la misma arquitectura, compartiendo el mismo conjunto de instrucciones, volviéndose compatibles e impulsando el desarrollo de aplicaciones. En esa misma época, un grupo de Científicos empezaron a desarrollar diversas herramientas importantes para la computación, entre los científicos, los que más se destacaron fueron Ken Thompson, que creó el Lenguaje B y Dennis Ri- tchie, que, a partir del Lenguaje B, creó el Lenguaje C, revolucionando toda la computación (gracias a ella, tenemos Java, PHP, C++, etc.). En ese tiempo, algunos de los científicos que se destacaron fueron Ken Thompson, como ya citado, por haber creado el Lenguaje B, y Dennis Ritchie que, a partir de ese Lenguaje (B), creó el Lenguaje C, revolucionando toda la computación. Cuarta Generación • Generación de los Microprocesa- dores • Características: Busca de procesa- dores más rápidos y miniaturización de los componentes • Aplicación: Uso Personal, Pequeñas y Grandes Empresas • Descripción: Con la popularización de las computadoras y la llegada de tecnologías que proporcionaron su miniaturización y baja de precio, las computadoras personales empiezan a ser cada vez más buscadas y sur- gieron los Sistemas Operacionales domésticos, con interfaces gráfi- cas y mucho más sencillas para ser utilizadas. Debido a las ideas del pasado, hoy, la informática es de la manera que la conocemos y, gracias a Jobs, Gates y Torvalds, llegamos a la evolución de la computación personal y libre. 8SISTEMAS OPERACIONALES Tipos de Sistemas Operacionales Como dijimos al inicio, existen muchos tipos de sistemas operacionales. Los agruparemos de acuerdo con algunas características para facilitar su entendi- miento y su estudio, comprendiendo sus aplicaciones. Sistemas Monotarea Los sistemas monotareas pueden ejecutar apenas una tarea por vez y nada más. Su gestión es más sencilla y consume menos recursos de hardware, puesto que apenas una tarea es ejecutada de cada vez. El sistema más famoso fue el MS-DOS. El hecho de ejecutar apenas una tarea por vez no quiere decir que son sis- temas malos. Pueden ser aplicados en ta- reas sencillas, que no demanden mucha capacidad de procesamiento, pudiendo ser utilizado en hardware más sencillos y baratos. Sistemas Multitareas Ellos vinieron para sustituir a los monoprogramables, son más complejos y eficientes. En los sistemas multipro- gramables podemos tener varios progra- mas dividiendo los mismos recursos. Las principales ventajas del uso de sistemas multiprogramables son el aumento de la productividad y la reducción de costos, pues hay el intercambio de los diversos recursos del sistema. Gracias a la invención de los sistemas multitareas, podemos disfrutar de todo el entretenimiento propuesto en nuestras computadoras, videojuegos y dispositivos similares. Sistemas de Multiprocesadores Si los sistemas multitareas ya nos proporcionan mucha diversión y eficiencia, los que soportan más de un procesador nos proporcionan mucha más velocidad para nuestra diversión y trabajo. Un sis- tema operacional capaz de administrar más de una unidad de procesamiento en un hardware específico, consigue obtener, de forma exponencial, la mejora de perfor- mance en la ejecución de innúmeras tareas. Estructura de los Sistemas Operacionales Antes de empezar a hablar de la estructura de los sistemas operacionales, hagamos una revisión rápida del hardwa- re. Esencialmente, el hardware está com- puesto por CPU, memoria, controladores de ratón y teclado, controlador de disco, controlador de vídeo y controladores de I/O, en general. El CPU es responsable por el proce- samiento de los procesos que están abier- tos en el sistema. La memoria RAM es responsable por hospedar los procesos que están aguardando para ser procesados y los datos de los usuarios que fueron requeridos al disco rígido. Los controladores de ratón y de te- clado envían interrupciones para que la CPU efectúe alguna tratativa o acción. Los controladores de vídeos son responsables 9SISTEMAS OPERACIONALES por la conexión gráfica de la computa- dora, llevando la imagen para la pantalla del usuario. Los controladores de discos administran el acceso físico a los discos rígidos y a la unidad de almacenaje. Por fin, los controlado- res generales de I/O conectan el mundo externo con la placa madre. Así, el sistema operacional es res- ponsable por volver transparente la capa de hardware para el usuario, o sea, él debe permitir que el usuario utilice la computa- dora sin que sea necesario preocuparse con la forma como el hardware funciona, así como, volver el hardware transparente es el principal objetivo del sistema operacional. Siempre que la computadora es conectada ocurre un proceso llamado bootstrapping. En ese modo, luego que la energía empieza a pasar por la placa madre, la BIOS de la computadora sube y efectúa pruebas básicas del hardware para verificar su integridad. En el caso de que ocurra algún pro- blema de verificación que impida el buen funcionamiento de la computadora, a par- tir del sistema operacional, el proceso de boot es abortado y algún error aparecerá en la pantalla. En el caso de que no sean verifica- das fallas de hardware, el proceso de boot ocurre normalmente y el sistema operacio- nal empieza a ser cargado del disco rígido o unidad de almacenaje, para la memoria RAM, donde será procesado y tendrá el poder de controlar toda la capa de har- dware, pudiendo acceder a los recursos. KernelEl primer archivo que es cargado en memoria RAM es el Kernel del siste- ma operacional. El sistema operacional es formado por algunos conjuntos de rutinas que proveen servicios para los usuarios, aplicaciones y también al propio sistema. Llamamos de núcleo del sistema o Kernel a ese conjunto de rutinas. El Kernel es la principal parte del sistema operacional. Él acumula innúme- ras funciones de gestión; hace la gestión de procesos, memoria, dispositivos de I/O, archivos, redes, entre tantos otros. Podemos afirmar que el Kernel es el res- ponsable por servir a los usuarios, dejando el hardware transparente, no solamente para los usuarios, pero también para las aplicaciones. 10SISTEMAS OPERACIONALES System Call Muy bien, el Kernel es responsable por el GESTIÓN total del sistema ope- racional y también del acceso a todos los recursos del hardware. Cada proceso o aplicación que necesita tener acceso a los recursos de hardware necesita “conversar” con el Kernel para conseguir comunicar- se con la capa de hardware. El sistema no permite que ningún proceso acceda directamente el hardware sin la interven- ción del Kernel, pues él posee todos los GESTIÓNs necesarios para controlar y organizar ese acceso. Una de las herramientas utilizadas por el Kernel son las System Calls, o Lla- madas de Sistema. Las System Calls son responsables por el intercambio de recursos de forma organizada y protegida, como protección de memoria o la monopolizaci- ón del procesador. El sistema debe impe- dir que los programas de usuario accedan directamente los recursos de hardware. Usted debe estar preguntándose: ¿Por qué los procesos y aplicaciones no pueden acceder directamente a los recursos de hardware?, pues hay una explicación muy sencilla para eso. Un programa mal desarrollado podría comprometer todo el sistema operacional causando grandes problemas. Un ejemplo bien sencillo, imagi- nemos que un programador cree que su programa es más importante que todos los otros y resuelve designar el recurso de la CPU, exclusivamente para él. ¿Qué ocurriría? Primero, el sistema trabaría, pues, junto con los procesos de los usuarios y de las aplicaciones, están en ejecución los procesos del sistema operacional. Al monopolizar el procesador para un úni- co proceso, todos los otros no ganarían derecho de uso de la CPU, luego, todo el sistema trabaría. Pero, seamos menos radicales. Suponiendo que el proceso no asigne todo el procesador para él, pero sí los recursos de audio de la computadora, entonces, en el caso de que el otro proceso necesite acceder al dispositivo de sonido, él no conseguirá y trabaría el programa e, incluso, el sistema. Monopolio en el sistema operacional no puede ocurrir. De esa manera, para acceder a las capas de hardware, los procesos y aplica- ciones se comunican con las System Calls y ellas administran el intercambio de los recursos, para que no haya monopolio en ninguna circunstancia, ya que eso puede comprometer todo el sistema operacional. Las system calls trabajan de forma muy estrecha con el Kernel, con el objetivo de garantizar toda la gestión y transparencia del hardware. 11SISTEMAS OPERACIONALES Modos de Acceso Como ya percibimos, el sistema ope- racional tiene que ser muy organizado para conseguir administrar todos los hardware y garantizar su buen funcionamiento, junto con aplicativos y programas que son ejecu- tados con él. Una técnica muy importante utilizada en los sistemas son los modos de accesos. Algunas instrucciones que pueden comprometer el sistema no pueden ser ac- cedidas por cualquier usuario o programa. Con el objetivo de proteger la inte- gridad del sistema, las instrucciones privi- legiadas no pueden ser accedidas por pro- grama de usuarios, siendo que solamente las instrucciones no privilegiadas están disponibles para los programas de usuarios. Esa división ocurre con los modos de acceso al sistema, siendo ellos, el modo de acceso usuario y el modo de acceso Kernel. Instrucciones muy específicas del sistema que pueden comprometer su funciona- miento, son ejecutadas solamente por los procesos del propio sistema, con system calls específicas, con privilegios en modo Kernel. Básicamente, el modo usuario de acceso consigue efectuar operaciones que no comprometen el sistema, ya, el modo Kernel ejecuta operaciones que impactan en la gestión del sistema, como asignación de memoria, alteración de orden de plani- ficación de procesos entre otros. Los modos de acceso contribuyen también para que ningún proceso asigne los recursos de forma monopólica, impidiendo el buen funcionamiento del sistema. Arquitecturas Los sistemas operacionales no son todos iguales. Cada uno es desarrollado de acuerdo con una finalidad específica y poseen una arquitectura singular. Es- tudiaremos, rápidamente, algunas de las arquitecturas más comunes. Arquitectura Monolítica La arquitectura monolítica es una de las más sencillas. Prácticamente, todo el código de desarrollo de esa estructura es asignado en apenas un bloque de progra- mación. El SO entero es ejecutado como un único programa en el modo núcleo. En este tipo de arquitectura el siste- ma y las rutinas pueden interactuar libre- mente unas con las otras. Es un sistema formado por varios procedimientos que son compilados separadamente y después unidos, formando un único y gran progra- ma ejecutable. La gran ventaja de esa arquitectura es su simplicidad para programación y también el alto desempeño que ellas pose- en, ya que no son peajes entre los recursos y todo es accedido mucho más rápido. Sin embargo, toda ventaja posee su desventaja. La desventaja principal de la arqui- tectura monolítica es que los niveles de funcionalidad no son bien separados. El 12SISTEMAS OPERACIONALES exceso de libertad vuelve al sistema muy vulnerable, o sea, en el caso de que ocur- ra cualquier problema en una parte del sistema, todo él será afectado y parará de funcionar correctamente. Arquitectura de Capas Muy bien, ya que dejar todo el sistema en un único bloque lo deja muy vulnerable, la solución es separarlos en capas. Esa arquitectura divide el sistema operacional en sistemas sobrepuestos unos a los otros. Cada módulo ofrece un con- junto de funciones que, a su vez, puede ser utilizado por otros módulos dentro del sistema operacional. La ventaja de la estructuración en capas es justamente lo opuesto de la des- ventaja de los sistemas monolíticos. Esa ló- gica permite aislar el sistema operacional, facilitando su alteración y debug, además de crear una jerarquía en los niveles de modos, protegiendo las capas más internas del sistema, luego, si un problema ocurre en una de las capas, las otras no serán afectadas. Pero, como la vida no es “un mar de rosas”, la ventaja de protección trae para los sistemas en capas la desventaja de la lentitud. Sistemas en Capas tienden a ser más lentos, pues existen varios peajes de acceso a los recursos e intercambios, con el objetivo de proteger el sistema, entonces queda la duda: ¿Es mejor tener un sistema con performance, pero con más oportuni- dades de fallas, o es mejor tener un sistema muy seguro y con menos performance? La respuesta es muy sencilla: De- pende, todo depende. Síntesis Final Llegamos al final de este capítulo y creo haber cumplido el objetivo de pre- sentar lo que es un sistema operacional y dónde ellos pueden ser encontrados. Actu- almente, todo y cualquier dispositivo más “inteligente” necesita un sistema siendo ejecutado para controlarlo. Estudiamos su historia y su arquitectura, para que, de esa manera podamos entender mejor cómo manipular los sistemas en nuestro día a día, entendiendo sus limitaciones y sus funcionalidades. Los conceptos básicos de los sis- temas fueron presentados, entonces, les pido los que recuerden durante toda su carrera en la tecnología, pues, aprender conceptos y tenerlos bien fundamentados, los volverán profesionalesmejores y más asertivos en los proyectos que desarrollen. EJERCICIOS 1) Cuando el sistema es iniciado ocurre el proceso de bootstrapping. Ese proceso hace una verificación de la “salud” de la computadora. Entonces, explique cuál es la importancia de las verificaciones efectuadas en el bootstrapping para el buen funcionamiento del sistema operacional. 2) Podemos afirmar que existen 2 funciones macros básicas de un sistema operacional. La primera es efectuar la gestión de todos los recursos de hardware disponibles y controles de acceso a ellos. Conforme esto, apunte cuál es la segunda función básica y muy importante del sistema operacional. 3) Las arquitecturas de los sistemas operacionales pueden ser divididas en Monolítica y en Capas. La estructura en capa trae una mayor seguridad y confiabilidad para el sistema, pues permite aislar partes del sistema como si fueran capas, y, en el caso de que ocurra un problema en una capa, no afectará la otra. Ante ese contexto, ¿cuál es la mayor diferencia y ventaja al utilizar una estructura en Capas? ¿Cuál es el punto negativo al escoger este abordaje? 4) ¿Por qué el Kernel debe ser el primero a ser cargado en memoria RAM en el proceso de inicialización del sistema? 5) Diferencie System Call de Kernel y apunte cuál es la función de ellas dentro del sistema operacional. 6) Muchas instrucciones son restrictas y solamente accedidas por el sistema. Existen los modos de acceso para garantizar la seguridad e integridad del sistema operacional. ¿Cuáles son ellos? Explique cada uno. 14SISTEMAS OPERACIONALES GESTIÓN DE PROCESO Procesos, procesos y procesos. ¿Por qué todo en un Sistema Operacional acaba en procesos? ¿Cuántas veces nos deparamos con un programa trabado y luego después una caja se abre pidiendo: “¿Desea encerrar el proceso?” o a veces el programa queda en el estado de “no respondiendo”. Al final ¿qué son procesos? ¿Para qué sirven? Podemos afirmar que todo dentro de un sistema ope- racional puede ser resumido a procesos. Definitivamente, toda capa lógica del sistema es fundamentada en procesos y comprende su funcionamiento, permitiéndonos desarrollar sistemas cada vez más robustos y con performance. En esta etapa, comprenderemos cómo el administrador de procesos de un sistema operacional trabaja y cuál es su im- portancia para el buen funcionamiento de todos los programas y aplicaciones utilizados en él. En esta etapa, comprenderemos cómo el administrador de procesos de un sistema operacional trabaja 15SISTEMAS OPERACIONALES La Gestión de Procesos La Gestión de Proceso es, de lejos, el principal dentro de un sistema opera- cional, aquí, detallaremos bastante ese asunto. Prácticamente, todo dentro de un sistema operacional es un proceso, y saber administrar los procesos, de forma cohe- rente, es un factor fundamental para que un sistema operacional tenga éxito en su implementación. Antiguamente, teníamos compu- tadoras que ejecutaban apenas una tarea (hasta hoy ella ejecuta apenas una tarea por vez, pero son innúmeras tareas) y la organización de los procesos era mucho más sencilla, pues el programador del sis- tema sabía el orden en que cada proceso sería ejecutado y cuáles procesos serían ejecutados. Así, con la evolución de las computadoras surgió un nuevo paradigma. Ahora, los programadores de los sistemas no saben cuántos procesos serán ejecuta- dos y ni el orden en que serán requeridos, de esa manera, ese aspecto trajo grandes problemas para los sistemas operacionales. Aún, tenemos que llevar en conside- ración que la informática, al contrario de lo que todos dicen, es una ciencia exoté- rica y no exacta. Muchas rarezas ocurren, aun contrariando la lógica booleana que impregna la computación, siendo agra- vado por el factor “usuario”. Nosotros, usuarios, complicamos aún más el buen funcionamiento de los procesos dentro de un sistema operacional, pues cada vez más queremos hacer muchas cosas al mismo tiempo. Creo que todos ya jugaron un juego online, oyendo música y con el chat abierto. Sólo en ese contexto, innúmeros procesos que surgieron de la nada, en el medio de las rutinas del sistema operacio- nal y que deben ser atendidas, al final, el sistema operacional fue creado para “ser- vir” al usuario y él debe conseguir hacer eso. En este momento, surge el primer punto que debe ser analizado. Abra el ad- ministrador de tareas del sistema opera- cional que usted está usando y vea cuántos procesos están en este momento siendo eje- cutados. Teóricamente, todos están siendo ejecutados al mismo tiempo, ¿cierto? Ahora, haga otra prueba. Aún con el administrador de procesos abierto, coloque una música para tocar en su computadora. Perciba que el proceso del player de au- dio será cargado en la lista de procesos en ejecución, luego, para usted es perceptible que todo está siendo ejecutado al mismo tiempo. Vean, entonces, que llegamos en la primera “rareza” de las muchas que desvelaremos durante nuestras clases. El procesador trabaja apenas con un proce- so por vez. ¡Sí, pueden creerlo! Nada, en la computadora, es ejecutado al mismo tiempo, pues, físicamente el procesador consigue procesar apenas un proceso de cada vez en su núcleo. Conforme Tanenbaum (2005, pag. 53), “Estrictamente hablando, mientas en cada instante la CPU ejecuta solamente un programa, en el transcurso de un segundo ella puede trabajar sobre varios progra- mas, dando, a los usuarios, la ilusión de paralelismo. 16SISTEMAS OPERACIONALES Por lo tanto, tenemos la ilusión que todo está siendo ejecutado al mismo tiempo, pero no lo está, todo gira en un pseudo-paralelismo, siendo ejecutado uno de cada vez. ¿Usted aún está oyendo la música que pedí para ser ejecutada? En- tonces, usted puede estar preguntándose: “Si cada proceso es ejecutado de forma individual, ¿por qué la música no salta o pierde calidad?”, hago mías las palabras del autor Tanenbaum, dentro de 1 segundo el procesador consigue procesar varios pro- cesos y muy rápidamente. El cambio de procesos en la CPU es tan rápido que, para nosotros, seres humanos, es imperceptible ese cambio, luego, la música parece estar siendo ejecutada al mismo tiempo, junto con los otros procesos, cuando, en realidad, no lo está. La Gestión de Proceso tiene como tareas las siguientes acciones, entre otras, dentro del Sistema Operacional: • Escalonamiento de procesos; • Sincronización de procesos; • Tratativas de DeadLocks; • Mecanismos de protección y segu- ridad. Como vimos, existen varios procesos ejecutando, en un compás frenético, en el sistema operacional. La difícil tarea de administrar cada uno de ellos hace que el administrador de procesos utilice algunas técnicas para organizarlos. Un descriptor de proceso llamado Proces Control Block es utilizado para esa finalidad de gestión. De esa manera, el bloque de con- trol del proceso almacena informaciones sobre cada proceso. Esas informaciones son utilizadas por el administrador para determinar cuál proceso tendrá derecho de uso de la CPU, además de su prioridad de procesamiento. Algunas informaciones adicionales y muy importantes también es- tán descritas en él. Básicamente, el Proces Control Block almacena las informaciones de los procesos y sirve de referencia para el administrador de procesos. Creación de procesos Bueno, los procesos no aparecen del “más allá”, todos los procesos deben ser creados. El administrador de procesos debe tener la capacidad de administrar eso de forma muy hábil. Como cita Ta- nenbaum (2005, pág. 54): “sin embargo, en sistemas de propó- sito general, es necesaria alguna manera de crear y terminar procesos durante la operación, cuando sea necesario.” Básicamente, contamos con 4 accio- nes que generan la creación de procesos en los sistemas operacionales: • Inicio del sistema; • Ejecución de una System Call de creación de procesos por un proceso en ejecución; • Una requisición del usuario paracrear un nuevo proceso; • Inicio de un job en lote. 17SISTEMAS OPERACIONALES Muchos procesos son creados con la inicialización del sistema operacional. Cuando el Kernel es cargado en memo- ria, él ya crea los procesos de gestión del sistema operacional para que él pueda ser ejecutado. Algunos procesos cargan en primer plano, interactuando con los usuarios; otros procesos son ejecutados en segundo plano, no integrando a un usuario, pero realizando alguna función específica. (Tanembaum, 2005). Algunos procesos son creados por otros procesos. Es extraña esa afirmativa ¿no? Pero es de esa manera que funciona. Un proceso que está en ejecución puede crear un nuevo proceso, si es necesario. De forma práctica, usted está jugando su juego preferido en su computadora y decide jugar online con sus amigos. El proceso del juego ya existe y está en ejecución, pero, en el instante que usted quiera jugar online. Así, el proceso del game crea un proceso de llamada de sistema para que él pueda obtener acceso al hardware de red y consiga hacer que usted se conecte en un servidor del juego por internet. Un proceso creando un nuevo proceso para ayudarlo. Con los sistemas multitareas y la globalización de las computadoras perso- nales, los sistemas, cada vez más, surgen con innúmeros “accesorios” de nuevos pro- gramas y aplicaciones para los usuarios. Una de las mayores fuentes de creación de procesos son los usuarios. Un proceso es creado para atender una requisición de usuario. Cada programa que usted ejecuta en su computadora es un nuevo proceso que está siendo generado, por lo tanto, el usuario requiere la creación de muchos procesos mientras está utilizando la com- putadora. La creación de procesos a través de job en lote, es aplicado en situaciones específicas. También, una herramienta de backup es un ejemplo de job en lote. Los Jobs de backup son ejecutados por el administrador de backup, eso, si hay recurso disponible para él en una hora determinada. Esa acción del software de backup, generará nuevos procesos para colecta de los datos de backup. En ese contexto de creación de pro- cesos, tenemos los árboles de procesos. Cada proceso llamado de “padre” puede crear procesos “hijos” vinculados a ellos, pero los procesos hijos pueden crear nuevos procesos vinculados a los mismos. Enton- ces, tendremos una Jerarquía de Procesos. En sistemas Unix, esa jerarquía es aplicada, pero en el sistema operacional Windows no, pues todos los procesos son creados de forma igual. El Unix llama esa jerarquía de “Gru- po de Procesos”, y cuando el proceso “pa- dre” es afectado, todos sus hijos también lo serán, o sea, en el caso de que el proceso padre sea “muerto”, todos sus hijos son encerrados también. En el Windows, al contrario del Unix, cuando un proceso padre es “muer- to”, sus hijos no mueren junto, eso no es muy efectivo contra los virus, pues no sirve de nada matar sólo el proceso que generó el virus, se deben eliminar por completo to- dos los procesos, matando todos sus hijos. 18SISTEMAS OPERACIONALES Término de Procesos Todos los procesos tienen su final. Ningún proceso puede ser ejecutado de forma infinita (teóricamente él no puede), todos ellos son creados y después encer- rados. De forma bien sencilla y práctica, existen 4 principales motivos para que un proceso sea terminado: • Salida normal: Cuando no ocurre ningún error a la vida de un proceso acabado, cuando el mismo terminó de hacer su trabajo, así de sencillo. Él tenía una tarea “X” para ser eje- cutada y después de terminarla, el proceso es encerrado, desocupando el área de memoria y saliendo de la fila de planificación; • Salida por error: Un proceso es en- cerrado de error, cuando es desig- nado a él que realice una tarea y no puede realizarla por falta de algún elemento, entonces, él es encerrado, por ejemplo, si usted es un progra- mador y tiene que compilar el código fuente de un sistema. Usted guardó el archivo con el nombre codigo1. py, entonces, ejecuta el comando de compilación referenciando el archivo codigo.py. El compilador (proceso) buscará el archivo codigo1.py, pero, ese archivo no existe, entonces, él reportará un error y será encerrado. • Salida por Error Fatal: Aun usando el ejemplo relatado anteriormente. Usted ejecutó el compilador e hizo la referencia cierta al nombre del archivo del código fuente. Entonces, el compilador empezará a realizar el trabajo de compilación, pero, al desarrollar el código, usted se equi- vocó en algunas líneas dentro de él, luego, el compilador no conseguirá terminar la compilación, debido al error, y encerrará el proceso. Er- rores fatales son errores asociados a equivocaciones de código de los programas, que los impiden de ser ejecutados de forma íntegra. • Cancelación por otro proceso: Un proceso puede encerrar otro proceso. El ejemplo más clásico y común de eso es cuando necesitamos encerrar un programa que no está más res- pondiendo y está trabado. Al abrir el administrador de procesos, pode- mos forzar su encerramiento. En el Windows, al forzar el encerramien- to de un proceso, estamos creando un nuevo proceso llamado taskkill. exe que “matará” el proceso que está trancado. En el Linux, utilizamos el proceso kill para “matar” procesos de forma abrupta. Estado de los Procesos El administrador de procesos es extremamente organizado, y para garan- tizar que ellos sean ejecutados de forma ordenada, el sistema se organiza a través de 3 estados para los procesos, dándoles derecho o no de uso de la CPU. El primer estado es el de En Eje- cución. El proceso recibe ese status cuando está en ejecución en la CPU. Mientras esté en ejecución en la CPU, su status, en el bloque de control de procesos, estará como “En Ejecución”. El segundo estado es “Listo”. Un proceso está con el status de Listo cuando él está en la fila de procesos aguardando 19SISTEMAS OPERACIONALES su vez para ser procesado. El proceso ya tiene todas las informaciones necesarias para ser ejecutado, basta aguardar su vez en la fila del planificador. En el bloque de control de proceso, el status del proceso queda como “Listo”. El tercer estado es “Bloqueado”. Ese status es rotulado en el proceso cuando él está aguardando algún evento externo para ser procesado. De forma muy inte- ligente, procesos bloqueados no están en la fila para ejecución y, de esa manera, optimiza el uso de la CPU que se con- centrará solamente en procesos Listos. Un ejemplo sencillo del status bloqueado es la utilización de un editor de texto. Para el editor de texto es muy importante que el usuario interactúe con el teclado. En el caso de que él esté abierto, y el usuario no esté digitando, el sistema puede bloquear el proceso del editor de texto, retirándolo de la fila, quedando en el aguardo para la interacción del usuario en el teclado, con el objetivo ponerlo nuevamente en la fila de Listos. En el bloque de control de procesos, su status es registrado como “Bloqueado”. Perciban que en todos los casos comentamos sobre el registro de él en el bloque de control de proceso. Pues una de sus funciones es registrar el estado de cada proceso para que el planificador pueda decidir cuál proceso planificará para el procesamiento. Estudiaremos los plani- ficadores que están a continuación. Otra característica muy importante es que ningún proceso puede ser retirado del estado de “Bloqueado” y ser actualiza- do para el status de “En Ejecución”. Todos los procesos sólo serán ejecutados si están pasado por la fila de “Listos”, o sea, en el caso de que un proceso esté bloqueado, él deberá ser actualizado para la fila de listos y sólo, más adelante, ganará derecho de uso de la CPU, así como, entrar en el status de “en ejecución”. Planificación de Procesos Como ya vimos, existen innúmeros procesos que están siendo ejecutados en el sistema operacional, pero la CPU ejecuta apenas un proceso de cada vez. Éstees el gran desafío del administrador de pro- cesos. Garantizar que todos los procesos sean procesados y que la CPU no se quede de alguna manera ociosa, optimizando, al máximo, el procesamiento. Para organizar el procesamiento, el administrador utiliza la técnica de plani- ficadores de procesos. El planificador es un subsistema del sistema operacional, responsable por decidir cuál proceso tendrá derecho de uso de la CPU. Cada planifi- cador posee un algoritmo específico que decide cuál proceso será ejecutado y cuál será el orden de ejecución. La decisión del planificador es tomada en virtud de algunas informaciones de los procesos y de la lógica donde será implementado. Algunos algoritmos son preferentes y otros son no preferentes. Cuando hay preferencia, el algoritmo del planificador puede interferir en el orden de la fila de procesamiento, alterándola de la forma que quiera, retirando o concediendo el derecho de uso de CPU a un proceso. En planificadores no preferentes, no hay esa f lexibilidad, y, una vez que la fila 20SISTEMAS OPERACIONALES del planificador está formada, el orden de procesamiento de los procesos será siempre la misma, sin sufrir alteración. Planificación FIFO Un planif icador con una lógica FIFO trabaja de una forma muy sencilla. Todos los procesos forman una fila en el planificador. Cada proceso posee una prioridad y un tiempo de ejecución. El tiempo de ejecución es cuánto de tiempo, asignado de la CPU, él necesita para ser procesado y finalizado. El algoritmo de FIFO mira para la fila de procesos que están aguardando para ser procesados y escoge el que llegó primero para ganar derecho de uso de la CPU. En la lógica del FIFO, el primer proceso que entre en la fila será el primero que será procesado, o sea, el primero que llegue será el primero que salga (FIFO es anagrama de First in First out). Podemos comparar el FIFO a una fila de banco, donde cada persona posee una clave de espera, y son llamadas por las asistentes de acuerdo con el orden de llegada y claves de espera. El FIFO es un algoritmo no prefe- rente, o sea, el orden de procesamiento de la fila no puede ser alterada por el sistema, independientemente del número de pro- cesos o prioridad, cada proceso aguardará el tiempo necesario para ser procesado. A partir del momento que el proceso gana derecho de uso de la CPU, él sólo saldrá de ella, después de que esté con su pro- cesamiento completo, o sea, si un proce- so demora 10ms para ser procesado, él mantendrá la CPU con él por 10ms y sólo después cederá el derecho de acceso a ella. Planificación SJF – Proceso más corto primero La planificación SJF (Shortest Job Frist), también es no preferente. La orga- nización de la fila de ese algoritmo es un poco diferente del FIFO. El SJF organiza la fila de espera de acuerdo con el proceso que posee menor tiempo estimado de pro- cesamiento y lo pone delante de la fila. En una analogía, podemos tomar los cajeros rápidos de los supermercados. Los clientes que poseen hasta 10 ítems, no necesitan enfrentar una fila larga y demorada, ellos son atendidos primero en cajeros especia- les, pues poseen menos ítems. En la computadora no tenemos un procesador para procesos menores y otro procesador para procesos mayores, tene- mos apenas una CPU, por lo tanto, el SJF organiza la fila de forma que los procesos con menor tiempo estimado de ejecución sean procesados antes que los demás. Planificación por Prioridad Este algoritmo, diferente de los otros, puede ser, tanto preferente como no preferente, depende de cómo él será implementado en el sistema. El algoritmo de FIFO no lleva en consideración el tiempo de ejecución de cada proceso ni su prioridad. El algoritmo SJF lleva en consideración solamente el tiempo de ejecución de cada proceso. El Planificación por Prioridad, en contra- partida, analiza solamente la prioridad de cada proceso. 21SISTEMAS OPERACIONALES La fila es organizada siempre de ma- nera que los procesos de mayor prioridad ganen derecho de uso de la CPU antes de los otros. En los casos donde es preferente, el sistema puede alterar el orden de la fila de procesamiento a cualquier instante, en el caso de que llegue un proceso de mayor prioridad que los demás que están en la fila, aguardando para ser procesados. Un óptimo ejemplo de eso es la fila de ancianos en el banco. Por más que sea su vez de ser atendido por causa del orden de llegada, si un anciano llega al banco, él ganará la prioridad de atención y usted tendrá que esperar hasta que él sea aten- dido. En el caso de que lleguen muchos ancianos, usted se quedará esperando hasta que todos sean atendidos. En este caso, tenemos un gran pro- blema. Procesos con prioridad menor pue- den quedar infinitamente esperando en la fila para ser procesados, a eso le damos el nombre de starvation. No es interesante, para el sistema, que un proceso se quede infinitamente esperando y nunca sea procesado, por eso se creó una técnica denominada aging. ¿Cómo resolver el problema de espera? Sencillo, basta incrementar la prioridad de esos procesos que están hace un buen tiempo esperando, haciendo que sean más prioritarios y puedan ganar el derecho de uso de la CPU, eso es el aging. Planificación Round Robin Algoritmo nativamente preferen- te. Es utilizado en sistemas de tiempo compartido. El Round Robin no lleva en consideración la prioridad ni el tiempo de ejecución de los procesos. Él divide la CPU en time-slice o cuantum, que es un pedazo de tiempo fijo, el cual, generalmente, está entre 100ms y 300ms. Cada proceso gana derecho de uso de la CPU por 100ms y después pierde ese derecho, yendo para el final de la fila. Así, en vez de que el proceso ocupe la CPU durante todo su tiempo de ejecución y salga solamente después de que esté ter- minado (como en los otros algoritmos), él 22SISTEMAS OPERACIONALES se queda por 100ms, y, en el caso de que no haya sido completo, irá para el final de la fila, esperando nuevamente su vez para usar la CPU. Suponiendo que un proceso posea su tiempo de ejecución de 400ms, él ganará derecho de uso de la CPU por 100ms y después irá para el final de la fila. Ese pro- ceso será repetido 4 veces, hasta que esté con su procesamiento completo. Debido a esa característica, el tiempo de espera de los procesos es mayor que en los otros algoritmos. Además de eso, como es preferente, el orden de la fila de procesamiento puede ser alterada por el sistema siempre que sea necesario, no siendo una constante dentro del sistema. Turnaround Un concepto muy importante que debemos saber es el Turnaround. Una de las formas de medir la eficiencia de un planificador es con el cálculo de Turnarou- nd medio que él posee. Podemos usar ese valor para decidir cuál planificador es más eficaz en la organización de determinados procesos. Pues, no existe un planificador mejor o peor que otro, lo que tenemos son situaciones diferenciadas y cada planifica- dor debe ser aplicado de forma coherente a cada una de ellas. El Turnaround consiste en la suma del tiempo que el proceso quedó esperando para ser procesado con su tiempo de pro- cesamiento, generando, así, el tiempo total que el proceso demoró para ser finalizado. Turnaround – planificador FIFO El planificador FIFO es uno de los más sencillos. El primero que entra en la fila, es el primero que será procesado. De la misma manera, el cálculo de Turnarou- nd medio del planificador FIFO es muy sencillo. Utilicemos el siguiente ejemplo: Imaginemos que 5 procesos entran en el planificador para ser ejecutados. Los procesos P1, P2, P3, P4 y P5 en el orden de llegada, de acuerdo con la tabla que está a seguir: Proceso Tiempo de Procesamiento Prioridad P2 1 0 P3 3 4 P1 2 8 P5 1 3 P4 4 2 23SISTEMAS OPERACIONALES Entonces, con la lógica del FIFO, tendremos la siguiente secuencia de procesamiento: P2, P3, P1, P5 E P4. Siguiendo la lógica del planificadorpodemos representar gráficamente el procesamiento de esta forma: Tiempo de procesamiento Ahora, repetiremos la misma tabla, pero calcularemos el Turnaround de cada uno de los procesos de forma individual, recordando que el Turnaround es la suma del tiempo de espera más el tiempo de procesamiento: Proceso P2: Esperó 0, pues fue el primero que llegó y tiene su tiempo de procesamiento de 1, luego su Turnaround es 1. Proceso P3: Esperó 1 y su tiempo de procesamiento es 3, luego su Turnaround es 4. Proceso P1: Esperó 4 y su tiempo de procesamiento es 2, luego su Turnaround es 6. Proceso P5: Esperó 6 y su tiempo de procesamiento es 1, luego su Turnaround es 7. Proceso P4: Esperó 7 y su tiempo de procesamiento es 4, luego su Turnaround es 11. P4 P4 P4 P4 P5 P1 P1 P3 P3 P3 P2 T=11 T=7 P4 P4 P4 P4 T=6 P5 T=4 P1 P1 T=1 P3 P3 P3 P2 24SISTEMAS OPERACIONALES Tiempo de procesamiento Ahora que sabemos el Turnarou- nd de cada uno de los procesos, podemos calcular el Turnaround medio del plani- ficador FIFO sumando todos y dividien- do por el número de procesos que fueron ejecutados. Turnaround medio: (1 + 4 + 6 +7 + 11)/5 = 5,8 Turnaround – planificador SJF El planificador SJF utiliza como criterio de planificación la priorización de procesos con tiempo de procesamiento menor, siendo así, los más “cortos” son procesados primero. Utilizaremos el mismo ejemplo: Imaginemos que 5 procesos entran en el planificador para ser ejecutados. Los procesos P1, P2, P3, P4 y P5 en el orden de llegada, de acuerdo con la tabla que está a seguir: Entonces, con la lógica del SJF tendremos la siguiente secuencia de procesa- miento: P2, P5, P1, P3 y P4. Fíjese en los procesos P2 y P5, ellos poseen tiempo igual de procesamiento, en estos casos, el primero que llegue será procesado. Siguiendo la lógica del planificador, podemos representar gráficamente el procesamiento de esta forma: Proceso Tiempo de Procesamiento Prioridad P2 1 0 P3 3 4 P1 2 8 P5 1 3 P4 4 2 P4 P4 P4 P4 P3 P3 P3 P1 P1 P5 P2 25SISTEMAS OPERACIONALES Tiempo de procesamiento Ahora, repetiremos la misma tabla, pero calcularemos el Turnaround de cada uno de los procesos de forma individual, recordando que el Turnaround es la suma del tiempo de espera más el tiempo de procesamiento: Proceso P2: Esperó 0, pues fue el primero que llegó y tiene su tiempo de procesa- miento de 1, luego su Turnaround es 1. Proceso P5: Esperó 1 y su tiempo de procesamiento es 1, luego su Turnaround es 2. Proceso P1: Esperó 2 y su tiempo de procesamiento es 2, luego su Turnaround es 4. Proceso P3: Esperó 4 y su tiempo de procesamiento es 3, luego su Turnaround es 7. Proceso P4: Esperó 7 y su tiempo de procesamiento es 4, luego su Turnaround es 11. Tiempo de procesamiento Ahora que sabemos el Turnaround de cada uno de los procesos, podemos cal- cular el Turnaround medio del planificador SJF, sumando todos y dividiendo por el número de procesos que fueron ejecutados. Turnaround medio: (1 + 2 + 4 +7 + 11)/5 = 5 Turnaround – planificador por Prioridad El planificador por Prioridad utiliza como criterio de planificación la prioriza- ción de procesos, de manera que, cuanto mayor sea su prioridad, antes él será pro- cesado. Utilizaremos el mismo ejemplo: Imaginemos que 5 procesos entran en el planificador para ser ejecutados. Los procesos P1, P2, P3, P4 y P5 en el orden de llegada, de acuerdo con la tabla que está a seguir: T=11 T=7 P4 P4 P4 P4 T=4 P3 P3 P3 T=2 P1 P1 T=1 P5 P2 Proceso Tiempo de Procesamiento Prioridad P2 1 0 P3 3 4 P1 2 8 P5 1 3 P4 4 2 26SISTEMAS OPERACIONALES Entonces, con la lógica del planificador por Prioridad, tendremos la siguiente secuencia de procesamiento: P1, P3, P5, P4 y P2. Siguiendo la lógica del planificador, podemos representar gráficamente el procesamiento de esta forma: Tiempo de procesamiento Una vez más, repetiremos la misma tabla, pero calcularemos el Turnaround de cada uno de los procesos de forma indivi- dual, recordando que el Turnaround es la suma del tiempo de espera más el tiempo de procesamiento: Proceso P1: Esperó 0, pues fue el primero que llegó y tiene su tiempo de procesamiento de 2, luego su Turnaround es 2. Proceso P3: Esperó 2 y su tiempo de procesamiento es 3, luego su Turnaround es 5. Proceso P5: Esperó 5 y su tiempo de procesamiento es 1, luego su Turnaround es 6. Proceso P4: Esperó 6 y su tiempo de procesamiento es 4, luego su Turnaround es 10. Proceso P2: Esperó 10 y su tiempo de procesamiento es 1, luego su Turnaround es 11. P2 P4 P4 P4 P4 P5 P3 P3 P3 P1 P1 T=11 T=10 P2 T=6 P4 P4 P4 P4 T=5 P5 T=2 P3 P3 P3 P1 P1 27SISTEMAS OPERACIONALES Tiempo de procesamiento Ahora que sabemos el Turnaround de cada uno de los procesos, podemos cal- cular el Turnaround medio del planifica- dor SJF, sumando todos y dividiendo por el número de procesos que fueron ejecutados. Turnaround medio: (2 + 5 + 6 + 10 + 11)/5 = 6,8 Turnaround – planificador Round Robin El planificador por Round Robin no considera ni el orden de llegada, ni el tiempo de procesamiento y mucho menos su prioridad. Para la planificación Round Robin es aplicado un pedazo de tiempo fijo para cada proceso y ellos se quedan ganando y perdiendo el uso de CPU hasta el término de su procesamiento. Utilizaremos el mismo ejemplo: Imaginemos que 5 procesos entran en el planificador para ser ejecutados. Los procesos P1, P2, P3, P4 y P5 en el orden de llegada, de acuerdo con la tabla que está a seguir: Entonces, con la lógica del planificador Round Robin no tendremos una lógica de procesamiento fija como en los otros, pues ella será variable. Siguiendo la lógica del planificador, podemos representar gráficamente el procesamiento de esta manera: Tiempo de procesamiento Cada proceso gana uso de la CPU y pierde hasta que esté completo su proce- samiento. Los procesos P2 y P5 poseen apenas 1 tiempo de procesamiento, por eso, aparecen apenas 1 vez en la representación. El proceso P1 terminó su procesamiento en el ciclo 6, de todo el procesamiento. Ya, el proceso P3 terminó en el ciclo 9, y, por fin, el proceso P4 en el ciclo 11 de procesamiento. De esta manera, el cálculo del Proceso Tiempo de Procesamiento Prioridad P2 1 0 P3 3 4 P1 2 8 P5 1 3 P4 4 2 P5 P4 P3 P4 P2 P3 P4 P4 P1 P1 P3 28SISTEMAS OPERACIONALES SISTEMAS OPERACIONAIS Turnaround es un poco más complejo, pues el proceso espera más que una vez para ser procesado y cuando gana uso de CPU, que ni siempre es terminado. Veamos, el cálculo será así: P1: Durante todo el proceso acumuló una espera de 4 y posee tiempo de procesa- miento de 2, luego el Turnaround es 6. P2: Durante todo el proceso acumuló una espera de 1 y posee tiempo de procesa- miento de 1, luego el Turnaround es 2. P3: Durante todo el proceso acumuló una espera de 6 y posee tiempo de procesa- miento de 3, luego el Turnaround es 9. P4: Durante todo el proceso acumuló una espera de 7 y posee tiempo de procesa- miento de 4, luego el Turnaround es 11. P5: Durante todo el proceso acumuló una espera de 4 y posee tiempo de procesa- miento de 1, luego el Turnaround es 5. Tiempo de procesamiento Ahora que sabemos el Turnarou- nd de cada uno de los procesos, podemos calcular el Turnaround medio del plani- ficador Round Robin, sumando todos y dividiendo por el número de procesos que fueron ejecutados. Turnaround medio: (6 + 2 + 9 + 11 + 5)/5 = 6,6 P5 P4 P3 P4 P2 P3 P4 P4 P1 P1 P3 29SISTEMAS OPERACIONALES Síntesis Final Llegamos al final de este capítulo,que, desde mi punto de vista, es el prin- cipal que debe ser recordado y estudiado, pues, todo dentro de un sistema operacio- nal se resume a procesos. Conseguimos, en esta etapa, comprender qué es un proceso, cómo trabaja con él el sistema, cómo es realizada la planificación de ellos, con el objetivo de compartir la CPU entre todos. Aprendimos los principales algorit- mos de planificación y su aplicabilidad. No existe un planificador mejor que otro, existe el que más se adecua a las necesi- dades para las cuales fueron destinados. Por lo tanto, concluimos esa etapa, volviéndonos más aptos para, en los pró- ximos capítulos, seguir desvelando más misterios sobre los sistemas operacionales. EXERCÍCIOS Considerando la siguiente tabla, responda las preguntas. Supongamos que existen 5 procesos que llegan juntos a la CPU, en este orden de llegada: 1) Calcule el Turnaround medio del algoritmo FIFO. 2) Calcule el Turnaround medio del algoritmo SJF. 3) Calcule el Turnaround medio del algoritmo por Prioridad, siendo 0 la prioridad menor. 4) ¿En cuál de los algoritmos hubo menor tiempo de Turnaround medio? 5) EL proceso P1, tuvo su tiempo de espera mayor ¿en cuál de los algoritmos de planificación? 6) El proceso P5 fue ejecutado antes, pero ¿en cuál de los planificadores? Proceso Tiempo de Procesamiento Prioridad P1 2 0 P2 4 4 P3 3 2 P4 1 1 P5 2 5 31SISTEMAS OPERACIONALES THREADS Si un proceso en un hardware de un núcleo de procesamiento, trabaja muy rápido, ¿qué ocurría si tuviéramos más procesos y más núcleos de procesamiento? ¡Ocurriría algo mágico y exotérico! La necesidad voraz de los usuarios y las demandas cada vez más “pesadas” de procesamiento estaban sobrecargando los procesadores, que tenían solamente un núcleo de pro- cesamiento. Entonces, primero, para optimizar el uso de la CPU, fueron creadas las threads, donde hubo una ganancia de performance, pero, la magia sólo ocurrió realmente cuando los procesadores con más núcleos de procesamientos fueron creados. Luego, analizamos que cosas exotéricas realmente ocurren y la magia del paralelismo existe en los sistemas operacionales.Desvelemos los misterios de las Threads y sus aplicaciones en esta etapa de la clase. 32SISTEMAS OPERACIONALES Los Threads El poder computacional viene evo- lucionando de forma extraordinaria en los últimos 30 años. Cada día, nuevos har- dware son desarrollados, tecnologías son implementadas y crece la necesidad por alta performance en la ejecución de progra- mas. Las Threads surgen en el escenario computacional como herramienta para maximizar el desempeño de los sistemas. Entonces, los científicos de la com- putación descubrieron una forma de ma- ximizar el uso de la CPU y optimizar el procesamiento, a partir de las Threads. Una vez que los procesos son complejos y muchas veces necesitan efectuar varias tareas, acceder a varios recursos para con- cluir sus tareas. Un proceso puede dividirse en va- rias actividades, que pueden ser ejecuta- das competitivamente. Esas tareas son las Threads, siendo comprendida como una división que permite optimizar el tiempo de procesamiento y recursos utilizados por los procesos. En hardware que poseen apenas un núcleo de procesamiento, las Threads son ejecutadas una de cada vez, igual a los procesos; ya, en hardware, que poseen más de un núcleo de procesamiento, ellas pueden ser ejecutadas de forma paralela. ¿Recuerdan que estudiamos la lógica de procesamiento? ¿Qué hablamos sobre pseudo-paralelismo y también que la CPU ejecuta un proceso de cada vez? Entonces, ¿cómo explicar que las Threads pueden ser ejecutadas al mismo tiempo? Calma chicos, eso está correcto. No solamente las Threads, pero también los procesos pueden ser ejecuta- dos al mismo tiempo en arquitecturas que poseen más de un núcleo de procesamien- to. Vean bien, solamente en arquitecturas que posean más que un núcleo de proce- samiento. Pero ¿dónde podemos ver eso? Al inicio, cada procesador tenía ape- nas un núcleo de procesamiento, enton- ces, los procesos eran ejecutados uno de cada vez. Más tarde, con la evolución de la tecnología, los procesadores empezaron a incorporar más de un núcleo de procesa- miento. ¿Se recuerdan cuándo Intel lanzó el procesador Dual Core? Primero, apenas grandes servidores tenían procesadores así, ya que eran muy caros para nosotros, me- ros mortales, pero, como toda tecnología, ella se volvió accesible para computadoras personales. De esa manera, actualmente casi todos los nuevos procesadores ya tienen más de un núcleo de procesamiento, ha- ciendo que el tiempo de ejecución de los procesos sea optimizado y ejecutado al mismo tiempo. Tenemos realmente el paralelismo de procesamiento. Entonces, usted se pregunta, ¿Cuál es la relación de eso con los Threads?, éste es el momento donde la magia ocurre. Todos los Thread se comportan igual a un proceso. Si tenemos más de un núcleo de procesamiento, podemos ejecutar más de un proceso/Thread por vez. Si el sistema consigue ejecutar más cosas, él se quedará más rápido. En pro- cesadores con cuatro núcleos, tenemos 4 tareas siendo ejecutadas al mismo tiempo. 33SISTEMAS OPERACIONALES Para mejorar, aún más, la perfor- mance de los procesadores, los fabricantes insertan otra tecnología en ellos, la de multithread. A su vez, esos procesadores son desarrollados para optimizar, aún más, el uso de los threads. ¿Cuál será la afirmativa correcta? ¿Cuál está equivocada? La respuesta para esa pregunta es la siguiente. “Depende, todo depende”. Un hardware sólo optimiza un siste- ma o programa que fue bien desarrollado por los programadores. Ejemplifiquemos mejor. Suponien- do que tenemos un procesador, con cuatro núcleos de procesamiento y capacidad para 8 Threads, pero, en el desarrollo de un sistema operacional nuevo, el programador no consideró las buenas prácticas de pro- gramación para utilizar más de un núcleo y Threads. ¿Qué ocurrirá cuando él sea ejecutado? Él usará solamente un 25% de la capacidad del procesador, dejando un 75% de CPU ociosa. Vean que ni todo es hardware, el software debe acompañar las evoluciones. Otro ejemplo más práctico. Supo- niendo que usted tendrá que adquirir un servidor para ejecutar una base de datos. ¿Cuál es la mejor opción de compra entre las 3 afirmativas citadas? La respuesta es la fatídica “Depende, todo depende”. Normalmente, los desarrolladores de base de datos ponen a disposición la configuración de hardwa- re recomendada para ejecutar el sistema, justamente para optimizar el hardware y maximizar el desempeño de la aplicación. Por lo tanto, a la hora de escoger el tipo de hardware, vea las especificaciones de los fabricantes de los sistemas, el cual optimizará, de forma correcta, el sistema. Así, no hay mejor o peor, y sí el hardware que se adecua mejor a la necesidad. Puede ser que, para un determinado sistema, sea mejor más Threads y menos núcleos, y para otro, sea, al contrario, su desempeño queda optimizado con más núcleos y me- nos Threads. Existen 2 tipos de threads. Las que son creadas por el Kernel del sistema operacional y las que son creadas por los programas de usuario. Las threads de usuarios son aquéllas utilizadas a partir de bibliotecas específicas y que complementan el sistema opera- cional, o sea, son implementadas arriba del Kernel por los programas de usuario. No son vitales para el funcionamiento del sistema operacional. Ahora, les dejo un consejo. Reflexionemos sobre algunas cuestiones: • El mejor procesador es el que posee más núcleos de procesamiento y el mayor número de Threads. • El mejor procesador es el que posee menos núcleos de procesamiento, pero, mayor número de Threads. • El mejor procesador es el que posee más núcleos de procesamiento, pero menor número de Threads. 34SISTEMAS OPERACIONALES Las Threads del sistema operacio- nal, del Kernel, son aquéllas soportadas directamente por el sistema operacional,y, por lo tanto, son nativas de este siste- ma. Ellas son creadas directamente por el Kernel y son de extrema importancia para el sistema operacional. ¿Por qué usar Threads? Hablamos bastante sobre threads, ahora entenderemos las ventajas de utili- zarlas. ¿Cuál es el objetivo de dividir los procesos en tareas menores? La principal razón para existir es que en muchas aplicaciones ejecutan múltiples actividades al mismo tiempo, y descomponer en múltiples Threads deja más fácil el modelo de programación. El programador puede optimizar el acceso a los recursos. Si el proceso es muy com- plejo, es complicado conseguir una buena performance de procesamiento, teniendo en vista todos los accesos a los recursos que él hace. Entonces, es bueno para la práctica segmentar los procesos en tareas menores para optimizar su procesamiento, aún más, aplicándo- se en procesadores con multithread. Para el sistema operacional, crear una Thread es mucho más rápido que un proceso, de esta manera, tendremos op- timización del tiempo de procesamiento y ejecución del proceso principal. Con las Threads también podemos compartir recursos y datos entre ellas, como afirma Tanembaum (2005, p.63) “Sólo que ahora, con los Threads, adicio- namos un nuevo elemento: la capacidad para que entidades paralelas compartan un espacio de direcciones y todos sus datos entre ellas mismas. Eso es esencial para ciertas aplicaciones, en las cuales múltiples procesos (con sus espacios de direcciones separadas) no funcionarán.” En suma, la gran función de las Threads es optimizar el procesamiento, garantizando mayor performance. Síntesis Final Llegamos al final de esa etapa, un poco más breve que las demás, pero, de mucha importancia para comprender el funcionamiento del sistema. Actualmente, las Threads son ampliamente implemen- tadas, debido al avance de la tecnología en la construcción de hardware más ro- bustos que soportan múltiples núcleos de procesamiento. EJERCICIOS 1) ¿Qué son Threads? 2) ¿Cuándo podemos extraer lo máximo que las Threads pueden ofrecernos? 3) ¿Cuál es la principal ganancia que tenemos al utilizar Threads en la programación? 4) ¿Por qué no podemos afirmar que un núcleo con gran capacidad de Threads es mejor que uno que posee más núcleos de procesamiento? 5) Para rodar una base de datos, ¿es mejor un procesador con muchas Threads? 36SISTEMAS OPERACIONALES COMUNICACIÓN ENTRE PROCESOS La comunicación es algo de extrema importancia en nuestro día a día. Pero, al final, ¿qué lengua hablan ellos? Habíamos estudiado que todo lo que está dentro del sistema operacional es un proceso, y no estábamos mintiendo. Aún estamos hablando sobre procesos y ahora hablaremos de algo muy importante, la comunicación entre los procesos. Dentro del sistema, los procesos son creados y destrui- dos de forma frenética, y si ellos no “conversan” de la manera correcta, ocurrirán grandes problemas en el sistema. Puedo afirmar que muchas veces ellos entran en “discusión”, pelean e, incluso, se matan entre ellos. ¿Tiene alguna duda? ¡Verifi- quemos entonces! Para los procesos eso no es diferente, comunicación entre ellos es de extrema importancia. 37SISTEMAS OPERACIONALES La Comunicación Creo que usted ya consigue percibir cuán complejo es gestionar un sistema operacional. Prácticamente, todo es un proceso con prioridad, tiempo de ejecuci- ón, preferente, etc. En este escenario, la harmonía entre los procesos debe ser total para que no ocurran problemas de asigna- ción de recursos entre ellos, y que puedan comprometer el sistema. La comunicación entre los procesos debe llevar algunos criterios en conside- ración. Muchas veces un proceso necesita informaciones que son repasadas de otro proceso para poder dar secuencia a un procesamiento. ¿Está confuso? Sí, sé que pareció un poco confuso, entonces, vamos a ejemplificar. Usaremos un ejemplo del sistema operacional Linux. ¿Nunca oyó hablar so- bre Linux? No se asuste, hablaremos sobre él más adelante. Algo que debe quedar claro, es que todos los comandos ejecu- tados en un sistema son un proceso, así como, prácticamente, todo en el sistema. Entonces, tenemos un comando para listar los procesos que están en ejecución en el Linux, llamado PS. Cuando lo ejecutamos, el sistema nos muestra una lista enorme de procesos. Normalmente, queremos descubrir si un proceso específico está en ejecución, puesto que, buscarlo en una lista enorme de procesos dificulta mucho. Entonces, podemos concatenar 2 comandos, de forma que un segundo comando filtre mejor las informaciones. Usamos en este caso el GREP. Si utilizamos el GREP solo, él no hará nada, pues depende de la salida de un primer proceso para que pueda filtrar las informaciones. Si hay falla en esa comuni- cación el comando tendrá su salida inconsistente. 38SISTEMAS OPERACIONALES Otro punto importante de la comu- nicación entre procesos es la delimitación de áreas que pueden ser accedidas por cada proceso. Imaginemos que usted va a jugar un juego y, al mismo tiempo, quiere dejar un player de música abierto en la compu- tadora con su música favorita tocando. Los 2 procesos querrán acceder los recursos de audio, entonces, la orquestación de asigna- ción de él debe ser rigurosa, para que los 2 procesos sean atendidos. Otro punto de atención es que 2 procesos no pueden estar en la región crítica, pues pueden generar un gran problema. Existe, también, la dependencia en- tre los procesos. Muy parecido con nuestro primer caso, pero en él, un proceso depen- de exclusivamente de otro proceso o grupo de procesos para poder ser ejecutado. Por esos motivos, es muy importante que haya una orquestación entre todos los procesos del sistema operacional. Regiones Críticas Muchos procesos pueden compartir recursos, una vez que ellos son finitos en las computadoras. Las áreas de intercambio de recursos son las Regiones Críticas. Para explicar mejor qué es una región crítica, usaremos un ejemplo de fácil comprensión. Usaremos un banco como ejemplo, y su base de datos de clientes y cuentas corrientes. Como ejemplo, tomaremos, específicamente, una cuenta de determi- nado cliente. Ese cliente es jubilado y por eso vive entrando dinero en su cuenta, con bastante frecuencia. Ese jubilado es fan de Elba Ramalho, y vive comprando CDs por Internet. Existen procesos en el sistema de base de datos del banco que reciben la información que algún dinero fue abona- do en la cuenta del cliente, yendo en su cuenta y aumentando su saldo. Ya, otros procesos reciben la información que él hizo una compra, y, entonces, retirarán de su cuenta el valor correspondiente. Todo muy sencillo, ¿verdad? Ni tan- to, cosas extrañas y exotéricas acostumbran a ocurrir en sistemas operacionales con pseudo-paralelismo, que quedan conmu- tando los procesos. Imaginemos que el jubilado tiene mil reales en su cuenta, y recibirá más mil de décimo tercer salario. El proceso específico de aumento de saldo de la cuen- ta recibe la información de ese depósito, verifica el valor de la cuenta del jubilado y hace la suma, pero aún no actualiza el valor en la tabla. El próximo paso de ese proceso es poner en la cuenta el valor final, que es de 2 mil reales. En ese momento, la CPU alerta “en proceso, su tiempo aquí ya acabó, ahora es la vez de que otro proceso ejecute”. O sea, antes de actualizar el valor en la cuenta, hubo una conmutación, salió un proceso y entrará otro proceso que ganó derecho de uso de la CPU. En ese momento, el banco recibe la información de que el jubilado gastó cien reales en CDs de Elba Ramalho. El proceso responsable por descontar el di- 39SISTEMAS OPERACIONALES nero, va a la cuenta del jubilado y ve que él tiene mil reales en la cuenta (recuerde: no dio tiempo para que el proceso anterior actualizara el valor para 2 mil). Entonces, retira R$ 100,00 de su cuenta, y actualiza informando que ahora él tiene R$ 900,00 en lacuenta corriente. Hasta ahora, todo correcto. El sof- tware está haciendo lo que fue requerido para que él hiciera. El proceso de débito terminó, entonces el sistema operacional llamará a aquel proceso anterior de crédito para la cuenta, con el objetivo de que sea concluido. ¿Recuerda dónde él paró? Sí, él iba a actualizar el valor para R$ 2.000,00 en la cuenta del jubilado. Y, por increíble que parezca, es eso lo que él hace, es su último paso, sencillamente, colocar dos mil como saldo final en la cuenta del jubilado. Al final de cuentas, el jubilado tenía mil, recibió más mil, gastó cien y se quedó con dos mil en la cuenta. ¿Percibieron? Sencillamente conmutar, parar un pro- ceso e iniciar otro no funciona, acceder un mismo dato (en este caso, una varia- ble que almacena el saldo del cliente del banco) exige más cuidado, pues cuando dos o más procesos actúan juntos, en un mismo local de memoria, cosas extrañas y casi improbables pueden ocurrir debido al cambio de procesos. Entonces, ¿cuál es la solución para esto? La idea base es sencilla, no permitir que dos o más procesos accedan esos re- cursos compartidos, o sea, la región crítica, por motivos obvios de integridad del sis- tema. Pero, quédense tranquilos (o no), la posibilidad de que el banco se equivoque, hoy en día, es muy pequeña, o sea, al usted gastar, saldrá de su cuenta. En suma, la Región Crítica forma parte del programa que está en memoria compartida. Cuando los procesos disputan competitivamente esas áreas, damos el nombre de condición de corrida. Tratativas para Regiones Críticas MMuy bien, podemos percibir que tratar de esas regiones es algo preponde- rante para el buen funcionamiento del Sistema Operacional, entonces no pode- mos descuidarlas, por más que a veces aparezcan algunas “pantallas azules” con códigos hexadecimales en nuestras pan- tallas, debemos saber si existen formas de cuidar esos accesos. Para evitar ese problema, debemos encontrar un modo de impedir que más de un proceso lea y escriba al mismo tiempo en la memoria compartida, o sea, necesi- tamos una exclusión mutua, para impedir que otro proceso use una variable que ya esté siendo usada por otro proceso. Esen- cialmente, si un proceso ya está usando algún recurso de la región crítica, sola- mente él podrá usar ese recurso mientras tenga derecho de uso de la CPU. 40SISTEMAS OPERACIONALES Una buena solución para el acceso a las regiones críticas debe obedecer 4 pre- misas • Nunca 2 procesos pueden estar si- multáneamente en sus regiones crí- ticas; • Nada puede ser afirmado sobre la ve- locidad o sobre el número de CPUs, entonces la solución para ese proble- ma no puede llevar en consideración la arquitectura de hardware; • Ningún proceso ejecutando fuera de su región crítica puede bloquear otro proceso, o sino, tendríamos un festi- val de “bloqueos” entre los procesos; • Ningún proceso debe esperar eterna- mente para entrar en su región crí- tica, o sea, no puede haber procesos que asignen, de forma infinita, los recursos para sí. Básicamente, una de las maneras más sencillas para hacer esa gestión es utilizar una lógica parecida con la de los baños. ¿Usted ya vio, en la empresa que trabaja o en algún lugar público una placa de “ocu- pado” o “libre” en la puerta? Cuando un proceso entra en una re- gión crítica, él puede señalizar el sistema con una variable que habla “sistema, yo estoy usando el recurso por algún tiempo, no permita que ningún otro proceso asigne el recurso o entre en la región crítica”. De esa manera, todos los otros procesos serán excluidos de forma mutua, hasta que el recurso sea liberado. Sin embargo, tenemos otro proble- ma que surge en ese contexto. Perciba que los problemas sólo empeoran y son cada vez más complejos. Después de todo eso, usted dará más valor para las personas que desarrollaron el sistema operacional que está usando. Normalmente, los procesos asignan más de un recurso, pues, nosotros, como usuarios, exigimos cada vez más de ellos. Entonces, supongamos que un proceso A necesite el recurso X e Y para ser ejecutado. Luego, el proceso A asigna el recurso X e Y para él. El proceso B necesita los recursos X y Z para ser ejecutado. Como el proceso A ya está con el recurso X asignado, el proceso B asigna el proceso Z para él. Ya, el proceso C necesita solamente el recurso Z para ser procesado, sin embargo, el recurso Z está asignado para B y él sólo dejará el recurso Z cuando concluya su procesamiento, pero el proceso A está con 2 recursos asignados y no los dejará hasta que concluya su eje- cución. ¿Percibieron el looping que fue gene- rado? Para ejemplificar esto mejor, existe el famoso algoritmo de los filósofos chinos. Observemos la siguiente imagen: Fuente: TANENBAUM, Andrew S. – Sistemas Operacionales mo- dernos, 2003 41SISTEMAS OPERACIONALES Tenemos 5 filósofos y apenas 5 hashis (palillos). Si usted ya comió comida china con hashis, sabe que son necesarios 2 para conseguir comer, en el caso contrario la pasta no se “pegará” en los palillos. Si todos los filósofos decidieran comer al mismo tiempo, cada uno se quedaría con un hashi en la mano y no tendrán el segundo hashi para comer. Bueno, entonces, ¿cómo resolver ese problema de forma que todos puedan comer y nadie se muera de hambre? Es muy sencillo, y la resolución es más o menos la siguiente: El primer filósofo (proceso) mira para su derecha y para su izquierda, en el caso de que exista 1 hashi a cada lado, él asigna el recurso para comer por un determinado tiempo. En el caso de que el segundo filósofo quiera comer, él mirará para su derecha y para su izquierda y si hay ape- nas un recurso disponible, él no asignará ninguno para él y esperará nuevamente su vez para comer. Así que el primer filósofo termine de comer (en un tiempo determi- nado, o sino, un filósofo goloso asigna los recursos y no los suelta más), él soltará los 2 hashis. En el próximo orden de ejecución, el segundo filósofo verificará si los 2 recursos están disponibles, y, en el caso de que lo estén, él asignará los mismos y comerá por un determinado tiempo. ¿Entendieron la lógica de asignaci- ón de los recursos? Es, más o menos, eso que los sistemas operacionales hacen para poder administrar los recursos y no trabar en un looping infinito de espera de recur- sos, atendiendo a aquellas 4 premisas para una buena resolución de problemas para el acceso a las regiones críticas. Sin embargo, ¿creen que los proble- mas acabaron? Aún tenemos otro problema más clásico en modelos de cliente x servidor. Un sistema de servidor sirve para atender innúmeras requisiciones de usuarios dis- tintos. Un sistema de servidor sólo necesita ejecutar algunas funciones en el caso de que sus clientes las necesiten. Dejar todo siem- pre rodando en las filas de procesamiento puede grabar el poder de procesamiento y utilizar el recurso de forma indebida. De esa manera, usaremos otro ejemplo lúdico, el del barbero dormilón. Imaginemos una barbería. El barbero se mantiene despierto mientras hay clientes en la barbería. Cuando no hay clientes, él duerme para recuperar sus energías. En el caso de que él esté durmiendo y un cliente llegue, él deberá despertar al barbero para que empiece a trabajar. Si llega más de un cliente para cortar- se el pelo, él deberá esperar su vez para ser atendido en una fila, hasta que el barbero esté disponible. Eso es más o menos lo que ocurre en los sistemas. Si el sistema está ocioso, él no mantendrá todos los recursos disponi- bles. El primer proceso que requiera algún recurso “despertará el sistema”. En el caso de que más de un proceso quiera usar un recurso, él se quedará en una fila de espera hasta que llegue su vez de procesamiento. En suma, ésas son técnicas de inter- cambio de recursos de forma segura dentro del sistema operacional. 42SISTEMAS OPERACIONALES Síntesis Final Llegamos al final de más un ca- pítulo, donde pudimoscomprender un poco más sobre el funcionamiento de los sistemas operacionales. El intercambio de recursos es el gran desafío impuesto para los sistemas. Cada vez más, nuevos pro- cesos son creados dentro de los sistemas y hay más aplicaciones siendo ejecutadas al mismo tiempo, lo que vuelve el intercam- bio de recursos algo crítico para el sistema. Por lo tanto, comprender la forma con que el sistema organiza ese intercam- bio nos permite mejorar las aplicaciones desarrolladas y optimizar los sistemas, con el objetivo de atendernos mejor, con mayor seguridad y escalabilidad. EJERCICIOS 1) ¿Qué son regiones críticas? 2) ¿Por qué las regiones críticas son tan “críticas”? 3) ¿Cuáles son las 4 premisas que deben ser atendidas para una buena tratativa de accesos a las regiones críticas? 4) ¿Cuál es la lógica del algoritmo de los filósofos? 5) ¿Cuál es el problema de tener clientes servidor en los modelos? 44SISTEMAS OPERACIONALES DEADLOCK La pelea por recursos y el egoísmo entre los procesos son constantes. El resultado de una disputa entre los procesos es el Deadlock. ¿Aún estamos hablando de procesos? Sí, estamos. Uste- des no creyeron cuando les dije que los procesos son la parte más importante de los sistemas, ¿verdad? Bueno, vamos para más un gran problema que el sistema debe ser capaz de ad- ministrar, el Deadlock. En esta parte de la clase, entenderemos qué son los Deadlocks, el motivo de ser tan indeseables y también cómo tratar de ellos. Pero, ¿cómo ser el juez de esta pelea? ¡Veamos! 45SISTEMAS OPERACIONALES El Deadlock Como ya vimos en los capítulos anteriores, el SO debe ser capaz de ad- ministrar recursos. Algunos de ellos o, prácticamente, todos, sólo pueden ser acce- didos por un proceso de cada vez, y es ahí que toda la magia del sistema operacional ocurre. El SO garantiza el acceso limitado de tiempo para cada proceso, así como esos recursos de forma exclusiva, para que nada malo ocurra. Ahora, imaginemos qué ocurre si un proceso asigna un recurso para él, de forma exclusiva, y, en el medio del camino, él necesita un recurso que ya está asignado para otro proceso, que también asignó de forma exclusiva. El primer proceso se queda esperando el segundo proceso para tomar el recurso, pero, el segundo proce- so no liberará el recurso, pues necesita, justamente, del recurso del primer pro- ceso. Eso entra en un looping infinito. Confuso, ¿verdad? Entenderemos con un ejemplo más práctico. Supongamos, por ejemplo: 2 procesos, donde cada uno desea grabar en CD un documento obtenido de un scanner. El proceso A pide permiso para usar el scanner y es concedido. El proceso B que es programado diferente, solicita primero el permiso para grabar el CD y también es autorizado. Entonces, el proceso A pide para usar el scanner, pero es negado hasta que el proceso B libere el grabador. Infelizmente, el proceso B pide para usar el Scanner, sólo que es negado hasta que A libere el scanner. Perciban, en este caso, uno esperará, de forma infinita, que el otro libere el recurso. Entonces, tendremos algo que todos los programadores de sistemas operacio- nales odian, el temido DEADLOCK. El término Deadlock (bloqueo perpetuo) significa un evento que jamás ocurrirá, viniendo a trabar el sistema. Para reiterar, los recursos de la computadora son impresoras, unidades de cintas, tablas, direcciones de memo- ria, registrador, o sea, todo “aquello que puede ser usado” por el sistema. Tanto los recursos de hardware, como los recursos de softwares. Existen 2 tipos de recursos: los recursos preferentes y los no preferentes. Los recursos preferentes son aquéllos que pueden ser retirados del proceso que los detienen, sin que haya perjuicios en su ejecución. Un buen ejemplo de eso, es un documento que está en la fila de impresión y es cancelado. Lo máximo que ocurrirá es que el documento no sea imprimido y tenga que ser enviado nuevamente para la fila de impresión. Retirar el documento de la fila no ocasiona ningún problema, apenas una repetición de trabajo, tal vez. Ya, los recursos no preferentes son lo opuesto, como ya era de esperarse. En el caso de que ellos sean retirados de los procesos que los detienen, algún proble- ma serio o irreversible ocurrirá. Un buen ejemplo para eso es un grabador de CD. En el caso de que el recurso del grabador sea retirado del proceso durante la gra- bación del CD, no tendrá cómo retomar la grabación y el CD no será grabado de forma correcta. No hay como revertir eso y el CD será perdido. 46SISTEMAS OPERACIONALES Como vía de regla, los deadlocks ocurren con recursos no preferentes, pero, todos saben que la informática es una ciencia exotérica y cosas extrañas pueden ocurrir. Para que haya un deadlock, es ne- cesario que 4 variables existan, en el caso contrario, no tenemos deadlock. Ellas son: • Los procesos exigen control exclusivo de los recursos que solicitan, lo que de- nominamos “condición de exclusión mutua”. Cuando un proceso “toma” un recurso para sí, él lo asigna y no libera más el recurso, excluyendo los demás procesos. • Los procesos mantienen asignados recursos mientras solicitan nuevos recursos, lo que denominamos de “condición de espera por recursos”. Además de que el proceso no libera recursos, él va asignando cada vez más recursos para él, sin liberarlos. • Los recursos no pueden ser retirados de los procesos que los mantienen asignados mientras estos procesos no finalizan su utilización, lo que deno- minamos “condición de ausencia de preferente”. Es lógico, sin preferente en los recursos, los procesos pueden asignarlos por tiempo indeterminado. Si hay preferente de recursos, basta que el SO retire su proceso, luego no tenemos deadlock. • Se forma una cadena circular de pro- cesos donde cada proceso solicita un recurso asignado por el próximo pro- ceso en la cadena, lo que denomina- mos “condición de espera circular”. El ejemplo del proceso del grabador de CD y del scanner, que dimos al inicio del capítulo, es un óptimo ejemplo de eso. Modelaje de Deadlock Para entender mejor cómo funcionan los deadlocks, existe un modelaje expues- to por Tanenbaum. La representación es hecha a través de grafos dirigidos, donde un cuadrado representa un recurso y un círculo un proceso. Cuando un proceso asigna un recurso, una flecha, desde recurso al proceso, es trazada y cuando un proceso necesita del recurso, una flecha, desde el proceso al recurso, es trazada. La representación de la ocurrencia de DeadLock está en el grafo que está a seguir, también ejemplificado por Tanenbaum. Fuente: TANENBAUM, Andrew S. – Sistemas Operacionales mo- dernos, 2003 Deadlock A a CB A CB A CB A CBA CBA CB b c (c) (g)(f )(e) (d) (j) (i)(h) (b)(a) Requisitaa1. r Requisitab2. s Requisitac3. t T TRequisitaa4. s Requisita Requisita Libera Libera r s R s Requisita Requisita Libera Libera r s R s Requisita Requisita Libera Libera t r t r S Requisitab5. t Requisitac6. r R SR TSR TSRTSRTSR 47SISTEMAS OPERACIONALES Para no haber DeadLock, la secuencia de asignación debe ser esta: Tratativas para DeadLocks Los deadlocks son muy indeseables, como ya se esperaba, pues ellos traban todo el sistema operacional. Entonces, en este contexto, nada más inteligente que tratar los deadlocks en el sistema. Básicamente, utilizamos 4 técnicas para tratativas de deadlocks en los sistemas operacionales. La primera técnica es, sencillamente, ignorar el problema. Exactamente lo que usted está leyendo, sencillamente, podemos ignorar el problema y rezar para que él no ocurra. La segunda técnica es detectar y recuperar los deadlocks, o sea, el sistema per- mite que ellos ocurran y después que ellos se concreticen, el propio sistema busca una forma de corregirlo, haciendo que nada malo ocurra. La tercera técnica es un poco más elaborada y tiene como objetivo evitar, de forma dinámica, que el deadlock ocurra, a través de asignación dinámicade recursos de forma cuidadosa, evitando que ocurra el problema. Y, por fin, la cuarta técnica es prevenir que el deadlock ocurra, impidiendo que una de las 4 condiciones necesarias, para que haya deadlock, surja en el sistema. Perciban que ni siempre tratar dea- dlock es evitarlo o prevenirlo, a veces, los sistemas apenas aceptan que ellos puedan ocurrir. Algoritmo del Avestruz Bueno, conoceremos más profunda- mente las técnicas de tratativas de deadlo- ck. La primera y más barata es el Algo- ritmo del Avestruz. ¿Qué hace el avestruz cuando ocurre algún problema o cuando él está con miedo? Sencillamente, mete la cabeza debajo de la tierra e ignora todo a su alrededor (claro que eso no resuelve Fuente: TANENBAUM, Andrew S. – Sistemas Operacionales modernos, 2003 48SISTEMAS OPERACIONALES nada, pero él lo hace). El sistema operacio- nal hace la misma cosa. Cuando ocurre el deadlock, él ignora y deja que todo trabe (cualquier pantalla azul que ya pasó en su vida no es mera coincidencia...). Esa forma de tratar el deadlock es utilizada por los sistemas, llevando en con- sideración algunas ponderaciones. A veces el deadlock es raro y el costo de prevención es muy alto, también monetariamente, con horas de desarrollo cuando está en tiempo de procesamiento, pues son más y más procesos de controles que deben ser im- plementados. Puede ser displicencia, pero, el uso de este tipo de algoritmo es hecho con base en informaciones estadísticas de la ocurrencia de los deadlocks. Detección y Recuperación de Deadlocks Muy bien, en sistemas mejor desar- rollados, ignorar que el deadlock existe no es una buena práctica. Entonces, veamos lo que puede ser hecho. El sistema puede aplicar algoritmos de detección y recupe- ración de deadlock. El objetivo es permitir que los blo- queos ocurran y, a partir de eso, detectarlos y recuperarlos a través de algoritmos de- sarrollados para este fin. Estos algoritmos poseen la tarea de descubrir las causas de las ocurrencias de deadlock y eliminar nuevas ocurrencias. Recuperación por medio de pre- ferente: Ese algoritmo retira un recurso, pasible de preferente, de un proceso en- tregándolo a otro proceso y después de- volviéndolo para el primer proceso. De esa manera, no hay ocurrencia del deadlock, pues, ningún proceso se queda esperando infinitamente para obtener el recurso, él es compartido a través de su preferente, si es necesario, con el objetivo de liberar el recurso. El sistema puede retirar recurso de los procesos. Recuperación por medio de rever- sión de estado: Guardar el estado del proceso para que pueda ser revertido a su estado interior (chekpoint) en el caso de que ocurra el deadlock, liberando los recursos que están asignados. Un ejemplo muy bueno para eso es para los amantes de juegos. Sabe, ¿cuándo usted está jugando y su personaje muere y usted no vuelve para el inicio del juego, sino que para una etapa antes de la muerte del personaje, un paso antes de cair en el agujero? Es más o menos eso lo que el algoritmo hace. Él guarda el último estado “bueno” del proceso, y en el caso de que ocurra el deadlock, él hace que el proceso/recurso vuelva un paso atrás e impida que él genere el deadlock. Recuperación por medio de eli- minación de proceso: Sencillamente, el proceso está “muerto” y nada más. Trági- co ¿verdad? El sistema escoge el proceso menos crítico y lo “mata”, de esa manera, los recursos son liberados y el deadlock no ocurre. Matar procesos es una prácti- ca muy común para destrabar sistemas o procesos que están con problemas. En el Windows utilizamos el comando taskkill y en el Linux el kill (nombres sugestivos, ¿verdad?). 49SISTEMAS OPERACIONALES Prevención de DeadLocks Muy bien, vimos cómo detectar y recuperar deadlocks, pero también existen técnicas de prevención. Mientras más com- pleja es la tratativa del deadlock, mayor su costo monetario y de procesamiento del sistema, pero el SO se queda mucho más seguro y estable. Veremos algunas técnicas de prevención. Prevención Dinámica: Este algo- ritmo previene, a través de procedimien- tos de asignación que analizan y mapean la posibilidad de formación de cadenas circulares, los looping de requisición de recursos, y por consecuencia, los deadlo- cks. Luego, son algoritmos complejos y es posible un gran consumo de recursos, aumentando el tiempo de respuesta del sistema operacional en determinados pro- cesos más complejos. Caminos Seguros e Inseguros: La gran cuestión de estudio es, “¿Existe algún algoritmo capaz de realmente evitar Dea- dlock?”, la respuesta es “Sí, existe”. Recuer- de que todo en informática está dentro de una cuestión mayor aún, “Depende, todo depende”, entonces, teóricamente, existen técnicas capaces de evitar deadlock, pero todo en informática es algo exotérico. Algunos algoritmos, los más efica- ces, utilizan técnicas de camino de estados seguros y caminos de estados inseguros. En los caminos de Estado Seguro existe una secuencia de asignaciones que garantiza que todos los procesos sean con- cluidos. Es seguro, pues el sistema esca- lonando, cuidadosamente, cada recurso y entregando de forma racional, puede evitar el deadlock. Así, el sistema sólo libera el proceso para asignar el recurso, si todos están en un estado seguro, en el caso con- trario, no será liberado para asignarlos. En los caminos de Estados In- seguros existe una o más secuencias de asignaciones que pueden impactar en la conclusión de los procesos, generando de- adlock. Los sistemas no pueden garantizar la conclusión de todos los procesos. Cuan- do la lógica de asignación nos dice que generará una situación de espera infinita por un recurso o una condición circular de asignación, el SO impide la asignación de los recursos, evitando el deadlock. Esta- do inseguro no es sinónimo de deadlock, apenas en el estado inseguro tenemos la mayor probabilidad de surgir un deadlock. Algoritmo del Banquero ¿Quién mejor para saber compartir recursos que el banco? Los bancos toman nuestro dinero y distribuyen entre sus agencias, pero, nuestro dinero no está todo en una única de ellas. El recurso, dinero de los bancos, está distribuido de forma que pueda atender a todos los saques de sus clientes. Pero, ¿imagine si todos los clientes decidieran sacar todo su dinero en una única agencia? No es posible, pues la agencia no comportaría tanto dinero. Pero, ¿cuál es la probabilidad de que todos los clientes saquen todo su dinero en la misma agencia del banco? Prácticamente es imposible ¿verdad? 50SISTEMAS OPERACIONALES El Algoritmo del banquero es un algoritmo de asigna- ción de recursos con prevención de deadlock desarrollado por Edsger Dijkstra. Él prueba la seguridad por la simulación de la asignación del máximo predeterminado posible de montan- tes de todos los recursos, en seguida, hace una verificación de estados seguros para probar la posibilidad de condiciones de deadlock para todas las otras actividades pendientes, antes de decidir si la asignación debe proseguir. El algoritmo asigna recursos de forma racional, que pueda atender a todos los procesos que necesiten de ellos, de manera similar a lo que el banquero hace y, al final, todos están contentos con sus recursos. Síntesis Final Llegamos al final de una etapa más y aún estamos ha- blando de procesos, pero pueden quedarse tranquilos que desde ahora en adelante no hablaremos más de procesos de una forma directa, ahora avanzaremos para otras partes de la arquitectura del sistema. Por lo tanto, comprender cómo los procesos funcionan y cuáles son los problemas que pueden ocurrir con ellos, como el deadlock, nos capacitará para que podamos desarrollar aplicacio- nes cada vez más estables y sin problemas. En todos los encer- ramientos les comenté sobre “desarrollar aplicaciones mejores”, ese asunto debe ser recurrente, pues, el mayor desafío es crear aplicaciones estables en el medio de un universo exotérico de los sistemasoperacionales. EJERCICIOS 1) Compartir recursos es el gran desafío del sistema operacional. Muchos procesos requieren recursos, que muchas veces no están libres para uso. En el medio del intercambio nos deparamos con algunos problemas como el Deadlock. Explique ¿qué es deadlock y el motivo por el cuál ellos son tan indeseados? 2) El preferente es una característica de algunos tipos de sistemas y muchas veces es usado en los planificadores de procesos. Ese concepto también es utilizado con recursos, pudiendo ser preferentes o no. Explique la diferencia entre recursos preferentes y no preferentes. 3) Los deadlocks no surgen del limbo. Para que exista deadlock son necesarias 4 situaciones de forma simultánea. De esa manera, apunte cuáles son ellas y explíquelas. 4) Existen algunas técnicas para tratativas del deadlock con el objetivo de optimizar el uso del sistema operacional. Explique 2 técnicas de detección o recuperación de deadlock. 5) Además de las técnicas de detección y recuperación de deadlock, el sistema puede aún aplicar técnicas de prevención de él, que son muy interesantes para el sistema. Apunte 2 de esas técnicas. 52SISTEMAS OPERACIONALES GESTIÓN DE MEMORIA Hoy, mi memoria está RAM, duermo y me olvido de las cosas. ¿Entendió la broma? ¿No? Entonces vamos a estudiar cómo la memoria RAM funciona. La Gestión de Memoria, así como el de proceso, es una pieza fundamental para el buen funcionamiento del sistema operacional. La memoria ni siempre fue en abundancia. La facilidad en adquirir memoria RAM es algo nuevo. A inicios de la programación y de las computadoras, la memoria RAM era escasa, por eso, debería ser administrada de forma muy precisa por el sistema. Comprenderemos cómo los sistemas modernos admi- nistran las memorias y entenderemos cuáles técnicas eran y aún son utilizadas para hacerla magia de multiplicación de memoria RAM.Confíe en la importancia de la memoria RAM al estudiar este capítulo. 53SISTEMAS OPERACIONALES La Gestión de Memoria Encerramos toda la parte de GES- TIÓN de procesos y ahora avanzaremos un poco más. Entraremos en la gestión de Memoria que es de extrema importan- cia para el buen funcionamiento del SO. No menospreciando las demás gestiones, pero, la de memoria y procesos son más importantes, sin ellas el SO no funciona o cualquier problema en ellas impacta en todo el SO de forma crítica. La memoria que con la que tra- bajaremos en esa gestión es la principal, que está relacionada directamente con la CPU, a través de filamentos y rutas en la placa madre. La memoria es un recurso importantísimo para el Sistema Operacio- nal y debe ser administrado con mucho cuidado. Los programas, cada vez más, tienden a crecer y a ocupar más espacio en la memoria. Con los sistemas multitareas y la creatividad de los usuarios, la gestión de memoria debe estar muy bien esquema- tizada. Piense, ahora, en este momento. Usted debe estar con el navegador abierto en la página de Uniftec, buscando ma- terial de estudio, al mismo tiempo que su software de downloads preferido está abierto, junto con su player de música fa- vorito y, tal vez, también tenga un software de mensajes abierto para conversar con sus amigos, todo eso siendo ejecutado y ocupando espacio en la memoria RAM. La orquestación de la memoria debe ser impecable para que todo funcione. Jerarquía de las Memorias Existe una jerarquía de memorias. Cada tipo de memoria fue criada para algún objetivo específico y desempeña funciones diferenciadas. El primer nivel de la jerarquía es muy pequeño, en el hardware de la com- putadora. Ella es una memoria volátil, muy rápida y de costo muy alto. La memoria Caché, normalmente localizada dentro del slot del procesador o, incluso, fijada junto a la base del procesador. Esa memo- ria posee un acceso extremamente rápido, pues, físicamente está “colocada” junto al procesador, pero es muy cara, realmente cara. Normalmente, las computadoras po- seen algunos megabytes solamente, entre 2 y 8 megabytes. El sistema operacional carga en memoria Caché los programas que son más utilizados o que necesitan una ejecución muy rápida. Mientras mayor es el caché, más rápido es el acceso a los programas. Ejemplif icaremos mejor. Un al- bañil está haciendo una pared y necesita ladrillos, él le pide al ayudante para que vaya a buscarlos. Entonces, el ayudante toma los ladrillos y se los trae al albañil para que los ponga en la pared. La ve- locidad de la memoria y del procesador son diferentes, siendo, la memoria RAM, mucho más lenta, realmente mucho más lenta, de esa manera, se usa el caché para agilizar las cosas. El ayudante deja algu- nos ladrillos al lado del albañil y continúa trayendo más para que el albañil no pare. 54SISTEMAS OPERACIONALES Avanzando ahora para el segundo nivel de memoria. Una gran área de me- moria principal, volátil, con decenas de megabytes de velocidad y costo medio. Ésa es la memoria RAM o memoria princi- pal. Su tiempo de acceso es más lento que la Caché, pero mucho más rápida que la memoria de almacenaje, como los HDs. Mientras más memoria RAM se dispone para el Sistema Operacional, más rápido serán los cambios de procesos y acceso a las informaciones. Luego, no podemos decir que sola- mente la memoria RAM deja la computa- dora más rápida. Veamos, nuevamente, un ejemplo. De nada sirve comprar un Ferrari y ponerle un motor de un Volkswagen modelo escarabajo 1970 dentro de él. Por más que el carenado sea del Ferrari, lo que hace que el coche ande es el motor de un Volkswagen modelo escarabajo. De esa forma, la Memoria RAM debe andar, lado a lado, con la capacidad de procesamiento y direccionamiento del procesador, todo en harmonía. En un tercer nivel de memoria tene- mos una memoria no volátil, con centenas de gigabytes, de costo bajo y velocidad baja. Son nuestros HDs convencionales, con brazos mecánicos y discos internos, o, incluso, nuestros CDs y DVDs. Las me- morias de almacenaje tienden a ser mucho más lentas en su tiempo de acceso, y sirven apenas para almacenar datos. Su valor en comparación con las otras dos memorias es mucho más bajo. Arriesgo a insertar un nivel más de memoria. Una memoria no volátil, de cos- to alto y velocidad alta. Los HDs SSD o sólidos. Como no hay nada mecánico en ellos, el tiempo de acceso es mucho más rápido, realmente mucho más rápido. Esa tecnología aún es ara, pero, como todas las nuevas tecnologías, quedará accesible en algún tiempo. HDs SSD realmente dejan los sistemas mucho más rápidos, por lo tanto, considere cambiar su HD convencional por un SSD, con el objetivo de mejorar la performance de su computadora, pero, recuerde, no sirve de nada tener un Ferrari con motor de Volkswagen modelo escarabajo. El sistema operacional debe admi- nistrar todas esas memorias, sin embargo, la gestión de memoria está restricta a las memorias volátiles, las demás son traba- jadas como dispositivos de entrada y de salida, que estudiaremos más adelante. ¿Cómo funcionan las cosas? Como les vengo diciendo en los otros capítulos, mis queridos alumnos, las cosas funcionan de forma exotérica en in- formática, pero racional. Veamos algunas reglas básicas de cómo son ejecutados los programas dentro del sistema operacional. Usted enciende su computadora, y el proceso de bootstraping ocurre. El administrador de boot del HD (veremos eso en el próximo capítulo) tomará los ar- chivos del sistema operacional y los dejará en la memoria RAM. Realmente chicos, el Sistema Operacional es ejecutado en la memoria RAM, el HD está allí, so- lamente, para guardar los archivos de los sistemas para que él pueda iniciar. 55SISTEMAS OPERACIONALES Después que los archivos de los sistemas están en memoria RAM, ellos son procesados y el sistema y encarga del hardware de la computadora. Al apagar la computadora todos los datos de la me- moria RAM son perdidos y en la próxima inicialización, el administradorde boot carga nuevamente todos los archivos del SO en memoria RAM, para ser ejecutado nuevamente. Una regla básica que no puede ser olvidada jamás. Todo y cualquier proceso/ programa/software, sólo puede ser ejecu- tado si está asignado en memoria RAM, en el caso contrario él no será ejecutado. Básicamente, ésta es la lógica: Todos los programas ejecutables son un archivo que reside en disco: • Al ser ejecutado, primero necesita ser cargado en la memoria. • El administrador de procesos decide cuál proceso será ejecutado. • El administrador de memoria de- cide dónde colocar el proceso en la memoria. • Solamente, después de la carga en la memoria, el proceso estará dis- ponible para rodar. La función del administrador de memoria es cargar los programas en me- moria RAM, liberar espacio en la memoria de programas que ya fueron ejecutados y administrar toda conmutación de memoria entre los niveles de memoria. Podemos clasificar los sistemas de dos formas referentes al GESTIÓN de memoria. Tenemos los sistemas, que du- rante la ejecución llevan y traen archivos y datos entre la memoria principal y el disco rígido, así como tenemos sistemas que sen- cillamente no hacen eso, apenas cargan sus informaciones en memoria principal y no hay esa conmutación, como por ejemplo, algunos sistemas embarcados con los que trabajaremos más adelante. Memoria RAM Memoria RAM o memoria princi- pal es el componente de hardware respon- sable por almacenar los datos que serán ejecutados. Como ella es volátil, al perder energía eléctrica los datos serán perdidos. El acceso a la memoria RAM fun- ciona a través de direcciones. Cada célula de memoria posee direcciones hexadeci- males que almacenarán los datos. Así, el sistema referencia esas direcciones para saber la localización de los datos alma- cenados. ¿Ustedes ya vieron un error que ocurría, con alguna frecuencia, en un sistema operacional propietario, donde aparecía una pantalla azul con errores y un mensaje de volcado de memoria física? Abajo de ese mensaje aparecían códigos hexadecimales de regiones de memorias que fueron afectadas. De esa forma, una dirección con problema físico en la memo- ria compromete el buen funcionamiento del sistema operacional. 56SISTEMAS OPERACIONALES Memoria Caché La memoria Caché es una memo- ria volátil de alta velocidad. El tiempo de acceso a un dato en ella es mucho menor que si él estuviera asignado en la memoria principal. Cada vez que el procesador hace re- ferencia a un dato que está en la memoria principal, él “busca” antes en la memoria caché. Si él encuentra el dato en la me- moria caché, no es necesario acceder a la memoria principal, dejando más rápido el proceso. Memoria Secundaria La memoria secundaria es un medio permanente, o sea, no volátil, de almace- naje de programas y datos. Mientras la memoria RAM necesita estar energizada para mantener las informaciones, la me- moria secundaria no necesita alimentación eléctrica para mantener sus datos almace- nados por tiempo indeterminado. Buffering Puedo afirmar que sin el buffer nuestra vida no sería tan divertida como ella es actualmente. La velocidad con que el procesador y la memoria trabajan es mucho más rápida que la velocidad que los dispositivos periféricos trabajan. El buffer surge para intentar minimizar la disparidad que existe entre los dispo- sitivos. El tiempo de acceso que un HD posee es inferior al tiempo de acceso de la memoria principal. Para los devotos a los juegos, el buffer es el responsable por sus horas de diversión sin los indeseables lags que pueden ocurrir. La manera frenética con que los juegos funcionan necesita que las informaciones sean almacenadas en una forma de buffer, con el objetivo de optimizar el procesamiento de la CPU. Entonces, a cada loading que él realiza, ocurre la conmutación de la memoria, el cambio de informaciones entre el HD y la RAM y también un cierto buffer. La onda de streaming por internet también necesita buffer. El Netf lix, You- tube, Spotify, entre otros, sólo funcionan correctamente, porque existe un buffer de datos cargado previamente y actualizado durante todo el proceso para que no haya interrupciones en la exhibición de los vídeos y músicas. En suma, el buffer carga infor- maciones antes de iniciar la ejecución. Podemos utilizar el mismo ejemplo del albañil. Su buffer es un alto de ladrillos extras que él mantiene antes de necesitar comprar más ladrillos. Así, hasta que los ladrillos nuevos lleguen, él usa los ladrillos extras. Como definición más formal, invo- caré a nuestro amigo Tanenbaum (2010): “El buffer debe tener la capacidad de almacenar diversos registros, para que permita que existan datos leídos en el buffer, pero aún no procesados (opera- ciones de lectura), o procesados, aún no grabados (operación de grabación). De esa 57SISTEMAS OPERACIONALES manera, el dispositivo de entrada podrá leer diversos registros antes que la CPU los procese, o la CPU podrá procesar diversos registros antes de que el dis- positivo de salida realice la grabación. Eso es extremamente eficiente, pues, de esa manera, es posible compatibilizar la diferencia existente entre el tiempo en que la CPU procesa los datos y el tiempo en que el dispositivo de E/S realiza las operaciones de lectura y grabación.” Mono programación sin cambio de procesos o paginación Cada sistema operacional posee una finalidad. Ni todos los sistemas son pro- gramados para ejecutar inúmeros procesos, algunos sistemas apenas realizan pequeñas tareas, siempre iguales y siempre de la mis- ma manera, sin variar su comportamiento. Normalmente, sistemas embarcados trabajan de esa manera, pues ejecutan ape- nas una tarea y siempre igual. Sin embar- go, eso lo estudiaremos en los próximos capítulos. Cuando se utiliza un esquema más sencillo de programación de gestión de memoria en el sistema operacional, ella es compartida entre el programa y el sistema y solamente un programa es ejecutado de cada vez. Cuando el sistema es organiza- do de esa manera, solamente un proceso puede ser ejecutado en cada instante. El SO carga todo el programa en la memoria, mientras está siendo ejecutado. Cuando sea finalizado, el SO liberará el área en la RAM para que otro programa sea cargado en el espacio, antes ocupado por el primer programa. De esa manera, el intercambio de memoria RAM es muy sencilla, pues, el sistema ya sabe cuánto de espacio cada pro- grama ocupará en memoria, basta asignar el área cuando sea cargado. Son sistemas que realizan actividades específicas y re- petidas, sin variación. Multiprogramación Algunos sistemas operacionales son desarrollados para ejecutar tareas especí- ficas, pero otros sistemas no. Muchos SO son desarrollados para ejecutar innúmeras actividades y atender solicitudes diversas. Sistemas de ese tipo tienden a asignar áreas de memorias fijas o variables, de acuerdo con cada necesidad. Entonces, tenemos la multiprogramación con particiones fijas y la multiprogramación con particiones variables. 58SISTEMAS OPERACIONALES Aún tenemos algunos problemas en la multiprogramación, como no saber en cuál dirección de memoria el progra- ma será cargado, así como la protección que debe ser realizada para que ningún programa invada el espacio del otro. Así, el administrador de memoria debe garan- tizar esa seguridad y resolución de esos programas. Multiprogramación con Particiones Fijas La manera más sencilla de trabajar con sistemas de multiprogramación, en lo que se refiere a la gestión de memoria, es dividir el espacio de memoria en particio- nes fijas de tamaños variados. Cuando un nuevo proceso llega para ser asignado en memoria RAM, el sistema busca la menor partición existente, que sea suficiente para asignar el programa dentro de ella. Pero, esto genera un gran problema de desperdicio de memoria, pues, la partición de memoria que fue asignada es exclusiva del proceso quela ganó, y, en el caso de que sobre memoria libre, ella será perdida. La mejor forma de escoger donde cada proceso será asignado, es utilizar una fila única de todos los procesos e investigar en ella el tamaño de cada uno de ellos, así como ir asignando, de forma más inteligente, el espacio que cada uno ocupará. Observe la siguiente imagen, donde la figura (b) representa la fila única de asignación de memoria: Multiples �las de entrada 700K 400K 100K 0 (a) (b) Particion 4 Particion 3 Particion 2 Particion 1 Sistema operacional Particion 4 Particion 3 Particion 2 Particion 1 Sistema operacional Fila de entrada única Fonte: TANENBAUM, Andrew S. – Sistemas Operacionais modernos, 2003 59SISTEMAS OPERACIONALES Multiprogramación con Particiones Variables Ya percibimos que utilizar particio- nes fijas no es una idea muy inteligente para sistemas de multiprogramación, te- niendo en vista el número de procesos y programas que existen. Entonces, fueron desarrolladas técnicas de particiones va- riables que se adecuan a cada proceso. Las particiones varían de acuerdo con la necesidad de cada proceso, llevando en consideración su tamaño, localizaci- ón y número de particiones, mejorando la utilización de memoria. Cada proceso usará, solamente, el área que sea necesaria. Pero, esa técnica dificulta el proceso de asignación y desasignación de memoria. Aun con ese cuidado, todavía pode- mos tener espacios vacíos entre los procesos en la memoria, oriundos de la asignación y desasignación de ellos, en RAM. Enton- ces, existen técnicas de compactación de memoria, que tienen el objetivo de “tapar” esos agujeros, pero la utilización de ellas acarrea el uso excesivo de la CPU, gravan- do los procesos, luego, debe ser muy bien pensada antes de ser utilizada. Cambios de Procesos Los sistemas están en constante evolución y los programas también. Hoy, tenemos muchas memorias RAM insta- ladas en nuestras computadoras, pero, ni siempre fue así. Hubo una época donde la memoria RAM era cara y muy limitada, por causa de las arquitecturas que existían. Cada programa peleaba por cada byte li- bre que existía. Actualmente, las cosas cambiaron, pero ni tanto. Los programas son desarrollados para usar el máximo de memoria que puedan y cada día aparecen más programas nuevos que consumen más memoria RAM. Aquí surge más un problema. Ni siempre existe memoria RAM suficiente para todos los programas que están siendo ejecutados. Nosotros queremos, cada vez más, apilar procesos y programas abiertos al mismo tiempo. No basta jugar un juego, tenemos que jugar y al mismo tiempo estar descargando algo y oyendo música, mien- tras colocamos el status del skype como ausente. Todo eso consumiendo memoria RAM y tiempo de procesamiento. Pero, entonces, ¿cómo resolver ese problema antiguo y actual? Para eso, sur- gieron dos técnicas que solucionarán ese problema de falta de memoria RAM, ellas son: técnica de Swapping y Memoria Vir- tual. Swapping Tenemos una computadora con 16 MB de memoria RAM (sí señores, ya hubo una época donde las computadoras personales tenían eso de memoria RAM y en ella debería estar asignada el área de memoria del sistema operacional, que es intocable) y también el área que los pro- cesos ocuparán. Teníamos el problema de que los 16 MB se llenaban y el usuario pedía para que un nuevo programa fuera abierto. No habiendo más espacio en la memoria, ¿qué podemos hacer? 60SISTEMAS OPERACIONALES Bueno, fue desarrollada una solución muy inteligente para eso. Cuando insta- lamos un sistema operacional (de forma automática o no), tenemos que definir un área de Swapping en el HD. Un espacio en memoria secundaria, que estará “muerto”, exclusivo para ser usado para el cambio de procesos. Volviendo a nuestro ejemplo. Nues- tra computadora está con 16 MB de me- moria RAM llena, y un nuevo programa es abierto por el usuario. En ese momento, el sistema escoge un proceso o programa que está más ocioso o que impacta menos en la utilización del SO, luego lo retira de la memoria RAM, llevando sus datos para el área de Swapping, liberando espacio en la memoria RAM, permitiendo que un nuevo programa sea abierto en aquel local. Cuando el usuario necesite el pro- grama que fue retirado de la memoria RAM, el administrador irá hasta la me- moria secundaria (HD), verificará si el programa está en el área de swapping y lo cargará nuevamente en la memoria RAM, para que pueda ser ejecutado. Sin embargo, ¿qué pasa si a la hora de cargar el progra- ma nuevamente, la memoria está llena? Él hace nuevamente el mismo proceso. Desasigna un área, llevando los datos para swapping, liberando el espacio necesario. Normalmente, el tamaño de área de swapping es equivalente al tamaño de la memoria RAM. Así, si tenemos 1 GB de memoria RAM, podemos tener 1 GB de memoria de swapping en el HD. Pero, perciban que eso no es una constante, en- tonces, pensemos. ¿Si tenemos una com- putadora actual con 16 GB de memoria RAM, es inteligente mantener 16 GB de memoria swapping? Claro que no. Esa ló- gica se aplica más en computadoras viejas y más lentas. Ya que los sistemas operacio- nales actuales, poseen una optimización para el uso de swapping. Entonces, antes de que usted piense en alterar cualquier cosa en un sistema, piénselo muy bien. Memoria Virtual – Paginación Ya entendimos lo que es swapping o cabio de procesos. Ahora, avanzaremos un poco más en esa construcción de memoria virtual. El área de swappping en sí, abriga las páginas de memoria. Pero ¿qué es eso? Veamos otro concepto, el de Me- moria Virtual y Paginación de memoria. La CPU necesita asignar los procesos en direcciones de memoria y si él consigue leer solamente 16 MB, no asignará nada más además de los 16 MB. Sin embargo, ¿cómo resolver nuestro problema de me- moria? En algún momento un científico de informática inventó algo llamado MMU (Memory Management Unit), una pieza física que conversa directamente con el procesador y lo engaña de forma vergon- zosa. La MMU sirve para engañar el procesador y mostrar más direcciones de memoria para él. De forma bien práctica, tenemos 16 MB de memoria RAM y la MMU engaña al procesador, diciéndole que tenemos 32 MB de memoria RAM. 61SISTEMAS OPERACIONALES La MMU está localizada muy cerca del procesador, de acuerdo con la siguiente imagen: De esa manera, ocurre la multiplicación lógica de memoria RAM y todos los problemas están resueltos ¿verdad? ¡Por supuesto que no! Entonces, entendamos como la MMU trabaja con la técnica de memoria virtual. Observemos la imagen que está a continuación: La MMU trabaja con el concepto de Páginas Virtuales. Cada página virtual recibe una dirección que es presentada al procesador. Entonces, la MMU hace la conversión de esa dirección virtual para la dirección física correspondiente a una moldura de página. Observe en la figura anterior. La CPU envía direcciones virtuales para la MMU Memoria Controlador de disco Bus La MMU envía direcciones físicas para la memoria CPU Chip de la CPU Unidad de gerenciamiento de memoria (MMU) Fonte: TANENBAUM, Andrew S. – Sistemas Operacionais modernos, 2003 Fuente: TANENBAUM, Andrew S. – Sistemas Operacionales mo- dernos, 2003 } } Página virtual Espacio de dirección física Moldura de página 60K-64K 56K-60K 52K-56K 48K-52K 44K-48K 40K-44K 36K-40K 32K-36K 28K-32K 24K-28K 20K-24K 16K-20K 12K-16K 8K-12K 4K-8K 0K-4K X X X X 7 X 5 X X X 3 4 0 6 1 2 28K-32K 24K-28K 20K-24K 16K-20K 12K-16K 8K-12K 4K-8K 0K-4K 62SISTEMAS OPERACIONALES Bueno, tenemos las páginas virtuales y las molduras de páginas, pero ¿cómo fun- ciona eso? El administrador de memoria se queda monitoreando la memoria RAM, cuando ella está con un porcentaje lleno, entonces, él empieza a hacer el swapping de los datos para el disco rígido. El ad- ministrador toma las páginas que están en la memoria y las disloca para el área de paginación de la memoria secundaria,liberando espacio para que nuevas páginas entren en las molduras. Cuando el pro- cesador necesita una página que no está en la memoria RAM, el administrador carga la página en la memoria principal para ser procesado. Eso es repetido de forma frenética durante todo el tiempo de ejecución del sistema operacional. Así, como existe la planificación de procesos, podemos decir que existe un planificador de página. Existen varios al- goritmos que son utilizados para escalonar el cambio de página y decidir cuál página sale y cuál página se queda. Un consejo: Busque más sobre ellos. Los principales son: • Óptimo • NRU • FIFO • Segunda Oportunidad • Reloj • LRU • Working set • WSClock Esas técnicas tienden a mantener el sistema operacional funcional, sin que él trabe por falta de memoria. Pero, existe un gran costo para que eso ocurra. Todo ese proceso deja el sistema muy lento. Toda lógica de memoria virtual, paginación, swapping, es muy lenta. Por eso, son téc- nicas usadas apenas para no “trabar” el sistema, no siendo aconsejable trabajar en el límite de memoria y utilizarlas mucho, pues el sistema se quedará muy lento. Síntesis Final Concluimos el estudio sobre GES- TIÓN de memoria y abordamos los prin- cipales aspectos relevantes sobre el asun- to. Aprendimos cuál es la función de la memoria, los tipos de memoria y cuáles son los desafíos que un sistema posee al administrar memorias. Por lo tanto, creo que estamos aptos para avanzar para los próximos módulos, que, desde mi punto de vista, existen para agregar valor a la utilización del sistema. En ese sentido, es muy importante llevar con nosotros los conceptos y técnicas de gestión de memo- ria, para comprender mejor los problemas que ocurren en nuestro día a día. EJERCICIOS 11) Tan importante como el procesador y la gestión de procesos, son las memorias y la gestión de memoria, que también desempeñan una función visceral para que el sistema pueda ser utilizado. Conocer los tipos de memorias nos permite entender cómo funciona el sistema. A partir de eso, cite la jerarquía de memoria, junto con su característica. 2) Todos los procesamientos ocurren de forma muy rápida y el acceso a los datos debe ser rápido. Explique cuál es el motivo por el cual todos los programas deben ser cargados en la memoria principal para ser procesados. 3) Ni siempre tuvimos memoria sobrando en las computadoras, al inicio había poca memoria y muchos programas para ser ejecutados. Entonces, surgió la técnica de memoria virtual. Explique cómo la MMU funciona y el concepto de memoria virtual. 4) Junto con la técnica de Memoria Virtual, tenemos la técnica de swapping, utilizada para mantener el sistema funcionando, aun cuando no hay más memoria disponible. Explique qué es y cómo funciona el swapping. 5) Para asignar las áreas de memoria que serán utilizadas por los programas, el sistema utiliza dos técnicas, la de particiones fijas y la de particiones variables. Explique cómo ellas funcionan y cuáles son los puntos fuertes y débiles de cada una de ellas. 64SISTEMAS OPERACIONALES GESTIÓN DE DISPOSITIVOS DE ENTRADA Y SALIDA La diversión sólo está completa con nuestra computadora, en virtud de los dispositivos de entrada y de salida. El gran objetivo del sistema operacional en conectar el hardware para el usuario y facilitar la usabilidad del sistema es extendido y completo, junto con los inúmeros dispositivos de entrada y salida que existen. En esa etapa, entenderemos cuáles son las funciones de esos dispositivos y su importancia en la evolución de los sistemas operacionales, junto a las facilidades que ellos nos proporcionan.Le garantizo que usted también llegará a esa conclusión. ¿Acepta el desafío? ¡Vamos! 65SISTEMAS OPERACIONALES Dispositivos de Entrada y de Salida Hasta ahora, durante el curso, es- tudiamos todo lo que es básico para que un sistema operacional funcione. Incluso, sobre poseer procesador y memoria en una placa que interconecte todo eso. El funcio- namiento básico es lo más importante de la computadora, se resume a eso: procesador y memoria, el resto son apenas futilidades. Sin embargo, como todo en la vida, son las futilidades que dejan las cosas mucho más interesantes y legales. Con el avance de la computación personal, muchos “accesorios” tuvieron que ser agregados a las computadoras para dejarlas cada vez más atrayentes y con más funcionalidades. Las computadoras de- jaron de ser apenas grandes “armatostes” utilizados por empresas y se volvieron una herramienta de diversión y entretenimien- to. De esa manera, el sistema operacional tuvo que evolucionar en varios aspectos. Lo que estudiaremos, en este mo- mento, no es algo que haya sido desarrolla- do por causa de los usuarios domésticos, surgió mucho antes de eso, pero podemos percibir que fue junto con la computación personal que las cosas evolucionaron más. Cuando la memoria RAM y el procesador no eran más suficientes para atender las necesidades, algunos periféri- cos tuvieron que ser acoplados a la placa madre de la computadora y los sistemas empezaron una importante evolución. Entonces, surgieron los dispositivos de Entrada y de Salida (E/S) o como varios autores utilizan, Input y Output (I/O). Los dispositivos de entrada y de salida (E/S) son utilizados para establecer la comuni- cación entre la computadora y el mundo externo. A través de esos dispositivos, la CPU y la memoria principal pueden es- tablecer comunicación, tanto con usuarios como con memorias secundarias. Los dispositivos de E/S son dividi- dos, básicamente en 2 categorías. Tenemos los dispositivos que desempeñan la fun- ción de memoria secundaria, como HDs, cintas, disquetes, entre otros, y también los que son responsables por la interface hombre –máquina. Entre los dispositivos de memoria secundaria, destacamos los HDs. Con la crecente necesidad de almacenar informa- ciones, los HDs fueron evolucionando en tecnología y capacidad. Actualmente, las unidades de almacenaje son importantes para almacenar, no sólo los archivos de los usuarios, pero también todos los ar- chivos del sistema operacional. El siste- ma debe ser capaz de entender cómo esos dispositivos funcionan para que pueda acceder los datos que están grabados en ellos y también efectuar un control sobre eso (estudiaremos, en el próximo capítulo, los Sistemas de Archivos que realizan esa actividad). A partir de todo eso, aparece la pregunta: “¿pero usted no dijo que eran apenas futilidades? ¿Cómo un sistema puede subsistir sin el HD, por ejemplo, para salvar sus archivos?”, Veremos, más adelante, que, podemos sí, tener un sistema operacional sin tener un HD instalado en la computadora. Ya, los dispositivos de interface hombre - máquina, no almacenan infor- 66SISTEMAS OPERACIONALES maciones, sin embargo realizan toda la interface entre la computadora y el ser humano. Podemos destacarlos como ver- daderos “accesorios”, los cuales son agre- gados a la computadora y donde el sistema posee la difícil misión de administrarlos. Partiendo del más básico y esen- cial, tenemos dispositivos como teclado y ratón, también, algunas interconexiones que, desde los inicios, ya eran utilizadas para interconectar la computadora con los usuarios, piezas fundamentales para facilitar la utilización de las computado- ras. El sistema operacional debe entender cómo esos dispositivos funcionan para que sea posible su utilización. Dentro de eso, ya podemos destacar que el grado de importancia de procesamientos de esos dispositivos es alto. La priorización para procesar interrupciones de teclado, por ejemplo, es necesaria para que, en caso de que ocurran problemas, podamos tener el control del sistema. El ratón y el teclado fueron conce- bidos junto a las computadoras, y pose- en su debida importancia. Sin embargo, como el ser humano nunca está satisfe- cho y percibió que puede “colgar” muchas otras cosas en la computadora, asícomo el sistema debe ser capaz de administrar todo. Vamos, desde pantuf las USB que calientan en el inverno, hasta dispositi- vos de reconocimiento de movimientos capaces de conducir una cirugía remota. La variedad de dispositivos es enorme. Para los gamers, así como yo, no podemos olvidarnos de los joystick y gamepads, que fueron siendo creados a lo largo del tiempo para proporcionarnos horas de diversión infinita delante de consolas. Básicamente, podemos clasificar todo lo que es externo a la placa madre, como dispositivos de entrada y de salida, incluyendo impresoras, plotters, webcam, ratón, teclado, entre otras cosas. Cada día, usamos nuestra creatividad y creamos algo nuevo y el sistema operacional debe saber administrar todas ellas, al final, como ya vimos, la principal función del SO es dejar el hardware lo más transparente posible para el usuario. Conceptos básicos del hardware Bueno chicos, sé que esta materia es Sistemas Operacionales y no Arqui- tectura de Computadoras o Fundamentos Computacionales, pero tenemos que re- ver algunas cosas para entender cómo los dispositivos de E/S funcionan y cómo el sistema operacional necesita entenderlos para administrarlos. Entonces, entende- remos, primero, cómo las interconexiones funcionan. Bus Veamos la definición teórica de bus retirado del Wikipédia: “En Arquitectura de Computado- ras, un bus es un conjunto de líneas de comunicación (conductor eléctrico o fibra óptica) que permiten la interconexión entre dispositivos de un sistema de computa- ción (CPU; Memoria Principal; HD y otros periféricos), o entre varios sistemas de computación.” 67SISTEMAS OPERACIONALES Vamos a resumir y a entender mejor. Un bus es el que permite una conexión físi- ca entre todos los componentes de la placa madre. Tenemos algunos bus patrones como el IDE, SATA, SCSI, PCI, AGP, que facilitan la interconexión y comunica- ción de los periféricos a la placa principal de la computadora. A continuación sigue una foto de una placa madre, evidenciando los bus: Chipset Inicialmente las computadoras te- nían un circuito integrado para controlar cada una de las interfaces y bus que exis- tían, al final, no había tantos así. Pero, con la evolución, fueron necesarios más circuitos y las placas fueron quedando cada vez mayores. Así, es de nuestro cotidiano sa- ber que no queremos más computadoras grandes e imponentes, mientras más pe- queñas, mejor para nosotros. Entonces, una brillante idea surgió. De manera mu- cho más práctica y fácil, pues realizamos una combinación de varios circuitos en un solo, que tenía como objetivo, hacer que él desempeñara la función de varios chips. De esa manera, surgieron los llama- dos chipsets que, al pie de la letra, sig- nifica “conjunto de chips”. Los diversos circuitos fueron encapsulados en dos chips, responsables, cada uno, por una parte de las funciones. El chipset de Puente Sur y chipset de Puente Norte. Es muy importante saber para qué sirven ellos, ya que el sistema debe con- versar muy bien con ellos y entender cómo funcionan. La centralización también mejora la capacidad de procesamiento y comunicación de la CPU con los demás periféricos. El Chipset de Puente Norte es res- ponsable por hacer la comunicación de la CPU con las memorias. Él controla la memoria RAM, los bus de Vídeo, y posee una interface con el chipset de Puente Sur. Esencialmente, la función del Chipset de Puente Norte es el control de memorias, facilitando el transporte de informaciones de las memorias hasta el procesador. El Chipset de Puente Sur es respon- sable por controlar prácticamente todo el resto. Ese “resto” serían la comunicación con los HDs, puertas USB y Paralelas, Sonido, Red, Bus PCI, DMA, entre otros. De forma resumida, todos los dispositivos onboard hasta la placa madre son admi- nistrados por él. Módulos de Entrada y de Salida Entendemos, ahora, que el proce- sador y las memorias son interconectados a los dispositivos a través de los bus que conducen los pulsos electrónicos, llevando los datos y las interrupciones. Aún tene- mos un detalle importante para entender, 68SISTEMAS OPERACIONALES al final, los periféricos no son conectados directamente en la placa madre. Al inicio de la computación, cada empresa desarrollaba también su patrón de conexión e interconexión, con una forma propietaria y singular para cada computado- ra, así como el sistema operacional debería ser desarrollado de forma específica para entender las instrucciones. En este sentido, se crearon los mó- dulos de Entrada y de Salida, básicamente, con 2 objetivos macros. El primero era pro- veer una interface entre los periféricos y el bus de las placas, facilitando su conexión y desconexión. El segundo objetivo completa el primero y enfoca en la estandarización de conexiones. Cuando tenemos patrones iguales para todos los fabricantes de compu- tadoras, conseguimos desarrollar sistemas operacionales que sean de mejor adaptación a las necesidades de los usuarios, por eso, la estandarización fue un gran avance. Los módulos de Entrada y de Salida son las conexiones serial, paralela, usb, ps2, entre otras, todas las que utilizamos para conectar los periféricos a la placa madre. Actualmente, el módulo USB viene ganan- do cada vez más espacio y, prácticamente, asume casi todas las funciones de interco- nexión de los dispositivos. Vea la figura siguiente, para entender mejor: Drivers de Dispositivos Ahora, dejaremos de lado la parte física de la computadora y nos concentra- remos en la parte lógica, donde el sistema operacional trabaja. Entendimos cómo el hardware funciona, bien superficialmen- te, y sabemos cómo las cosas ocurren. Sin embargo, comprender cómo funcionan las cosas nos ayuda a desarrollar sistemas cada vez más optimizados y estables. Actualmente, tenemos innúmeros fabricantes de hardware y los Sistemas Ope- racionales deben adaptarse a todos ellos. Pero, tenemos un enorme problema ante la variedad de hardware existente. Para que el sistema operacional consiga acceder al hardware y utilizarlo, es necesario que tenga las informaciones, así como que el hardware entienda cómo él funciona. Cuando teníamos pocos fabricantes, era mucho más sencillo, los sistemas ya sa- bían cómo funcionaban las cosas, entonces, era sólo hacerlas funcionar. Pero, con el paso del tiempo todo cambió e innúmeros fabricantes fueron surgiendo y el código del sistema no consiguió comportar más todas las instrucciones de acceso de todos los fabricantes. Para facilitar la comunicación entre los programas y los dispositivos de har- dware de la computadora, existen módulos especiales dentro del Sistema Operacional, que sirven como puente de comunicación, o un traductor, entre los dispositivos y su computadora, esos módulos son conocidos como driver de dispositivo. Para entender lo que son los drivers de dispositivo, veamos el siguiente ejemplo: cada dispositivo, incluyendo la impresora, el 69SISTEMAS OPERACIONALES ratón y, así sucesivamente, habla una lengua diferente con un patrón de comunicación diferente. Entonces, cuando conectamos una impresora nueva, la computadora in- tenta comunicarse y la impresora responde en su propia lengua, sólo que la compu- tadora no entiende lo que ella habla. Ella necesita un intérprete que pueda entender el lenguaje de la impresora y la de ella, para poder traducir las instrucciones y explicar cómo funciona el dispositivo. Algunos módulos de driver son pa- trón y utilizados por todos los fabricantes, como, por ejemplo, los drivers de USB, un ejemplo claro de auxilio que la estandari- zación trajo para la evolución del sistema, pero, muchos dispositivos no poseen drivers nativos en los SO y sin ellos, el sistema no consigue comunicarse con el hardware. Entonces, driver es un traductor de ins- trucciones del hardware para el sistema. ¿Se acuerdan que hablamos del Chip- set? Él es muy importante para optimizarla utilización de la computadora, teniendo en vista sus funciones, pero ¿qué puede ocurrir si el driver de chipset está desactualizado en el sistema operacional? El sistema no entenderá cómo el chipset trabaja correc- tamente y, sencillamente, podría trabar el sistema o perder toda la optimización extra que el hardware le garantiza. Tener drivers bien instalados y ac- tualizados es fundamental para el buen funcionamiento del SO, por otro lado, un driver mal instalado o configurado puede comprometer todo el SO. Hagamos un paréntesis aquí. ¿Saben el motivo por el cual los productos de Apple son mucho más performáticos que los de los competidores? La gran magia de Apple es desarrollar un sistema operacional total- mente comprometido con el hardware, que es desarrollado por ella. Piensen conmigo: hoy, Apple sólo necesita preocuparse en desarrollar sistemas que funcionen cor- rectamente en su hardware propietario. Todo el equipo de sistema está a algunos pasos de los ingenieros que proyectaron el hardware y pueden pedir para ellos detalles importantes sobre el funcionamiento del aparato, optimizar al máximo toda la lógica operacional. Ahora, usaremos el ejemplo del An- droid, Sistema Operacional mantenido por la grandiosa Google, que funciona desde una cafetera hasta un tanque de guerra. Aun siendo de código libre, el sis- tema no consigue abrazar, de forma 100% satisfactoria, todo lo que le es propuesto que haga. Nunca tendrá la misma estabilidad de Apple, que desarrolla apenas para hardware creado por ella. ¿Cómo podemos esperar que el Win- dows tenga la misma performance de un IOS, sin él es proyectado para ser ejecutado en innúmeros tipos de hardware diferentes? Aun con los drivers bien instalados, nunca será la misma cosa. DMA Bueno, vimos que todos los procesos de transmisión de datos ocurren entre la CPU y las memorias. Mientras más rápido dejemos la comunicación entre CPU, me- morias y periféricos, más rápido trabajará el sistema y la CPU se quedará menos tiempo ociosa. 70SISTEMAS OPERACIONALES Antiguamente, todas las transferen- cias de datos entre memoria y periféricos exigía la intervención de la CPU, lo que robaba tiempo de procesamiento y dejaba el sistema más lento. La solución de ese problema fue la implementación de un controlador en la placa madre, junto con una técnica de transferencia de datos de- nominada DMA (Direct Memory Acces). Vea la siguiente imagen: La técnica de DMA permite que un bloque de datos sea transferido entre memoria y periféricos, sin la necesidad de que la CPU ejecute alguna tarea, excep- to al inicio y al final de la transferencia. Así, cuando el sistema desee leer o grabar un bloque de datos, serán pasadas, de la CPU para el controlador, las informacio- nes, entonces él realizará la transferencia entre el periférico y la memoria principal, optimizando el tiempo de acceso, dejando la CPU libre para procesar otros datos. Discos Rígidos Ahora, al final de este módulo, nos enfocaremos en el funcionamiento de los discos rígidos, pues, son importantes para almacenar los archivos de los sistemas, y necesitaremos de ese conocimiento para el próximo módulo de Sistemas de Archivos. Un disco rígido es formado por va- rios discos que son de metal, vidrio o cerá- mica, apilados unos sobre los otros a una distancia muy pequeña. Esos discos son llamados de bandejas. Observe la imagen que está en la columna al lado: Los discos giran muy rápido, cerca de 7200 RPM para discos más nuevos, al- rededor de un eje en el sentido opuesto de los brazos de un reloj. Como sabemos, la computadora funciona de manera binaria y los datos son almacenados bit a bit, gra- bando 0 ó 1 en el disco. Sobre los discos, hay una fina capa magnética de algunos micrones de espesura, revestida por una película protectora, donde los datos son almacenados de forma magnética. La aguja de lectura y grabación tra- bajan por inducción, o sea, son capaces de generar un campo magnético entre ellas y la superficie del disco. Cuando el bit que será grabado es 1, la inducción polariza la superficie positivamente, en el caso con- trario no, el bit será 0. Cabe resaltar algo muy importante, que el brazo de grabación jamás toca en el disco, él solamente graba por inducci- ón magnética. En el caso de que la aguja toque, físicamente, el disco, él generará un “agujero”, al cual llamamos de Bad block, de la misma manera, cualquier de- fecto físico en el disco también puede ser llamado Bab block. 71SISTEMAS OPERACIONALES Los Bad block son extremamen- te indeseables y no poseen corrección, es algo que se agrava con el tiempo. Por eso, los HDs poseen vida útil y, en el caso de que no tomemos algunos cuidados, ellos se averiarán mucho antes, debido a eso, evite apagar la computadora por el “bo- tón”, haga todo el proceso para apagarla correctamente, eso preservará más el disco. Antes de volverse utilizable el HD necesita ser segmentado, para que el siste- ma operacional consiga guardar los datos en él y montar su sistema de archivos. En- tonces, es realizada la técnica de Forma- teo de Bajo Nivel. El Formateo de Bajo Nivel segmenta el HD en Pistas, Sectores y Cilindros. Las Pistas son guardadas desde la periferia del disco hasta su centro. Pode- mos tomar como analogía la grabación de los discos de Vinil. Estas pistas poseen una distancia entre ellos y siguen por todo el disco. Los HDs graban tanto en la parte superior como en la inferior de los discos, y el brazo de grabación puede leer las 2 caras. Las pistas son separadas entre dos radios que se llaman Sectores, y poseen tamaño de, por lo mínimo, 512 bytes por sector, en general. La imagen que está a continuación ilustra mejor: Los Cilindros son como “columnas” compuestas por varios sectores, uno abajo del otro. El HD graba en cilindros, dis- tribuyendo las informaciones en todas las caras de todos los discos, disminuyendo el tiempo de acceso y lectura. Conforme la imagen que sigue en la columna al lado: Bueno, ahora tenemos el HD total- mente segmentado. Y daremos un paso adelante, con el objetivo de entender lo que llamados de Formateo en nuestro día a día. El sistema operacional, antes de copiar sus archivos para el HD, efectúa la insta- lación de su sistema de archivos. Cuando él hace eso, un conjunto de sectores del HD son direccionados como una única unidad lógica, llamada Clúster. Un clúster es la menor parcela del HD, que puede ser accedida por el sistema operacional. El ta- maño de cada clúster varía de acuerdo con el sistema de archivos escogido. Usando FAT 16, cada clúster tiene hasta 32 KB, usando FAT 32, cada clúster posee apenas 4 KB, así como, usando NTFS cada clúster posee entre 512 bytes y 4 KB. En la construcción del Clúster tene- mos un gran problema: un archivo grande es dividido y ocupa más de un clúster, pero un archivo pequeño, ocupa un clúster entero y ningún nuevo archivo puede ser guardado en él, o sea, si un clúster tiene 4 KB de tamaño y un archivo de 1 KB es guardado en él, tendremos el desperdicio de 3 KB. Mientras menores sean los clús- 72SISTEMAS OPERACIONALES teres, menor será la cantidad de espacio desperdiciada en el HD. La estrategia del tamaño de cada clúster es restricta a cada lógica de construcción del sistema ope- racional. Síntesis Final Al finalizar este módulo estamos aptos para avanzar para el próximo que está, de cierta forma, interconectado a él, pues él sólo existe debido a que existen los dispositivos de entrada y de salida. Así, conseguimos comprender el fun- cionamiento de los periféricos que están conectados a la computadora y cómo el sistema debe administrarlos. Por lo tanto, con este conocimiento, conseguiremos resolver mejor los proble- mas de interconexión entre dispositivos y el sistema operacional. EJERCICIOS 1) Comprender el funcionamiento del hardware es importante para desarrollar sistemas cada vez estables y performáticos. Expliquepara qué sirven los chipsets y los bus. 2) Interconectar los dispositivos de entrada y de salida de la placa madre, es una tarea desarrollada por los módulos de entrada y de salida. Cuando surgieron no había un patrón y cada fabricante tenía su propio modelo. De esa manera, ¿cuáles son las ventajas que la estandarización de esos módulos trajeron para los sistemas? 3) Cada vez más los procesadores se vuelven más rápidos y el tiempo de acceso a los dispositivos debe ser mucho menor. Explique cuál es la técnica/hardware utilizado para acelerar el acceso a las informaciones de los dispositivos en tiempo de procesamiento. 4) El HD, cuando es creado, no posee nada, siendo necesario que sean creados sectores, senderos y cilindros. Explique ¿cuál es la técnica utilizada para preparar el HD con esas divisiones? 5) Un clúster es un conjunto de sectores. Cuando utilizamos clúster tenemos un gran problema. Explique ¿cuál es ese problema? y ¿por qué él es un desafío para los sistemas Operacionales? 74SISTEMAS OPERACIONALES SISTEMA DE ARCHIVOS Siempre, al oír una música, ver un vídeo o guardar un archivo, usted sólo está haciendo eso, porque existe un sistema de archivo administrándolo todo para usted. En los últimos tiempos, podemos decir que antigua- mente, el uso de una computadora consistía en recuperar y presentar informaciones almacenadas, como documentos, imágenes, músicas, vídeos, entre otros. Esa afirmativa es verídica y no tenemos como negarla. Cada vez más tenemos unidades de almacenaje mayores y, nosotros, como usuarios, conseguimos llenar cada byte disponible con algún archivo. ¡Archivos, cómo generamos archivos! Algunos son más organizados y dividen todo dentro de directorios, por tipo, fecha, tamaño, calidad, entre otras características. Pero, tam- bién existen, así como yo, las personas que guardan todos sus archivos sueltos y perdidos en una carpeta o, incluso, en el Desktop de sus computadoras. Entonces, cabe al sistema conseguir administrar todos los archivos, almacenándolos de forma íntegra e indexable. ¡Preste atención para aprender todo sobre Sistema de Archivos en este capítulo! 75SISTEMAS OPERACIONALES Sin embargo, no hablaremos que so- lamente los usuarios utilizan las unidades de almacenaje. El propio sistema necesita almacenar sus archivos de inicialización en algún local seguro, para que puedan ser cargados en memoria RAM durante el proceso de start del sistema. Al final, todos estamos rehenes del almacenaje de datos. De esa manera, en ese contexto, sur- gió el Sistema de Archivos, donde cada sistema operacional posee su lógica de almacenaje, búsqueda y GESTIÓN de la información, de sí propio y del usuario. Los Sistema de Archivos EEntonces, empezaremos a enten- der esta última, pero no menos importante, parte de funcionamiento del sistema ope- racional. Recapitularemos algo del capítulo anterior. ¿Se acuerdan de la formación del clúster en los HDs? Entonces, los sistemas de archivos trabajan directamente con el clúster. Cuando hacemos el formateo de los HDs, estamos insertando, en ellos, el sistema de archivo que utilizará para almacenar los archivos del sistema, que servirán para inicializarlo cada vez que la computadora o dispositivo sea iniciado. El sistema de archivo debe garanti- zar métodos para acceso a los archivos al- macenados. Fíjese que siempre hablaremos de archivos, nunca de datos o informacio- nes, pues, para el sistema operacional todo es un archivo, cuando sea almacenado. Además de eso, el sistema de archivo debe garantizar técnicas de integridad de esos archivos para que ellos no sean cor- rompidos, tanto los de usuarios como los de sistema. Eso me hace recordar un siste- ma operacional que corrompía los archivos de inicialización con facilidad, y cuando era iniciado, un mensaje desagradable apa- recía, sugestionando que un determinado archivo estaba faltando o corrompido y la inicialización sería suspendida. Los sis- temas más actuales ya poseen una gran protección de sus archivos y son capaces de recuperar archivos preponderantes para su funcionamiento, pero el índice de esos errores disminuyó mucho. Sólo quien vivió esa época sabe la af licción que nos daba cuando faltaba energía eléctrica y la com- putadora se apagaba solo. Otra función importantísima del sistema de archivo es saber dónde los ar- chivos están almacenados, de forma física en el HD o unidad de almacenaje. Al final, ¿de qué nos sirven los ar- chivos guardados si no conseguimos loca- lizarlos? Los sistemas de archivos indexan todo contenido para poder accederlo siem- pre que sea necesario. Ellos aún necesitan garantizar que los usuarios puedan crear, alterar y excluir archivos, así como realizar su duplicación y transferencia de datos en- tre ellos, soportando también operaciones de backup y restore. Otro punto importante del siste- ma de archivo es el intercambio de ellos entre los usuarios, sean ellos usuarios de red o usuarios locales dentro del sistema. Naturalmente, grandes desafíos apare- cen en ese ámbito, pues, el intercambio es fundamental para el buen funcionamiento del sistema, pero, cuando un archivo es 76SISTEMAS OPERACIONALES compartido, la probabilidad de que él sea corrompido, perdido o dañado, aumenta de forma exponencial. Los sistemas de archivos aún deben garantizar seguridad y auditoría de acceso a los archivos. Éste es el gran diferencial del Linux sobre el Windows, en lo que se refiere a seguridad. Estudiaremos eso mejor más adelante, ahora nos basta saber que los sistemas de archivos deben garan- tizar la seguridad de acceso a los archivos. Por supuesto, contribuyendo para uno de los objetivos principales del sistema operacional, así, los sistemas de archivos ofrecen una interface amigable para que el usuario interactúe con los archivos, ga- rantizando transparencia y facilidad de utilización. En suma, podemos afirmar que los sistemas de archivos son responsables por organizar los archivos del sistema ope- racional y del usuario, con el objetivo de controlar, organizar y garantizar la inte- gridad y seguridad de ellos. Archivo Si estamos estudiando un sistema de archivos, tenemos que entender qué es un archivo. De forma teórica, los archivos son un conjunto de datos en un dispositivo físico no volátil y posee un nombre. Para ser más sencillo, prácticamente todo lo que está en un dispositivo de almacenaje es un archivo, incluso, un directorio es un archivo (veremos eso, más adelante, en el Linux). El archivo es la unidad básica de almacenaje de información. Para diferenciar y clasificar archivos, ellos poseen algunos atributos que varían de acuerdo con cada sistema de archivo o sistema operacional, pero, los más básicos son éstos: • Nombre: Sé que parece un poco extraño hablar que cada archivo posee un nombre, al final, estamos acostumbrados a dar nombre para cada archivo, pero, el nombre es de suma importancia, pues, es él que lo identifica. ¿Ya intentó guardar un archivo sin nombre, crear 2 archivos con el mismo nombre en un único directorio? Intente hacer esas prue- bas, verá que no es posible, pues, para el sistema el archivo es único. Usted puede guardar archivos con el mismo nombre, solamente, si están en directorios diferentes. A veces, el sistema tampoco permite que 2 archivos sean cargados en memo- ria con el mismo nombre, causando conflicto. • Tipo: El tipo de archivo indica cuál formato posee, o sea, si él es un mp3 o un jpeg o incluso, aquél su control financiero en una planilla xls. Al- gunos sistemas operacionales usan parte del nombre del archivo para identificar el contenido, en la for- ma de una extensión: “.doc”, “.jpg”, “.mp3”, “.xls”, etc. El Linux no uti- liza eso, él trabaja directamente con el contenido del archivo. • Tamaño: Todos los archivos poseen indicación de su tamaño. Es impor- tante que el usuario tenga conoci- miento del tamaño para manipular mejor el archivo. • Fecha:Para fines de auditoría y gestión, mantener las fechas de los 77SISTEMAS OPERACIONALES archivos es importante. • Propietario: En los sistemas mul- tiusuarios es importante identificar el propietario del archivo para que ningún otro usuario pueda tener acceso o administrar el archivo de otro. Para la construcción de privile- gios de acceso, también es necesaria la información del propietario del archivo. • Permiso de Acceso: Los permisos indican cuáles usuarios tienen ac- ceso a aquel archivo y cuáles formas de acceso son permitidas (lectura, escrita, remoción). • Localización: Piensen conmigo, ¿es más fácil encontrar una calle en el GPS o quedarse dando vueltas por la ciudad hasta llegar a ella? La locali- zación de los archivos es importante para facilitar su gestión en el sistema y es un atributo importantísimo. Esencialmente, ésos son los atribu- tos básicos de los archivos. Cuando es- tudiemos el Linux, veremos algunos de gestión del sistema de archivos. Operaciones Bueno, ahora tenemos los archivos almacenados en nuestras unidades de alma- cenaje, pero, los usuarios no dejan esos ar- chivos estáticos y mucho menos el sistema. Algunas operaciones deben ser realizadas sobre ellos. Al final, no sirve de nada tener archivos que no pueden ser manipulados. Generalmente, las operaciones son imple- mentadas a través de llamadas de sistemas, o sea, los usuarios y los programas dependen de la interacción con el Kernel, a través de las systems call, para poder tener acceso a los archivos. Las operaciones más básicas que pue- den ser realizadas son las siguientes: • Crear: De forma simplista, la creaci- ón de un archivo implica en separar el espacio para él dentro del dispositivo de almacenaje, así, como definir sus atributos como nombre, localizaci- ón, propietario, permisos de acceso, entre otros; • Abrir: Parece obvio, pero, antes que una aplicación manipule los datos en un archivo, ella le solicita al sistema operacional su “abertura”. Primero, el sistema verificará si el archivo exis- te, analizará cuáles son los permisos vinculados al archivo y si permiten su abertura. Y, por fin, el sistema loca- lizará su contenido en el dispositivo de almacenaje. • Leer: Si el sistema consigue abrir el archivo, entonces, eso le permite transferir los datos presentes en el archivo para un área de memoria, para que la aplicación pueda acceder los datos. • Escribir: Cuando escribimos en un archivo, estamos actualizando su contenido, o sea, estamos transfi- riendo los datos de la memoria de la aplicación para el archivo en el dispositivo de almacenaje, siendo que los nuevos datos pueden ser adiciona- dos al final del archivo o sobrescribir datos ya existentes. • Alterar atributos: Podemos también modificar atributos y otras caracte- rísticas del archivo, como nombre, localización, propietario, permisos, entre otros. 78SISTEMAS OPERACIONALES • Cerrar: Al término del uso del archi- vo, la aplicación debe informarle al sistema operacional que él no es más necesario y, así, liberar sus estruc- turas de GESTIÓN en la memoria del Kernel. • Retirar: Esta operación elimina el archivo del dispositivo, descartan- do sus datos, luego libera el espacio ocupado por él en el dispositivo de almacenaje para que un nuevo archi- vo sea guardado. Formatos De forma esencial, todo el archivo es apenas una secuencia de bytes que está estructurado de diversas formas y, con eso, consigue representar innúmeros tipos de informaciones que están contenidas en él. Para el sistema operacional un archi- vo equivale a muchos datos sin ningún sentido. Algunos formatos básicos como archivos binarios, bibliotecas y ejecuta- bles, consiguen ser interpretados por el propio Kernel del sistema operacional, y nada más. El sistema, normalmente, no interpreta todo y cualquier tipo de archi- vo, solamente, los que son esenciales para su buen funcionamiento. Un sistema que sólo interpreta archivos importantes para él, no sería de gran valor para nosotros, ¿verdad? Al final, necesitamos manipular una variedad enorme de archivos. Para abrir formatos desconocidos, el sistema operacional depende de inter- pretadores o software que lo ayudan en esa ta- rea. Muchos formatos son propietarios y exclusivos de algunos fabricantes de sof- tware, lo que permite que sean abiertos, solamente, por programas y aplicativos desarrollados por ellos. Ejemplificaremos mejor: uno de los formatos más conocido de documen- tos de texto es el creado por el Microsoft Word, el cual genera archivos en el for- mato .DOCX. De esa manera, el siste- ma operacional, por sí solo, no consigue interpretar el contenido del archivo, no consigue abrirlo. Entonces, es necesario instalar el Microsoft Word para poder abrir el archivo y manipular su contenido. Esa misma lógica se aplica para todos los formatos que conocemos, como jpeg, mp3, pdf, dwg, entre tantos otros. Directorios ¿Recuerdan cuándo les dije que para el sistema de archivos casi todo es un archi- vo? Bueno, un directorio es un archivo. Es exactamente lo que usted leyó, un directorio es un archivo. Intentaremos explicar un poco mejor. El sistema de archivo sólo gerencia archivos, sólo que, si todos los archivos quedaran sueltos dentro de las unidades de almacenaje, todo sería mucho más complejo y desorganizado, generando lentitud en la búsqueda de archivos, pérdida de archivos, entre otros tantos problemas. A partir de eso, surgió una idea, crear directorios, con el objetivo de organizar los archivos y poder trabajar de forma más precisa con los permisos de accesos y pro- tección de algunos datos. Los directorios son archivos que contienen una lista de 79SISTEMAS OPERACIONALES otros archivos y también de directorios, funcionando más o menos, desde mi punto de vista, como un índice, donde quedan almacenadas las coordenadas para llegar hasta los archivos. Los directorios son manipulados de una forma muy similar a los archivos, te- niendo los mismos atributos y operaciones, con la diferencia de que algunas operacio- nes, cuando son aplicadas en el directorio, serán replicadas de forma jerárquica para todos los archivos y subdirectorios que es- tán debajo de él. Por ejemplo, si tenemos un directorio llamado Música y tenemos “dentro” de él un CD completo de Elba Ramalho, todos los archivos estarán vinculados con la carpeta raíz, Música, y, en el caso de que borremos el directorio Música, todos los archivos relacionados a él también serán retirados. Para tener una idea de cómo está estructurada la jerarquía de carpetas, abra el prompt de comando del DOS (CMD), en su computadora, y digite el comando TREE, el resultado será algo así: Intercambio de Archivos Un gran desafío del sistema de archivos es administrar el intercambio de los archivos del sistema entre usuarios y procesos. Es muy común que más de un usuario tenga permiso de acceso a un archivo. En un sistema operacional podemos deparar- 80SISTEMAS OPERACIONALES nos con una situación donde dos usuarios quieren acceder el mismo archivo al mismo tiempo. Ese tipo de situación puede gene- rar un gran problema, como corromper el archivo o perder los datos que están en él. Usualmente, el acceso simultáneo a un archivo, solamente para su lectura, no acarrea problemas, o sea, más de un usuario o proceso pueden acceder un ar- chivo al mismo tiempo si ellos sólo van a “leerlo”, sin alterar nada dentro de él. El gran problema ocurre cuando ese acceso simultáneo entre los procesos tiene el objetivo de alterar los datos que están dentro del archivo. Ese acceso genera una condición de disputa entre los procesos o usuarios para ver quién tendrá acceso al archivo. Podemos llamar esas situaciones de race conditions, que pueden llevar a la incon- sistencia de los datos y a otros problemas. Un ejemplo muy claro de eso es cuando estamos con un intercambio en el sistema operacional de un directorio, con varios archivos.DOCX en ellos. El primer usuario que abra uno de los archi- vos ganará el derecho de acceso y edición, ya, el segundo usuario que abra el mismo archivo, conseguirá el acceso apenas como “solamente lectura”, justamente para pro- teger la integridad del archivo. Trabas en Archivos y Semántica de Acceso Acceso simultáneo es algo indeseab- le, como ya pudimos percibir, pues, puede corromper el archivo, entonces, algunas tratativas de acceso deben ser realizadas, con el objetivo de protegerlos. Como so- lución más sencilla y usada, la mayoría de las veces, tenemos la técnica de exclusión mutua. La exclusión mutua es muy sencilla, ella se denomina por el hecho de que un archivo, está asignado a un usuario o a un proceso. El sistema sencillamente suspende cualquier otro que quiera el mismo archivo, hasta que él esté liberado y, de esta manera, lo esté protegiendo. Quien llegue antes, tiene el derecho de manipular el archivo, y los demás usuarios podrán usarlo solamente en modo de lectura. Esas trabas de acceso, propuestas por el sistema, pueden ser obli- gatorias (madatory locks) o recomendadas (advisory locks). De esa manera, tenemos una solución de trabas en los archivos, pero, ni siempre ellas atienden nuestras necesidades, enton- ces, tenemos algunas técnicas de semántica de acceso para ayudarnos y, así, no perder los archivos. Ellas son: • Semântica UNIX: En esta técnica, toda alteración realizada en un ar- chivo es inmediatamente visible para todos los procesos. Esa semántica es la más común en sistemas de archi- vos locales, o sea, para acceso a los archivos en los dispositivos locales. • Semántica de sesión: En esta lógi- ca, cada proceso usa un archivo en una sesión que tiene inicio con su abertura y que termina cuando él es cerrado. Las alteraciones realizadas en un archivo de una sesión, estarán solamente visibles después de que el proceso cierre el archivo. Así, las sesiones competidoras de acceso a un 81SISTEMAS OPERACIONALES archivo compartido consiguen ver los contenidos diferentes para el mismo archivo. La respectiva semántica es normalmente aplicada a los sistemas de archivos de red. • Semántica inmutable: En esa semán- tica, un archivo puede ser compartido por varios procesos, siendo marcado como inmutable, o sea, su contenido no puede ser alterado. Esa técnica es la forma más sencilla para conseguir la consistencia del archivo entre los procesos que comparten su acceso y, en vista de eso, es usada en sistemas de archivos distribuidos. Control de Acceso Una de las principales funciones del sistema de archivos es garantizar la seguridad de acceso a los que están al- macenados. Existen archivos del propio sistema que sólo pueden ser accedidos por usuarios autorizados o con privilegios de administración del sistema, con el objetivo de proteger los archivos preponderantes para el buen funcionamiento del sistema operacional. Básicamente, para contro- lar el acceso a los archivos, vinculamos, a ellos, el propietario del archivo y también los permisos de acceso de cada usuario o grupo (lectura, escrita y ejecución) sobre él. En sistemas operacionales multiu- suarios, queda muy clara esa distinción de acceso a los archivos. Usaremos el ejemplo clásico del Windows. Tenemos 2 usuarios registrados en el sistema, el ususario1 y el usuario2. Todos los archivos creados por el usuario1 estarán vinculados a él como dueño y tendrá permisos de control total sobre él. En el caso de que intentemos acceder a los archivos con el usuario2, apa- recerá un mensaje de “acceso negado” y los archivos no abrirán. Para que el usuario2 tenga acceso a los archivos, es necesario que el usuario1 le dé ese permiso, pudiendo escoger si, solamente, permitirá la lectura del archivo o si también liberará altera- ciones de escrita en él. Existen otros tantos permisos y for- mas de acceso, pero de forma simplona, es más o menos así que funciona. Más adelante, en el Linux, estudiaremos me- jor toda esa parte de permiso de acceso e intercambio de archivos. Sistemas de Archivos NTFS y EXT Ya entendimos cuáles son las fun- ciones de un sistema de archivos, ahora conoceremos los sistemas de archivos más populares que tenemos. NTFS El NTFS es un sistema de archivos desarrollado por Microsoft y utilizado en gran escala en sus sistemas operaciona- les. El primer sistema que usó el NTFS fue el Windows NT, sistema operacional para uso en servidores, siendo su primera versión de 1993. En la época del lanzamiento del Windows NT, Microsoft utilizaba el sis- tema de archivos FAT. Ese sistema de archivo funcionaba bien en aplicaciones domésticas, pero tenía una serie de res- tricciones como, baja tolerancia a fallas, 82SISTEMAS OPERACIONALES inviabilidad de uso de permisos de archi- vos y limitaciones con volumen de datos mayores (archivos mayores que 4GB). Con el crecimiento de la compu- tación doméstica surgió la necesidad de almacenar archivos mayores, sumada a las fallas del sistema de archivos FAT, hicieron que Microsoft decidiera invertir en el NTFS como su sistema de archivo patrón en los servidores y en los desktops. Una de las principales características del NTFS es que él consigue recuperar archivos en casos de fallas. De esa manera, el NTFS consigue revertir los datos a la condición anterior al incidente. Podemos comparar eso a un checkpoint que existe en los juegos, cuando, el jugador “mue- re” él no regresa hasta el inicio del juego, él vuelve a un paso antes de “morir”, así, funcionan los archivos. El sistema guarda logs que le permite deshacer acciones que comprometieron los archivos, como la des- conexión inesperada del sistema en el caso de que falte energía eléctrica. Pero, no se eludan, que el NTFS no hace milagros, él puede ser muy bueno, pero hay fallas donde no es posible efectuar rollback, por lo tanto, es mejor no confiar 100% en estos mecanismos. Otra característica de evolución del NTFS fue el perfeccionamiento de permi- sos de acceso a los archivos, volviéndose mucho más seguro y estable con sus atri- butos de seguridad. EXT Si, en el lado del Windows tenemos el sistema de archivos NTFS, en el lado del Linux tenemos el EXT. El patrón EXT fue creado para el UNIX y como el Linux es basado en Unix, acabó siendo la base de creación de los sistemas operacionales del Linux. El primer EXT surgió en 1992, siendo incorporado por Linus Torvalds al Linux 0.96. Así, como el sistema de archivo de Microsoft fue evolucionando, el del Linux también lo fue, pasando por el EXT2, EXT3 y llegando al actual EXT4, lanzado en el 2006 y utilizado hasta los días de hoy. Entre las mejoras que el patrón EXT tuvo, hasta llegar al EXT4, podemos re- saltar el aumento del file system. El patrón EXT3 conseguía asignar una partición de, por lo máximo, 32 TB y manipular archivos de hasta 2 TB. Ya, el EXT4 con- sigue asignar para particiones hasta 1EB (exabyte) y 16TB para los archivos. Otro punto importante es el mayor número de subdirectorios posibles. El patrón tenía un límite de subdirectorios por carpetas de 32000. Ya, en el EXT4 no tenemos esa limitación, el número de subdirectorios es ilimitado. Así como el patrón NTFS, el EXT4 también posee su técnica de recuperación de archivos. Ella es llamada Journaling y tiene su funcionamiento prácticamente igual al del NTFS. La técnica de recu- peración del NTFS también puede ser llamada journaling, de esa manera, esa mejora trajo más estabilidad para el Linux. 83SISTEMAS OPERACIONALES MBR Bueno, ya entendimos cómo fun- ciona el sistema de archivos y ya conoci- mos los más populares, entonces, ahora tenemos que aprender una cosa más que dejamos para el final. Haremos una co- nexión entre los dispositivos de entrada y de salida y el sistema de archivos en este momento. Ya vimos cómo funciona el HD con rutas, sectores y cilindros y que para que el sistema operacional pueda ser cargado en memoria RAM sus archivosdeben estar almacenados en el HD, siendo necesario que el sistema de archivo esté “instalado” para organizar los archivos y garantizarles integridad. En el HD existe una ruta llamada Ruta Cero o MBR (Master Boot Recor- der). La MBR posee 512 bytes de tamaño y en ella están almacenadas las informa- ciones sobre los sistemas operacionales instalados y dónde están guardados (su dirección) los archivos de inicialización para que el sistema pueda ser cargado de forma organizada. Cuando instalamos el sistema ope- racional en el HD necesitamos efectuar la instalación de algo más importante, el Administrador de Boot (Boot Manager). Él es responsable por cargar los archivos del sistema durante el proceso de boot, él se encuentra instalado dentro de la MBR. Los administradores de boot más populares son el NTLDR y el BOOTM- GR utilizados por Microsoft. Po el lado del Linux tenemos como más populares el LILO y el GRUB. Cabe ponderar que si la MBR es corrompida el sistema operacional no ini- ciará más, pues, sin ella el proceso de boot no sabe dónde están localizados los archi- vos del sistema, con el objetivo de cargarlos en memoria. En el caso de que ocurra la pérdida de la MBR, basta reinstalarla, no siendo necesario reinsertar todo el sistema operacional. Síntesis Final Finalizando esta etapa, ya encer- ramos esa descubierta inicial de cómo funcionan los sistemas. En este capítulo, conseguimos comprender cómo el sistema operacional almacena sus archivos y cómo garantiza su integridad, administrando también el control de acceso y de seguri- dad de ellos. Por lo tanto, ya con todo ese cono- cimiento, daremos secuencia y entrare- mos en el submundo del Linux, en una inmersión rasa, la cual nos capacitará para ir más fundo. Ejercicios 11) Para que sea posible utilizar el HD para guardar archivos es necesario que un sistema de archivo esté “instalado” en él. De esa manera, ¿cuáles son las principales funciones del sistema de archivos? 2) Para organizar mejor el sistema operacional, él dividió los datos en archivos y directorios, pero, para él todo es la “misma cosa”. A partir de eso, ¿por qué un directorio es “la misma cosa” que un archivo? 3) Protección de datos es, con toda seguridad, una función primordial de un sistema de archivos y, para eso, fue desarrollada la técnica de journaling. ¿Qué es journaling y por qué él es tan importante? 4) Para que la computadora sepa dónde están los archivos de inicialización, ella necesita un “GPS” que indique dónde están los archivos, por eso existe la MBR. ¿Qué y dónde queda guardada la MBR? 5) El sistema operacional no consigue abrir cualquier tipo de archivo. Para las extensiones desconocidas, ¿cómo abre él los archivos? 85SISTEMAS OPERACIONALES EL LINUX Windows no es el único sistema existente. Ahora, entraremos en el submundo del Linux y descubriremos cuán fantástico él es. No soy un activista del software libre, mucho menos un defensor de softwares propietarios, pero, puedo decir que tengo un cariño especial por Linux, sin embargo, consumo muchas soluciones de softwares propietarios. Digo eso, pues mi obje- tivo no será hablar mal del Windows o decir que el Linux es el mejor sistema de todos los tiempos, pero sí poder abrir las mentes de todos para nuevas tecnologías y cómo ellas pueden ayudarnos en nuestro día a día. Durante mi trayectoria personal, profesional y docente en el área de la tecnología, pude permear variados mundos e intercambiar muchas experiencias con amigos, compañeros y, principalmente, con alumnos. Inicio este capítulo con una conclusión: concluyo que no existe sistema mejor o peor, pues, todas las tecnologías cuando bien empleadas cumplen su papel. Nosotros, mientras profesionales de tecnología, tenemos la obligación de conocer todas las herramientas que están a nuestra disposición para que, de esa manera, podamos crear softwares cada vez mejores, más robustos, escalables y, princi- palmente, adaptables. Entonces, si usted nunca instaló el Linux o ni sabe qué es eso, le pido que abra su mente para un nuevo Abra su mente y prepárese para aprender qué es Linux 86SISTEMAS OPERACIONALES mundo de posibilidades y de libertad. En el caso de que usted ya sea un activista de software libre, ayúdenos en los foros de discusión, exponiendo sus experiencias y enseñándonos, pues quiero mucho aprender más con ustedes. Sin más dilación, podemos resumir, en esta introducción, que el Linux es un sistema operacional libre, gratuito y que se adapta a cualquier necesidad. Excelen- te para desarrolladores, muy seguro para publicación de aplicaciones y con más per- formance para ejecución de base de datos. Entonces, era eso, ¡conozcamos más de este sistema operacional que encanta a tantos! Historia Nuestro conocido Bill Gates em- pezó el dominio de los sistemas opera- cionales en 1981, con el lanzamiento del MS-DOS para PC y fue evolucionando hasta llegar en las diversas versiones del Windows que, hasta hoy, ocupa el mayor pedazo de mercado. A pesar de eso, Mi- crosoft es una novata en el ramo de siste- mas operacionales. Mientras era lanzado el MS-DOS, el abuelo UNIX ya era maduro y usado en computadoras de gran porte. Apenas un punto de vista mío: Bill Gates fue inteligente al enfocarse en computa- doras personales e hizo un buen trabajo de marketing. El UNIX empezó su vida en 1969, en una computadora que costaba en la época US$ 72.000, llamado de PDP-7. Él tenía increíbles 8 Kbytes de memoria RAM y utilizaba cintas magnéticas para almacenaje. Su poder de procesamiento era menor que una agenda electrónica. En esa época, GESTIÓN de memoria del sistema era algo crucial, pues, había poca memoria física y los programadores tenían que escribir códigos de los sistemas capaces de liberar memoria después de su ejecución, en el caso contrario, todo trabaría. Querido programador, piense que programar en Java puede ser difícil, pero, hacer que las cosas funcionen con 8 Kbytes de RAM, es mucho más difícil. Como podemos percibir, existían limitaciones enormes de hardware, enton- ces, el sistema operacional debería ser muy ajustado y exponencialmente optimizado, para que pudiera extraer el máximo de desempeño de la computadora. Ante esas necesidades, el Unix surgió y fue evolu- cionando a lo largo del tiempo. Más un complemento mío: Los desarrolladores de Microsoft no pensaron mucho en de- sempeño y optimización cuando crearon el Windows Vista, ¿verdad? El Unix era un sistema “desagra- dable” siendo usado ampliamente para “cosas serias”, como aplicaciones militares, bancos y otras áreas donde no puede ha- ber margen para fallas. La evolución del sistema lo volvió muy robusto y estable, siendo utilizados hasta hoy en aplicaciones críticas y “serias”. Cerca de los años 1980, las compu- tadoras personales eran vistas como equi- pos limitados y no conseguían rodar un sistema Unix, por eso, no hubo inversiones en el desarrollo de Unix para desktops do- mésticos. Así, con el tiempo, la plataforma 87SISTEMAS OPERACIONALES se fue desgastando y el Windows tomando cada vez más cuerpo en la computación personal. Sin embargo, en 1991, el visionario Linus Torvalds empezó a trabajar en un sistema Unix para rodar en su computa- dora personal, una 386. En la época, exis- tía un sistema llamado Minix, utilizado en el medio académico, basado en Unix. Torvalds lo utilizaba para rodar editores, compiladores y otras herramientas de de- sarrollo para avanzar el Kernel del Linux. Cuando el Minix no era más necesario, él empezó a utilizar su propio sistema Linux, o sea, el Linux pasó a ser desarrollado dentro del propio Linux. Así, como todo buen nerd, el hobby de Torvalds era programar. El Linux era un proyecto pequeño, desarrollado por un programador, pero, él colocó el software bajo la licencia GPL, lo que creó oportu- nidad para que otros programadores adop- taran el proyecto, pudiendo contribuir con mejoras y correcciones.Eso permitió que varios esfuerzos fueran canalizados para desarrollar el Linux y evolucionarlo hasta el código que tenemos hoy, que permanece en constante evolución. Juntamente como Linux, otros proyectos pudieron ser registrados. Ya que, el sistema solo no es de gran valor para desktops, pues, el Kernel del sistema solo no hace nada, él necesita aplicaciones y softwares que funcionen en él para que los usuarios puedan realizar sus activi- dades. De esa manera, proyectos como OpenOffice, Gnome, Firefox, entre otros, ganaron cuerpo y fueron siendo integrados al Linux, permitiendo una experiencia diferenciada con él. Otro marco en la historia del Linux hasta los días de hoy es el Knoppix y la posibilidad de ejecutar el sistema a través de un Live CD. En el 2002, la tecnología del Knoppix permitió rodar el sistema operacional a través del CD-ROM, sin que sea necesario que el HD esté conectado. Hoy, prácticamente, todas las versiones del Linux permiten que usted ejecute el sistema a través de un pendrive o un Live CD. Al contrario de que el proceso de boot cargue el sistema del HD, él busca, en el CD o en el pendrive, los archivos de inicialización y carga en memoria RAM, lo que permite probar el sistema sin tener que instalar el file system en el HD y efectuar la copia de los archivos. El Linux es un software libre, to- talmente libre y de código abierto. Esa característica es su punto fuerte, pero, también es su “talón de Aquiles”. Con el paso de los años, innúmeras distribuciones del Linux surgieron, realmente muchas. Inicialmente, podría colocar un número estimado, pero ese número es controver- tido y no preciso (Google no me ayudó mucho ahora). Como hay muchas distri- buciones, siendo extremamente complejo que alguien mantenga aplicaciones que funcionen en todas ellas. Otra dificultad es con el desarrollo de algunos drivers específicos, es mucho más sencillo que un fabricante desarrolle un drive para un número limitado de sistemas y mucho más barato. Algunas distribuciones son consi- deradas principales, por ser más robustas y poseer una comunidad más activa e, 88SISTEMAS OPERACIONALES incluso, patrocinada. Podemos destacar, como distribuciones seminales, el Red Hat, Slackware, Debian, Ubuntu (basado en Kernel Debian) y Suse. Disculpen si dejé alguna distribución que a usted le guste para fuera, pero creo que son esas las más “viejas” y que sirvieron de base para todas las otras. Miraremos Ubuntu durante nuestra clase, pues, creo que sea muy didáctica y sencilla para el manoseo de iniciantes. Ahora que conocimos un poco del sistema, daremos secuencia y entendere- mos cómo él funciona. Entendiendo el sistema Bueno, querido alumno, a partir de este momento, le pido que abra su mente para cosas nuevas. El Linux posee muchas características del sistema que lo originó, el Unix. Así, para quien viene del universo diseñado por Microsoft, el Linux pare- ce algo exotérico, con su organización de carpeta, forma de instalación de programas y el uso de archivos, pero, ni todo es tan complicado así, basta un poco de tiempo y un primer contacto para que usted vea que el sistema es muy interesante y completo. El Linux es famoso por su versatili- dad en el modo CLI (command line inter- face), siendo utilizado, en su gran mayoría, en servidores. La falta de ambiente gráfico tal vez sea la experiencia más disruptiva que un usuario, que viene del Windows, sufra, pero, no todo es hecho en línea de comando y existen ambientes gráficos muy utilizados en desktops. Todos los usuarios del Linux, aun los que utilizan la versión Desktop, optan por realizar varias tareas en el modo CLI, ya que permite más agilidad en la ejecución de varias tareas. Como la principal idea de un Cen- tro Universitario es romper paradigmas e incentivar su cuerpo académico para nue- vos desafíos, enfocaremos el estudio en la versión más básica del Linux, sin ambiente gráfico, para abstraer conceptos y entender mejor la estructura del sistema. Uno de los grandes diferenciales del Linux es la cantidad de documentación dis- ponibles en internet. Existe una comunidad muy activa que alimenta foros, portales, blogs y sitios especializados en la utilización del Linux, prácticamente, todo el material está disponibles de forma gratuita. Entonces, nos sumergiremos un poco más en la estructura del sistema, entende- remos cómo funciona y aprenderemos a utilizar esa herramienta tan poderosa que es el Linux. 89SISTEMAS OPERACIONALES Estructura del Sistema Dentro de su Windows, accediendo el menú Mi Computa- dora, usted verá que hay una unidad de disco “C”, dentro de ella existen carpetas como Archivos de Programas (que almacenan los archivos de los programas instalados), también, hay una carpeta llamada Usuarios y dentro de cada usuario están los archivos pertinentes, incluyendo Desktop, Documentos, Imágenes, entre otras. En suma, es una partición llamada “C”, donde quedan todos los archivos del sistema, más o menos como muestra la imagen: De esa manera, tenemos la primera quiebra de paradigma. En el Linux no tendremos una partición “C”, pero sí un punto de montaje “/”, el cual puede ser comparado con una analogía a la partición “C” del Windows, pero, dentro de ella, la estructura de carpetas es esotéricamente diferente, más o menos como la siguiente imagen: Puedo pensar que, después de visualizar esa imagen, usted debe haber hecho por lo menos 5 minutos de silencio, o debe haberse trabado, pensando: “¿Qué tipo de pantalla negra con cosas escritas es esa? “, no se desespere, al final todo acabará bien. 90SISTEMAS OPERACIONALES Accediendo el Linux en modo gráfico, esa misma pantalla negra y llena de caracteres es más o menos igual a la próxima pantalla: El gran desafío, que los primeros pasos en el Linux nos proponen, es conseguir abstraer la pantalla gráfica, a través de la visualización del modo texto. Entiendo, que esa dinámica es algo que lleva tiempo para conseguir absorber, entonces, demos secuencia a la clase, pues, poco a poco, ella quedará cada vez más clara para nosotros. Kernel La principal parte del sistema operacional es el Kernel. Nada funciona si el Kernel no existe o si él está con problemas, por eso, empezaremos el estudio de la estructura a través de él. Si entramos en la carpeta /boot del Linux, veremos que allí dentro existe un archivo llamado vmlinuz.x.x.x.x.x y es ese archivo que con- tiene el Kernel del sistema, que es el pri- mero que será cargado en memoria RAM, en la inicialización de la computadora. A inicios del Linux, todos los dri- vers y otros componentes del sistema eran compilados junto con el Kernel. Al inicio no había grandes problemas en lo que se refiere eso, pues, no había tantos fabri- cantes, los módulos eran pequeños y todo estaba bien. Sin embargo, como sabemos, la tec- nología evoluciona de forma frenética y, cada vez más, nuevos dispositivos vienen surgiendo, más drivers están siendo de- sarrollados y más códigos están siendo integrados al Kernel. Entonces, empezaron a existir 2 problemas: el primero era que, si todos los drivers fueran incorporados al Kernel, él se quedaría gigantesco, pe- sado y complejo, lo que inviabilizaría una utilización más limpia y estable, para el cual la solución sería escoger cuáles dri- 91SISTEMAS OPERACIONALES vers podrían ser incorporados al Kernel, así, todos los problemas serían resueltos, ¿verdad? En la vida nada es tan sencillo así, y no es diferente con el Linux. En el caso de que varios drivers sean retirados, el Kernel sería ajustado, con más performance y estable, sin embargo, corría el riesgo de necesitar cargar algún componente de hardware y el sistema no ser capaz de accederlo, comprometiendo su funcionamiento. En ese caso, no podría ser muy grande y ni muy pequeño. De esa manera, los activistas del Linux pensaron en una solución, en 1999, y lanzaron el Kernel en la versión 2.2, donde eraposible resolver ese problema. La técnica consiste en dividir los drivers en módulos externos al Kernel, pero que se comunican con él y amplían los horizontes del Linux. Hasta hoy, el Linux permanece con la misma lógica de construcción. La modularización permite una versatilidad enorme del sistema y que puede adaptarse a cualquier dispositivo. Los módulos están conectados di- rectamente al Kernel para la forma que fueron desarrollados. Así, en el caso de que un módulo de una distribución X de Linux sea llevado para una distribución Y, es muy probable que él no funcione, pues, los interpretadores son diferentes en sus modos de acceso al hardware. Directorios El primer gran susto para quien está llegando del mundo de Microsoft es la es- tructura de directorios del Linux. En el Windows tenemos la idea de que existe una carpeta llamada Windows, que concentra todos los archivos del sistema y la carpeta Archivos de Programas, que almacena los archivos de los softwares y aplicaciones, también, usted puede crear y organizar sus archivos y carpetas da forma que quiera y donde quiera. En el Linux es exactamente la misma cosa, sólo que, al contrario, así de sencillo. El directorio raíz del sistema está tomado de carpetas con archivos del sistema y en ese se espera que usted almacene sus archivos dentro de la carpeta /home y nada más. Us- ted, incluso, puede guardar sus archivos en otras carpetas, alterar algunos permisos de accesos, pero no es recomendado. Digamos que el Linux limita el acceso del usuario común a sus directorios y es por eso que él funciona tan bien. Una vez más, hablaremos diremos para que el concepto sea bien grabado. Una de las primeras cosas a habituarse es que, en el Linux, no existen unidades para par- ticiones diferentes como en el Windows, donde aparece C:\, D:\ y E:\ entre otras. En el Linux todo forma parte del directorio raíz, representado por “/”. Entenderemos ahora los directorios que quedan en el “/” y para qué sirve cada uno de ellos. Éstos son: • /BIN: Almacena los ejecutables de algunos comandos básicos del siste- ma, como el “su”, “tar”, “cat”, “rm”, “pwd”, etc. Esos ejecutables son básicos para la administración del Linux. Mantenerlos en un directorio separado permite, por ejemplo, que se queden accesibles desde el inicio del boot del sistema, pudiendo ser utilizados aun antes de que todo el sistema sea cargado. 92SISTEMAS OPERACIONALES • /SBIN: Ese directorio complementa el /BIN. En él están guardados los ejecutables de los comandos utiliza- dos, exclusivamente por el ROOT (más adelante estudiaremos el ROOT). Son comandos de adminis- tración del sistema operacional que permiten la creación de usuarios y grupos, entre otras funciones. Perciba que en el Linux todo “comando” es un ejecutable. • /USR: Lo más interesante de este directorio es que la mayoría de las personas pronuncian “user” cuando en realidad es “USR”, siendo ana- grama de Unix System Resources. Podemos decir que ése es uno de los mayores directorios del Linux en lo que se refiere al número de archivos. Están almacenados en ese directo- rio los ejecutables y las bibliotecas de todos los principales programas instalados. • /USR/BIN: Ese directorio almacena los binarios de los programas. Cer- ca de 2000 mil programas y atajos son almacenados en él y, como los ejecutables de prácticamente todos los programas, están allí, el número de archivos va creciendo conforme nuevos programas son instalados. • /USR/lib: Ése también es un di- rectorio grande, que almacena mu- chos archivos. Las bibliotecas de los programas están almacenadas aquí, siendo muy semejantes a las dll’s del Windows y de extrema importancia para el buen funcionamiento de los programas y del sistema. • /BOOT: En ese directorio el Kernel está almacenado, como ya lo vimos, pero también los archivos de confi- guración del administrador de boot están en este local. Si usamos el Grub como administrador de boot, en la carpeta /BOOT encontraremos sus archivos de configuración guardados. Un consejo, eviten alterar los archivos del administrador de boot, pues cual- quier deslizamiento de configuración puede comprometer, de forma seria, la inicialización del sistema y sólo generará dolor de cabeza. • /DEV: Si encontró una locura el Linux hasta aquí, entonces se sor- prenderá con el directorio /DEV. Ése sí que un directorio exótico. Usted puede olvidarse de la función de la mitad de los directorios del Linux que nada cambiará en su vida, pero si se olvida de la función del DEV, le garantizo que pasará por dificultades. Todos los archivos que están alma- cenados en este directorio, como el “/dev/sda”, “/dev/dsp”, “/dev/modem”, entre otros, no son archivos alma- cenados en el HD literalmente, son punteros para dispositivos de har- dware. Es tan exótico, que se vuelve complicado para explicar. Imagine- mos que somos programadores y que nuestro programa necesita acceder a una placa de sonido de la computa- dora. Entonces, pasaremos los pa- rámetros del /dev/dsp para él y así usamos el hardware. Pero, ¿por qué es tan importante saber su funciona- miento? En él están contenidas todas las informaciones de hardware de la computadora, así podemos identi- ficar problemas, mapear unidades de discos y crear puntos de montaje cuando sea necesario. • /ETC: Puedo afirmar que éste es un directorio del Linux que debe ser estudiado y aprendido. No siendo exotérico, ni complicado, pero de ex- trema importancia para el sistema. 93SISTEMAS OPERACIONALES Dentro de ese directorio están los archivos de configuración del siste- ma. Toda y cualquier configuración puede ser hecha con los archivos que están dentro del /, etc. Ni siempre los archivos poseen un nombre patrón entre las versiones, pero todos están dentro de este directorio. Para poner la configuración de IP en el Linux, el archivo está localizado en /etc/ne- twork/interfaces. • /MNT: Ese directorio recibe ese nombre porque puede ser utilizado para efectuar los puntos de montaje del sistema. Antiguamente, si colo- cábamos un CD dentro de la uni- dad de CDROM nada ocurría en el Linux. Para poder acceder el CD teníamos que montarlo en el sistema, y ¿cómo era hecho esto? Teníamos que ir a la carpeta /DEV, localizar, dentro de ella, si existía el hardware del CDROM y, en el caso de que hubiera, era necesario ejecutar el comando “mount /dev/cdrom /mnt/ cdrom”. De esa manera, dentro de la carpeta /MNT tendríamos una car- peta llamada CDROM, que permitía acceder al dispositivo. Actualmente, el Linux hace los puntos de montaje automáticos, pero, aun así, los puntos de montaje son muy utilizados en servidores. De esa manera, de forma rápida, busqué explanar un poco sobre los direc- torios. Entiendo que sea confuso, pero, para aprender, es necesario poner las manos en la masa. Yo demoré un tiempo para compren- der, pero, después todo queda claro. No se asusten, prueben y prueben, es muy bueno. El famoso ROOT Cuando pedimos para alguien lo que sabe de Linux, les puedo afirmar que un 90% de las respuestas es que el sistema es seguro. Para muchos el Linux es sinóni- mo de seguridad y ellas están correctas. El Linux es muy seguro debido a su estructura de carpetas y permisos de acceso. Parte de esa seguridad está vincula- da al famoso ROOT. Todos los sistemas basados en Unix poseen un usuario con accesos irrestrictos a archivos, directorios y procesos. Siendo un usuario capaz de borrar cualquier archivo y alterar todas las reglas de permisos de acceso, ése es el ROOT. El Windows posee su usuario de administración máxima del sistema, que es el Administrador (a veces él está activo y otras veces no está activo en el sistema). El problema es que el Windows, debido a su arquitectura y a su forma de trabajar, permite explotar muchas vulnerabilidades que pueden dejarlo inseguro y expuesto a amenazas. En el Linux, el usuario de admi- nistración es el Root.Diferentemente del Windows, el Linux es estructurado de tal forma que solamente el usuario Root con- sigue alterar configuraciones del sistema o acceder directorios críticos del sistema, siendo muy poco probable que haya una vulnerabilidad sencilla para ser explotada. Entenderemos, un poco mejor, el Root. Cada archivo y proceso del Linux posee un dueño, o sea, quien es el propie- tario del archivo determina quién puede o no puede accederlo. El dueño del archivo tiene acceso irrestricto a sus pertenencias, lo que puede ocurrir es que algunos archi- vos pueden estar bloqueados para algunos usuarios y abiertos para otros. Para los procesos y archivos relacio- 94SISTEMAS OPERACIONALES nados al funcionamiento del sistema ope- racional, tenemos como dueño el usuario Root, o sea, solamente el root o usuarios con privilegios de súper usuario podrán accederlos y alterarlos. En suma, el Root es quien manda en todo. Sin embargo, como diría el “Tío Ben Parker”: “Con grandes poderes, vienen grandes responsabilidades”. Cuando uti- lizamos el usuario root para usar el sistema Linux, debemos tener la consciencia de que todo lo que pidamos para ser realizado, lo será. El sistema tiene convicción de que el usuario es inteligente y sabe lo que está ha- ciendo cuando está logado como root y toda y cualquier acción que él ejecute, será rea- lizada. Cuando estamos utilizando el root debemos tener una atención redoblada para cada comando ejecutado, pues, podemos comprometer todo el sistema operacional, en el caso de que ejecutemos algo errado. Uno de los motivos de que la segu- ridad sea vinculada al Linux está también en el concepto del Root. Como dijimos, solamente él posee licencia para acceder contenidos sensibles del sistema e, incluso, instalar aplicaciones nuevas. ¿Ya escucharon hablar que no existe virus para Linux? La verdad es que para que un virus sea insta- lado en el Linux usted tendrá que efectuar su download, alterar los permisos de acceso del archivo dándole permiso de ejecuci- ón, dependiendo del caso, tal vez, incluso, compilarlo y, principalmente, estar logado como root en el sistema. Decir que no existe virus para Linux es complicado, pues, todo en informática depende de tiempo y dinero, pero pode- mos afirmar que es mucho más complicado infectar una máquina con Linux, ya que ningún software es instalado sin el permiso del root. Ahora, si va a descargar el archivo, alterar los permisos, compilarlo y ejecutar como root, no culpe el sistema, pues, fue usted que quiso hacer eso y recuerde, el Linux cree que usted es suficientemente inteligente para saber lo que está haciendo. Como buena práctica, logamos en el Linux como root, solamente, cuando lo necesitamos, en el caso contrario, lo me- jor es usar su usuario personal para evitar cualquier sorpresa indeseada. Aún tenemos algunas versiones del Linux que poseen una forma de elevación de privilegios para los usuarios, al contra- rio de utilizar el usuario root. Como es el caso de las versiones que son basadas en Kernel Debian. Existe el comando “SUDO SU” que eleva al usuario para privilegios de root. Algunos defienden esa arquitectura y otros creen que sea una falla de segu- ridad. Ejecutando el comando “sudo su nombre_del_usuario”, él eleva al usuario para nivel de root. El root viene desacti- vado por patrón en estas versiones, pero es posible activarlo. Seguridad en el Linux Si hay algo que podemos sacarnos el sombrero para el Linux es el hecho de su estructura de carpetas y permisos de acceso que garantizan seguridad para el sistema. Si usted no tiene permiso de acceso a un archivo, no lo accederá, así como, no existe “darse una manera”, pues, realmente no accederá. 95SISTEMAS OPERACIONALES El objetivo de esta clase no es volvernos expertos en Linux, es entender un poco de su estructura. Quien tenga interés en entender mejor el sistema puede surfear en internet entre innúmeros sitios de la comunidad Linux, pues conseguirá todo y cualquier apoyo para aclarar sus dudas y aprender un poco más. Veamos cómo los archivos aparecen en el Linux. Ejecutando el comando ls -la, el sistema nos regresa algunas informaciones importantes, vea la imagen: Desmembremos: la primera columna puede aparecer con 3 símbolos, también puede aparecer con la “d”. Así, siempre que tenga la letra “d” al inicio de la línea, significa que es un directorio. Consecuentemente, observe el directorio CACHÉ, él está con la letra “d” al inicio. El segundo símbolo puede ser un “- “, que significa que es un archivo, entonces, siempre que aparezca “-“ sepa que es un archivo. El tercer símbolo es la “l”. Para indicar que es un atajo el Linux inserta una “l” al inicio de la línea. Siempre que haya un “- “, recuerde que es un atajo. Más adelante, aparecerán 3 bloques de 3 caracteres cada uno. Es allí que la magia del permiso de acceso ocurre. El primer bloque de 3 caracteres representa los permisos del dueño del archivo. El segundo bloque de 3 caracteres representa el permiso de un grupo y el último bloque el permiso para los otros usuarios. Entonces, tenemos algo así: Cada una de las letras representan una acción. La letra “r” representa READ, o sea, permiso para leer el archivo. Da de- recho a abrir el archivo y ver su contenido. La letra “w” representa WRITER, o sea, permiso para escribir el archivo y editarlo. Y, la letra “x” representa EJECUCIÓN, o sea, permite que el archivo pueda ser ejecutado. El permiso de ejecución es muy bueno dentro del Linux, pues, si usted crea algún script y no le da permiso para 96SISTEMAS OPERACIONALES ejecución, él no hará nada. Entonces, vol- viendo a la cuestión de seguridad, aunque usted descargue un archivo malicioso, él sólo afectará el sistema si usted le da per- miso para ejecución, en el caso contrario, será apenas un archivo suelto (diferente del Windows que sale ejecutando cosas, aunque usted no lo haya autorizado). De esa manera, supongamos que tenemos un archivo llamado AULA.TXT, cuyo permiso es R W - R - - - - -, pode- mos afirmar que el archivo da permiso de lectura y escrita para el dueño del archivo, permite que los usuarios del grupo lean el archivo y los demás usuarios no poseen permiso para hacer nada en el archivo. Entonces, ustedes se preguntan: “Pero, ¿cómo pondremos los permisos en los archivos por la línea de comando?”. Hace algún tiempo fue creado un método muy interesante y práctico para hacer eso. El comando CHMOD nos ayuda en esta jornada. Observe la tabla que sigue: Cuando queremos alterar el permiso de un archivo, basta ejecutar el comando CHMOD, junto con la referencia nu- mérica para cada bloque de caracteres de permiso. Usemos el mismo ejemplo dado. El archivo AULA.TXT con el permiso R W – R - -- --. Segmentando eso en 3 bloques, tenemos RW- / R - - / - - -. Ya, si miramos la tabla, podemos observar que existe un número para cada combinación, así, la forma numérica para representar ese permiso de acceso es 6 4 0. Para alterar el permiso de acceso del archivo para que el propietario ten- ga permiso para leer, escribir y ejecutar el archivo; para que el grupo pueda leer y escribir el archivo y los otros usuarios apenas puedan leer el archivo, ¿cómo que- daría el comando? Él quedaría chmod 7 6 4 clase.txt. Después de la aplicación del co- mando el sistema mostrará la siguiente línea para aula.txt al inicio del archivo - rwxrw-r-- Algo, muy importante, que tenemos que ponderar es la utilización de los per- misos 777. Muchos utilizan el comando CHMOD 777 para “agilizar” alguna con- figuración que están haciendo en el siste- ma, pero eso permite que cualquier usuario tenga acceso para leer, editar y ejecutar aquel archivo. Ese tipo de configuración genera una falla grave de seguridad en el sistema y no debemos utilizarlo. Está cierto, sé que parece un bicho de 7 cabezas, pero como les dije, enten- der el Linux es una cuestión de quebrar paradigmas. No será en estaclase que entenderemos todo el sistema, pero es un inicio para saber cómo él funciona. Para aprender Linux, solamente “colocando las manos en la masa”. Número Permissão 0 - - - 1 - - x 2 - w - 3 - wx 4 r - - 5 r – x 6 rw - 7 rwx 97SISTEMAS OPERACIONALES Síntesis Final Muy bien, estimado aluno, llegamos al final del módulo teórico sobre Linux. El objetivo de este capítulo fue mostrar un poco del universo Linux para usted. Sé que pareció un poco confuso lo que abordamos, por eso, le pido atención y enfoque en el material de apoyo y en las videoclases, donde aprenderemos a instalar el sistema y a poner las manos en la masa para abstraer los conceptos aplicando, en la práctica, las enseñanzas que tuvimos no solamente en este módulo, pero todo lo que vimos durante el semestre. El Linux posee una vasta documen- tación en internet, que aborda cada tópico que estudiamos de forma excelente. Por lo tanto, los desafíos del Linux apenas empezaron y fueron evidenciados para usted. Acepte el desafío de aprender un nuevo sistema y abra su mente para cosas nuevas. Ejercicios 1 – El sistema operacional Linux usa el comando chmod para configurar los permisos de uso de sus archivos y directorios. Como ejemplo, en un archivo con el nombre concurso.txt, inicialmente con los permisos rwxrwxrwx, después de usar el comando chmod 557, ¿cuáles serán los nuevos permisos del archivo? 2 – Los permisos de acceso protegen el sistema de archivos del Linux del acceso indebido de personas o programas no autorizados. La secuencia correcta para proteger archivos y directorios es: a) lectura, escrita y ejecución (r,w,x). b) ejecución, lectura y escrita (x,r,w). c) escrita, ejecución y lectura (w,x,r). 3 – Escriba los niveles de permiso de los siguientes comandos de chmod: a) Chmod 576 clase.txt: b) Chmod 607 clase.txt c) Chmod 352 clase.txt 4 – Al digitar el comando ls –la en la carpeta /home, fue localizado un archivo llamado prueba.txt con niveles de permiso 774. ¿Cuál es el nivel de permiso de él? 5 – Informe cuál sería el parámetro del comando CHMOD para tener las siguientes salidas: a) – rwxrwxr- - b) – rw - - - - r - - c) – rwx- - -rw – d) –r- - rwxrw – 6 – Explique cuál es el motivo para que el comando CHMOD 777 sea evitado al máximo? 99SISTEMAS OPERACIONALES FLYNN, Ida M.; MCHOES, Ann Mclver. Introdução aos Sistemas Operacionais. São Paulo: Pioneira Thomson Learning, 2002. MORIMOTO, Carlos E. Linux, Guia Prático. São Paulo: GDH Press e Sul Editores, 2009 OLIVEIRA, Rômulo Silva de; CARISSIMI, Alexandre da Silva; TOSCANI, Simão Sirineo. Sistemas Operacionais. 4ª. Ed. Porto Alegre: Bookman, 2010. TANENBAUM, Andrew S. Sistemas Operacionais Modernos. 2ª.Ed. São Paulo: Pearson, 2003. TANENBAUM, Andrew S.; Woodhull, Albert. Sistemas Operacionais: Projeto e Implementação. 2ª. Ed. Porto Alegre: Bookman, 1999. REFERENCIAS