Sistemas operativos – Ejecución de instrucciones

Un programa que va a ejecutarse en un procesador consta de un conjunto de instrucciones almacenadas en memoria. Podemos decir que la ejecución consta de dos pasos: el procesador lee (busca) instruciones de la memoria, una cada vez, y ejecuta cada una de ellas. La ejecución del programa consiste en repetir este proceso de búsqueda y ejecución hasta que se ejecute la última instrucción del programa. Llamamos ciclo de instrucción al procesamiento requerido por una única instrucción.

CicloInstrucción

Continue reading

Sistemas operativos – Elementos básicos del procesador

Teniendo en cuenta la arquitectura Von Neumann, un computador consta de procesador, la memoria y los componentes de E/S, incluyendo uno o más módulos de cada tipo. Hay cuatro elementos principales:

  • Procesador: Controla el funcionamiento del computador y realiza funciones de procesamiento de datos, se le denomina CPU (Central Processing Unit).
  • Memoria principal: Almacena datos y programas. Esta memoria suele ser volátil, esto quiere decir que cuando se apaga el computador, se pierde su contenido. Por el contrario, el contenido de la memoria del disco duro se mantiene incluso cuando se apaga el computador.
  • Módulos de E/S: Transfieren los datos entre computador y su entorno externo. El entorno externo puede estar compuesto por diversos dispositivos de memoria secundaria, equipos de comunicaciones, terminales, etc.
  • Bus del sistema: Proporciona comunicación entre los procesadores, la memoria principal y los módulos E/S.

Continue reading

Sistemas operativos – Máquina multinivel

El sistema operativo separa al programador de trabajar directamente con el hardware a bajo nivel (bits, transistores, puertas lógicas, etc) y presenta una interfaz sencilla ocultando asuntos desagradables como interrupciones, temporizadores, administración de memoria, etc. Desde esta perspectiva, una de las funciones del sistema operativo es presentar al usuario el equivalente de una máquina virtual, que es más fácil de programar que el hardware.

Las máquinas interpretan más fácilmente las señales on y off, lo que equivale a interpretar la presencia o ausencia de voltaje. Por lo tanto, el lenguaje empleado por las máquinas consta de dos símbolos, el 1 y el 0, lo que equivale a verdadero o true, y falso o false respectivamente. Este lenguaje se conoce como lenguaje binario, y es éste lenguaje el empleado para construir todos los comandos e instrucciones necesarias para comunicarnos con la máquina. Las instrucciones que se ejecutan en un computador, son colecciones de bits, por ejemplo, el siguiente patrón indica al computador que debe sumar dos números: 1000110010100000. Escribir un programa a base de bits, es muy complicado para los programadores, para solucionar este problema existe lo que llamamos máquina multinivel. Éste concepto es una estructuración de capas bajo una serie de abstracciones, donde cada capa se apoya en la que está debajo de ella, y facilita el trabajo con el sistema operativo. Ejemplo de máquina multinivel: Continue reading

Sistemas operativos – Planificación y gestión de los recursos

Una responsabilidad importante de los sistemas operativos es la gestión de varios recursos disponibles para ellos, tales como espacio de la memoria principal, dispositivos de E/S, procesadores, etc. Es necesario que se planifique el uso de estos recursos mediante distintos procesos activos. Cualquier asignación de recursos y política de planificación debe tener en cuenta tres factores:

  • Equitatividad: Por norma general, se desea que todos los procesos que compiten por un determinado recurso, se le conceda un acceso equitativo a dicho recurso.
  • Respuesta diferencial: Por otro lado, el sistema operativo puede necesitar discriminar entre diferentes clases de trabajos con diferentes requisitos de servicio. El sistema operativo debe decidir sobre la asignación y planificación con el objetivo de satisfacer el conjunto total de los requisitos. Además, debe tomar decisiones de forma dinámica. Por ejemplo, si un proceso está esperando para hacer uso de un recurso de E/S, el sistema operativo puede intentar planificar este proceso lo antes posible con el objetivo de dejar libre ese recurso para posteriores demandas por parte de otros procesos.
  • Eficiencia: El sistema operativo debe intentar maximizar la productividad, minimizar los tiempos de respuesta, y en caso de sistemas de tiempo compartido, acomodar tantos usuarios como sea posible.

Continue reading

Sistemas operativos – Introducción

