lunes, 25 de marzo de 2013

Tu computadora y tú: hora de aprender (ii)

Hoy quiero quitarme de encima un concepto importante, para finalizar esta exposición más bien teórica que he denominado "amueblar la cabeza". Al igual que con la entrada anterior, se trata de asentar los conocimientos suficientes para que leer explicaciones de cualquier índole deje de resultar un buen sistema de tortura. Y es que acudiendo a otro gran dicho:

Sólo alguien que domina un tema en profundidad es capaz de explicarlo de forma que no lo entienda nadie

El Sistema Operativo, el Hardware y el dolor de cabeza

Es notable como los usuarios de jerga técnica asimilamos conceptos ligeramente erróneos, sin percatarnos de que nosotros entendemos los matices equivocados, pero que los usuarios no técnicos pueden no estar al tanto de ellos.

Definimos "Sistema Operativo" como una aplicación o grupo de ellas que funcionan de "interfaz" entre los usuarios y el computador físico, y nos quedamos así de contentos. Es una definición con una metáfora muy visual y clara, muy poderosa, y por eso es muy fácil de aceptar.

Descuidando el hecho de que no necesariamente todo el mundo sabe lo que es una Interfaz, el error realmente no es tal, sino una diferencia de concepto: ¿quién es el usuario, desde el punto de vista del Sistema Operativo?

El usuario, para aquellos que usamos computadores, es una persona física que utiliza el computador. Muchos Sistemas Operativos permiten tener cuentas de usuario, con sus opciones de configuración personal, su propio espacio para guardar documentos, etc. En tales sistemas, un usuario dado incluso puede tener una o varias cuentas, según sus necesidades.

Los informáticos no tenemos dudas con esta cuestión, ya que todos conocemos la historia de la computación lo suficiente para tener un buen punto de vista.

Hay que recordar que hubo un tiempo en que los computadores no disponían de Sistemas Operativos. Al principio, se les proporcionaba un programa en binario que deberían ejecutar; los primeros sistemas operativos simplemente eran una mejora de esto: en lugar de proporcionar un programa completo con todo lo que se debía hacer, simplemente ser proporcionaba una lista de tareas que el computador debía completar. Naturalmente, el computador debía de disponer de una aplicación para poder ejecutar tales tareas.

A partir de un momento dado, se pensó que era una pena que todos los recursos de un computador -memoria, uso del procesador, impresoras...- se dedicasen a la ejecución de tareas consecutivas. No tiene sentido, argumentaban, tener que esperar a que finalice una impresión -lenta, tediosamente lenta en la época- para ejecutar la siguiente operación de la lista. Así, los Sistemas Operativos fueron evolucionando. tiempo compartido, multiusuario, multipuesto.... a medida que aumentaban sus responsabilidades en el trabajo diario.

Con esto quiero decir que los desarrolladores de aplicaciones cada vez tenían que centrarse menos en lo que era común con otras aplicaciones que usasen el mismo computador. Los técnicos distinguimos Sistemas Operativos de propósito general (MS Windows, MacOS, GNU/Linux...) de los Sistemas Operativos de propósito específico (típicos de sistemas industriales).

Fijaos en el celebérrimo Windows de Microsoft: no trae soporte para CAD (Diseño Asistido por Computador). Son relativamente pocos los clientes que necesitan esto, así que los pocos que lo hagan instalarán la aplicación de turno (digamos, AutoCAD) y no se preocuparán más. Sin embargo, sí trae soporte para 3D, ya que asume que buena parte de las personas que usen Windows lo harán para jugar a juegos con 3D, más que porque de pronto haya un entusiasmo generalizado por diseñar escenas tridimensionales. Por su parte, Android incluye soporte para los sensores que incluyen los más modernos smartphones.

En sentido técnico, los usuarios de un Sistema Operativo son las aplicaciones desarrolladas para el mismo. Una persona real utiliza simplemente aplicaciones: una hoja de cálculo, un programa de diseño CAD, un reproductor multimedia. El Sistema Operativo simplemente proporciona una interfaz para poder utilizar dichas aplicaciones (un intérprete de comandos, una interfaz gráfica...). Hay aplicaciones específicas para tareas generales, tales como organizar archivos y configurar aspectos del sistema, que reciben el nombre de aplicaciones de sistema. En general, las aplicaciones del sistema forman parte del Sistema Operativo de turno, lo que explica la confusión.

