Grupo 4 - GNU-Linux
Grupo 4 - GNU-Linux
Grupo 4 - GNU-Linux
RA
Y SISTEMAS
HITOS TECNOLÓGICOS
2. Historia
3. Distribuciones y Licencias
4. Servicios De Linux
5. Capas de un SO GNU/Linux
6. Administración de Procesos
7. Fuente
Acerca de GNU/Linux
¿Qué es Linux?
1
Historia
El proyecto GNU, lo inició en 1983 Richard Matthew Stallman (rms), y tiene como
objetivo el desarrollo de un sistema operativo completo similar a Unix y compuesto
enteramente de software libre, sin restricciones de acceso o de desarrollos futuros.
El término GNU proviene de «GNU No es Unix». Stallman también inventó el
concepto de copyleft (método para licenciar software de tal forma que su uso y
modificación permanezcan siempre libres y queden en la comunidad de usuarios y
desarrolladores). La palabra «libre» se refiere a la libertad de acceder a los códigos
fuente y no al precio. Se puede o no pagar un precio por obtener software de GNU. De
cualquier manera, una vez que se obtiene el software, se tienen cuatro libertades
específicas para usarlo:
· la libertad de ejecutar el programa como se desee;
· la libertad de copiar el programa y reproducirlo;
· la libertad de cambiar el programa como se desee mediante el acceso completo al código
fuente; la libertad de distribuir una versión mejorada, ayudando así a construir la
comunidad del sistema.
El Comienzo
La aparición de LINUX en el mundo de la informática fue una evolución de la cultura
de Unix. Este se desarrolló a mediados de los ’70 cuando los miniordenadores y los
grandes sistemas dominaban el mundo corporativo. El problema histórico de Unix ha
sido su inaccesibilidad a los programadores y desarrolladores que querían trabajar con él
fuera de los grandes sistemas de computadoras. Aunque posteriormente aparecieron
versiones de Unix para PC, las primeras versiones comerciales costaban más que el PC
en el que se debían ejecutar. Esto facilitó el nacimiento de LINUX, de la mano de Linus
Torvalds, un estudiante de la universidad finlandesa de Helsinki, quien, en 1991, se
abocó a la tarea de reemplazar a Minix, un clon de Unix de pequeñas proporciones y
finalidad académica, desarrollado años antes por Andrew Tannenbaum.
En un principio Linus Torvalds escribió todo LINUX en Assembler, pero luego, llegada
la hora de
escribir
2
algunos drivers, comenzó a utilizar C, con lo que notó una importante aceleración en los
tiempos de desarrollo. A fines de agosto de 1991, Torvalds ya tenía una precaria
versión 00.1 de Linux, que era capaz de montar disquetes y contaba con un pequeño
sistema de archivos, pero no fue anunciada como oficial ya que necesitaba de Minix
para compilarla. En Octubre del ’91 fue anunciada oficialmente la versión 0.02, esta
versión podía ejecutar las utilidades bash, gcc, gnumake, gnu-sed y compress. Esta
versión no era muy usable. A medida que avanzaba en su desarrollo, Linus Torvalds fue
dejando el código fuente de las sucesivas versiones del kernel (núcleo) y utilidades de
Linux a disponibilidad de los usuarios de Internet. Entonces liberó el núcleo Linux bajo
los términos de la GPL, completando un sistema GNU (completo y operativo), el
sistema operativo GNU/Linux. Este fue sin duda un gran acierto, ya que hizo posible
que una gran multitud de desarrolladores de todo el mundo se familiarizaran con el
código, lo cual significó un gran aporte de sugerencias, evolucionando luego hacia el
desarrollo distribuido de software, que ha permitido a Linux alcanzar un alto nivel de
desarrollo y madurez, así también como un amplio grado de aceptación. De esta
asociación nace la llamada GNU/Linux.
3
Aquella versión, cuyo proyecto llevaba el nombre de GNU, era un sistema muy básico,
pero podía controlar el hardware. Torvalds había tomado una versión a la que le adaptó
su propio núcleo y lo llamó Linux. Con este avance, en conjunto con el proyecto GNU
y Linux fue llamado GNU/LINUX, ya que era una modificación eficaz de la
herramienta GNU junto con el núcleo Linux.
Para comprender un poco este proyecto, hay que entender que el núcleo Linux es un
controlador para el hardware. O sea, el núcleo de Linux es un conjunto de drivers
necesarios para poder usar el ordenador de forma correcta.
Los drivers son componentes de software que permiten al sistema operativo y a un
dispositivo poder comunicarse entre sí.
Distribuciones y Licencias
Distribuciones
Otros sistemas operativos como Microsoft combinan cada bit de código internamente y lo
lanzan como un solo paquete. Tienes que elegir entre una de las versiones que ofrecen.
Pero Linux es diferente a ellos. Las diferentes partes de Linux son desarrolladas por
diferentes organizaciones.
Las diferentes partes incluyen kernel, utilidades de shell, servidor X, entorno del sistema,
programas gráficos, etc. Si lo desea, puede acceder a los códigos de todas estas partes y
ensamblarlas usted mismo. Pero no es una tarea fácil que requiere mucho tiempo y todas las
piezas deben ensamblarse correctamente para que funcionen correctamente.
A partir de aquí, la distribución (también llamada distribuciones) entra en escena. Ellos
ensamblan todas estas partes para nosotros y nos dan un sistema operativo compilado de
Linux para instalar y usar.
4
Algunas derivaciones de Debian:
Slakware: fue una de las primeras distribuciones que aparecieron. Fue creada por Patrick
Volkerding y tuvo un gran éxito en sus primeros años de existencia.
Aquí, discutiremos sobre algunas de las distribuciones de Linux más populares en la
actualidad.
1) Debian
Debian existe desde 1993 y lanza sus versiones mucho más lentamente que Ubuntu y Mint.
Se considera que es la madre de una gran parte de las distribuciones de GNU/Linux.
Esto lo convierte en uno de los distribuidores de Linux más estables y robustos, lo que
genera que pueda utilizarse en servidores o en entornos críticos.
A diferencia de otros lanzamientos, cada etapa de desarrollo de Debian era probado y se
esperaba su estabilidad para ponerlo a disposición de los usuarios, por lo que cada etapa de
desarrollo, inestabilidad, testing y estabilidad eran completadas para poder avanzar.
Ubuntu se basa en Debian y se fundó para mejorar las partes principales de Debian más
rápidamente y hacerlo más fácil de usar. Cada nombre de lanzamiento de Debian se basa en
el nombre de la película Toy Story.
2) Ubuntu
Se creó en 2004 por Canonical y rápidamente se hizo popular. Canonical quiere que Ubuntu
se use como un escritorio Linux gráfico fácil sin el uso de la línea de comandos. Es la
5
distribución de Linux más conocida y utilizada por los usuarios. Ubuntu es la próxima
versión de Debian y es fácil de usar para los novatos. Viene con muchas aplicaciones
preinstaladas y bibliotecas de repositorios fáciles de usar.
Ubuntu, para funcionar, toma la parte inestable de Debian y siguió un ciclo de 2 años de
lanzamiento.
Anteriormente, Ubuntu usaba el entorno de escritorio GNOME2, pero ahora ha desarrollado
su propio entorno de escritorio Unity. Se lanza cada seis meses y actualmente está
trabajando para expandirse y ejecutarse en tabletas y teléfonos inteligentes.
3) Mint de Linux
Mint se basa en Ubuntu y usa su software de repositorio, por lo que algunos paquetes son
comunes en ambos. Nace por el foco al usuario, para mejorar la experiencia del usuario y
para facilitar su uso, parecida a la de Ubuntu, pero marcando una diferenciación, porque no
quería ser una copia sino una mejora.
Anteriormente, era una alternativa de Ubuntu porque los códecs de medios y el software
propietario están incluidos en mint pero no estaban en Ubuntu. Pero ahora tiene su propia
popularidad y usa el escritorio canela y mate en lugar del entorno de escritorio Unity de
Ubuntu.
5) Fedora
Es un proyecto que se centra principalmente en el software libre y proporciona la última
versión del software. No crea su propio entorno de escritorio, sino que usa software
6
'upstream'. Por defecto tiene entorno de escritorio GNOME3. Es menos estable, pero
proporciona lo último y desde su función se lo considera como un sistema de gestión de
paquetes. Si bien existen más versiones de este sistema operativo, las más comunes o
utilizadas.
Licencias de Linux
Linus Torvalds ha otorgado la licencia del kernel de Linux a la Licencia pública general
GNU (GPL) versión 2. GNU se asegura de que cualquier código fuente de software con
licencia tenga que hacer que el código fuente original esté abierto y disponible
gratuitamente para todos sus usuarios. Aquí, libremente no significa costo, sino que está
disponible gratuitamente para que los usuarios distribuyan y modifiquen el código.
Existe la tercera versión de GNU, GNU Lesser General Public License (LGPL) versión 3.
Pero impone algunos permisos más en la licencia. A Torvalds no le gustan algunas
disposiciones de la versión 3 y ha anunciado que el kernel de Linux no vendrá con la
versión
Ubuntu
Centrándonos en Ubuntu, tenemos la siguiente Organización de paquetes:
Ubuntu divide todo el software en cuatro secciones, llamadas componentes, para
mostrar diferencias en licencias y la prioridad con la que se atienden los problemas que
informen los usuarios. Estos componentes son: main, restricted, universe y multiverse.
Por defecto, se instala una selección de paquetes que cubre las necesidades básicas de la
mayoría de los usuarios de computadoras. Los paquetes de Ubuntu generalmente se
basan en los paquetes de la rama inestable (Sid) de Debian.
Componente main
El componente main contiene solamente los paquetes que cumplen los requisitos de la
licencia de Ubuntu, y para los que hay soporte disponible por parte de su equipo. Está
pensado para que incluya todo lo necesario para la mayoría de los sistemas GNU/Linux
7
de uso general. Los paquetes de este componente poseen ayuda técnica garantizada y
mejoras de seguridad oportunas.
Componente restricted
El componente restricted contiene el programa soportado por los desarrolladores de
Ubuntu debido a su importancia, pero que no está disponible bajo ningún tipo de
licencia libre para incluir en main. En este lugar se incluyen los paquetes tales como los
controladores propietarios de algunas tarjetas gráficas como, por ejemplo, los de
nVIDIA. El nivel de la ayuda es más limitado que para main, puesto que los
desarrolladores puede que no tengan acceso al código fuente.
Componente universe
El componente universe contiene una amplia gama del programa, que puede o no tener
una licencia restringida, pero que no recibe apoyo por parte del equipo de Ubuntu. Esto
permite que los usuarios instalen toda clase de programas en el sistema guardándolos en
un lugar aparte de los paquetes soportados: main y restricted.
Componente commercial
Como lo indica su clasificación, contiene programas comerciales.
Componente multiverse
Finalmente, se encuentra el componente multiverse, que contiene los paquetes sin
soporte debido a que no cumplen los requisitos de Software Libre.
Servicios De Linux
GNU/Linux dispone de servidores adaptados para cualquier ambiente de trabajo. Las
categorías de los servicios que hemos apuntado tienen equivalentes en servicios que
podemos proporcionar desde nuestros sistemas GNU/Linux al resto de máquinas de la
red (y de los que también podremos actuar como cliente):
8
a) Aplicaciones: GNU/Linux puede ofrecer servicios de terminales remotos, ya sea por
conexión directa mediante interfaces serie de terminales "tontos", que sirvan para
visualizar o interactuar con las aplicaciones. Otra posibilidad es la conexión remota de
modo textual, desde otra máquina, por medio de servicios TCP/IP como los rlogin,
telnet, o de forma segura con ssh. GNU/Linux proporciona servidores para todos estos
protocolos. En el caso de ejecutar aplicaciones gráficas, disponemos de soluciones
mediante X Window de forma remota. Cualquier cliente UNIX, Linux o Windows (u
otros) que dispongan de un cliente X Window puede visualizar la ejecución del entorno
y sus aplicaciones. Asimismo, hay otras soluciones como VNC para el mismo
problema. En cuanto a las aplicaciones vía web, GNU/Linux dispone del servidor
Apache, y cualquiera de los múltiples sistemas de ejecución web están disponibles, ya
sean Servlets/JSP (con Tomcat), Perl, PHP, xml, webservices, etc., así como servidores
de aplicaciones web como Oracle/BEA WebLogic, IBM Websphere, JBoss (libre), que
también se ejecutan sobre plataformas GNU/Linux.
b) Ficheros: pueden servirse ficheros de múltiples maneras, desde proporcionar acceso
a ellos por ftp como servirlos de forma transparente a otras máquinas UNIX y
GNU/Linux con NFS, o bien actuar de cliente o servidor hacia máquinas Windows
mediante Samba/CIFS.
c) Base de datos: soporta una gran cantidad de bases de datos cliente/servidor de tipo
relacional, como MySQL/MariaDB y PostgreSQL, y varias comerciales, como Oracle o
IBM DB2, entre otras.
d) Impresión: puede servir impresoras locales o remotas, tanto a sistemas UNIX con
protocolos TCP/IP como a Windows mediante Samba/CIFS. GNUFDL •
PID_00238581 13 Migración y coexistencia con sistemas no Linux
e) Correo electrónico: ofrece tanto servicios para que los clientes obtengan correo en
sus máquinas (servidores POP3 o IMAP), como agentes MTA (mail transfer agent) para
recuperar y retransmitir correo, como el servidor Sendmail (el estándar UNIX) u otros
como Exim o Postfix y, en el caso de envíos externos, el servicio de SMTP.
f) Web: está disponible el servidor http Apache. Además, podemos integrar servidores
de aplicaciones web, como Tomcat para servir servlets/JSP o servidores de aplicaciones
como JBoss.
g) Información de red: servicios como NIS, NIS + o LDAP nos permiten centralizar la
información de las máquinas, usuarios y recursos varios de nuestra red, facilitando la
administración y los servicios a los usuarios, de manera que estos no dependan de su
9
situación en la red. Si nuestra organización tiene cierta estructura interna, estos servicios
nos permiten modelar (mediante estructuras jerárquicas), dejando acceso a los recursos
a quien los necesita.
h) Servicios de nombres: servicios como DNS para los nombres de las máquinas y su
traducción desde IP o a IP, por medio de, por ejemplo, el servidor Bind (el DNS
estándar UNIX).
i) Servicios de acceso remoto: ya sea para ejecutar aplicaciones o para obtener
información remota de las máquinas. Los servidores podrían ser los que hemos
comentado para aplicaciones: X Window, VNC, etc., y también los que permiten
ejecutar algunos comandos remotos sin interactividad, como rexec, rsh, ssh, etc.
j) Servicios de generación de nombres: servicios como DHCP permiten redes TCP/IP,
con una generación dinámica (o estática) de las direcciones IP que se disponen en
función de las máquinas que las necesiten.
k) Servicios de acceso a Internet: en determinadas situaciones puede tenerse un único
punto de salida a Internet (o varios). Estos puntos suelen actuar como proxy, ya que
tienen el acceso y lo redirigen a los posibles accesos a Internet por parte de los clientes.
También suelen actuar de caché de contenidos. En GNU/Linux podemos disponer, por
ejemplo, del Squid. Dentro de esta categoría, también podría entrar la actuación de un
sistema GNU/Linux de pasarela (gateway) o de router, ya sea para dirigir paquetes hacia
otras redes o para buscar rutas de reenvío alternativas.
l) Servicios de filtrado: una de las medidas de seguridad más utilizadas actualmente es
la implantación de cortafuegos (o firewalls). Consiste en técnicas de filtrado de los
paquetes entrantes o salientes, de los diferentes protocolos que estemos usando, para
poner barreras a los no deseados. En GNU/Linux GNUFDL • PID_00238581 14
Migración y coexistencia con sistemas no Linux disponemos de mecanismos como
ipchains (obsoleto) e iptables (más moderno, también denominado Netfilter) para
implementar los cortafuegos. Hay propuestas nuevas, como NFtables, para sustituir en
el futuro a iptables.
m) Servicios de virtualización: múltiples soluciones posibles, ya desde cierto soporte
en el kernel, como KVM, Qemu, y Xen; soluciones parcialmente libres, como
VirtualBox, hasta algunas comerciales, como VMware.
10
Capas de un SO GNU/Linux
El sistema operativo GNU/Linux puede explicarse bajo una organización de tres capas.
Una capa se considera una agrupación de componentes. En las capas se considera al
hardware como componente de la primera de ellas o capa inferior. Dicho hardware
incluye a la memoria y al CPU, entre otros elementos.
En la siguiente capa se encuentra el kernel o núcleo del sistema operativo. El kernel es
el software que reside en memoria y le indica al CPU que hacer. Este núcleo gestiona al
hardware y actúa como una interface entre éste y cualquier programa en ejecución.
11
Kernel de GNU/Linux
El Kernel de Linux puede dividirse a su vez en tres niveles. En la parte superior está la
interfaz de llamada al sistema, los programas interactúan con el kernel a través de las
llamadas al sistema. Un programador puede hacer uso de una llamada al sistema para
interactuar con los dispositivos. Por debajo de la interfaz de llamada al sistema está el
código del núcleo, que puede definirse más exactamente como el código del núcleo
independiente de la arquitectura. Este código es común a todas las arquitecturas de
procesador soportadas por Linux. Debajo de éste se encuentra el código dependiente de
la arquitectura, que forma lo que comúnmente se llama BSP (Board Support Package).
Este código sirve como código específico del procesador y arquitectura de la plataforma
para la arquitectura dada.
Los programas interactúan con el kernel a través de las llamadas al sistema, funciones
especiales con nombres bien conocidos. Un programador puede hacer uso de una
llamada al sistema para interactuar con los dispositivos.
El kernel está a cargo de gestionar tareas para cuatro áreas generales del sistema:
Procesos. El kernel es el responsable de determinar qué procesos pueden hacer
uso del CPU.
Memoria. El kernel asigna espacio de memoria a los procesos que están en
ejecución.
12
Controladores de dispositivos. El kernel actúa como una interface entre el
hardware y los procesos. Es generalmente trabajo del kernel operar el hardware.
Soporte a las llamadas al sistema. Los procesos usan las llamadas al sistema para
comunicarse con el kernel.
GNU/Linux puede soportar muchos usuarios.
Dependiendo del hardware y de los tipos de tareas que desempeñe una computadora,
GNU/Linux puede dar soporte de uno a 1,000 usuarios, cada uno ejecutando
concurrentemente diferentes programas. GNU/Linux puede ejecutar muchas tareas.
El sistema operativo está fuertemente protegido para ofrecer multitarea, permitiendo
que cada usuario ejecute más de una tarea a la vez. Los procesos pueden comunicarse
uno con otro, pero permanecen protegidos entre ellos.
GNU/Linux provee un sistema de archivos jerárquico
Un archivo es una colección de información, por ejemplo, un reporte o una carta. Puede
contener también imágenes o una melodía o puede ser un programa ejecutable. Cada
archivo es almacenado bajo un identificador en un dispositivo de almacenamiento como
un disco duro. El sistema de archivos GNU/Linux provee una estructura donde los
archivos son organizados bajo un directorio, que representa un folder.
Cada directorio tiene un nombre y puede contener archivos u otros directorios. Esta
estructura ayuda al usuario a gestionar una gran cantidad de archivos agrupados
jerárquicamente en directorios. Cada usuario tiene un directorio principal y todos los
subdirectorios que requiera.
Para mantener una gestión fácil tanto para usuario como para administradores y
desarrolladores de software, un grupo de entusiastas a través de la Internet, desarrolló el
Linux Filesystem Standard (FSSTND), el cual se encuentra dentro del Linux Filesystem
Hierarchy Standard (FHS) para definir un estándar en la estructura jerárquica de
archivos bajo Linux.
13
GNU/Linux es un sistema operativo que permite la interacción de usuario a través de un
shell de trabajo. Un shell es una interfaz, un programa o conjunto de programas que
permiten acceder a los recursos que ofrece el sistema operativo y al kernel de éste a
través de tal interfaz.
Los dos tipos de interfaces que permiten tal interacción, tanto en Unix como en los
sistemas operativos derivados de él son: a) Ambiente gráfico a través de escritorios
gráficos de trabajo, y b) Línea de comando a través de órdenes escritas.
Los escritorios de trabajo más populares son Gnome Desktop y K Desktop Environment,
aunque existen otros como Xfce, Enlightenment, Cinnamon, Fluxbox y GNUstep, entre
otros.
El programa más común en GNU/Linux para escribir las órdenes en la llamada línea de
comando es Bourne Again Shell (Bash shell), pero existen otros populares como Bourne
shell, Korn shell, Z shell y C shell, entre otros.
Shell de trabajo
Debido a que GNU/Linux es un sistema operativo multiusuario, cada uno puede elegir
el shell de trabajo que desee. Puesto que los shells son programas que permiten
interactuar con el sistema operativo a través de órdenes o comandos, el shell es un
lenguaje de programación interpretado de alto nivel. Los comandos del shell pueden
entonces ser agrupados en archivos de texto a manera de instrucciones para ser
ejecutados posteriormente. Estos archivos que contienen comandos del shell se les
conoce como shell scripts.
Esta flexibilidad le permite al usuario desarrollar complejas tareas con relativa facilidad.
GNU/Linux provee de cientos de utilidades (programas para interactuar con el sistema
operativo) para gestionar archivos, dispositivos y cualquier recurso con el que cuente el
usuario.
GNU/Linux establece jerarquías para los usuarios. Todo sistema operativo crea un
usuario principal o administrador llamado el Supe usuario o root. El resto de los
usuarios son considerados usuarios normales que no tienen los privilegios de gestión del
sistema operativo que tiene root. Entre las actividades que tiene el administrador del
sistema o root es el de instalar aplicaciones, modificar los archivos de configuración de
los programas y servicios y actualizar el sistema operativo, entre otras actividades.
14
Recursos adicionales
GNU/Linux es un sistema operativo muy versátil que ofrece facilidades para
comunicación en red, compartiendo recursos y ofreciendo servicios como publicación
de una página web o la compartición de una impresora. También ofrece recursos para el
desarrollo de aplicaciones como compiladores e intérpretes para lenguajes de
programación como C, C++, Java, Python, awk, Perl, etc., y ambientes de desarrollo
que pueden instalarse de terceros como Netbeans, Eclipse o Code:Block.
15
La librería GNU C (glibc) proporciona la interfaz de llamada al sistema (system call
interface) que se conecta al núcleo y proporciona el mecanismo de transición entre la
aplicación del espacio de usuario y el núcleo. Esto es importante porque el núcleo y la
aplicación de usuario ocupan diferentes espacios de direcciones protegidos. Y mientras
que cada proceso del espacio de usuario ocupa su propio espacio de direcciones virtual,
el núcleo ocupa un único espacio de direcciones.
Interfaz de llamada a sistema(SCI)
El SCI es una fina capa que proporciona los medios para realizar llamadas a funciones
desde el espacio de usuario al núcleo. Esta interfaz puede depender de la arquitectura,
incluso dentro de la misma familia de procesadores.
Administrador de Procesos
El administrador de procesos se centra en la ejecución de los mismos. En el núcleo,
estos se denominan hilos y representan una virtualización individual del procesador
(código del hilo, datos, pila y registros de la CPU). En el espacio de usuario, se suele
utilizar el término proceso, aunque la implementación de Linux no separa los dos
conceptos (procesos e hilos). El núcleo proporciona una interfaz de programa de
aplicación (API) a través del SCI para crear un nuevo proceso (fork, exec, o funciones
16
de la Interfaz del Sistema Operativo Portátil [POSIX]), detener un proceso (kill, exit), y
comunicarse y sincronizarse entre ellos (signal, o mecanismos POSIX).
También en la gestión de procesos está la necesidad de compartir la CPU entre los hilos
activos. El núcleo implementa un novedoso algoritmo de programación que opera en
tiempo constante, independientemente del número de hilos que compiten por la CPU.
Este algoritmo se denomina planificador O(1), lo que significa que se tarda lo mismo en
programar un subproceso que en programar varios. El planificador O(1) también
soporta múltiples procesadores (llamado MultiProcesamiento Simétrico, o SMP).
Gestión de la Memoria
Otro recurso importante que gestiona el kernel es la memoria. Por eficiencia, dada la
forma en que el hardware gestiona la memoria virtual, la memoria se gestiona en lo que
se denomina páginas (de 4KB de tamaño para la mayoría de las arquitecturas). Linux
incluye los medios para gestionar la memoria disponible, así como los mecanismos de
hardware para los mapeos físicos y virtuales.
Pero la gestión de la memoria es mucho más que la gestión de buffers de 4KB. Linux
proporciona abstracciones sobre los buffers de 4KB, como el asignador de slabs (slab
allocator). Este esquema de gestión de memoria utiliza búferes de 4KB como base,
pero luego asigna estructuras desde dentro, manteniendo un registro de qué páginas
están llenas, parcialmente usadas y vacías. Esto permite que el esquema crezca y se
reduzca dinámicamente en función de las necesidades del sistema mayor.
Al soportar múltiples usuarios de memoria, hay momentos en los que la memoria
disponible puede agotarse. Por esta razón, las páginas se pueden mover fuera de la
memoria y hacia el disco. Este proceso se denomina swapping porque las páginas se
intercambian de la memoria al disco duro.
17
En la parte superior del VFS se encuentra una abstracción de API común de funciones
como abrir, cerrar, leer y escribir. En la parte inferior del VFS están las abstracciones
del sistema de archivos que definen cómo se implementan las funciones de la capa
superior. Se trata de complementos para el sistema de archivos en cuestión (de los que
existen más de 50).
Por debajo de la capa del sistema de archivos se encuentra la caché del búfer, que
proporciona un conjunto común de funciones a la capa del sistema de archivos
(independiente de cualquier sistema de archivos en particular). Esta capa de caché
optimiza el acceso a los dispositivos físicos manteniendo los datos durante un corto
periodo de tiempo (o leyendo por adelantado para que los datos estén disponibles
cuando se necesiten). Por debajo de la caché del búfer se encuentran los controladores
de dispositivo, que implementan la interfaz para el dispositivo físico en particular.
18
La capa de sockets es la API estándar del subsistema de red y proporciona una interfaz
de usuario para una variedad de protocolos de red. Desde el acceso a las tramas en bruto
hasta las unidades de datos de protocolo (PDU) IP y hasta TCP y el Protocolo de
Datagramas de Usuario (UDP), la capa de sockets proporciona una forma estandarizada
de gestionar las conexiones y mover los datos entre los puntos finales.
Tipos de Shell
Shell Zsh
Zsh es un potente intérprete de comandos que puede funcionar como shell interactiva y
como intérprete de lenguaje de scripting. Aun siendo compatible con Bash (no por defecto,
solo si se ejecuta emulate sh), ofrece numerosas ventajas como:
Eficiencia
Completado de tabulador mejorado
19
Expansión de nombres de fichero mejorada
Manejo de arrays mejorado
Totalmente personalizable
Shell C
La Shell C, también conocida como «csh», fue diseñada para permitir a los usuarios escribir
programas en script de shell con una sintaxis muy similar a la del lenguaje de programación
C.
En muchos sistemas como Red Hat, csh es tcsh, una versión mejorada de csh. A menudo
cualquiera de los dos nombres (csh o tcsh) es un enlace simbólico a la versión mejorada de
C shell (tcsh).
Shell TC
Shell TC es una expansión de la Shell C. Tiene todas las mismas funcionalidades, pero
añade la posibilidad de utilizar pulsaciones de teclado del programa de procesador de
palabras Emacs para editar el texto en la línea de comandos. Por ejemplo, los usuarios
pueden presionar Esc-D para eliminar el resto de la palabra seleccionada. Comúnmente
conocida como «tcsh».
Shell Korn
Shell Korn también fue escrita por un programador en los Laboratorios Bell, David Korn.
Intenta combinar las características de la Shell C, Shell TC y Shell Bourne en un solo
paquete. También incluye la capacidad para crear nuevos comandos de shell para los
desarrolladores cuando surja la necesidad.Se conoce como «ksh«.
Shell Bourne-Again
La Shell Bourne-Again es una versión actualizada de la Shell Bourne original creada por la
Free Software Foundation en su proyecto de código abierto GNU. Por esta razón, es una
shell utilizada ampliamente en la comunidad de código abierto.
20
Su sintaxis es similar a la utilizada por la Shell Bourne, sin embargo, incorpora algunas de
las funcionalidades más avanzadas que se encuentran en las shells C, TC y Korn.
Entre las funcionalidades adicionales que carecía Bourne, está la capacidad para completar
nombres de archivos pulsando la tecla TAB, la capacidad de recordar un historial de
comandos recientes y la capacidad de ejecutar múltiples programas en segundo plano a la
vez. Conocida como «Bash» (Bourne again shell).
Administración de Procesos
Linux es un sistema multitarea, ya que puede realizar distintas tareas concurrentemente
(puede comenzar una antes de que termine otra). Todos los recursos del sistema pueden
ser compartidos por muchos usuarios y el sistema operativo es el encargado de crear la
ilusión de que cada usuario tiene dedicado el sistema completo para él. Sin embargo, en
realidad, entre que pulsamos la tecla y se completa la orden introducida, el sistema
atiende cientos de peticiones de todos los usuarios.
Un proceso, en el concepto más simple, es un programa cargado en la memoria
principal destinado a ejecutarse, pero más minuciosamente, un proceso es una instancia
de un programa en ejecución con su propio espacio de direcciones.
Todo proceso consta de:
un programa ejecutable
sus datos
su pila
sus punteros de pila y programa,
los registros
y cualquier información que sea necesaria para que este pueda ser ejecutado
y tiene una existencia temporaria en la memoria de la máquina.
Para que el sistema pueda gestionar los procesos, cada uno se representa por una
estructura de datos task_struct.
El vector task es una lista de punteros a estructuras task_struct.
Todo lo que ejecutamos bajo LINUX es un proceso que puede identificarse mediante un
PID (Número Identificador de Proceso) que es único para cada uno de los procesos que
se encuentran en ejecución. Este PID es un entero entre 0 y 65564, comenzando por 0
21
cuando se arranca el sistema y volviendo a empezar en 0 al llegar al máximo, pero
siempre se asigna un PID que no esté asociado a un proceso activo en el momento de
ejecutar el nuevo proceso.
Cada proceso también tiene identificadores de usuario y grupo, que se usan para
controlar el acceso de los procesos a los archivos y dispositivos del sistema. Los
procesos nuevos se clonan de un proceso existente. Cada proceso en el sistema, excepto
el proceso init, tiene un proceso padre. Cada estructura task_struct mantiene punteros a
su proceso padre, a sus hermanos (pues tienen el mismo padre) y a sus procesos hijos.
Estas relaciones se pueden ver con el comando pstree.
22
Sintaxis:
pstree [opciones] [pid|user]
Opciones
-p Muestra los PIDs de los procesos
-a Muestra los argumentos de la línea de comandos. Si la línea de comandos de un
proceso termina, ese proceso se indica entre llaves "{ }".
-h Resalta el proceso actual y los que se encuentren sobre él.
ps
El comando ps es el que permite informar sobre el estado de los procesos. ps esta
basado en el sistema de archivos /proc, es decir, lee directamente la información de los
archivos que se encuentran en este directorio. Tiene una gran cantidad de opciones,
incluso estas opciones varían dependiendo del estilo en que se use el comando. Estas
variaciones sobre el uso de ps son las siguientes:
Estilo UNIX, donde las opciones van precedidas por un guión -
Estilo BSD, donde las opciones no llevan guión
Estilo GNU, donde se utilizan nombres de opciones largas y van precedidas por doble
guión --
Sea cual sea el estilo utilizado, dependiendo de las opciones indicadas, varias columnas
se mostrarán en el listado de procesos que resulte, estas columnas pueden ser entre
muchas otras, las siguientes (y principales):
Columna Descripción
p o PID Process ID, número único o de identificación del proceso.
P o PPID Parent Process ID, padre del proceso
U o UID User ID, usuario propietario del proceso
23
t o TT o Terminal asociada al proceso, si no hay terminal aparece entonces un '?'
TTY
T o TIME Tiempo de uso de cpu acumulado por el proceso
c o CMD El nombre del programa o comando que inició el proceso
RSS Resident Sise, tamaño de la parte residente en memoria en kilobytes
SZ o SIZE Tamaño virtual de la imagen del proceso
NI Nice, valor nice (prioridad) del proceso, un número positivo significa
menos tiempo de procesador y negativo más tiempo (-19 a 19)
C o PCPU Porcentaje de cpu utilizado por el proceso
STIME Starting Time, hora de inicio del proceso
S o STAT Status del proceso, estos pueden ser los siguientes
R runnable, en ejecución, corriendo o ejecutándose
S sleeping, proceso en ejecución, pero sin actividad por el momento, o
esperando por algún evento para continuar
T sTopped, proceso detenido totalmente, pero puede ser reiniciado
Z zombie, difunto, proceso que por alguna razón no terminó de manera
correcta, no debe haber procesos zombies
D uninterruptible sleep, son procesos generalmente asociados a acciones de
IO del sistema
X dead, muerto, proceso terminado pero que sigue apareciendo, igual que
los Z no deberían verse nunca
kill
El comando kill, que literalmente quiere decir matar, sirve no solo para matar o terminar
procesos sino principalmente para enviar señales (signals) a los procesos. La señal por
default (cuando no se indica ninguna es terminar o matar el proceso), y la sintaxis es kill
24
PID, siendo PID el número de ID del proceso. Así, por ejemplo, es posible enviar una
señal de STOP al proceso y se detendrá su ejecución, después cuando se quiera mandar
una señal de continuar y el proceso continuará desde donde se quedó.
killall
El comando killall, que funciona de manera similar a kill, pero con la diferencia de que
en vez de indicar un PID se indica el nombre del programa, lo que afectará a todos los
procesos que tengan ese nombre. Así por ejemplo si se tienen varias instancias
ejecutándose del proxy server squid, con killall squid eliminará todos los procesos que
se estén ejecutando con el nombre 'squid'
nice
Permite cambiar la prioridad de un proceso. Por defecto, todos los procesos tienen una
prioridad igual ante el CPU que es de 0. Con nice es posible iniciar un programa
(proceso) con la prioridad modificada, más alta o más baja según se requiera. Las
prioridades van de -20 (la más alta) a 19 la más baja. Solo root o el superusuario puede
establecer prioridades negativas que son más altas. Con la opción -l de ps es posible
observar la columna NI que muestra este valor.
renice
Así como nice establece la prioridad de un proceso cuando se inicia su ejecución, renice
permite alterarla en tiempo real, sin necesidad de detener el proceso.
nohup y &
Cuando se trata ejecutar procesos en background (segundo plano) se utiliza el comando
nohup o el operador & . Aunque realizan una función similar, no son lo mismo.
Si se desea liberar la terminal de un programa que se espera durará un tiempo
considerable ejecutándose, entonces se usa . Esto funciona mejor cuando el resultado
del proceso no es necesario mandarlo a la salida estándar (stdin), como por ejemplo
cuando se ejecuta un respaldo o se abre un programa Xwindow desde la consola o
terminal. Para lograr esto basta con escribir el comando en cuestión y agregar al final el
símbolo & (ampersand).
jobs
25
Si por ejemplo, se tiene acceso a una única consola o terminal, y se tienen que ejecutar
varios comandos que se ejecutarán por largo tiempo, se pueden entonces como ya se vió
previamente con nohup y el operador '&' mandarlos a segundo plano o background con
el objeto de liberar la terminal y continuar trabajando.
Pero si solo se está en una terminal esto puede ser difícil de controlar, y para eso
tenemos el comando jobs que lista los procesos actuales en ejecución:
Obsérvese como al traer en primer plano al 'job' o proceso 1, este adquirió el símbolo
[+] que indica que está al frente. Lo mismo sería con bg que volvería a reinicar el
proceso, pero en segundo plano. Y también es posible matar los procesos con kill
indicando el número que devuelve jobs: kill %1, terminaría con el proceso en jobs
número 1.
top
Una utilería muy usada y muy útil para el monitoreo en tiempo real del estado de los
procesos y de otras variantes del sistema es el programa llamado top, se ejecuta desde la
línea de comandos, es interactivo y por defecto se actualiza cada 3 segundos.
Fuente
Ana Daysi Montesino (2015). Proyectos de integración de sistemas de archivos Linux -
MySLQ http://redicces.org.sv/jspui/bitstream/10972/2168/1/1.%20Proyecto%20de
%20integracion%20de%20sistemas%20de%20archivos%20Linux%20MySQL.pdf
Allende, S. L., Gibellini, F. A., Sánchez, C. B., & Serna, M. M. (2019). Sistema operativo linux: teoría y
práctica 2º edición. https://ria.utn.edu.ar/bitstream/handle/20.500.12272/3775/Sistema%20Operativo
%20Linux%202%C2%BAedicion.pdf?sequence=1&isAllowed=y
26
https://www.uv.mx/personal/rcarrera/programacion-de-sistemas/3-el-sistema-operativo-linux/4-
introduccion-a-gnulinux/
Sobell, M. (2013). A Practical Guide to Linux Commands, Editors and Shell Programming (Third
Edition). Ann Arbor,Michigan, EE.UU: Editorial Edward Brothers Malloy
https://www.cs.csubak.edu/~jstaggs/Books/Mark20G20Sobell2020Practical20Guide20to20Linux20Com
mands2C20Editors20and20Shell20Programming2020132C20Prentice20Hall.986049898.pdf
Ward, B. (2004). How Linux Works: What Every Super-User Should Know. San Francisco, EE.UU:
Editorial No Starch Press
https://www.cin.ufpe.br/~pjs/How_Linux_Works_(2004)%5BBrianWard%5D.pdf
Jones, M (2007) Anatomy of the Linux kernel. EEUU: IBM Articles from Developers
https://developer.ibm.com/articles/l-linux-kernel/
27