---
# System prepended metadata

title: OPS
tags: [Sistemas Operativos, UNIAT, Clase]

---

OPS

# OPS
###### tags: `UNIAT` `Clase` `Sistemas Operativos` 
## Kernel basics
Un kernel es un programa (software) que realiza una serie de tareas para gestionar los recursos como memoria, procesador y dispositivos.
* Es un programa ya compilado  
* Es lo primero en ser ejecutado al encender el dispositivo. (bootloader)
* Es bastante ligero.
    * https://github.com/torvalds/linux
    * https://kernel.org
* Linux corre en multiples dispositivos.
* Linux es *Unicamente* el kernel, este es utilizado por multiples distribuciones:
    * Android, Centos, RedHat, Ubuntu, Debian, Arch.
* Sistemas tipo Unix
    * Linux.
    * BSD (openBSD, FreeBSD).
    * Darwin (MacOS)
* Al ser tipo Unix el kernel utiliza un directorio raíz (root[/]) con sistema modular para su funcionamiento.
* Errores son representados con un Kernel Panic.

`uname -r` muestra la version actual del kernel
`lsmod`  muestra los módulos instalados

![](https://i.imgur.com/bhHWmwZ.jpg)


1. ## Process Management (Gestión de procesos)…
    1. Programa: archivo con comados ( binario ).
    2. Proceso: Abstracción de un programa ejecutandose.
    3. CPU (Central Process Unit).
        ![](https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcQ29Iug1fUhM0D32hQQ7FMQT2F_ky4LlYE0nnLD8qroYLfsAJQa) el CPU pausa cada proceso asignadole cada poco tiempo para distribuir el tiempo entre todolos los procesos activos.
    4. Todo software ejecutado es un proceso
        1. Dos tipos:
            1. Interactivos (Primer plano)
            2. Demonios 😈 ( segundo plano)
    6. Proceso incluye:
        1. Contador, registros, variables
    6.  Crear un proceso:
        1. Muchos procesos son creados al inciar el sistema.
        2. Para nosotros crearlos necesitamos hacer una llamada al sistema
            1. Unix:
                1. fork()
                2. exex()
            2. Windows:
                1. CreateProcess()
### Process Control Block (PCB)
![image alt](https://www.d.umn.edu/~gshute/os/images/process-diagram.png)


Para tener orden al momento de administrar el tiempo de procesar es necesario contar con una tabla llamada BCP donde se refleja el estado de los procesos, podríamos definirlos simplemente en 3
* Ejecutando (running)
* Listo (Ready)
* Bloqueado (Blocked)

El modelo anterior funcionaria de forma ideal y sencilla si los procesos estuvieran listos en todo momento para ser ejecutados.
En la vida real los procesos necesitan datos para operar o puede que utilicen algun dispositivo, por lo que es necesario que los procesos permanezcan bloqueados hasta que sean liberados, estos cinco estados son:
* Ejecución: el proceso esta actualmente ejecución (consumiendo tiempo del cpu)
* Listo: el proceso esta listo para ser ejecutado, solo esta esperando su turno para ser ejecutado.
* Bloqueado: el proceso NO puede ser ejecutado hasta que sea liberado por alguna operación de Entrada/Salida.
* Nuevo: El proceso acaba de ser creado pero aun no es cargado por la memoria.
* Terminado: El proceso esta fuera de  la lista de procesos ejecutables puede ser por que se termino correctamente o por algún error.

El sistema operativo cuenta con tablas donde se encuentran los procesos por estado.
Sobre estos estados se construye el diagrama de Transición, donde cada transición acompaña al orden de ejecución.
Cuando un proceso es creado el sistema operativo asigna un nombre, inserta el proceso a la lista de procesos conocidos, Determina la prioridad del proceso, asigna recursos iniciales al proceso.
* Null --> New: El proceso es creado.
* New --> Ready: El S.O. realiza esta transición cuando está preparado para comenzar a ejecutarse.
* Ready --> Running: El S.O. hace éste cambio de estado cuando es tiempo de elegir un nuevo proceso a ejecutar.
* Running --> Exit: Este cambio de estado se produce cuando el proceso actualmente en ejecución es finalizado o abortado.
* Running ---> Ready: Esta transición puede ocurrir cuando se ha alcanzado el límite máximo de tiempo de ejecución ininterrumpida (técnica encontrada comúnmente en los S.O. con multiprogramación) o cuando, al trabajar con distintos niveles de prioridad, un proceso es reemplazado por otro de mayor prioridad.
* Running --> Blocked: Esto ocurre cuando un proceso solicita algo por lo qu deba esperar. Este pedido es realizado, por lo general, en la forma de un system call (llamado de un programa en ejecución a un procedimiento que es parte del código del S.O.).
* Blocked --> Ready: Este cambio tiene lugar al ocurrir el evento por el que estaba esperando un proceso.
* Ready --> Exit: Esto ocurre cuando un proceso hijo es finalizado; ya sea por pedido del proceso padre o porque el padre en sí fue finalizado.


[Threads example]( https://www.tutorialspoint.com/cplusplus/cpp_multithreading.htm)
### Tarea threads
* Al programa anterior de threads ( puedes descargarlo de http://github.com/osadsanu/threadsTestClass)
    * Compilado para asegurarte que todo funciona:
`g++ main.cpp -lpthread -o app`
* Una vez que funciona correctamente agrega
    * un contador de tiempo para saber cuantos segundos tomo en ser ejecutado cada thread (imprime el tiempo cada que termine)
    * un contador al finalizar todos los threads ( imprime el Final de ejecución de todo el programa)
* Crea otro branch en git llamado `singleThread` y modifica el código para que  sea ejecutado de manera secuencial y no utilice de threads. (ejecuta la función multiples veces según la variable NUM_THREADS)
    * Agrega un contador e imprime el tiempo cada que la función termine y al finalizar el tiempo 
* Envía un enlace con tu repositorio en github respondiendo a este correo.

3. ## System Calls (llamadas al sistema)…
llamado de un programa en ejecución a un procedimiento que es parte del código del S.O.
   
5. ## Memory Management (Gestion de memoria)…


6. ## Devices (Dispositivos)…
    


Algo mas que dispositivos…
        * (/dev/null /dev/zero)

* Privileges (privilegios, medidas de seguridad).
* Modular 
    * ![](https://i.imgur.com/ZiZQooj.jpg)
* Incluye un API.




## Presentaciones 20/Nov
*Requisitos:*
* Presentar el tema asignado. 
* Generar la presentacion utilizando markdown notation (hackmd.io) 
    * Hacer uso del formato en .md (Agregar imágenes, enlaces, comandos, y de ser necesario código y tablas)
    * Agregar la bibliografia extra consultada al final.
* Hacer ejemplos con la maquina virtual

Antes de comenzar la presentacion envia el enlace donde este publicado el contenido (git o hackmd.io).

    

Archivos
---
Tema: Particiones.
https://es.wikipedia.org/wiki/Partición_de_disco (evitar tocar el tema de formato de particiones {ext, fat, NTSF}, es tema para otro equipo)
* Rebeca
* Miguel
* Isaac
* Kamila
* Enrique 

93
https://hackmd.io/Z30a6HGUT06g5Oue6CVYfA**![](https://i.imgur.com/jeQqJZN.jpg)

---
Tema: formato de archivos. 
https://es.wikipedia.org/wiki/Tipos_de_acceso_por_sistema_operativo (evitar tocar el tema de particiones, es tema para otro equipo)
* Juan Pablo
* Emilio
* Alfredo
* Daniel
* David

**https://hackmd.io/@AlienMissed/Exposicion-SO-EquipoDinamita**

92

---
Temas de:
- Archivos
- Identificación y organización de archivos
    - Documentacion para los primeros temas: https://es.wikipedia.org/wiki/Archivo_(informática) (tomar los temas "identificacion y orgamizacion" de archivos y la primera parte de "archivos")
- Metodos de asignacion 
    - Documentacion para este tema http://metododeasignacion.blogspot.com/2013/10/metodo-de-asignacion-de-espacio.html
* Saul
* Michel
* Gustavo
* Emerson

84

**

![image alt](https://scontent.fgdl1-1.fna.fbcdn.net/v/t1.0-9/fr/cp0/e15/q65/75424535_147135656667413_5676308604655763456_n.jpg?_nc_cat=1&efg=eyJpIjoidCJ9&_nc_oc=AQmzpg1SFTMC7J_vBYVSlYoJ_KhvJmtciqQUbspY6UDn3cyRSQWm9EYjGcQAM1yKS5vIhtM7iCrRchls_oRPu1Ad&_nc_ht=scontent.fgdl1-1.fna&oh=460f393b177e3adc1e1f201b3eec62b0&oe=5E56BAFF)