Un computador sin software es una máquina sin utilidad, necesita programas que le permitan gestionar bases de datos, realizar complicados cálculos matemáticos, ayudar a diseño, procesar imágenes, comunicarse con otros computadores que puedan estar ubicados en cualquier parte del mundo, etc. Pero un computador es un sistema complejo que se compone de procesadores, memoria central, discos, terminales, conexiones de red, dispositivos de Entrada/Salida, etc. La gestión de todos estos elementos y su utilización correcta es una labor ardua y compleja. Si esta gestión la tuvieran que realizar los propios programas de aplicación, que pueden estar ejecutándose simultáneamente, es muy probable que los programadores se vieran desbordados por la dificultad.

Continue reading

Los números de 2013

Los duendes de las estadísticas de WordPress.com prepararon un informe sobre el año 2013 de este blog.

Aquí hay un extracto:

La sala de conciertos de la Ópera de Sydney contiene 2.700 personas. Este blog ha sido visto cerca de 33.000 veces en 2013. Si fuera un concierto en el Sydney Opera House, se se necesitarían alrededor de 12 presentaciones con entradas agotadas para que todos lo vean.

Haz click para ver el reporte completo.

Administrar Ubuntu Server mediante telnet

Es posible que en nuestra red doméstica, o de nuestra empresa, tengamos un servidor funcionando bajo Linux. Y también es posible, que en algún momento necesitemos hacer cambios en él. En caso de que nuestro equipo esté aislado físicamente y que no tenga ni siquiera un monitor con teclado conectado a él, podremos administrarlo mediante Telnet.

Telnet

Telnet (TELecomunication NETwork) es un protocolo de red que consiste en establecer una conexión con una máquina remota para controlarla. Funciona bajo el puerto 23, aunque podemos cambiarlo. Telnet sólo está disponible para manejar una terminal. Este protocolo no es el más recomendado para establecer una conexión remota, ya que no cifra la conexión y una tercera persona puede estar a la escucha, captando toda la información que viaja entre nuestro PC y el servidor. Aún así, existe una variante de telnet llamada SSH (Secure Shell) que exlicaré en otro tutorial.

connectionAl conectarnos mediante telnet, el servidor nos devolverá una conexión entrante al puerto 2324 de nuestro PC. Una vez establecida esta conexión, se establecerá un puente de conexión bidireccional entre nuestro PC y el servidor o equipo remoto al que estemos conectados.

En Ubuntu Server

Para que la conexión telnet se pueda realizar, es necesario que los dos equipos, cliente y servidor, tengan instalado telnetd. Para ello, desde una terminal escribimos:

sudo apt-get update && sudo apt-get install telnetd

Repetimos el mismo paso en nuestro equipo Ubuntu con escritorio. Hecho esto, podremos conectarnos al servidor sabiendo su IP, un usuario y su contraseña.

telnet

De este modo, tendremos el control de la máquina y actuaremos como si estuviésemos delante de ella. Los métodos de administración remota son ideales para tareas de mantenimiento o para solventar errores puntuales en nuestro servidor. Para cerrar una conexión, basta con teclear el comando exit.

En el próximo tutorial explicaré cómo establecer una conexión remota segura mediante un servidor SSH.

Instalación de Ubuntu Server

Voy a explicar cómo instalar un sistema operativo, que a mí, personalmente me gusta bastante. Ideal para instalarlo en algún PC algo antiguo que tengamos en casa, para usarlo de servidor FTP o HTTP por ejemplo. Me refiero a Ubuntu Server. Este sistema es una versión similar a la Desktop que todos conocemos pero sin interfaz gráfica. El hecho de que carezca de interfaz gráfica implica un menor consumo de recursos, y por lo tanto, mayor rendimiento. A la hora de administrar nuestro servidor, podremos hacerlo desde una consola de comandos similar a la de cualquier Linux/Debian.

A mí me gusta más administrar el servidor mediante una conexión telnet desde otro PC. Ya explicaré en otro tutorial cómo se hace esto.

Como he comentado antes, Ubuntu Server está basado en Debian, y por lo tanto podremos hacer uso de los repositorios de Ubuntu para instalar software así como también instalar paquetes .deb, y por supuesto, compilar otro software.

Hasta ahora, la versión más actualizada que hay es la 13.04, y es la que voy a usar para este tutorial. Aún así, cabe destacar que llevo varias versiones instaladas de Ubuntu Server, y la instalación es muy parecida, por lo que dudo que pueda cambiar mucho de aquí a un futuro próximo.

Requisitos mínimos

