lunes, 12 de marzo de 2012

software del servidor


Windows vs Linux
¿Cuales son las ventajas de Linux frente a Windows?, ¿en qué se diferencian?
La instalación:
  • En Linux a pesar de todos los esfuerzos la instalación no resulta sencilla siempre, pero te permite personalizar totalmente los paquetes que quieras instalar.
  • En Windows la instalación es mínimamente configurarle aunque es muy sencilla.

La compatibilidad: Ninguno de los dos sistemas operativos son totalmente compatibles con el Hardware, a pesar de que Windows se acerca más, los dos están cerca de conseguirlo.
  • Aunque Linux no esta detrás de ninguna casa comercial gracias a su elevada popularidad ofrece una alta compatibilidad ofreciendo, además, actualizaciones frecuentes.
  • Windows al ser parte de Microsoft intenta ofrecer una gran cantidad de drivers ya que su gran poder económico hace que las empresas mismas de hardware creen sus propios drivers.

Software:
  • Linux al tener menos software en algunos campos sufre una menor aceptación por parte de las empresas, aunque gracias a los apoyos de empresas como Sun Microsystems o IBM se ha logrado muchos avances.
  • Windows al ser el más fácil de usar en las empresas, posee una gran cantidad de software.

Robustez:
  • Linux se ha caracterizado siempre por la robustez de su sistema ya que pueden pasar meses e incluso años sin la necesidad de apagar o reiniciar el equipo, también si una aplicación falla simplemente no bloquea totalmente al equipo.
  • En Windows siempre hay que reiniciar cuando se cambia la configuración del sistema, se bloquea fácilmente cuando ejecuta operaciones aparentemente simples por lo que hay que reiniciar el equipo.

Razones para cambiar:
  • Es software libre, lo que quiere decir que no hay que pagar nada por el sistema en sí.
  • Es un sistema operativo muy fiable ya que hereda la robustez de UNIX.
  • Ideal para las redes ya que fue diseñado en Internet y para Internet
  • No es cierto que tenga pocos programas, solo en algún campo muy especifico.
  • Es 100% configurarle.
  • Es el sistema más seguro, ya que al disponer del código fuente cualquiera puede darse cuanta de algún fallo, se puede decir que decenas de miles de personas velan por tu seguridad.
  • Existe muchísima documentación, también en español gracias a los proyectos como LUCAS.
  • Cuenta con el soporte de muchas grandes empresas como IBM, Corel, Lotus, Siemens, Motorola, Sun, etc.
  • Puedes encontrar ayuda en millones de sitios en Internet como los foros.
  • Es muy portable, si tienes un Mac un Alpha o un Sparc puedes usar Linux sin problemas.

Qué ventajas tiene Linux sobre Windows?
·         Es más seguro
o        Ya que la gran mayoría de los ataques de hackers son dirigidos a servidores Windows al igual que los virus los cuales se enfocan principalmente a servidores con éste sistema operativo.
o        La plataforma Linux es más robusta lo cual hace más difícil que algún intruso pueda violar el sistema de seguridad de Linux.
  • Es más rápido
    • Al tener una plataforma más estable, ésto favorece el desempeño de aplicaciones de todo tipo tales como: bases de datos, aplicaciones XML, multimedia, etc.
    • La eficiencia de su código fuente hace que la velocidad de las aplicaciones Linux sean superiores a las que corren sobre Windows lo cual se traduce en velocidad de su página.
·         Es más económico
o        Ya que requieren menor mantenimiento. En servidores windows es más costoso debido a que es necesaria una frecuente atención y monitoreo contra ataques de virus, hackers y errores de código, instalación y actualización de parches y service packs.
o        El software Linux así como también un sin número de aplicaciones son de código abierto (gratuitos).
o        No requieren supervisión tan estrecha ni pagos de pólizas de mantenimiento necesarias para obtener los Service Packs.

