Actividad 2

 Sistemas operativos y la terminal.


PRIMERA PARTE - Sistemas operativos


  1. ¿Qué son los sistemas operativos?

  2. ¿Cuáles son los componentes de un sistema operativo?

  3. ¿Qué es un log?

  4. ¿Qué es un hilo?

  5. ¿En qué se diferencia un proceso de un hilo?

  6. Procesos monohilo y procesos multihilo

  7. Hilos a nivel usuario y nivel kernel

  8. ¿Cuáles modelos multihilo hay?

  9. ¿Por qué hay multicore si se podría solo aumentar la velocidad?

  10. Aplicación modelos multihilos a arquitecturas multicore

  11. ¿Qué tipos de procesos hay, cómo y por qué se comunican los procesos?


SEGUNDA PARTE - Terminal


  1. ¿Qué es la terminal?

  2. ¿Qué se puede hacer con la terminal?

  3. ¿Qué es un comando?

  4. ¿Qué son las wildcard?

  5. Bases de POSIX

  6. ¿Cuáles son los operadores de control?



















PRIMERA PARTE


  1. El sistema operativo es un programa o conjunto de programas que se encargan de administrar los recursos de la computadora.

El sistema operativo es quien se encarga de comunicarse directamente con el hardware, el disco de almacenamiento lo busca y ejecuta en primer lugar. Es la pieza fundamental de una computadora para su funcionamiento.


El sistema operativo es un software ya que con todas las nuevas evoluciones constantes en el mundo de la tecnología, quien controle los recursos de la computadora debe poder integrar esas nuevas tecnologías. Si el sistema operativo fuera ligado al hardware no podría actualizarse ni cambiarse.


  1. Hay dos componentes indispensables en un sistema operativo: El user space y el kernel.


El user space contiene las aplicaciones, todo con lo que el usuario interactúa directamente. Este espacio es una interfaz gráfica proveída por el sistema operativo para crear un ambiente amigable para el usuario. Para comunicarnos con el sistema operativo podemos usar una GUI o CLI, la GUI (Graphic User Interface) es una manera gráfica con la que podemos accionar con el sistema operativo de una manera intuitiva (o depende de que tan bien esté diseñado el GUI) mientras que la CLI (Command Line Interface) es una manera de comunicarnos con el SO por medio de comandos de texto con un programa llamado “Terminal”.


Por otro lado está el kernel, el cual es quien se encarga de comunicarse directamente con el hardware. El kernel tiene cuatro funcionalidades fundamentales: 

  • Administración de archivos (File Management) 

  • Administración de procesos (Process Management)

  • Administración de memoria (Memory Management)

  • Administración de entradas y salidas de información (I/O Management)


File Management: Todo en nuestra computadora son archivos, la información es guardada en archivos y a su vez estos pueden ser guardados en carpetas para una mejor organización. 

Cuando un archivo es guardado además de la información como tal se almacenará con el metadata, esto es información adicional que describe qué es ese archivo.

Cuando se acciona con los archivos estas acciones deben ser interpretadas al hardware para que entienda qué hacer con ese archivo, acciones tales como: crear, leer, ejecutar, actualizar, renombrar, eliminar. El encargado de monitorear estas acciones es el sistema de archivos (file system)


  • File data: La información como tal

  • Metadata: Información sobre el archivo

  • File System: El encargado de monitorear acciones con los archivos

Ahora con un poco más de profundidad…


El File System es el sistema de clasificación donde podemos crear carpetas y guardar archivos en ellas, se encargará de almacenar y recuperar los archivos del medio de almacenamiento (el disco duro). Sin el File System el medio de almacenamiento sería simplemente un montón de archivos juntos sin saber cómo conectarse o manejarse.


Algo interesante a conocer es que los archivos de gran tamaño, no son usualmente almacenados con su tamaño original, en cambio son fragmentados y almacenados en pequeños trozos. Esto ya que no es eficiente guardar trozos grandes de información y son accedidos más rápido en fragmentos. Este tipo de almacenamiento se llama “Block Storage”.

Hay muchísimos tipos de File System ‘s, y usualmente no se llevan bien entre ellos, puesto su manera de comportarse y manejar archivos difiere mucho entre sistemas operativos , por lo que es lo mejor usar el tipo que recomiende el mismo sistema operativo.


El Metadata guarda información cómo: 

  • File owner (dueño)

  • Permissions (Permisos)

  • File Size (Tamaño)

  • Date create (Fecha creación)

  • Date modified (Fecha edición)

  • File Type (Tipo de archivo): esta es la extensión al lado del nombre del archivo “.tar, .txt”. etc. De esta manera es como el sistema operativo reconoce al archivo.


