Sistemas Operativos
Sitio: | Facultad de Ingeniería U.Na.M. |
Curso: | Computación ET-344 |
Libro: | Sistemas Operativos |
Imprimido por: | Invitado |
Día: | miércoles, 22 de enero de 2025, 14:06 |
1. Introducción
Existen en el mundo un montón de Sistemas Operativos, cada uno tiene sus características y persiguen un propósito distinto.
El tema da para mucho, es parte de una materia por ejemplo en la Carrera de Ing. En Computación.
La idea de esta presentación es mostrar que es un tema complejo, mucho mas que hacer una aplicación o programa
La idea de este tema es presentar sus características y finalidades.
2. Listas de Sistemas Operativos.
Al inicio de los años ochenta casi todo el software era privativo, lo que significa que tenía dueños que prohibían e impedían la cooperación entre usuarios. De ahí que fuera necesario el Proyecto GNU.
Todo usuario de ordenadores necesita un sistema operativo. Si no existe un sistema operativo libre, ni siquiera se puede comenzar a usar un ordenador sin recurrir al software privativo. Así, el primer elemento en la agenda del software libre tenía que ser un sistema operativo libre.
- MS/DOS
- DR DOS
- Microsoft Windows.
- Mac OS X
- UNIX
- GNU/Linux
- iOS
- Android
- HongMeng OS/HarmonyOS
- IBM OS/360
- MVS
- VM
- OpenVMS
- Solaris
- OpenBSD
- Google Chrome OS
- QNX
- RTOS
- FreeRTOS
- VxWorks
Notar que esta lista no es del todo justa, si se presentara una lista con los sistemas operativos de los servidores, probablemente no tendría los mismos valores. Estos números se refieren a Sistemas operativos de Escritorio.
3. Proceso
¿Que es un Proceso?
Un proceso es cualquier programa en ejecución, este necesita ciertos recursos para poder ejecutarse.
Un programa es como una receta:
Un cocinero (procesador) cocinando (acción) la receta (programa o código) es como un proceso.
Para ejecutar un proceso satisfactoriamente se necesita:
1) Tiempo de CPU.
2) Memoria.
3) Archivos.
4) Dispositivos de E/S.
Estados de un Proceso.
A medida que un proceso se ejecuta cambia de estado.
Cada proceso puede estar en uno de los estados:
- A-Nuevo (new): el proceso se está creando.
- B-En ejecución (running): el proceso está en la CPU ejecutando
- instrucciones.
- C-Bloqueado (waiting, en espera): proceso esperando a que ocurra
- un suceso (ej. terminación de E/S o recepción de una señal).
- D-Preparado (ready, listo): esperando que se le asigne a un
- procesador.
- E-Terminado (terminated): finalizó su ejecución, por tanto no ejecuta más instrucciones y el SO le retirará los recursos que consume.
Un proceso es un programa ejecutándose dentro de su propio espacio de direcciones.
4. Hilo
Se conocen como hilo o hebra (del inglés thread), a un concepto en los Sistemas Operativos.
En este contexto, un proceso recibe el nombre de proceso pesado, mientras que un hilo recibe el nombre de proceso ligero.
El término hilo se refiere sintáctica y semánticamente a hilos de ejecución.
El término multihilo hace referencia a la capacidad de un SO para mantener varios hilos de ejecución dentro del mismo proceso.
¿Que es un hilo?
Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, la situación de autenticación, etc.
Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente.
Un hilo es simplemente una tarea que puede ser ejecutada al mismo tiempo que otra tarea.
Los hilos, a diferencia de los procesos, no son independientes entre sí.
Ventajas de los hilos sobre los procesos.
Se tarda mucho menos tiempo en crear un nuevo hilo en un proceso existente que en crear un nuevo proceso.
Se tarda mucho menos tiempo en terminar un hilo que un proceso.
Se tarda mucho menos tiempo en conmutar entre hilos de un mismo proceso que entre procesos.
Los hilos hacen más rápida la comunicación ya que al compartir memoria y recursos, se pueden comunicar entre sí sin invocar el núcleo del SO.
Recordar que los procesos no se pueden comunicar directamente por que no coexisten con el mismo estado running o ejecución, es por eso que la comunicación entre hilos es importante.
Ejemplo:
Una aplicación puede tener un hilo en background chequeando automáticamente la gramática de lo que se escribe, mientras otro hilo puede estar guardando automáticamente los cambios del documento en el que se trabaja.
5. Analogías de Sistema Operativo
Un sistema operativo es como una torre de control en un aeropuerto.
Debe coordinar el acceso y control de procesos a los recursos.
El sistema Operativo sirve, ayuda a los procesos a desentenderse de cuestiones físicas y operativas de acceso y administración de recursos de las cuales se encarga el Sistema Operativo, algo como un pasajero en un taxi, esta analogía sería con un solo proceso o pasajero.
Pero en realidad lo hace con cientos o miles de procesos, para esta analogía podemos pensar en un director de orquesta.
Con esta analogía se puede entender que para lograr una buena interpretación la coordinación de instrumentos ( procesos) no necesariamente debe ser igualitaria en cuanto a los recursos, es decir un triangulo de percusión no va a tener tanta participación ( tiempo de recursos ) como un violín o piano. Por supuesto todo depende de la pieza que se ejecutando.
¿Que es un sistema Operativo?
( programa).
computadora.
6. Evolución
La tecnología presentó evoluciones en distintos recursos:
- Del monoprocesador a los multiprocesadores.
- de 8 bits a 64 bits.
- Memorias ultra rápidas
- Incorporación de nuevos dispositivos
- Interconexión con otros sistemas
Los sistemas operativos no fueron la excepción y necesitaron estar a las altura de las novedades.
Un sistema operativo debe incluir:
- Un manejador de recursos.
- Un programa de control.
- Un programa que se ejecuta constantemente en una computadora...
Definición.
Un SISTEMA OPERATIVO es un conjunto de programas (y por lo tanto, SOFTWARE) que administran los recursos de la computadora de manera:
- eficiente
- fácil y transparente para el usuario
- acompañar la evolución del resto de las componentes.
1) Sobre eficiencia.
- Tiempo de CPU,
- espacio de memoria primaria
- secundaria, dispositivos de E/S
2) fácil y transparente para el usuario
- Abstracción del hardware por parte del usuario
- Interfase friendly (amigable)
- El usuario trabaja cómodo, sin especificaciones de bajo nivel
3) acompañar la evolución del resto de las componentes.
- Portabilidad, Interoperabilidad, Interconectividad
- Ambiente Multitareas, multiusuario
- Seguridad, Protección (entre usuarios y desde el exterior)
- Fácil administración.
- Independencia de dispositivo,
- Abstracción del Hardware.
7. Tipos de Sistemas Operativos.
- Batch
- Interactivo
- Monousuario
- Time Sharing
- Multiusuario
- Paralelo
- Distribuido
- de Red
- de Tiempo Real
- Cliente-Servidor...
7.1. Sistemas Batch
Este termino que proviene de los viejos sistemas por lotes, con tarjetas perforadas
- No hay interacción con el usuario
- Se usa para largos procesos, con entrada desde archivos y salida a archivos o impresión.
- Se define, como una linea de código mas, los archivos de E/S y el nombre del trabajo a ejecutar.
- Se “dispara” el trabajo y no hay interacción con el usuario. Salida a un archivo o a la impresora.
- Tareas encoladas
7.2. Time-sharing
• Sistemas interactivos
• Multiusuarios: la CPU se reparte entre los distinto usuarios, cada
uno de ellos en su PC/terminal
• Para estos sistemas, se debe proveer multiprogramación.
• Filesystem en linea.
La complejidad de los sistemas time-sharing
• Proteger los programas entre si.
• Tiempo de respuesta razonable
• Incorporación del concepto de memoria virtual. Swapping.
• Optimizar accesos a disco para no degradar la respuesta.
• Optimizar el uso de la CPU
¿Que es Multiprogramación?
- Posibilidad de tener varios programas en memoria simultaneamente.
- Grado de multiprogramación es la cantidad de programas que se tienen en memoria
- En un sistema uni-procesador, habrá varios programas en memoria pero solo uno en ejecución, en un momento especifico.
- Los sistemas Time-sharing son una consecuencia lógica de la multiprogramación
7.3. Sistemas de Tiempo Real
- Restricciones de tiempo bien definidas
- Se usan para una aplicación dedicada.
- Memoria primaria amplia.
- Almacenamiento secundario ilimitado
7.4. Sistemas Paralelos
- Sistemas multiprocesador • Procesadores compartiendo bus,
clock. - Si comparten memoria y perifericos, son tightly coupled.
- El multiprocesamiento puede ser simétrico o asimétrico
Ventajas de los Sistemas Paralelos
• Mejoran el throughput (resolución de mayor cantidad de procesos en un momento dado)Tipos de Sistemas Paralelos
- Simétricos (SMP): cada procesador tiene una copia idéntica del SO y esas copias se comunican entre si, si es necesario
- Asimétricos: Uno de los procesadores distribuye y dirige la actividad de los otros. Relación Master-Slave
- Equipos TANDEM: duplican HW y SW para asegurar continuidad ante fallas.
7.5. Sistemas Distribuidos
Se distribuye el trabajo entre varios procesadores, pero estos no
comparten memoria ni reloj.
Ventajas: compartir recursos, mejorar el procesamiento por división de un proceso en subprocesos, confiabilidad, comunicación, escalabilidad, robusto.
7.6. Sistemas de Red
Multiplicidad de maquinas con acceso remoto a recursos.
Conexión por login remoto ( telnet)
Transferencia remota ( ftp)
Podemos conectarnos a una maquina con otro SO
MAthSL de Ferchi fue un ejemplo, de sistema operativo de red donde el Software que le permitía trabajar en red se debía instalar en el cliente sobre el sistema operativo del equipo. El equipo personal necesitaba ambos sistema operativos para gestionar conjuntamente las funciones de red y las individuales.
7.7. Cliente Servidor
- Servicio: entidad de Software en una o mas maquinas que provee una función particular
- Servidor: Software de servicio que corre en una maquina
- Cliente: Proceso que puede solicitar un servicio a través de un conjunto de operaciones bien definidas que forman la interfase cliente.
- Peer-to-peer y el cliente/servidor.
Ejemplos de sistemas cliente servidor
8. Servicios de un Sistema Operativo
- Eficiencia en administración de recursos
- Controlar la ejecución de procesos (creación, terminación, suspención y comunicación)
- Planificar el uso de la CPU
- Asignar Memoria principal en ejecución
- Asignar Memoria Secundaria
- Permitir acceso controlado desde los procesos a los dispositivo
- Controlar la ejecución de procesos (creación, terminación, suspención y comunicación)
- Seguridad
- Portabilidad
- Facilidad de Administración
- Abstracción de Hardware
- Intrefase con el Usuario
- Estabilidad
- Soporte
- Actualizaciones
9. GNU/Linux
El sistema operativo GNU es un sistema completo de software libre compatible con Unix. El término GNU proviene de «GNU No es Unix». Se pronuncia en una sola sílaba: ñu. Richard Stallman escribió el anuncio inicial del Proyecto GNU en setiembre de 1983. Una versión extendida, denominada el Manifiesto de GNU, se publicó en setiembre de 1985.
Stallman necesitaba un kernel, pero las características de lo que quería para Kernel ( Hurd) no las estaba consiguiendo en el tiempo que se esperaba.
Hacia 1991, un estudiante de ciencias de la computación de la Universidad de Helsinki, llamado Linus Torvalds desarrolló un núcleo para computadoras con arquitectura x86 de Intel que emulaba muchas de las funcionalidades de UNIX y lo lanzó en forma de código abierto en 1991, bajo el nombre de Linux.
Como Linus T. quería
compartir su código para que cualquiera pudiera usarlo se juntaron y surgió GNU/Linux con la filosofía de software libre, GNU es patrocinado por la Free Software Foundation (FSF) , una fundación que promueve el uso del software libre.
En 1992, el Proyecto GNU comenzó a utilizar el núcleo Linux junto a sus programas.
Estas personas tiene un Ego muy grande y por supuesto hubo y van a existir problemas de quien mas grande :-) , pero mas allá de eso, los beneficiados en esta sociedad fuimos muchos usuarios.
Hoy en día GNU/Hurd es un proyecto dentro del Proyecto GNU para reemplazar al núcleo de un sistema operativo Linux, que se ha estado desarrollando desde 1990, con esto en el futuro tendríamos GNU/Hurd.
9.1. Kernel , Shell
El kernel ó núcleo de linux se puede definir como el corazón del sistema operativo. Es el encargado de que el software y el hardware de la máquina puedan trabajar juntos.
La interfaz con el sistema operativo se denomina que interpreta comandos se conoce con el nombre de shell.
La terminal es la interface entre el usuario y el Shell.
GNU/Linux tiene varios shells: bash, ash (o sh) , csh, Zsh, ksh, tcsh
shell :bash
Lista de comandos :https://www.gnu.org/software/bash/manual/bash.html
Ejemplo cálculo de factorial de 10000:
seq 10000 | paste -sd'*'| bc
Cantidad de dígitos del 10000!:
seq 10000 | paste -sd'*'| bc |wc -m
Los shells ofrecen un método para comunicarse con el sistema operativo. Esta comunicación tiene lugar de forma interactiva (la entrada desde el teclado se ejecuta inmediatamente) o como un script de shell. Un script de shell es una secuencia de mandatos del shell y del sistema operativo que se almacena en un archivo.
Shell era lo que tenía Stallman. Kernel era lo que tenía Linus Toward.
En Linux el entorno Gráfico NO forma parte del Sistema Operativo!!
Existen muchas interfaces gráficas, algunas livianas otras pesadas, una para cada gusto y hardware disponible.
POSIX
POSIX (acrónimo de Portable Operating System Interface, y X viene de UNIX como seña de identidad de la API) es una norma escrita por la IEEE, que define una interfaz estándar del sistema operativo y el entorno, incluyendo un intérprete de comandos (o "shell").
El término fue sugerido por Richard Stallman en la década de 1980, en respuesta a la demanda del IEEE, que buscaba un nombre fácil de recordar. La traducción del acrónimo es "Interfaz de Sistema Operativo Portable"
9.2. Distribuciones
GNU/Linux es un núcleo de un SO pero para tener un SO operativo completo hay que acompañarlo de un montón de utilidades, dotarlo de una estructura de directorios, así
como dotarlo de ficheros de configuración, y scripts para muy distintas tareas. Un script es un fichero que contiene instrucciones para el interprete de comandos. Todas estas
cosas juntas y bien organizadas son las cosas que debe proporcionar una distribución. Algunas distribuciones incluyen software comercial de su propiedad. Otras en
cambio solo incorporan software GPL o similar. (software libre)
● Distribuciones libres son Slackware y Debian , Fedora,
Mandriva , Ubuntu ,Gentoo, Rxart , Knoppixs, Vector Linux.
● Distribuciones propietarias son RedHat, SuSE, Caldera,Mandrake etc.
Cada distribución tiene sus propias características que la hacen más o menos adecuada para ciertos usos.
9.3. Entorno de Escritorio
Un entorno de escritorio (en inglés desktop environment, abreviado DE) es un conjunto de software para ofrecer al usuario de una computadora una interacción amigable y cómoda. Es una implementación de interfaz gráfica de usuario que ofrece facilidades de acceso y configuración, como barras de herramientas e integración entre aplicaciones con habilidades como arrastrar y soltar. Los entornos de escritorios, por lo general, no suelen incorporar interfaz gráfica en su centro de control, en caso de tenerlo, para configurar opciones propias del sistema operativo, sino que se limita a ofrecer opciones de configuración del mismo entorno. De todos modos, cabe destacar que, algunos centros de control de algunos entornos permiten instalar módulos que añaden opciones de configuración adicionales, que servirían para configurar esas opciones que no están disponibles por defecto.
Gnome (shell)
Al igual que con la mayoría de los proyectos de software libre, el desarrollo de GNOME se maneja de manera flexible. La discusión se produce principalmente en una serie de listas de correo públicas. Los desarrolladores y usuarios de GNOME se reúnen en una reunión anual de GUADEC para analizar el estado actual y la dirección futura de GNOME.8 GNOME incorpora estándares y programas de freedesktop.org para interactuar mejor con otros escritorios.
GNOME está escrito principalmente en C, C++, Vala, Python y JavaScript.9 Varias combinaciones de idiomas están disponibles.
KDE Plasma
Xfce
MATE
Cinnamon
10. GLP
La licencia más utilizada en Linux es la licencia GPL(General Public License) de GNU. Sin embargo hay otras licencias igualmente aceptables bajo el término de software libre.
Un buen lugar para informarse sobre los tipos de licencias libres es el 'Debian Policy Manual' en este documento se establecen unos criterios para establecer si Debian
considera o no libre una licencia. Esto se describe a continuación de forma resumida
- Libertad de distribución:Se refiere a la libertad de comercializar el software sin que sea necesario pagar derechos de ningún tipo.
- Código libre: Se considera que el código es libre cuando los fuentes son de dominió
público. - Integridad de los fuentes: Se recomienda no restringir los derechos de modificación del código fuente, aunque se aceptan algunas fórmulas que restringen la forma
de efectuar ciertas modificaciones pero no entramos en estos detalles ahora. - No discriminación para grupos o personas: La licencia no considera distinción alguna para ningún tipo de persona o grupo.
- No discriminación para actividad o propósito Por ejemplo no se distingue entre uso comercial, doméstico, educativo, etc.
- Distribución de la licencia :La licencia afectará a las sucesivas distribuciones de los programas de forma automática sin necesidad de trámite alguno.
- La licencia no debe de ser específica de Debian: Es decir Debian no admitiría una licencia que impida el uso de un programa fuera de la distribución Debian.
- La licencia no debe contaminar otros programas: La licencia no debe imponer restricción alguna a otros programas. Por ejemplo no sería admisible obligar a que el programa solo se pueda redistribuir en un medio que no contenga software comercial.
- Ejemplos de licencias libres
GPL, BSD, y Artistic son ejemplos de licencias libres.
11. Estructura y diseño de un SO
• Es Software, por lo tanto, debe ser modular.
• Las interfases entre los módulos deben estar bien definidas
• Establecer niveles jerárquicos
• Posibilidad de abstracción del HW
12. Componentes
Se deben proveer módulos para:
• manejo de procesos,
• De la memoria principal,
• De archivos
• Del sistema de E/S
• De la memoria secundaria
• Para networking
• Para protección
13. System calls
¿Qué es una llamada al sistema (syscall)?
Una llamada al sistema o system call es un método utilizado por los programas de aplicación para comunicarse con el núcleo del sistema
Las llamadas al sistema comúnmente usan una instrucción especial de la CPU que causa que el procesador transfiera el control a un código privilegiado (generalmente es el núcleo), previamente especificado. Esto permite al código privilegiado especificar donde va a ser conectado así como el estado del procesador.
El procesador entonces comienza a ejecutar las instrucciones de código
de bajo nivel de privilegio, para realizar la tarea requerida.
¿Para qué se necesitan las system calls?
Las system calls están estrechamente ligadas al modelo moderno de sistema operativo con modo usuario y modo núcleo, que se introdujo en respuesta al creciente número de procesos que se ejecutan simultáneamente en la memoria principal (RAM) de los ordenadores. De este modo, cada proceso individual tiene sus propios datos con derechos de acceso especiales y, solo si se distribuyen los recursos correctamente, el sistema y los programas pueden ejecutarse según lo esperado.
- Proveen la interfase entre un proceso y el SO
- Pueden estar en lenguaje assembler, aunque algunos lenguajes pueden invocarlas directamente.
- Se ejecutan en modo supervisor.
¿Qué tipos de llamadas al sistema hay?
En principio, como se dijo arriba, todas las llamadas al sistema se pueden utilizar como unidades de control para la comunicación entre los procesos de aplicación y el sistema operativo o el hardware. Además, las llamadas al sistema establecidas también se pueden clasificar en diferentes categorías, por lo que se han establecido en particular estos cinco tipos:
Control de procesos: todos los procesos de un sistema informático deben controlarse para que en cualquier momento se puedan detener u otros procesos los puedan dirigir. Para esto, las llamadas al sistema de esta categoría supervisan, por ejemplo, el inicio o la ejecución o la detención/terminación de procesos.
Gestión de archivos: los programas de aplicación requieren este tipo de llamadas al sistema para acceder a las operaciones típicas con archivos. Estos métodos de manipulación de archivos incluyen la creación, eliminación, apertura, cierre, escritura y lectura (create, delete, open, close, write y read).
Gestión de dispositivos: la categoría “Gestión de dispositivos” incluye todas las llamadas al sistema que sirven para solicitar o administrar los recursos de hardware necesarios, como la potencia de computación o el espacio de almacenamiento.
Gestión de la información: los procesos tienen mucha información asociada, y la puntualidad y la integridad son muy importantes. Para intercambiar o solicitar información, los programas de aplicación utilizan llamadas al sistema para la gestión o el mantenimiento de la información.
Comunicación entre procesos: solo se puede garantizar una interacción fluida entre el sistema operativo y los distintos programas de aplicación si los procesos individuales están coordinados. Con este fin, es indispensable la comunicación a través de las correspondientes llamadas al sistema.
• Para manejo de archivos (open, close, read,write...)
• Para manejo de dispositivos (request, release...)
• Para info del sistema (obtener date, fijar o ver atributos...)
• Para manejo de comunicaciones (create, send, receive...)
Supervisor o privilegiado:
Generalmente, los sistemas operativos proveen bibliotecas que relacionan los programas de usuario y el resto del sistema operativo, usualmente una biblioteca de tiempo de ejecución (runtime) de C como la glibc de GNU o la biblioteca de C de Microsoft. Esta biblioteca maneja, entre otras cosas, los detalles de bajo nivel para transferir información al kernel y conmutar a modo supervisor, así como cualquier procesamiento de datos o tareas que deba ser realizada en modo supervisor. Idealmente, esto reduce la dependencia entre el sistema operativo y la aplicación y el software, e incrementa su portabilidad.