¿Qué ventajas tiene Windows sobre Linux?
·         Es más fácil
o        Al ser de mayor facilidad de uso Windows en este momento continúa siendo el sistema operativo más comercial lo cual se refleja en la disponibilidad de aplicaciones, facilidad de mantenimiento así como soporte en el desarrollo de nuevas aplicaciones, puntos que pueden ser cruciales en la elección de servidores que corren aplicaciones web.
  • Aplicaciones desarrolladas en menor tiempo
    • Fruto de la inversión realizada por Microsoft y aunado a una comunidad de programadores cada vez más grande se ha logrado facilitar el desarrollo de aplicaciones y sistemas que corran sobre servidores Windows lo cual se ve reflejado en tiempos de desarrollo menores.
    • La curva de aprendizaje en el sistema Windows es mucho menor.
Conclusión: Tanto Windows como Linux tienen su ventajas y inconvenientes, aunque desde un punto de vista más técnico Linux sale ganando.

Arquitectura de Sistema Operativo Windows

Con el paso de los años se ha producido una evolución gradual de la estructura y capacidades de los Sistemas Operativos. Sin embargo, recientemente se ha introducido un cierto número de nuevos elementos de diseño en los nuevos Sistemas Operativos y en las nuevas versiones de los Sistemas Operativos existentes. Estos Sistemas Operativos modernos responden a nuevos desarrollos del hardware y nuevas aplicaciones. Entre estos dispositivos de hardware están las máquinas multiprocesador, incrementos enormes de la velocidad de la máquina, alta velocidad en los enlaces de las redes de comunicación e incremento en el tamaño y variedad de los dispositivos de almacenamiento de memoria. En los campos de aplicación que han influido en el diseño de los Sistema Operativos están las aplicaciones multimedia, el acceso a Internet y páginas Web y la ejecución cliente/servidor.
El porcentaje de cambios en las demandas de los Sistemas Operativos, requiere no solamente las modificaciones y mejoras en las arquitecturas ya existentes, sino nuevas formas de organización del Sistema Operativo. Muchos de los diferentes enfoques y elementos de diseño se han probado tanto en Sistemas Operativos experimentales como comerciales, y muchos de ellos encajan dentro de las siguientes categorías.
Arquitectura Micronúcleo.
Multihilos.
Multiproceso Simétrico.
Sistemas Operativos Distribuidos.
Diseño Orientado a Objeto.

