06. Sistemas Operativos

Contenidos

Sistema operativo: Funciones

API

Procesos

Drivers

Listado de sistemas operativos

Instalación

Material

El sistema operativo (SO) no es mas que un software que controla todo el Hardware de nuestro ordenador. Una vez en marcha el sistema operativo, podemos ejecutar mas software sobre el ordenador. Ese software se llama "proceso". El SO controlará todo lo que puede y no puede hacer el proceso. Realmente un proceso únicamente puede acceder a la zona de la RAM que le deje el SO. Para el resto de cosas que quiera hacer el proceso deberá pedírselas al SO.

Por ejemplo, si un proceso quiere:

Tarea	Hardware involucrado
Averiguar si se ha pulsado una tecla	Teclado
Mostrar un texto por la pantalla	Tarjeta gráfica y Monitor
Leer un fichero de disco	Disco duro
Crear un directorio	Disco duro
Enviar un correo electrónico	Tarjeta de Red

Todas estas tareas y muchísimas mas , no las puede realizar directamente el software que software que creamos los programadores, ya que el SO no impide hacer todas esas tareas. Para ello debemos pedir al SO que las haga por nosotros.

En este diagrama se ve como el usuario pide algo a un programa (proceso), éste se lo pide al SO y por último el SO le envía finalmente al Hardware para que lo haga.

El SO operativo por ejemplo impide por ejemplo:

Que un virus pueda escribir donde quiera de nuestro disco duro.

Que lo puedan usar personas que no tiene autorización.

Que un proceso gaste mas RAM de la que queremos

Que un proceso no pueda acceder a la red

Que un proceso pueda borrar todo el disco

Que un proceso lea los datos de otros procesos

Que un proceso lea ficheros de otro usuario

Etc.

Además de impedir que los procesos hagan "cosas malas" también hace que el ordenador funcione mas rápido y mejor al coordinar de la formas mas eficiente posible el acceso a todo el Hardware. Por ejemplo permite que varios procesos se ejecuten a la vez. Aunque si hay un único núcleo se haga de forma intercalada pero al usuario le da la sensación de que se ejecutan a la vez. También permite hacer creer a un proceso que hay mas RAM de la que realmente está instalada, al usar el SO el disco duro como RAM ,etc.

API

El conjunto de todas las tareas que permite hacer un sistema operativo se llama "Interfaz de programación de aplicaciones" o simplemente API. Cada SO tiene su propio API, por ello los programas solo funcionan para un API en concreto (o SO).

El API de Windows se llama Win32 o Win64. Según sea un Windows de 32bits o 64bits. Como el API ha cambiado, por eso un programa de 64bits no funciona en un SO de 32 bits.

El API de Linux se llama POSIX

Como programadores, para nosotros es importante el API ya que justamente está hecho para que los programas que hacemos interaccionen con el SO (y por lo tanto con todo el Hardware del ordenador)

Un SO puede tener mas de un API, y un ejemplo es Windows que tiene el API de Win64 pero también el antiguo de Win32 para mantener la compatibilidad con el software antiguo. Y podemos ir mas allá. Gracias al proyecto WineHQ, tenemos el API de Win32 y Win64 en Linuz, lo que nos permite ejecutar aplicaciones Windows en Linux.

¿Como es un API? Es simplemente llamar a una función como un Java.Para crear un directorio en Windows solo hay que llamar a la función CreateDirectoryA, mientras que en Linux se hace llamado a la función mkdir. Si quieres saber como programar con el API de Linux te puedes leer: The Linux Programming Interface

Es importante no confundir el comando mkdir y la función del API mkdir. El primero es un programa llamado mkdir que para crear un directorio llama a la función mkdir del API de Linux

Proceso

Ya hemos hablado varias veces de procesos. Pero ¿que es un proceso? Un proceso es simplemente un programa en ejecución. Cuando programamos, creamos el programa y lo "guardamos" en el disco duro. Pero una vez lo ejecutamos , ese programa se carga en la RAM y el procesador lo ejecuta. En ese momento, el programa es un proceso y está bajo la supervisión de SO. Un mismo programa se puede lanzar varias veces y habría en ese caso varios procesos.

Por último , también existen los hilos o threads. Son como subprocesos dentro del mismo proceso. Es hacer que el mismo proceso sea ejecutado a la vez por varios procesadores (nucleos o nucleos virtuales) haciendo de esa forma que vaya mas rápido el proceso.

En Windows podemos ver los procesos con el Administrador de Tareas.

Drivers

Los Drivers el un software que se añade al sistema operativo y que por lo tanto formará parte de él. Eso implica que un driver no está controlado por el SO (al ser parte del propio SO) por lo que puede realizar cualquier tarea.

¿Cual es la utilizad del Drivers? Es un software que permite al SO conocer mas hardware. Por ejemplo, un sistema operativo puede no saber como leer un disco del tipo "M.2". En ese caso instalamos en el SO un driver para que el SO sepa leer discos M.2. Es como "ampliar" el SO con software que nos proporciona el fabricante del nuevo Hardware que instalamos.