Process Management: Los archivos pueden ser ejecutados, ósea, las aplicaciones son almacenadas como archivos y las aplicaciones son ejecutadas cuando damos doble click sobre ellas. Cuando ejecutamos una aplicación se crea un proceso de esa aplicación.


Usualmente ejecutamos más de una aplicación al mismo tiempo, el navegador mientras escuchamos con el reproductor de música a la vez que redactamos un texto. Todas estás aplicaciones deben ser monitoreadas por el sistema operativo, por lo que para cada aplicación se deben asignar recursos y tiempo en el que el procesador la vaya a ejecutar. Un proceso entonces, es una instancia de un programa mientras que un programa es una aplicación que se puede ejecutar.


Un programa puede tener uno o más procesos, como en Chrome donde cada ventana es un proceso por separado. A cada proceso debemos asignarle recursos como RAM o CPU, estos recursos son finitos por lo que no podemos darle vía libre a los procesos a que usen cuanto quieran. El Process Manager se encarga de precisamente esto, asignarle de una manera eficiente recursos a cada proceso, a liberar memoria de procesos que hayan finalizado y asignarla a otros procesos.


El procesador (CPU) ejecuta un proceso a la vez, por lo tanto el Process Manager le asigna un horario a los procesos para que sean ejecutados por el procesador.


Los procesos son ejecutados uno a uno con una técnica llamada “time slicing”, la cuál divide el tiempo de ejecución en rodajas “slices” y se le asigna un slice a cada proceso permitiendo que varios procesos se ejecuten el cambio de proceso es tan rápido que da una ilusión de simultaneidad. 


Si la computadora está lenta, puede ser que un proceso esté tomando más slices que los que debería, o quizás no se cuenta con los recursos suficientes para la ejecución de demasiados procesos. El Process Manager maneja los procesos de la mejor manera posible, pero habrá ocasiones en las que deberemos intervenir y terminar un proceso que esté tomando demasiado tiempo.


Memory Management: Como se comentó anteriormente, los procesos consumen recursos y la memoria RAM es uno de ellos. 

La RAM es una memoria mucho más rápida que la CPU y los procesos necesitan hacerse de espacio en esta para poder ser accedidos por la computadora más rápidamente. Sin embargo esta memoria es pequeña, por lo que debe ser administrada eficazmente, esto lo hace el Memory Manager.


Hay una manera de “crear” más memoria de la que hay físicamente, es llamada “Virtual Memory” o memoria virtual. Virtual Memory es una combinación de RAM con CPU que actúa como una memoria que puede ser consumida por los procesos. Sucede de la siguiente manera:


  1. A un proceso en ejecución se le toman los datos en pedazos llamados pages

  2. Los pages son almacenados en Virtual Memory

  3. Si se quiere ejecutar un page se envían a la memoria física


Cuando ejecutamos un programa no ejecutamos todas sus funcionalidades al mismo tiempo, por lo que solo debemos enviar a memoria física los pages que se estén visualizando.

Los pages se almacenarán en un espacio el disco duro, al cual se le llama swap space. Cuando creamos particiones en el disco asignamos un espacio para swap.


I/O Management: El kernel maneja las entradas y salidas de información de la computadora. Dispositivos como los periféricos proveen entradas y salidas de información por lo que deben ser administradas. 


I/O Manager carga un software especial llamada driver que permite que los periféricos se comuniquen con la computadora, además coordina la comunicación entre los periféricos. El kernel hará su mejor esfuerzo para que no haya problemas en la transmisión de información entre las entradas y salidas de información.


3. Los errores en el tiempo de vida de la computadora son inevitables, por lo que se ofrece una especie de diario que describe todo lo que hizo la computadora. A este diario se le llama “Log”.


4. Un hilo es un subproceso de un proceso, es decir, una pequeña parte de un proceso que se aísla para ser ejecutado paralelamente al proceso o hilo principal.


5. Un proceso tradicional o pesado es igual a una tarea con un solo hilo principal, los hilos permitirán ejecutar varias tareas paralelamente dentro de un mismo proceso.


6. Los procesos pueden ser monohilo o multihilo, los multihilos comparten información como código, datos, recursos etc.


7. Hay sistemas operativos que no saben interpretar los hilos y solamente consideran los procesos. Por ello existen los hilos a nivel usuario y a nivel kernel, donde a nivel usuario solo existen el user space y a nivel kernel existen, valga la redundancia, en el kernel.