La mayor parte de los Sistemas Operativos hasta hace poco tiempo se caracterizaban por un gran núcleo monolítico. Gran parte de la funcionalidad que se pensaba debía tener un Sistema Operativo la proporcionaba este gran núcleo, incluyendo planificación, sistema de archivos, redes, controladores de dispositivos, gestión de memoria y muchas cosas más. Normalmente un núcleo monolítico está implementado como un único proceso, con todos sus componentes compartiendo el mismo espacio de direcciones.
La arquitectura micronúcleo asigna solamente unas pocas funciones esenciales al núcleo, incluyendo espacios de direcciones, comunicación entre procesos (IPC) y planificación básica. Otros servicios del Sistema Operativo los proporciona procesos, algunas veces llamados servidores, que se ejecutan en modo usuario y que el micronúcleo trata como a cualquier otra aplicación. Este enfoque desconecta el núcleo y el desarrollo de servidores. Los servidores pueden estar diseñados para aplicaciones específicas o necesidades del entorno. El enfoque del micronúcleo simplifica la implementación, proporciona flexibilidad y se adapta bien para entornos distribuidos. En esencia, un micronúcleo interactúa de la misma forma con procesos servidores locales y remotos, facilitando la construcción de sistemas distribuidos.
La siguiente figura muestra mediante un diagrama de bloques los principales componente de Windows.
  • Maquina virtual del sistema: o VM del sistema , es el nombre dado en Windows 95 al entorno que soporta todas las aplicaciones y los componentes de subsistema de Windows, como por ejemplo la interfaz de dispositivo gráfico (GDI).
  • Aplicaciones Windows de 32 bits: son las nuevas aplicaciones Windows que usan el modelo de memoria de 32 bits del procesador 80386 y un subconjunto de la interfaz de programacion de aplicaciones (API) win32 de Microsoft, cada una tiene un espacio de direcciones privado que es inaccesible a otras aplicaciones.
  • Interfaz de ordenes>: es una aplicación Windows de 32 bits que proporciona al sistema la interfaz de usuario esencial. La interfaz de ordenes en Windows 95 concentra las funciones de las utilidades Administrador de Programas, Administrador de archivos, administrador de tareas de win 3.1 en una única aplicación.
  • Aplicación de Windows en 16 bits: son las aplicaciones Windows antiguas, estas aplicaciones utilizan el modelo de memoria segmentada de la familia de procesadores Intel el modelo de memoria 80286.
  • Capa de la interfaz de programación de aplicaciones: proporciona en Windows 95 una compatibilidad completa con la actual API de Windows 3.1, así como el soporte para la nueva API de 32 bits accesible solo para aplicaciones Windows de 32 bits. La API de 32 bits es un subconjunto de la completa API WIN32 de Microsoft vista por primera vez en Windows NT y en la WIN32s añadida en Windows 3.1.
  • Núcleo de Windows: proporciona soporte a los servicios de nivel mas bajo que requieren las aplicaciones Windows, tales como la asignación dinámica de memoria. Para Windows 95, el núcleo proporciona estos servicios a las aplicaciones de 16 y 32 bits.
  • El GDI : es el corazón de las capacidades gráficas de Windows, gestionando los tipos de letras, las primitivas de dibujo y el color tanto para los dispositivos de visualización como para los de impresión.
  • Usuario: es como se denomina al administrador de ventanas, el componente de Windows que dirige la creación y manipulación de ventanas, diálogos, botones y otros elementos de la interfaz de Windows.
  • Maquinas virtuales MS DOS: dan soporte a la ejecución de aplicaciones MS-DOS en Windows.
  • EL SISTEMA BASE
  • La administración de archivos: ha cambiado de forma marcada en Windows 95. En Windows 3.1 es MS-DOS quien controla el sistema de archivos local del disco fijo. este control de MS-DOS perjudicaba las prestaciones de Windows y la oportunidad de mejorar el soporte del sistema de archivos resultaba imposible mientras el siguiera con el control. Bajo Windows 95 la situación es totalmente diferente, ya no se utiliza DOS para la administración de archivos en los discos locales.
  • Subsistema de red: es la encarnación mas reciente de la red igualitaria de Microsoft vista por primer vez en 1992 en el producto Windows para trabajo en grupo y después Windows NT. El subsistema de red utiliza el nuevo subsitema de administración de archivos para coordinar su acceso a los archivos remotos.
  • Servicios del sistema operativo : incluyen el subsistema de configuración hardware conectar y listo .
  • Administrador de maquina virtual: es el corazón del sistema operativo Windows. Incluye el software que implementa todas las primitivas básicas del sistema para la planificación de tareas, operaciones de memoria virtual, carga y finalización de programas, y comunicación entre tareas.
  • Controladores de dispositivos: controladores de modo real y los denominados controladores virtuales o VxD. Algunos sistema aún pueden necesitar de el uso de los antiguos controladores de dispositivos de MS-DOS en modo real para dar soporte a dispositivos de hardware concretos, Windows 95 ha querido crear controladores de dispositivos protegido para tantos dispositivos populares. Ejemplo para el ratón, para los dispositivos de CD-ROM y muchos dispositivos de disco fijo.
  • Controladores de dispositivos virtuales: asumen el papel de compartición de un único dispositivos hardware entre diversas aplicaciones. Ejemplo la ejecución de dos aplicaciones MS-DOS en distintas ventanas de la pantalla necesita que el sistema cree dos VM MS-DOS, cada una de las cuales requiere el acceso a una única pantalla física . el VxD del controlador de pantalla tiene que aceptar estos requisitos de compartición. También se usa como un descriptor general para otros módulos del sistema operativo de 32 bits.
Visión General de la Arquitectura de Windows.
Un Sistema Operativo serio, capaz de competir en el mercado con otros como Unix que ya tienen una posición privilegiada, en cuanto a resultados, debe tener una serie de características que le permitan ganarse ese lugar. Algunas de estas son:
  • Que corra sobre múltiples arquitecturas de hardware y plataformas.
  • Que sea compatible con aplicaciones hechas en plataformas anteriores, es decir que corrieran la mayoría de las aplicaciones existentes hechas sobre versiones anteriores a la actual, nos referimos en este caso particular a las de 16-bit de MS-DOS y Microsoft Windows 3.1.
  • Reúna los requisitos gubernamentales para POSIX (Portable Operating System Interface for Unix).
  • Reúna los requisitos de la industria y del gobierno para la seguridad del Sistema Operativo.
  • Sea fácilmente adaptable al mercado global soportando código Unicode.
  • Sea un sistema que corra y balancee los procesos de forma paralela en varios procesadores a la vez.
  • Sea un Sistema Operativo de memoria virtual.