Un drivers es muy útil pero: Tienen acceso a todo el hardware. Tienen acceso a toda la memoria Si fallan pueden “colgar” todo el sistema. Pueden acceder a toda la información Por lo tanto en un servidor en producción hay que tener cuidado con los drivers que instalamos ya que podrían robar información o desestabilizar el sistema

Listado de sistemas operativos

Ademas de Linux y Windows existen muchísimos mas sistemas operativos:

macOS: El sistema operativo que se usa en los ordenadores de Apple

Unix: Uno de los primeros Sistemas operativos. De él se han creado "clones" o basado en su código . Todos tienen el API de POSIX

Solaris: Se usa en grandes ordenadores. Usa procesadores SPARC

QNX: Sistema operativo usado en naves espaciales o sitio que necesitan mucha fiabilidad

FreeBSD: Es una alternativa a Linux , anterior a él. Es muy seguro.

OS/400: Ahora llamado "IBM i". Se usa en grandes ordenadores. El OS/400 se usa mucho en bancos. Es muy estable y seguro

Dentro de Linux , está nlo que se llaman Distribuciones que es el mismo sistema operativo pero cambia el software que viene junto a él.

Algunas de las distribuciones mas famosas:

RedHat: Es de pago pero muy usada en servidores

Debian: Libre y gratuita. Muy versátil pero algo compleja de usar.

Ubuntu: Se basa en Debian pero lo hace todo mas sencillo

Mint: Se basa en Ubuntu o en Debian pero intenta hacerlo aun todo mas sencillo.

Dentro del mundo de Unix hay muchos entornos gráficos, cada uno con una apariencia y funcionalidades.

Algunas de los entornos gráficos mas famosos:

KDE: Muy bueno

GNOME: La alternativa a KDE

XFCE: Muy ligero, consume pocos recursos aunque no tiene tantas funcionalidades como KDE o GNOME

Instalación

Para el resto del curso vamos a hacer prácticas en Ubuntu 18.04. Para ello primero vamos a instalar VirtualBox que permite instalar otros sistemas operativos dentro de nuestra máquina real.

Una vez instalado , debemos crear una maquina virtual con Ubuntu que descargaremos de aquí

Aprende a crear máquinas virtuales en Windows con VirtualBox

Si la instalación de Ubuntu la hacemos en clase es necesario añadir lo siguiente , cuando nos pide el proxy: http://172.16.0.9:8080

Ejercicios

Ejercicio 1

Para las siguientes tareas indica si las puede hacer el propio proceso o debe llamar al API del Sistema Operativo

Calcular el número Pi con 20 decimales

Crear un fichero

Resolver una ecuación de segundo grado.

Calculas los valores de y de la ecuación y=3*cos(x) para los valores de x=[0,1,2,3,4,5,6,7,8,9]

Pintar en la pantalla los puntos x e y que hemos calculado antes.

Descargar un fichero desde internet

Detectar que el usuario a movido el ratón.

Subir una imagen a Facebook

Ejercicio 2

Vamos a llamar al API de imprimir en pantalla de 3 formas distintas.

Desde la línea de Comandos Desde Ubuntu ejecuta el comando:

echo Hello_World

Se habrá llamado al API de Linux pero desde un programa llamado echo

Desde Java Crea un programa Java que lo único que haga es mostrar por pantalla el texto "Hello_World"

Se habrá llamado al API de Linux pero desde otro lenguaje de programación.

Desde Ensamblado Esta es la forma en la que realmente se llama al API aunque cuesta una serie de pasos:

Instalar ensamblador y depurador

sudo apt install yasm sudo apt install ddd

Programa básico ensamblador, llamado prueba1.asm

message db "Hello_World",10 global _start _start: mov ax,200 mov bx,100 add ax,bx mov rax,1 ; El Nº de llamada al sistema de escribir por la consola mov rdi ,1 ; Escribir en stdout mov rsi,message ; El texto a escribir mov rdx,12 ; El tamaño syscall mov rax, 60 ; El Nº de llamada al sistema para acabar un programa mov rdi, 0 ; El valor con el que acaba el programa syscall

Compilar y enlazar

yasm -g dwarf2 -f elf64 prueba1.asm -l prueba1.lst ld -g -o prueba1 prueba1.o ./prueba1

Ejecutar

./prueba1

Ejercicio 3

¿Cual es la diferencia entre un Driver y un programa?

Al instalar algunos Drivers, microsoft nos dice que no los instalemos al no estar verificados por él. ¿Porqué hace eso Microsoft con los Drivers y no con los programas?

Ejercicio 4

Instala en Windows el programa Process Explorer e indica que información puedes obtener de cada proceso del sistema

Ejercicio 5

Averigua para la distibución de Linux Mint , con que entornos gráficos la puedes descargar.

Ejercicio 6

Di el nombre de 3 distribuciones de Linux que no esté en estos apuntes.

Ejercicio 7

Di el nombre de 2 entornos gráficos de Linux que no esté en estos apuntes.