Todo esto quiere decir que los únicos usuarios de un Sistema Operativo son las aplicaciones que haya o pueda haber en el mismo.

Drivers

Driver  significa "conductor"; mas en este contexto, no es la imagen personalizada de alguien que conduce un coche, sino más bien en la labor de conducir el propio coche propiamente dicha. El conductor se encarga de guiar el coche, decirle cómo y por dónde tiene que ir.

En informática, los Drivers son una forma de indicarle a un Sistema Operativo cómo funciona un dispositivo dado: un monitor, una tarjeta de sonido...

Pensemos en una impresora. Puedes abrir un documento de texto en tu suite ofimática y en un editor de textos simple. Escribe en ambos "Hola mundo".

En la suite ofimática el documento a imprimir contendrá información sobre el formato del texto, márgenes, etc. Por su parte, en el editor de textos el documento sólo incluirá la lista de caracteres que se quiere imprimir. El Sistema Operativo dispone de una operación para enviar documentos a una impresora. Para ello, convierte ambos documentos en documentos imprimibles y los coloca en una carpeta más o menos temporal en cola, de donde el sistema de impresión los irá tomando de uno en uno para ser impresos.

Sin embargo, hay infinidad de tipos de impresoras muy distintas entre sí. Hacer un Sistema Operativo que manejase todas sería una locura. En su lugar, se crean ficheros que le indicarán al Sistema Operativo como funciona cada una de ellas (cada marca, modelo o tipo) y en cada computador se instala simplemente el driver de las impresoras realmente disponibles.

Que tu impresora funcione o no en Windows, MacOS o GNU/Linux es cuestión de que alguien haya creado tal driver. Naturalmente, los más indicados para crear tales drivers son los fabricantes de dicha impresora.

Esto no es tan importante hoy, si bien es la causa de que lo más habitual sea que el hardware más reciente no funcione directamente en ningún Sistema Operativo hasta que se instale el driver de turno. Los desarrolladores del Sistema Operativo no pueden prever qué dispositivos van a a existir años después del desarrollo del Sistema Operativo. Esto puede cambiar en las actualizaciones del sistema de turno, por supuesto.

Eventualmente, algunos dispositivos son más estandarizados que otros, o al menos más parecidos a otros ya existentes. En tal caso, es más fácil obtener el soporte preciso; sin embargo, otros dispositivos son casi tan complejos como el propio computador, así que la disponibilidad de un driver para el mismo puede ser crucial. Piénsese en las tarjetas de vídeo, por ejemplo.

Leyendo esto alguien podría pensar que el mundo de la informática se simplificaría enormemente si los fabricantes siguiesen estándares o si hubiese más información al respecto. Bien, la mayoría de las empresas tienen esto como estrategia empresarial, y eso es difícil cambiarlo. De hecho, el movimiento OpenSource comenzó por un driver de una impresora. En realidad, buena parte de la nueva innovación tecnológica consiste en un continuo reinventar la rueda.

Para que un driver funcione, debe de estar cargado en memoria. En sistemas operativos modernos hay varios programas residentes que se encargan de utilizar determinados específicos. Por ejemplo, CUPS es un servicio de impresión estándar para Unix; otro buen ejemplo es udev, que es el sistema que utiliza Linux para cargar dinámicamente cualquier dispositivo que se conecte al computador: detecta que se conecta un dispositivo, qué dispositivo es y carga el driver adecuado si está disponible.

Tal vez hayas oído que los usuarios de MacOS o GNU/Linux se burlan de los "reinicios" de Windows. En MS-Windows, muchos de los drivers son cargados de forma estática, por lo que hay que reiniciar el sistema para que el núcleo cargue el driver de turno: da igual que sea la red, una tarjeta de vídeo nueva... incluso muchos de los ajustes de tales drivers requieren que el núcleo se cargue otra vez. Los dispositivos que no necesitan esta operación tienen incluso un nombre muy chulo: "plug and play" (enchufar y listo). Los sistemas basados en Unix, por su parte, disponen de mecanismos para cargar casi cualquier driver en cualquier momento, y por tanto rara vez necesitan ser reiniciados.