Uno de los pasos más importantes que revolucionó los Sistemas Operativos de la Microsoft fue el diseño y creación de un Sistema Operativo extensible, portable, fiable, adaptable, robusto, seguro y compatible con sus versiones anteriores (Windows NT).
Y para ello crearon la siguiente arquitectura modular:

ARQUITECTURA DE LINUX MANDRAKE
Linux es un núcleo monolítico híbrido, donde sus controladores de dispositivos y las extensiones del núcleo normalmente se ejecutan en un espacio privilegiado conocido como anillo, con acceso irrestricto al hardware, aunque algunos se ejecutan en espacio de usuario.

A diferencia de los núcleos monolíticos tradicionales, los controladores de dispositivos y las extensiones al sistema operativo se pueden cargar y descargar fácilmente como módulos, mientras el sistema continúa funcionando sin interrupciones.
Así mismo, a diferencia de los núcleos monolíticos tradicionales, los controladores pueden detenidos momentáneamente por actividades más importantes bajo ciertas condiciones.

Esta habilidad fue agregada para manejar correctamente interrupciones de hardware, y para mejorar el soporte de multiprocesamiento Simétrico.
A diferencia de los núcleos monolíticos tradicionales, los controladores de dispositivos son fácilmente configurables como Loadable Kernel Modules, y se pueden cargar o descargar mientras se está corriendo el sistema.
La arquitectura interna de Linux es compleja pero se puede resumir las partes importántes de forma breve y fácil de entender.

Procesos

Linux se organiza en procesos, que son tareas independientes que se ejecutan de forma simultánea mientras el sistema está en funcionamiento. Los procesos cuelgan unos de otros en una dependencia padre/hijo. Inicialmente al arrancar el sistema sólo existe un proceso, llamado init. Init lee los ficheros de configuración de arranque presentes en el directorio /etc y va creando procesos hijos. Estos a su vez tendrán sus propios hijos formando un árbol de descendientes. Los procesos en ejecución se encuentran alojados en la memoria rápida RAM del sistema. Cuando se habla de ejecutar o lanzar o arrancar un proceso, nos estámos refiriendo al proceso de leer un fichero almacenado en el disco duro que contiene las instrucciones del programa, colocando las mismas en la memoria RAM y a continuación empezando a ejecutar las instrucciones del programa ya en RAM.

Usuarios