Los hilos a nivel usuario serán controlados por un planificador de hilos que designará que hilo se enviará al kernel para ser ejecutado por el procesador. 

Si el procesador es multicore, no se aprovechará y se usará solo un núcleo.


Si el SO reconoce los hilos, los hilos a nivel usuario pasarán al kernel como hilos y no como un único proceso, ahora el planificador del SO se encargará de designar qué hilo se ejecutará por el procesador.

Si el procesador es multicore, será una relación uno a uno con los núcleos a menos que no haya suficientes núcleos y el planificador del SO designe cuales se ejecutarán por el procesador.


8. Los modelos multihilo son las relaciones posibles que hay entre los hilos usuario e hilos kernel: 


  • Uno a uno: Un hilo usuario corresponde a un hilo kernel

  • Muchos a muchos: Muchos hilos usuarios van a ser mapeados a muchos hilos kernel, ejm: hay solo 3 hilos kernel, pero 4 hilos usuario por lo que se tendrán que designar por obra del planificador de hilos a nivel usuario que hilo usuario será un hilo kernel.

  • Muchos a uno: Muchos hilos usuario corresponden a un solo hilo kernel.


9.  La velocidad de la CPU no es proporcional con el consumo de energía, pero hay un punto al que reduciendo la potencia se consume poca energía y se gana mucho rendimiento. Por lo que se decidió agregar un nuevo CPU a una menor velocidad que da como resultado poco consumo y mayor rendimiento.


10. Un único hilo no saca provecho de una arquitectura multicore, por lo que asignar un modelo multihilo a un programa de gran tamaño y con funciones que difieren bastante entre ellas es una manera de aprovechar esta arquitectura.


11. Hay dos tipos de procesos: procesos independientes y procesos cooperadores.


Los procesos independientes no pueden afectar o ser afectados por otros procesos.


Los procesos cooperadores pueden afectar o ser afectados por otros procesos. Hay dos maneras en las que se pueden comunicar: con un espacio en memoria compartida (Shared Memory) y por medio de mensajes (Message Passing).


Shared Memory: Se asigna un espacio en memoria al cual los procesos que se quieran comunicar tienen acceso de escritura y lectura.


Message Passing: El proceso (A) que quiera enviar información a otro proceso (B) enviará un mensaje al kernel de que envíe el mensaje a B de parte de A.







SEGUNDA PARTE 


  1. La terminal es un programa donde podemos ingresar comandos de texto para comunicarnos con el sistema operativo. Los comandos son interpretados por un programa llamado shell, el más conocido es bash.


  1. Cualquier acción que pueda hacer el sistema operativo la podemos realizar con la terminal:

    1. Conectarnos con otros computadores

    2. Administrar procesos

    3. Administrar ficheros y directorios

    4. Observar contenido de ficheros y directorios

    5. Administrar dispositivos conectados

    6. Administrar redes y servidores

Y mucho más.


  1. Un comando puede ser 3 cosas: un ejecutable, una utilidad o función de shell, una función externa de shell, un alias (manera corta de escribir un comando)


  1. Las wildcards nos permiten hacen filtros de archivos que necesitemos, como mostrar en la ventana todos los archivos que tengan algún comienzo o terminación Ejm: *.txt (todos los archivos que terminan con “.txt”) ??.txt (archivos con dos caracteres seguido de “.txt”, “?” representa la cantidad de caracteres)


  1. La shell funciona diferenciando de 3 maneras la información:


  • Stdin, standard input. La entrada de un comando. (File descriptor: 0)

  • Stdout, standard output. La salida de un comando. (File descriptor: 1)

  • Stderr, standard error. El error de entrada o salida de un comando. (File descriptor: 2)


Podemos elegir la manera en la que queremos que un comando sea interpretado por la shell, usando el file descriptor. Ejm: ls this_is_an_error  2> error.txt


Los pipes operator son una manera de enviar el output de un comando al input de otro comando y se determinada con “|”. Ejm: ls Desktop | rm -rd


  1. Los operadores de control se usan para encadenar comandos de manera sincrona o asincrona:


Síncrona (;): date; cal (El segundo comando se ejecutará luego del primero)

Asíncrona (&): date & cal (El segundo comando se ejecutará al mismo tiempo que el primero)

Operadores condicionales, si se cumple una condición se ejecutan:


Condicional AND: Si el primer comando funciona se ejecuta el siguiente


mkdir test && cd test


Condicional OR: Cumple alguno de los comandos


cd no_existing || ls Desktop


Publicar un comentario

Artículo Anterior Artículo Siguiente