Humanos y computadores

Los Sistemas Operativos que he denominado de propósito general suelen tener como objeto el ser utilizado por personas. Se espera que una persona arranque el sistema de turno y ejecute las aplicaciones que necesite. Eventualmente, parará el sistema cuando no lo necesite.

Cualquier Sistema Operativo ofrecerá a la persona que lo maneje una interfaz adecuada (al menos, al objeto del Sistema Operativo de turno). MS-DOS traía un Intérprete de Comandos (un nombre común en inglés para tales interfaces es shell); posteriormente se desarrolló un Entorno Gráfico para hacer uso de las capacidades gráficas de los (entonces) nuevos computadores y supuestamente hacer más fácil la vida de los usuarios. Buena parte de la historia moderna de Windows pasa por la necesidad de la empresa de hacerles creer a sus usuarios que su sistema es completamente gráfico, algo que sólo consiguió con la publicación de Windows XP. Por su parte, MacOS hasta su versión 9 no tenía tal intérprete y todo el sistema funcionaba de forma gráfica. Cosas de la vida, al sacar la versión 10 (en números latinos, X) decidieron cambiar a una versión de FreeBSD, con lo cual ahora disponen de al menos un shell al más común estilo Unix.

GNU/Linux, como FreeBSD y otros "Unix-like", utiliza una aproximación diferente. El sistema se arranca en modo texto o gráfico a voluntad del usuario. En realidad, estos sistemas ponen en marcha "servicios", donde el sistema gráfico o texto es en realidad uno más. Hasta hace bien poco, incluso, era muy habitual que una sesión gráfica GNU/Linux se arrancase con los servicios en modo texto y el servidor gráfico. Algunas distribuciones siguen haciéndolo así, proporcionando un servicio de login en una pantalla y un servicio gráfico en otra, pudiendo acceder a cualquiera de los dos modos con diferentes combinaciones de teclas.

Interfaz de Intérprete de Comandos

La forma más simple de utilizar un computador es pidiéndole a una aplicación interactiva que ejecute las tareas que necesitamos. Como he dicho antes, estas aplicaciones son denominadas normalmente en inglés con shell o command shell. Esto es porque la aplicación suele tener que hacer mucho más que discutir con la persona que lo maneja.

Por ejemplo, varios usuarios pueden usar el sistema a la vez (al menos, en los sistemas multiusuario tales como GNU/Linux), así que el shell deberá permitir trabajar a tales usuarios sin que interfieran entre sí. Además, cada uno de ellos puede tener ajustes personalizados distintos de otros usuarios. Incluso es posible que la misma persona esté usando varias cuentas de usuario a la vez en el mismo sistema.

En estos sistemas, la ejecución de cualquier Intérprete de Comandos va precedida por algún sistema de autentificación del usuario. Los sistemas GNU/Linux hacen esto con las aplicaciones login (que permite a un usuario iniciar una sesión en modo texto) o su (que permite a un usuario cambiar a otro para efectuar una serie de tareas de forma temporal).

Los sistemas gráficos más populares disponen de herramientas para tener acceso al intérprete de comandos; en realidad, esas herramientas simulan un intérprete de comandos, y por ello no necesitan autentificación: se asume que el usuario ya realizó esa tarea cuando conectó con el sistema gráfico.

Interfaz de Entorno Gráfico

La idea tras los escritorios gráficos es similar a la de los shell anteriores, pero con muchas diferencias. Todas ellas se resumen en la plasmación de la metáfora de un "escritorio" convencional. Así, cualquier interfaz de este tipo proporcionará un fondo en el que se disponen los distintos elementos, un organizador de ficheros, una forma gráfica de arrancar las distintas aplicaciones disponibles... los sistemas más populares utilizan el concepto de "ventana" para contener cada aplicación salvo el escritorio en sí (que es más una suerte de fondo).