Linux está diseñado para ser utilizado por varios usuarios simultáneamente. Aun cuando el sistema sólo vaya a ser utilizado por un único usuario, como es el caso corriente hoy en día, en general internamente Linux utilizará varios usuarios 'robots' para organizar mejor y de forma más segura el sistema. Linux siempre tiene un superusuario llamado 'root' ('raíz' traducido). En el siguiente párrafo se explica el por qué crea varios usuarios en vez de uno único.
Cada uno de los procesos pertenece a un usuario y en función del usuario asociado, dicho proceso tendrá unos permisos u otros. Un proceso en ejecución puede cambiar su usuario asociado si tiene los permisos suficientes para hacerlo. En general sólo tendrá permisos para cambiar de usuario cuando el usuario actual asociado al proceso sea 'root'. El proceso inicial Init se ejecuta con el usuario asociado 'root' lo cual le confiere permisos totales sobre la máquina. En general cuando Init ejecute sus procesos hijos lo hará asociandolos a usuarios distintos cuyos permisos se reduzcan a los esenciales para ejecutar la tarea para la cual están diseñado. P.ej, Init puede arrancar un proceso 'servidor de correo' asociado al usuario 'mail'. Este usuario tendrá los permisos justos y necesarios para poder enviar y recibir correo y almacenarlo en el directorio /var/spool/mail. El proceso 'servicio de correo' puede a su vez arrancar procesos hijos pero estos estarán automáticamente asociados a su usuario 'mail', nunca a 'root'. Este simple sistema de permisos provee a Linux de un sistema de seguridad muy sólido.
El entorno gráfico estándar de Linux es un proceso más llamado X. Cuando se arrancan las X todos los programas gráficos (que son a su vez procesos) colgarán de él y se ejecutarán por normal general con los permisos del usuario que se ha logeado con su nombre y password al inicio de la sesión. Las aplicaciones que solemos manejar frecuentemente como el navegador web o el reproductor de video no son más que procesos hijo del proceso X. Si ejecutamos por ejemplo un cliente de correo con un agujero de seguridad y descargamos un correo con virus, dicho virus 'engañará' al cliente de correo para que lo ejecute y entonces tendremos un nuevo proceso 'virus' colgando del cliente de correo y asociado al usuario que inició la sesión. Sin embargo puesto que este usuario no tiene permisos de administración el virus no podrá modificar ficheros claves del sistema, sólamente los ficheros propios del usuario. Al reiniciar el ordenador el virus habrá desaparecido. Esto complica enormemente la creación de virus para Linux. El entorno gráfico X es un proceso más, sin ningún privilegio sobre cualquier otro. Esto significa que podemos prescindir del mismo si no nos hace falta. En general, cuando Linux se utiliza como servidor de Internet es normal no iniciar el entorno gráfico ya que consume mucha memoria y puede ralentizar el sistema. Este ha hecho que Linux se popularice y desplaze a Windows en el entorno profesionales ya que por ejemplo permite contratar servicios de hospedaje virtual a precios mucho más reducidos que sus equivalentes en Windows. También al no depender de un entorno gráfico, puede administrarse remotamente de forma mucho más cómoda mediante líneas de comandos, mientras que Windows requiere transmitir el entorno gráfico a través de Internet (mucho más lento, costoso e inseguro).

Ficheros

Los procesos acceden al hardware y a otros recursos como la conexión de red a internet o los datos almacenados en disco a través de un sistema de ficheros. Todas las entradas y salidas de datos desde/hacia procesos se realiza a través de ficheros. P.ej, para acceder a la tarjeta gráfica de vídeo lo hará leyendo y escribiendo en:
/dev/video/card0    
  ^     ^    ^
           └── Tarjeta 0 (podría haber más de una tarjeta de video en el sistema)
                                         
       └── Subdirectorio/carpeta video      
                                            
  └── Abreviatura de device (dispositivo)
Mientras que para acceder a un documento de texto almacenado en su disco duro lo hará accediento a una ruta similar a:
 /home/usuario1/documento1.odf
  ^     ^        ^
               └── Documento que queremos leer/editar.
                                         
       └── Subdirectorio/carpeta usuario1 (puede haber muchos usuarios)
                                            
  └── Directorio reservado para los ficheros de los usuarios finales
 
En general un mismo proceso puede acceder simultáneamente a varios ficheros y a su vez un mismo fichero puede ser accedido simultáneamente por varios procesos como se vé en el esquema siguiente:
 ARBOL DE PROCESOS                                   FICHEROS Y DIRECTORIOS
 ==========================================================================
 procesoInicial(Init)                                /bin/Init
      
    ├── proc.Hijo1 ───────────────────▇───────────── /bin/proc.Hijo1
          ├── proc.Hijo1.1 ──────────┼─▇─────────── /bin/proc.Hijo1.1
          └── proc.Hijo1.2 ──────────┼─┼─▇───────── /bin/proc.Hijo1.2
    ├── proc.Hijo2 ───────────────────┼─┼─┼─▇─────── /bin/proc.Hijo2
          ├── proc.Hijo2.1 ──────────┼─┼─┼─┼─▇───── /bin/proc.Hijo2.1
          └── proc.Hijo2.2 ──────────┼─┼─┼─┼─┼─▇─── /bin/proc.Hijo2.2
    ├── proc.Hijo3 ───────────────────┼─┼─┼─┼─┼─┼─▇─ /bin/proc.Hijo3
          └── proc.Hijo3.1 ──────────┼─┼─┼─┼─┼─┼─┼─ /bin/proc.Hijo3.1
                   └── proc.Hijo3.1.1┼─┼─┼─┼─┼─┼─┼─ /bin/proc.Hijo3.1.1
    ├── proc.Hijo4                            ...
    ...                               ▇─▇─▇─▇─▇─▇─▇─ /
                                      ▇─▇─▇─┼─┼─┼─┼─ /dev/pts/0  
                                      ┼─┼─┼─▇─▇─▇─┼─ /dev/pts/1  
                                      ┼─┼─┼─┼─┼─┼─┼─ /dev/pts/2  
                                      ┼─▇─┼─┼─▇─┼─┼─ /etc/passwd  
                                      ┼─┼─▇─┼─┼─▇─┼─ /dev/snd/controlC0  
                                      ▇─▇─▇─▇─▇─▇─▇─ /dev/null
                                      ▇─┼─▇─┼─▇─▇─▇─ /lib/i686/libc-2.11.so  
                                      ...                                   
