Herramientas de usuario

Herramientas del sitio


clase:daw:si:1eval:tema06

06. Sistemas Operativos

Sistema Operativo

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

  1. Calcular el número Pi con 20 decimales
  2. Crear un fichero
  3. Resolver una ecuación de segundo grado.
  4. 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]
  5. Pintar en la pantalla los puntos x e y que hemos calculado antes.
  6. Descargar un fichero desde internet
  7. Detectar que el usuario a movido el ratón.
  8. 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
  sudo apt install binutils
  • 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.

clase/daw/si/1eval/tema06.txt · Última modificación: 2020/10/23 17:03 por admin