Procesador: 300 Mhz
RAM: 128 MB
Disco duro: 1 GB
Tarjeta de red
Tarjeta gráfica con resolución de 640×480
Unidad de CD

Como podemos ver, los requisitos son irrisorios. En cualquier máquina, podremos hacer funcionar Ubuntu Server. La tarjeta de red no es indispensable, pero ya que vamos a instalar un servidor, por lo menos que tenga conexión aunque sea a una red local LAN. Yo voy a instalarlo bajo VirtualBox. Comencemos pues.

Metemos el CD ( 🙂 ) y si tenemos preparado el arranque automático desde CD-ROM en BIOS, veremos esta pantalla:

1

En caso de no tener el arranque automático, bastaría con entrar en BIOS y cambiar la secuencia de arranque para que inicie desde la unidad de CD. Bueno, elegimos el idioma que queramos y pulsamos intro. Ahora, nos dará una serie de opciones:

2Por defecto nos viene marcada la opción de Instalar Ubuntu Server. Esta será la opción que elegiremos pulsando intro. Las demás opciones son para realizar una instalación diferente a la estándar, comprobar errores en el disco de instalación o en la memoria RAM, continuar con el arranque normal de nuestra máquina o recuperar otra instalación anterior de Ubuntu Server. Una vez elegida la primera opción, veremos:

3En esta ventana elegimos nuestra ubicación y pulsamos intro. En mi caso España.

4Aquí nos preguntará si queremos detectar nuestro tipo de teclado, le decimos que no porque lo seleccionaremos de forma manual en la ventana siguiente.

5Seleccionamos el país de nuestro teclado, generalmente es también nuestro país.

6Una vez seleccionado el país de nuestro teclado, elegiremos una de sus variantes en el caso de haberlas. Yo he elegido el teclado estándar en español.

7Si tenemos nuestra máquina conectada a la red, cosa que es muy probable, el sistema comenzará a descargar unos paquetes actualizados. Si nuestro equipo no está conectado a internet, el instalador de Ubuntu Server omitirá ese paso.

8Unos minutos después…

9Aquí nos pedirá un nombre que identificará a nuestro servidor en la red. Yo le he dado el nombre de server1, lo he hecho pensando en futuros tutoriales sobre balanceo de carga o almacenamiento redundante en MySQL. Le podéis dar el nombre que queráis, pero recomiendo evitar caracteres extraños en el nombre, tales como %&$ por ejemplo.

10Aquí ponemos nuestro nombre de usuario, yo he elegido administrador. Este no es el nombre para iniciar sesión, así que podemos poner nuestro nombre completo si nos apetece.

11Aquí sí escribimos el nombre que usaremos para iniciar sesión en nuestro equipo. Yo he elegido el mismo, pero puede ser otro cualquiera.

12Y aquí una contraseña para el usuario, nos la pedirá de nuevo para confirmarla. Yo he usado también, la palabra administrador. Aquí si es recomendable usar caracteres extraños, mezclado con mayúsculas, minúsculas y números.

13Ahora nos preguntará si deseamos cifrar la carpeta personal de nuestro usuario, para mayor seguridad podemos elegir sí. Os dejo a vuestra elección.

14Aquí nos preguntará (no sé por qué lo hace en inglés) sobre la zona horaria en la que nos encontramos. Nos ofrecerá una, en caso de que sea correcta, le decimos que sí, si no lo es, le damos a no y la seleccionamos en la siguiente ventana.

15En mi caso selecciono Madrid, que es la zona horaria correspondiente a mi país.

16Ahora el instalador empezará a detectar el hardware del equipo, este proceso suele ser rápido, apenas unos segundos.

17Aquí llegamos a la parte más interesante de la instalación. El particionado del disco duro. El instalador nos ofrece varias opciones. A mí personalmante me gusta más hacer el particionado manual, de forma que yo elijo el tamaño de las particiones y los puntos de montaje. Voy a explicar cómo se haría de forma manual. Seleccionamos esa opción.

18Nos situamos sobre nuestro disco. En mi caso, he creado en VirtualBox un disco de 8,6 GB y pulsamos intro para particionar todo el disco.

19Ahora el instalador nos preguntará si deseamos crear una nueva tabla de particiones. Le decimos que sí y continuamos.

20Una vez creada la tabla de particiones en el disco, nos situamos sobre el espacio libre y pulsamos intro para comenzar el particionado.

21Elegimos Crear una partición nueva.