En el esquema anterior puede verse como por ejemplo todos los procesos (lado izquierdo) tienen acceso a '/', la raíz del sistema así como a /dev/null. Cada proceso tiene acceso también a su imagen en el disco duro desde donde se leen el mismo antes de volcarla a memoria RAM.
A continuación se muestra un ejemplo real del árbol de procesos hasta llegar al proceso navegador firefox:
USUARIO  PROCESO
root     /sbin/init [5]
...
root      \_ /usr/sbin/gdm-binary
usuario1       \_ /etc/X11/X            
usuario1            \_ gnome-panel
usuario1                \_ /usr/bin/firefox   
 
En el esquema anterior se puede observar como el proceso inicial init lanzará entre otros el proceso gdm-binary que es el encargado de autentificarnos con nuestro usuario y password. A continuación ejecutará el entorno gráfico X. Dentro de X se ejecutarán una serie de aplicaciones, p.ej, el relog mostrando la hora o el administrador de archivos. En el esquema anterior se muestra sólamente la aplicación gnome-panel, una pequeña barra colocada en el lateral del monitor y que sirve para que el usuario pueda indicarle al sistema qué otras tareas (procesos) quiere ejecutar a continuación pulsando sobre un icóno gráfico asociado a la misma. En este caso se ejecutó él navegador web firefox. Como puede observarse en el esquema firefox se ejecuta asociado al usuario1 y por tanto con los permisos restringidos del mismo ya que es hijo de gnome-panel que a su vez es hijo de X y que fué ejecutado como usuario1 por el gestor de sesiones una vez identificados correctamente con nuestro usuario y password. Si mientras navegamos por internet un virus se colase en nuestro navegador entonces el esquema anterior quedaría como:
USUARIO  PROCESO
root     /sbin/init [5]
...
root      \_ /usr/sbin/gdm-binary
usuario1       \_ /etc/X11/X            
usuario1            \_ gnome-panel
usuario1                \_ /usr/bin/firefox   
usuario1                    \_ /home/usuario1/MiVirusFavorito
MiVirusFavorito estaría muy limitado y sólo podría acceder a ficheros del usuario1, es decir aquellos situados dentro de la carpeta /home/usuario1/. Puesto que no tiene acceso a los ficheros de arranque si reiniciamos la máquina el virus morirá ya que 'init' jamás ejecutará el fichero /home/usuario1/MiVirusFavorito. Por otro lado puesto que otras máquinas sólo permanecerán infectadas mientras el virus esté en funcionamiento la posibilidad de que dicha máquina 'zoombie' nos ataque será muy reducida. Este sistema de seguridad no transforma a Linux en un sistema invencible pero sí mucho más complicado de infectar que otros sistemas operativos. Por tanto hay que procurar mantener actualizado el sistema y hacer copias de seguridad, aun cuando tengamos la certeza de que las posibilidades de ataque son muy inferiores.
Con esta pequeña introducción ya podemos curiosear las tripas de nuestro sistema. Para ello podemos utilizar los comandos de monitorización.

El kernel

