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:
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.
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).
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
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
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.
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.
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
Ademas de Linux y Windows existen muchísimos mas sistemas operativos:
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:
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:
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
http://172.16.0.9:8080
Para las siguientes tareas indica si las puede hacer el propio proceso o debe llamar al API del Sistema Operativo
y
de la ecuación y=3*cos(x)
para los valores de x=[0,1,2,3,4,5,6,7,8,9]
x
e y
que hemos calculado antes.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:
sudo apt install yasm sudo apt install ddd sudo apt install binutils
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
yasm -g dwarf2 -f elf64 prueba1.asm -l prueba1.lst ld -g -o prueba1 prueba1.o ./prueba1
./prueba1
Instala en Windows el programa Process Explorer e indica que información puedes obtener de cada proceso del sistema
Averigua para la distibución de Linux Mint , con que entornos gráficos la puedes descargar.
Di el nombre de 3 distribuciones de Linux que no esté en estos apuntes.
Di el nombre de 2 entornos gráficos de Linux que no esté en estos apuntes.