22Aquí seleccionamos el tamaño. La partición que voy a crear será sólo para la carpeta personal de los usuarios del sistema, en este caso, administrador.

23Aquí, seleccionamos primaria. Cabe destacar, que un disco duro sólo puede albergar 4 particiones primarias. De forma que si vamos a tener más de 4 particiones en nuestro sistema, tendremos que crear 3 particiones primarias, y a partir de ahí, crearlas de tipo lógico. El número de particiones lógicas que podemos tener, es el que queramos. Las particiones lógicas se crean dentro de un tipo de partición primaria especial, llamada partición extendida.

24Podemos seleccionar dónde queremos ubicar la partición a nivel físico. Esto realmente no suele afectar mucho al rendimiento a no ser que tengamos muchísimas particiones.

25Esta ventana es muy importante, ya que desde aquí será desde dónde configuremos todo lo referente a la partición. El instalador por defecto, nos ofrece como sistema de archivos, el sistema Ext4. Este sistema es la versión 4 del sistema de archivos extendido de Linux. Este sistema es la versión más actualizada del mismo, muy robusto y potente. Dedicaré un futuro artículo a la historia de Ext. Si nos situamos sobre el sistema de archivos y pulsamos intro, podremos ver los tipos de sistemas de archivos que nos ofrece el instalador.

26Aquí podemos ver los diferentes tipos de sistemas de archivos de los que disponemos. Tenemos varias versiones de Ext, dependiendo del kernel de nuestro sistema operativo, soportará un sistema Ext u otro. La versión del kernel que trae Ubuntu Server 13.04 soporta perfectamente Ext4. Yo voy a usar ese sistema. Pulsamos intro y volvemos a la ventana anterior.

25Vamos a cambiar el punto de montaje, de forma que en esta partición de 2 GB, sólo se almacenen los datos de los usuarios del sistema.

27Tenemos varios puntos de montaje definidos por defecto. Como por ejemplo /home, que es el que vamos a usar en este caso. En otro caso, usaremos el que más nos convenga o incluso introduciremos un punto de montaje manual para cualquier directorio del sistema que nos interese.

28Las demás opciones las dejamos tal y como están. Nos situamos en Se ha terminado de definir la partición y pulsamos intro.

29Ahora nos mostrará el estado del proceso de particionado. El espacio libre pasa a ser ahora de 6,6 GB. Vamos a crear dos particiones más una de 6 GB y otra de 600 MB. La partición de 6 GB la usaremos para el sistema operativo, así que usaremos como sistema de archivos el Ext4, como punto de montaje, seleccionaremos /, que es para el sistema de ficheros raíz y también pondremos la opción de marca de arranque en activado. Para la otra partición, la de 600 MB, lo único que seleccionaremos es el sistema de archivos de área de intercambio. Esta partición se usará para hacer swapping. Este método consiste en alternar parte de la memoria RAM con el disco duro, eso se hará en esta partición, también llamada partición swap.

30Una vez creadas las 3 particiones, debemos verlo más o menos como en la imagen.

30Nos situamos en Finalizar el particionado y escribir los cambios en el disco y pulsamos intro. 31Nos pedirá una confirmación para finalizar el particionado, si estamos conformes con lo que hemos hecho, pulsamos sí para escribir los datos en la tabla de particiones. En caso de que queramos modificar algo, le damos a no y volvemos hacia atrás.

32Aquí vemos como comienza a particionar el disco.

33Una vez finalizado el particionado, el instalador comenzará a copiar archivos al disco duro. Este proceso puede durar varios minutos.

34La instalación continúa preparando el kernel para la instalación.

35Aquí nos preguntará si la red a la que estamos conectados tiene algún proxy, de ser así introducimos los datos referentes a este de la misma forma que nos muestra el instalador: http://usuario:contraseña@servidor:puerto. Si no disponemos de proxy, como por ejemplo es mi caso, pues pulsamos tabulador para marcar la opción Continuar y pulsamos intro para continuar con el proceso de instalación.

36Si estamos conectado a internet, el instalador descargará una serie de paquetes necesarios, si no lo estamos, este proceso se omitirá.

37El instalador nos preguntará qué tipo de política de actualización queremos para nuestra máquina. Elegimos la que más nos convenga. A mí personalmente me gusta ejecutar las actualizaciones de forma manual, por lo que voy a elegir la primera opción.