Baste de textos por hoy!! una buen sitio para leer sobre escritorios es la habitual wikipedia. En castellano: http://es.wikipedia.org/wiki/Entorno_de_escritorio; para quien no tema al inglés, http://en.wikipedia.org/wiki/Desktop_environment

Archivos y ficheros

Es común ver un uso intercambiable entre ambos, lo que a veces despista mucho. Archivo se refiere más a la organización de la información, mientras que Fichero se refiere a cada documento concreto. Podríamos pensar en un archivo como la suma de todos los ficheros disponibles en el sistema.

Por supuesto, hay muchos tipos de ficheros: documentos del usuario, ficheros que representan a los dispositivos del sistema, el núcleo del sistema, cada driver...

Y hay muchas formas de organizar ficheros (se llama "Jerarquía de Ficheros"): por ejemplo, la mayoría de los sistemas utilizan unos ficheros especiales denominados Directorios o más modernamente por influencia de MS-Windows Carpetas. Estos ficheros pueden contener ficheros normales o bien otros ficheros especiales. Así, puedes tener un vídeo denominado caídaPorLasEscaleras.avi guardado en la carpeta Vídeos; esta carpeta a su vez puede estar guardada por ejemplo en otra denominada MisCosas.

Los sistemas basados en Unix utilizan una jerarquía completa. Hay una carpeta llamada raíz (y representada con la barra: / ) que contiene todas las demás carpetas o ficheros. Por su parte, MS-Windows dispone de una jerarquía incompleta. Cada dispositivo se denomina Unidad y se representa con una letra seguida de dos puntos (por ejemplo, el disco duro principal sería c: ) En cada dispositivo se agrupan las carpetas que contienen otras carpetas o ficheros. Nótese que en Unix la separación entre los nombres de carpetas es la barra de dividir, mientras que en MS-Windows es la barra invertida.

Cómo se guardan esas carpetas y ficheros en un dispositivo es tarea del Sistema de Archivos y hay un buen puñado de ellos. Para MS-Windows hay FAT y NTFS (aunque ahora trata de sacar otros para superar las limitaciones de ambos), mientras que otros sistemas disponen de ext, xfs, reiserfs, jfs, btrfs, zfs, y otros muchos.

Una anécdota: reiserfs es uno de los mejores sistemas de archivos en prestaciones cuando el sistema se compone de muchos ficheros relativamente pequeños. En su momento se desarrolló reiserfs4 para mejorar el desempeño en otros ambientes. Sin embargo, su popularidad descendió desde el momento en que su creador dio con los huesos en la cárcel por asesinar a su esposa. Si alguien pensaba que la informática era ajena a buena parte de las motivaciones (o simplemente de la estupidez) humanas, ésta es quizás la mejor prueba de que no es así.

Bien, si has llegado hasta aquí habrás pensado que para utilizar un dispositivo dado para almacenar ficheros, necesitas al menos dos drivers: el correspondiente al dispositivo de turno, y el correspondiente al sistema de archivos utilizado. Esa es justo la idea. Por otra parte, el Sistema de Archivos es a veces referido como Filesystem (Sistema de ficheros), aunque yo prefiero hablar en ese caso de Tipo de Sistema de Ficheros para evitar ambigüedades.

Básicamente, un Sistema de Archivos contiene información respecto a dónde se guarda fisicamente, en el dispositivo de turno, cada fichero (y atributos tales como su dueño, fecha de creación, etc.).  Eliminar un fichero consiste realmente en borrar esa entrada del Sistema de Archivos, por lo que en realidad no se borra nada, simplemente el sistema olvida dónde estaba tal fichero. Por ejemplo, FAT simplemente cambia la primera letra del nombre del fichero por un interrogante, aprovechando que para el sistema ése no será un nombre de fichero válido. La única forma de hacer que el contenido de un fichero deje de estar disponible es sobreescribirlo, guardando otra información exactamente en el mismo sitio. Incluso por curiosidades físicas en la mayor parte de dispositivos se puede recuperar el contenido de un fichero sobreescrito varias veces. Es laborioso y caro, pero posible.

No hay comentarios:

Publicar un comentario en la entrada