Comentaba anteriormente que el primer proceso en ejecutarse el init. En realidad esto no ha sido más que una mentira con fines pedagógicos. El primer proceso en ejecutarse es el Kernel. El kernel hace de frontera entre el software y el hardware. Para nuestra CPU, el kernel es un programa de software como cualquier otro (o casi como cualquier otro) pero para el resto de procesos, init incluido, el kernel se comporta como si fuese hardware. Cuando un proceso quiere acceder al hardware no lo hace directamente, sino que se lo pide al kernel. El kernel hace de interlocutor entre procesos y hardware. Si varios procesos quieren acceder al disco duro o a Internet, el kernel asignará un tiempo a cada uno de ellos, copiará los datos que cada proceso quiere enviar y los enviará al disco duro o a la red. También es el kernel el encargado de distribuir el tiempo de CPU asignado a cada proceso. Linux es un sistema multiproceso debido a que, aun disponiendo de un único procesador, Linux es capaz de ejecutar simultáneamente varias tareas haciendo rotar el propietario de la CPU cada fracción de segundo. En realidad puede asignar el control de la CPU a un nuevo proceso entre 100 o 1000 veces por segundo, dependiendo de la potencia de la CPU. Para un ser humano da la impresión de que todas las tareas se están ejecutando de forma simultánea. Este sistema de asignación de la CPU es clave y está extremadamente estudiado y optimizado. P.ej, Linux es lo suficientemente inteligente como para saber qué procesos están a la espera de recibir un dato de internet y, mientras este dato no llegue, no le asignará el valioso tiempo de CPU. Desde hace unos años a esta parte, los procesadores han desarrollado sistemas de ahorro de energía permitiendo disminuir la frecuencia, potencia o ciclo de trabajo de la CPU cuando no hay tareas que hacer. Linux está al tanto de este hecho y si observa que no hay aplicaciones demandando la CPU automáticamente le indica al procesador que disminuya el consumo de energía.
Si antes nombrábamos que los procesos están asociados a usuarios y gestionan ficheros, en realidad estos usuarios y ficheros son gestionados por el kernel. Cuando un proceso quiere acceder a un fichero, en realidad le pide al kernel que acceda al fichero y será el kernel quien le devuelva los datos que haya leido. Antes de ello el kernel comprueba el usuario y grupo asociado al proceso, comprueba a su vez los usuarios o grupos que pueden acceder a dicho fichero. Si no concuerdan, en vez de devolver el dato, devolverá un error o excepción al proceso llamante indicándole el "porque".
Otra labor del kernel es abstraer a los procesos del hardware real de la máquina. Un proceso 'visor de fotos' que quiera acceder al fichero /home/usuario1/FOTOS/vaciones001.png no tiene que preocuparse si dicho fichero está en un disco duro, una memoria SSD o debe ser accedido a través de la red local ya que se encuentra en otro ordenador. El kernel mediante un sistema llamado "montaje" mapea rutas lógicas de directorios, p.ej, /home/usuario1 con un dispositivo físico, p.ej, el disco duro local o un disco duro en Internet a 1000 kms. de distancia. El proceso 'visor de fotos' no se tiene que preocupar de dónde está fisicamente el fichero, sólamente de su ruta simbólica /home/usuario1/FOTOS/vacaciones0001.png.
La memoria RAM de un sistema es limitada, y de nuevo el kernel se encarga de asignar memoria a los procesos. Además, de nuevo, es lo suficientemente inteligente como para saber qué procesos llevan mucho tiempo sin ejecutarse (por ejemplo un servidor de correo que lleva 10 minutos sin enviar ni recibir correos) y si la memoria RAM escasea, es capaz de mover el proceso de RAM al disco duro y asignar la memoria RAM a procesos que en un instante dado puedan hacer mejor uso de la misma.
La palabra Linux, estrictamente hablando, en realidad se refiere sólamente al kernel. Los procesos normales en realidad no son Linux, son procesos desarrollados por diferentes grupos de trabajo (fundación GNU, Mozilla, empresas,...). Sin embargo es costumbre resumir, por abuso del lenguaje, como Linux a todo y cuanto se ejecuta bajo el kernel (algo que en realidad siempre ha molestado a otros grupos de desarrollo que se ven injustamente ignorados por este hecho).



No hay comentarios:

Publicar un comentario