38Aquí nos dará la opción de instalar al mismo tiempo que el sistema operativo, algún que otro servicio. Yo quiero una instalación limpia, por lo que no elijo ningún servicio. Si queremos seleccionar algún servicio a instalar, lo seleccionamos y pulsamos espacio para marcarlo, después pulsamos tabulador para situarnos sobre Continuar y pulsamos intro para continuar.

39El instalador terminará de copiar ficheros y configurar el sistema. Esto puede tardar varios minutos.

40Antes de finalizar la instalación, el sistema nos preguntará si deseamos instalar el cargador de arranque GRUB. Este cargador nos permitirá elegir entre distintos sistemas operativos que tengamos instalados en nuestro equipo, así como arrancar Ubuntu Server con otra versión de kernel diferente. Elegimos sí, y finalizamos la instalación.

41Por último, extraemos el CD de nuestro equipo, y elegimos Continuar para reiniciar nuestra máquina.

42Una vez reiniciada nuestra máquina, el sistema operativo nos pedirá un usuario y una contraseña. Iniciamos sesión con el usuario que hemos definido durante la instalación.

43Una vez con la sesión iniciada, tendremos el control del sistema. Obviamente, no con permisos de administración por defecto, para administrar y hacer cambios importantes en el sistema hay que hacer uso del comando sudo. Si nos fijamos, dice que hay 16 actualizaciones disponibles, de las cuales, 12 de ellas son de seguridad. Para actualizar basta con ejecutar:

sudo apt-get update && sudo apt-get upgrade

Con esto, tendremos un Ubuntu Server 13.04 en una instalación limpia y actualizada. Este sistema operativo es bastante usado para servicios de internet tales como FTP, HTTP o proxy-caché. Es una alternativa bastante buena (yo diría que mejor) a los sistemas de pago como por ejemplo Windows Server. Incluso lo podemos usar a nivel empresarial con la variante de Active Directory para Linux, LDAP.

Bumblebee y NVIDIA

Tengo un Intel i7 8GB RAM 1TB HDD y con dos gráficas. Una una Mesa DRI Intel(R) Sandybridge Mobile de 128 MB y una NVIDIA GeForce GT 540M de 2 GB. El hecho de tener dos gráficas no es otro que ahorrar en consumo de batería. Las aplicaciones de escritorio son ejecutadas por la tarjeta gráfica de 128 MB, y las aplicaciones que requieran un rendimiento superior, son ejecutadas por la otra tarjeta, en mi caso, una NVIDIA. Como suele ser normal en estos casos, en Windows funciona de maravilla, pero en Linux no es así. Generalmente no suele haber ningún problema a la hora de instalar los drivers propietarios de NVIDIA, pero hay casos en los que sí. Para eso tenemos Bumblebee. Este software forzará el uso de nuestra tarjeta NVIDIA con la aplicación que nosotros le indiquemos. En mi caso, uso Ubuntu 12.04. Vamos a instalarlo.

En primer lugar añadimos el repositorio, en una terminal ejecutamos:

sudo add-apt-repository ppa:bumblebee/stable

Una vez añadido el repositorio, los actualizamos:

sudo apt-get update

Y ahora, pues instalamos los siguientes paquetes:

sudo apt-get install bumblebee bumblebee-nvidia

Pues ya tenemos instalado Bumblebee. Para probar su funcionamiento, debemos ejecutar las aplicaciones que requieran un rendimiento 3D importante, con el comando optirun delante.

Pero primero, una pequeña comparación. En una terminal tecleamos:

glxspheres

GLX Spheres

Esto nos mostrará una ventana con unas esferas en 3D. El único uso es para diagnóstico. A los pocos segundos cerramos la ventana y podemos ver el número de frames por segundo que nos ofrece la tarjeta gráfica de 128 MB. En mi caso, estos:

imagen2

Probemos ahora a ejecutar el siguiente comando:

optirun glxspheres

El resultado será el siguiente:

imagen3Como podemos ver, la gráfica que se ha usado ahora es GeForce GT 540M, y el número de frames por segundo ha aumentado considerablemente. Así podremos arrancar nuestros juegos en Ubuntu o nuestras aplicaciones que requieran un rendimiento 3D importante. Un truco interesante es este:

imagen4Así otorgaremos el poder de Bumblebee a la terminal en la que nos encontramos. De este modo, podremos omitir el comando optirun y también puede hacer funcionar aplicaciones en las que la ejecución normal de optirun da fallos. Dicho esto, a jugar.

imagen5