Está en la página 1de 28

Que es un sistema operativo

Es el software que permite la interacción entre el usuario y la maquina en este caso la


computadora, es el que coordina y dirige todos los servicios y aplicaciones que utiliza un usuario
el sistema operativo se hace cargo de controlar el hardware de la computadora además de
administrar los recursos de la misma y la ejecución de servicios de los programas que se instalen
en la computadora

Funciones de un sistema operativo


Gestionar la memoria para la ejecución de aplicaciones designando los recursos necesarios
Administrar la CPU por medio del algoritmo de programación
Gestionar la entrada y salida de datos que son ingresados y mostrados a través de los periféricos
Gestiona las autorizaciones de uso para los usuarios
Administra los archivos que se generen en la maquina

El sistema operativo como gestor de recursos

La computadora puede utilizar varios programas de uno o más usuarios a la vez pero el sistema
operativo es quien asigna los recursos que cada uno puede utilizar, el sistema operativo debe
garantizar la protección de los programas frente a otros y suministrar información del uso de los
recursos que hace cada uno
Asignación de recursos: el sistema operativo se encarga de gestionar recursos a los programas
ejecutados pero siempre sabiendo que cantidad de recursos tiene libres y cuales asigno a cada
programa, esta asignación se basa sabiendo la disponibilidad de recursos y la prioridad de los
programas.
El sistema operativo detectara cuando un programa deje de utilizar recursos ya que el mismo
programa se encarga de hacerle saber que ya no necesita los recursos que le había asignado.
Los recursos usados por el sistema operativo son de tipo físico y lógico, los físicos son el
procesador, la memoria principal y los periféricos y los lógicos son los archivos y los puertos de
comunicación.

Protección: El sistema operativo se encargara de garantizar la protección entre los usuarios,


impidiendo que se viole la confidencialidad de los archivos que cada uno maneja y que el uso de
recursos por pare de uno no interfieran con el uso de recursos del otro, logrando esto por medio
de la asignación de recursos evitando que uno no pueda usarlos recursos ya asignados a otro
Contabilidad: Esta parte permite medir la cantidad de recursos que usa cada programa durante su
ejecución, así podremos saber la carga de utilización que tienen los recursos, a este paso se le llama
monitorización y permite saber que tantos recursos usa cada usuario y así mismo asignarle.

El sistema operativo como maquina extendida para la ejecución de aplicaciones.


El sistema operativo ofrece a los programas un conjunto de servicios o llamadas de sistema, que los
programa pueden solicitar cuando lo necesiten, el modelo de programación que ofrece el hardware se
complementa con el software que permite cómoda y protegida mente ciertas operaciones.
Ejecución de programas: El sistema operativo contiene servicios que permiten lanzar un programa así
mismo que pararlo o abortarlo. También le permite cambiar la forma en que un programa se ejecuta y
así permitir la sincronización entre ellos.
Se puede definir que un proceso es un programa en ejecución, el proceso es un concepto fundamental
del sistema operativo, ya que los sistema operativos lo que hacen es crear, modificar, ejecutar y destruir
procesos todo por medio de las instrucciones de los usuarios.
Para que un programa pueda convertirse en un proceso debe traducirse en código máquina y guardado
en un dispositivo de almacenamiento como el disco duro; bajo la petición de un usuario el sistema
operativo creara un proceso que haga iniciar el programa, un proceso puede abrir un programa varias
veces si distintos usuarios lo solicitan al tiempo.

El sistema operativo como interfaz hombre maquina: El modulo del sistema operativo que permite
la interacción entre el usuario y el sistema se llama Shell que es el modulo encargado de interpretar los
mandatos
El Shell funciona por medio de un bucle infinito que siempre actúa de la misma manera, espera la
orden del usuario, si es una interfaz textual el Shell está pendiente de lo que el usuario escribe en la
línea de mandatos o comandos, si es en una interfaz gráfica el Shell está atento a lo que se seleccione
por medio del apuntador en este caso el mouse junto con los del teclado.
Después interpreta la orden y en caso de no encontrar ningún error ejecuta la misma por medio de los
servicios del sistema operativo
Y una vez terminada la orden vuelve al primer paso a estar esperando nuevas órdenes.
La comunicación con el sistema por medio de un Shell textual obliga al usuario a aprender la sintaxis
de los mandatos que dependiendo pueden ser diferentes unos de otros.
La década de 1940
A finales de la década de 1940, apareció lo que se podría considerar de la primera generación de
computadoras en el mundo. Se accedía directamente a la consola de la computadora desde la cual se
actuaba sobre una serie de micro interruptores que permitían introducir directamente el programa en la
memoria de la computadora.

La década de 1950 (Sistema Batch)


A principios de los años 1950 con el objetivo de facilitar la interacción entre persona y computadora,
los sistemas operativos hacen una aparición discreta y bastante simple, con conceptos tales como el
monitor residente y el almacenamiento temporal.

Monitor residente
Su funcionamiento era bastante simple, se limitaba a cargar programas a la memoria, leyéndolos de una
cinta o de tarjetas perforadas, y ejecutarlos. El problema era encontrar una forma de optimizar el
tiempo entre la retirada de un trabajo y el montaje del siguiente.

El primer Sistema Operativo de la historia fue creado en 1956 para un ordenador IBM 704, y
básicamente lo único que hacía era comenzar la ejecución de un programa cuando el anterior
terminaba.

Almacenamiento temporal
Su objetivo era disminuir el tiempo de carga de los programas, haciendo simultánea la carga del
programa o la salida de datos con la ejecución de la siguiente tarea. Para ello se utilizaban dos técnicas,
el buffering y el spooling.

La década de 1960
En los años 60 se produjeron cambios notorios en varios campos de la informática, con la aparición del
circuito integrado la mayoría orientados a seguir incrementando el potencial de los ordenadores. Para
ello se utilizaban técnicas de lo más diversas.

Sistema operativo multiprogramación


En un sistema "multiprogramado" la memoria principal alberga a más de un programa de usuario. La
CPU ejecuta instrucciones de un programa, cuando el que se encuentra en ejecución realiza una
operación de E/S; en lugar de esperar a que termine la operación de E/S, se pasa a ejecutar otro
programa. Si éste realiza, a su vez, otra operación de E/S, se mandan las órdenes oportunas al
controlador, y pasa a ejecutarse otro. De esta forma es posible, teniendo almacenado un conjunto
adecuado de tareas en cada momento, utilizar de manera óptima los recursos disponibles.

Tiempo compartido
Artículo principal: Tiempo compartido
En este punto tenemos un sistema que hace buen uso de la electrónica disponible, pero adolece la falta
de interactividad; para conseguirla debe convertirse en un sistema multiusuario, en el cual existen
varios usuarios con un terminal en línea, utilizando el modo de operación de tiempo compartido. En
estos sistemas igual que en la multiprogramación. Pero, a diferencia de ésta, cuando un programa lleva
cierto tiempo ejecutándose el sistema operativo lo detiene para que se ejecute otra aplicación.

Tiempo real
Estos sistemas se usan en entornos donde se deben aceptar y procesar en tiempos muy breves un gran
número de sucesos, en su mayoría externos al ordenador. Si el sistema no respeta las restricciones de
tiempo en las que las operaciones deben entregar su resultado se dice que ha fallado. El tiempo de
respuesta a su vez debe servir para resolver el problema o hecho planteado. El procesamiento de
archivos se hace de una forma continua, pues se procesa el archivo antes de que entre el siguiente, sus
primeros usos fueron y siguen siendo en telecomunicaciones.

Multiprocesador
Diseño que no se encuentran en ordenadores monoprocesador. Estos problemas derivan del hecho de
que dos programas pueden ejecutarse simultáneamente y, potencialmente, pueden interferirse entre sí.
Concretamente, en lo que se refiere a las lecturas y escrituras en memoria. Existen dos arquitecturas
que resuelven estos problemas:

La arquitectura NUMA, donde cada procesador tiene acceso y control exclusivo a una parte de la
memoria. La arquitectura SMP, donde todos los procesadores comparten toda la memoria. Esta última
debe lidiar con el problema de la coherencia de caché. Cada microprocesador cuenta con su propia
memoria caché local. De manera que cuando un microprocesador escribe en una dirección de memoria,
lo hace únicamente sobre su copia local en caché. Si otro microprocesador tiene almacenada la misma
dirección de memoria en su caché, resultará que trabaja con una copia obsoleta del dato almacenado.

Para que un multiprocesador opere correctamente necesita un sistema operativo especialmente


diseñado para ello. La mayoría de los sistemas operativos actuales poseen esta capacidad.
La década de 1970
Sistemas operativos desarrollados
Además del Atlas Supervisor y el OS/360, los años 1970 marcaron el inicio de UNIX, a mediados de
los 60 aparece Multics, sistema operativo multiusuario - multitarea desarrollado por los laboratorios
Bell de AT&T y Unix, convirtiéndolo en uno de los pocos SO escritos en un lenguaje de alto nivel. En
el campo de la programación lógica se dio a luz la primera implementación de Prolog, y en la
revolucionaria orientación a objetos, Smalltalk.

Inconvenientes de los Sistemas operativos


Se trataba de sistemas grandes, complejos y costosos, pues antes no se había construido nada similar y
muchos de los proyectos desarrollados terminaron con costos muy por encima del presupuesto y mucho
después de lo que se marcaba como fecha de la finalización. Además, aunque formaban una capa entre
el hardware y el usuario, éste debía conocer un complejo lenguaje de control para realizar sus trabajos.
Otro de los inconvenientes es el gran consumo de recursos que ocasionaban, debido a los grandes
espacios de memoria principal y secundaria ocupados, así como el tiempo de procesador consumido. Es
por esto que se intentó hacer hincapié en mejorar las técnicas ya existentes de multiprogramación y
tiempo compartidos .

Sistemas operativos desarrollados


MULTICS (Multiplexed Information and Computing Service)
BDOS (Basic Disk Operating System): Traductor de las instrucciones en llamadas a la BIOS.
CP/M: (Control Program for Microcomputers) fue un sistema operativo desarrollado por Gary Kildall
para el microprocesador Intel 8080 (los Intel 8085 y Zilog Z80 podían ejecutar directamente el código
del 8080, aunque lo normal era que se entregara el código recompilado para el microprocesador de la
máquina). Se trataba del sistema operativo más popular entre las computadoras personales en los años
70. Aunque fue modificado para ejecutarse en un IBM PC, el hecho que IBM eligiera MS-DOS, al
fracasar las negociaciones con Digital Research, hizo que el uso de CP/M disminuyera hasta hacerlo
desaparecer. CP/M originalmente significaba Control Program/Monitor. Más tarde fue renombrado a
Control Program for Microcomputers. En la época, la barra inclinada (/) tenía el significado de
"diseñado para". No obstante, Gary Kildall redefinió el significado del acrónimo poco después. CP/M
se convirtió en un estándar de industria para los primeros micro-ordenadores.
La década de 1980
Con la creación de los circuitos LSI (integración a gran escala), chips que contenían miles de
transistores en un centímetro cuadrado de silicio, empezó el auge de los ordenadores personales. En
éstos se dejó un poco de lado el rendimiento y se buscó más que el sistema operativo fuera amigable,
surgiendo menús, e interfaces gráficas. Esto reducía la rapidez de las aplicaciones, pero se volvían más
prácticos y simples para los usuarios. En esta época, siguieron utilizándose lenguajes ya existentes,
como Smalltalk o C, y nacieron otros nuevos, de los cuales se podrían destacar: C++ y Eiffel dentro del
paradigma de la orientación a objetos, y Haskell y Miranda en el campo de la programación
declarativa. Un avance importante que se estableció a mediados de la década de 1980 fue el desarrollo
de redes de computadoras personales que corrían sistemas operativos en red y sistemas operativos
distribuidos. En esta escena, dos sistemas operativos eran los mayoritarios: MS-DOS (Micro Soft Disk
Operating System), escrito por Microsoft para IBM PC y otras computadoras que utilizaban la CPU
Intel 8088 y sus sucesores, y UNIX, que dominaba en los ordenadores personales que hacían uso del
Motorola 68000.

SunOS
Artículo principal: SunOS
SunOS fue la versión del sistema operativo derivado de Unix y BSD desarrollado por Sun
Microsystems para sus estaciones de trabajo y servidores hasta el principio de los años 1990. Ésta
estaba basada en los UNIX BSD con algunos añadidos de los System V UNIX en versiones posteriores.

SunOS 1.0 estaba basada básicamente en BSD 4.1 y se publicó en 1982. SunOS 2.0, que salió en 1985,
usaba BSD 4.2 como una base e introducía una capa de sistema de ficheros virtual (VFS) y el protocolo
NFS. SunOS 3.0 coincidía con el lanzamiento de la serie Sun-3 en 1986 e incorporaba varias utilidades
de System V. SunOS 4.0, que salió en 1989, migró a la base de BSD 4.3, introdujo un nuevo sistema de
memoria virtual, enlazamiento dinámico y una implementación de la arquitectura System V
STREAMS I/O.

SunOS 5.0 y las versiones posteriores están basadas en UNIX System V Release 4.

MS-DOS
Artículo principal: MS-DOS
En 1981 Microsoft compró un sistema operativo llamado QDOS que, tras realizar unas pocas
modificaciones, se convirtió en la primera versión de MS-DOS (Micro Soft Disk Operating System). A
partir de aquí se sucedieron una serie de cambios hasta llegar a la versión 7.1, versión 8 en Windows
Milenium, a partir de la cual MS-DOS dejó de existir como un componente del Sistema Operativo.

En 1983, con la aparición de los ordenadores MSX, se realizó una adaptación para este sistema que
utilizaba el procesador Z-80 llamada MSX-DOS. Era un cruce entre la versión MS-DOS 1.25 y CP/M.
En 1988, una vez que Microsoft se desvinculó de proyecto, ASCII Corporation publicó la versión
MSX-DOS 2.0 que añadió, entre otras cosas, soporte para el uso de directorios.

Macintosh
Artículo principal: Macintosh
El lanzamiento oficial del ordenador Macintosh en enero de 1984, al precio de US $1,995 (después
cambiado a $2,495 dólares)[1]. Incluía su sistema operativo Mac OS cuya características novedosas era
una GUI (Graphic User Interface), Multitareas y Mouse. Provocó diferentes reacciones entre los
usuarios acostumbrados a la línea de comandos y algunos tachando el uso del Mouse como juguete.

AmigaOS
Artículo principal: AmigaOS
AmigaOS es el nombre que recibe el conjunto de la familia de gestores de ventanas y ROMs que
incluían por defecto los ordenadores personales Commodore Amiga como sistema operativo. Fue
desarrollado originalmente por Commodore International, e inicialmente presentado en 1985 junto con
el Amiga 1000.

OS/2
Artículo principal: OS/2
OS/2 es un sistema operativo de IBM que intentó suceder a DOS como sistema operativo de las
computadoras personales. Se desarrolló inicialmente de manera conjunta entre Microsoft e IBM, hasta
que la primera decidió seguir su camino con su Windows e IBM se ocupó en solitario de OS/2.

OS/2 ya no es comercializado por IBM, y el soporte estándar de IBM para OS / 2 se suspendió el 31 de


diciembre de 2006. Se ha mantenido desde entonces con relativamente pocas nuevas características
bajo el nombre eComStation.

La década de 1990
BeOS
Artículo principal: BeOS
BeOS es un sistema operativo para PC desarrollado por Be Incorporated en 1990, orientado
principalmente a proveer alto rendimiento en aplicaciones multimedia. A pesar de la creencia común
fomentada por la inclusión de la interfaz de comandos Bash en el sistema operativo, el diseño de BeOS
no estaba basado en UNIX.

Originalmente (1995-1996) el sistema operativo se corría sobre su propio hardware, conocido como
BeBox. Más tarde (1997) fue extendido a la plataforma PowerPC y finalmente (1998) se añadió
compatibilidad con procesadores x86.

GNU/Linux
Artículo principal: GNU/Linux
Este sistema al parecer es una versión mejorada de Unix, basado en el estándar POSIX, un sistema que
en principio trabajaba en modo comandos. Hoy en día dispone de Ventanas, gracias a un servidor
gráfico y a gestores de ventanas como GNOME, KDE entre muchos. Recientemente GNU/Linux
dispone de un aplicativo que convierte las ventanas en un entorno 3D como por ejemplo Beryl o
Compiz. Lo que permite utilizar Linux de una forma visual atractiva.

Existen muchas distribuciones actuales de Gnu/Linux (Debian, Fedora, Ubuntu, Slackware, etc.) donde
todas ellas tienen en común que ocupan el mismo núcleo Linux. Dentro de las cualidades de Gnu/Linux
se puede caracterizar el hecho de que la navegación a través de la web es sin riegos de ser afectada por
virus, esto debido al sistema de permisos implementado, el cual no deja correr ninguna aplicación sin
los permisos necesarios, permisos que son otorgados por el usuario. A todo esto se suma que los virus
que vienen en dispositivos desmontables tampoco afectan al sistema, debido al mismo sistema de
permisos.

Solaris
Artículo principal: Solaris (sistema operativo)
Solaris es un sistema operativo de tipo Unix desarrollado desde 1992 inicialmente por Sun
Microsystems y actualmente por Oracle Corporation como sucesor de SunOS. Es un sistema
certificado oficialmente como versión de Unix. Funciona en arquitecturas SPARC y x86 para
servidores y estaciones de trabajo.

Microsoft Windows NT
Artículo principal: Windows NT
Windows NT es una familia de sistemas operativos producidos por Microsoft, de la cual la primera
versión fue publicada en julio de 1993.
Previamente a la aparición del famoso Windows 95 la empresa Microsoft concibió una nueva línea de
sistemas operativos orientados a estaciones de trabajo y servidor de red. Un sistema operativo con
interfaz gráfica propia, estable y con características similares a los sistemas de red UNIX. Las letras NT
provienen de la designación del producto como "Tecnología Nueva" (New Technology).

Las versiones publicadas de este sistema son: 3.1, 3.5, 3.51 y 4.0. Además, Windows NT se distribuía
en dos versiones, dependiendo de la utilidad que se le fuera a dar: Workstation para ser utilizado como
estación de trabajo y Server para ser utilizado como servidor.

FreeBSD
Artículo principal: FreeBSD
FreeBSD es un sistema operativo multiusuario, capaz de efectuar multitarea con apropiación y
multiproceso en plataformas compatibles con múltiples procesadores; el funcionamiento de FreeBSD
está inspirado en la variante 4.4 BSD-Lite de UNIX. Aunque FreeBSD no puede ser propiamente
llamado UNIX, al no haber adquirido la debida licencia de The Open Group, FreeBSD sí está hecho
para ser compatible con la norma POSIX, al igual que varios otros sistemas "clones de UNIX".

El sistema FreeBSD incluye el núcleo, la estructura de ficheros del sistema, bibliotecas de la API de C,
y algunas utilidades básicas. La versión 6.14trajo importantes mejoras como mayor apoyo para
dispositivos Bluetooth y controladores para tarjetas de sonido y red.

La versión 7.0, lanzada el 27 de febrero de 2008, incluye compatibilidad con el sistema de archivos
ZFS de Sun y a la arquitectura ARM, entre otras novedades.

La distribución más notable es PC-BSD.

Microsoft Windows
Artículo principal: Microsoft Windows
Windows es el nombre de una familia de sistemas operativos desarrollados y vendidos por Microsoft
basado en MS-DOS. Windows nunca fue realmente un Sistema Operativo con verdadero entorno
gráfico hasta Windows 95. Hasta la versión 3.11 Windows fue un entorno de escritorio para MS-DOS.
Windows 95 es un sistema operativo con interfaz gráfica de usuario híbrido de entre 16 y 32 bits. Fue
lanzado al mercado el 24 de agosto de 1995 por la empresa de software Microsoft con notable éxito de
ventas. Durante su desarrollo se conoció como Windows 4 o por el nombre clave Chicago. Esta serie
de Windows terminó con Windows Me.

ReactOS
Artículo principal: ReactOS
ReactOS (React Operating System) es un sistema operativo de código abierto destinado a lograr la
compatibilidad binaria con aplicaciones de software y controladores de dispositivos hechos para
Microsoft Windows NT versiones 5.x en adelante (Windows XP y sus sucesores).

En 1996 un grupo de programadores y desarrolladores de software libre comenzaron un proyecto


llamado FreeWin95 el cual consistía en implementar un clon de Windows 95. El proyecto estuvo bajo
discusión por el diseño del sistema ya habiendo desarrollado la capa compatible con MS-DOS, pero
lamentablemente esta fue una situación que no se completó. Para 1997 el proyecto no había lanzado
ninguna versión, por lo que los miembros de éste, coordinados por Jason Filby, pudieron revivirlo. Se
decidió cambiar el núcleo del sistema compatible con MS-DOS y de ahora en adelante basarlo en uno
compatible con Windows NT, y así el proyecto pudo seguir adelante con el nombre actual de ReactOS,
que comenzó en febrero de 1998, desarrollando las bases del kernel y algunos drivers básicos.

FreeDOS
Artículo principal: FreeDOS
FreeDOS es un proyecto que aspira a crear un sistema operativo libre que sea totalmente compatible
con las aplicaciones y los controladores de MS-DOS.

El programa ya ha alcanzado un alto grado de madurez y tiene algunas características que no existían
en MS-DOS. Algunos comandos de FreeDOS son idénticos o mejores que sus equivalentes de MS-
DOS, pero aún faltan algunos del sistema operativo original.

El intérprete de línea de comandos usado por FreeDOS se llama FreeCOM.

La década de 2000
SymbOS
Artículo principal: SymbOS
SymbOS es un sistema operativo desarrollado originalmente en 2001 para los ordenadores Amstrad
CPC. Se trata de un sistema operativo gráfico con una estética e interfaz similar a Windows 95. A pesar
de la baja potencia que desarrollan estos ordenadores, alrededor de 4MHz, está minuciosamente
optimizado para el hardware en el cual funciona, por lo que el rendimiento es más que aceptable.

Debido a su cuidada programación modular, ha sido migrado posteriormente a los ordenadores MSX,
Amstrad PCW y Enterprise 128 que, con versiones adaptadas y recompiladas en cada caso, son capaces
de ejecutar las mismas aplicaciones sin modificación alguna.

Aunque parezca un sistema obsoleto, existe una extensa comunidad implicada en el proyecto. Los
programadores originales continúan actualizando y dando soporte al sistema en la actualidad.

SymbOS es un claro ejemplo de software optimizado, de tal manera que con un mínimo hardware se
obtienen prestaciones similares a otros grandes sistemas operativos actuales. Esto lo convierte en el
antagonista de los modernos sistemas operativos, que derrochan la mayor parte de los recursos
apoyándose en la alta potencia del hardware actual.

MorphOS
Artículo principal: MorphOS
MorphOS es un sistema operativo, en parte propietario y en parte de código abierto, producido para
ordenadores basados en los procesadores PowerPC (PPC). El sistema operativo en sí es propietario,
pero muchas de sus bibliotecas y otros componentes son de código abierto, como Ambient (la interfaz
del escritorio). La mariposa azul es el logo característico de este sistema operativo. Está basado en el
Micronúcleo de Quark.

Darwin
Artículo principal: Darwin (sistema operativo)
Darwin es el sistema que subyace en Mac OS X, cuya primera versión final salió en el año 2001 para
funcionar en computadoras Macintosh.

Integra el micronúcleo XNU y servicios de sistema operativo de tipo UNIX basados en BSD 4.4 (en
particular FreeBSD) que proporcionan una estabilidad y un rendimiento mayor que el de versiones
anteriores de Mac OS. Se trata de una evolución del sistema operativo NEXTSTEP (basado en Mach
2.5 y código BSD 4.3) desarrollado por NeXT en 1989 comprado por Apple Computer en diciembre de
1996.
Darwin proporciona al Mac OS X prestaciones modernas, como la memoria protegida, la multitarea por
desalojo o expulsiva, la gestión avanzada de memoria y el multiproceso simétrico.

Mac OS
Artículo principal: OS X
mac OS, antes llamado Mac OS X, es un sistema operativo basado en Unix, desarrollado,
comercializado y vendido por Apple Inc.

La primera versión del sistema fue Mac OS X Server 1.0 en 1999, y en cuanto al escritorio, fue Mac
OS X v10.0 «Cheetah» (publicada el 24 de marzo de 2001).

La variante para servidores, Mac OS X Server, es arquitectónicamente idéntica a su contraparte para


escritorio, además de incluir herramientas para administrar grupos de trabajo y proveer acceso a los
servicios de red. Estas herramientas incluyen un servidor de correo, un servidor Samba, un servidor
LDAP y un servidor de dominio entre otros.

Haiku
Artículo principal: Haiku (sistema operativo)
Haiku es un sistema operativo de código abierto actualmente en desarrollo que se centra
específicamente en la informática personal y multimedia. Inspirado por BeOS (Be Operating System),
Haiku aspira a convertirse en un sistema rápido, eficiente, fácil de usar y fácil de aprender, sin
descuidar su potencia para los usuarios de todos los niveles.

OpenSolaris
Artículo principal: OpenSolaris
OpenSolaris fue un sistema operativo libre publicado en 2005 a partir de la versión privativa de Solaris
de Sun Microsystems, ahora parte de Oracle Corporation. OpenSolaris es también el nombre de un
proyecto iniciado en 2005 por Sun para construir y desarrollar una comunidad de usuarios alrededor de
las tecnologías del sistema operativo del mismo nombre. Después de la adquisición de Sun
Microsystems, en agosto de 2010, Oracle decidió interrumpir la publicación y distribución de
OpenSolaris, así como su modelo de desarrollo, basado en la disponibilidad de versiones de desarrollo
compiladas cada dos semanas y versiones estables cada seis meses. Sin embargo, los términos de su
licencia libre no han sido modificados, por lo que el código fuente afectado por ella será publicado
cuando Oracle publique nuevas versiones de Solaris.

La década de 2010
IllumOS
Artículo principal: Illumos
Illumos es un proyecto de software libre derivado de OpenSolaris. Fue anunciado por conferencia web
desde Nueva York el 3 de agosto de 2010. El nombre del proyecto es un neologismo procedente del
latín "Illum" (la luz) y de "OS" (operating system, sistema operativo).

Se trata del código base a partir del cual cualquiera podrá crear su propia distribución de software
basada en el sistema operativo OpenSolaris. Pero Illumos no es una distribución, ni una bifurcación
(fork), al menos por el momento, en la medida que no pretende separarse del tronco principal, sino un
derivado de la "consolidación" OS/Net (más conocida como ON), que consiste básicamente en el
código fuente del kernel (SunOS), los drivers, los servicios de red, las bibliotecas del sistema y los
comandos básicos del sistema operativo.

OpenIndiana
Artículo principal: Openindiana
OpenIndiana es un sistema operativo tipo Unix liberado como software libre y de código abierto. Es
una bifurcación de OpenSolaris concebida después de la compra de Sun Microsystems por parte de
Oracle y tiene como objetivo continuar con el desarrollo y la distribución del código base de
OpenSolaris. El proyecto opera bajo el patrocinio de la Illumos Foundation (Fundación Illumos). El
objetivo declarado del proyecto es convertirse en la distribución de OpenSolaris de facto instalada en
servidores de producción donde se requieren soluciones de seguridad y errores de forma gratuita.
Linux, es un sistema operativo. Es una implementación de libre distribución UNIX para computadoras
personales (PC), servidores y estaciones de trabajo.

Linux (pronunciación IPA: /´linuks/) es la denominación de un sistema operativo tipo-Unix y el


nombre de un núcleo.
Es uno de los paradigmas más prominentes del software libre y del desarrollo del código abierto, cuyo
código fuente está disponible públicamente, para que cualquier persona puede libremente usarlo,
estudiarlo, redistribuirlo y, con los conocimientos informáticos adecuados, modificarlo.

Linux es usado como sistema operativo en una amplia variedad de plataformas de hardware y
computadores, incluyendo los computadores de escritorio (PCs x86 y x86-64, y Macintosh y
PowerPC), servidores, supercomputadores, mainframes, y dispositivos empotrados así como teléfonos
celulares.

En 1983 Richard Stallman fundó el proyecto GNU, con el fin de crear sistemas operativos parecidos a
UNIX y compatibles con POSIX. Dos años más tarde creó la "Fundación del Software Libre" y
escribió la GNU General Public License para posibilitar el software libre en el sistema de copyright.

El software GNU se extendía muy de prisa y dentro de poco una multitud de programas fueron escritos,
de manera que ya a principios de 1990 había bastantes software GNU como para hacer un sistema
operativo propio, pero faltaba el Kernel.
A principios de los años 1990, no había un sistema operativo libre completo. A pesar de que el
proyecto GNU era desarrollado constantemente, no disponía sin embargo de ningún buen Kernel
basado en UNIX, por el contrario era un número de proyectos de software libres que podían ser
traducidos en las variantes UNIX mediante el compilador de GNU.

LINUS BENEDIT TORVALD


Linus Benedit Torvalds nació en Helsinki, Finlándia, en el año de 1969.
Su abuelo, matemático y estadista le compró un Comodore en 1980 y fue quien "enganchó" a Linus al
mundo de los computadores.

En 1988 Linus Torvalds entrá a la Universidad. Ese mismo año fue cuando el sistema operativo
didáctico, basado en UNIX y creado por Andy Tannenbaum, empezó a cobrar importáncia. Dicho
sistema era el Minix.
Linus entró a formar parte de la comunidad de usuarios Minix. Andy Tannenbaum cometió un error en
su sistema operativo. Era demasiado limitado, tanto técnicamente como politícamente, en ningún
momento tuvo en cuenta la posibilidad de incluir Minix al proyecto GNU. La creación de Andy
Tannenbaum estaba pensando para ser distribuida. Su primer error fue ceder todos sus derechos a
Prentice Hall, que empezó a cobrar 150 dólares por licencia.

Así, Linus tomó la decisión de cambiar esta política debido a que el sistema Minix era ideal para los
estudiantes de sistemas operativos, y su precio era considerablemente alto.

Año 1991, cuando Linus se acabó de comprar su primer 386, la intención era crear un nuevo Kernel (al
que porteriormente llamaría Linux) de UNIX basado en el Kernel de Minix y modificarlo
periódicamente de manera que fuera capaz de ejecutar aplicaciones GNU.

La historia de Linux está fuertemente vinculada a la del proyecto GNU.


Hacia 1991, cuando la primera versión del núcleo Linux fue liberada, el proyecto GNU había
producido varios de los componentes del sistema operativo, incluyendo un intérprete de comandos, una
biblioteca C y un compilador, pero aún no contaba con el núcleo que permitiera complementar el
sistema operativo.
Entonces, el núcleo creado por Linus Torvalds, llenó el hueco final que el sistema operativo GNU
exigía.

Linus nunca anunció la versión 0.01 de Linux (agosto 1991), esta versión no era ejecutable, solamente
incluía los principios del nucleo del sistema, estaba escrita en lenguaje ensamblador y asumía que uno
tenía acceso a un sistema Minix para su compilación.

El 5 de octubre de 1991, Linus anuncio la primera versión "Oficial" de Linux, - versión 0.02.
Con esta versión Linus pudo ejecutar Bash (GNU Bourne Again Shell) y gcc (Compilador GNU de C)
pero no mucho mas funcionaba. En este estado de desarrollo ni se pensaba en los terminos soporte,
documentacion, distribución. Después de la versión 0.03, Linus salto en la numeración hasta la 0.10,
más programadores a lo largo y ancho del internet empezaron a trabajar en el proyecto y después de
revisiones, Linus incremento el numero de version hasta la 0.95 (marzo 1992). En Diciembre de 1993
el nucleo del sistema estaba en la versión 0.99 y la versión 1.0, llego el 14 de marzo de 1994.
Linux se refiere estrictamente al núcleo Linux, pero es comúnmente utilizado para describir al sistema
operativo tipo Unix (que implementa el estándar POSIX), que utiliza primordialmente filosofía y
metodologías libres (también conocido como GNU/Linux) y que está formado mediante la
combinación del núcleo Linux con las bibliotecas y herramientas del proyecto GNU y de muchos otros
proyectos/grupos de software (libre o no libre).
La expresión "Linux" es utilizada para referirse a las distribuciones GNU/Linux, colecciones de
software que suelen contener grandes cantidades de paquetes además del núcleo. El software que
suelen incluir consta de una enorme variedad de aplicaciones, como: entornos gráficos, suites
ofimáticas, servidores web, servidores de correo, servidores FTP, etcétera. Coloquialmente se aplica el
término "Linux" a éstas. Algunas personas opinan que es incorrecto denominarlas distribuciones Linux,
y proponen llamarlas sistema GNU/Linux. Otras personas opinan que los programas incluidos
proceden de fuentes tan variadas que proponen simplificarlo denominándolo simplemente a "Linux"
Estrucutura de Linux
Estructura del sistema de archivos de Linux, el cual se organiza por medio de directorios, que pueden
contener subdirectorios según una jerarquía, tal como se muestra en los directorios bajo el directorio
raíz que están en azul. Fuente: Elaboración del autor. Cabe agregar que la estructura incluye una
interfaz de llamadas de alto nivel, asociada a modo usuario. Esta interfaz pasa a la fase de validación de
argumentos de las llamadas al sistema, quien conmuta con los sistemas de archivos. Posteriormente, se
genera una serie de tareas propias del sistema operativo, como la del manejador de memoria y
procesos, manejador de archivos (sistema de archivos), manejador de buffer de caché y manejador de
terminales, los cuales se comunican con la interfaz de sockets, streams y pila de red. Los manejadores
citados se conectan con las bibliotecas del kernel, que a la vez están subdivididas en los manejadores de
callouts, las estructuras del núcleo y las estructuras de datos compartidas entre el nivel alto y bajo del
kernel. Cada una de estas partes cumple funciones específicas dentro del sistema operativo como son
las llamadas al sistema y los mecanismos de control de acceso por parte de los procesos a los recursos
del SO, todos ellos relacionados con los manejadores de dispositivo.
A continuación daré una breve reseña sobre ellos:

Directorio raíz donde se encuentran todos los directorios y archivos de una manera lógica.

/bin

En este directorio podemos encontrar todos los archivos ejecutables del sistema. En el están muchos de
los comandos que usamos habitualmente como por ejemplo ls, cat, more, cp, tar … además de los de
tus programas.
/home

Aquí se encuentran todos los archivos de los usuarios del sistema. Si mi nombre de usuario es kiefer
seria /home/kiefer

/media

Generalmente aquí es donde se montan los Cds y Dvds además de los SticksUSB y discos duros
externos.

/sbin

Contiene archivos ejecutables que por lo general son comandos usados para la administración del
sistema. Los comandos mount, halt, umount y shutdown son algunos de ellos.

/usr

Contiene varios archivos y subdirectorio importantes como pueden ser las configuraciones del entorno
grafico X, fuentes del kernel, librerias, juegos y un largo etc.

/boot

Todos los archivos necesarios para el arranque incluidos el cargador Grub y los kernels disponibles.

/mnt

Directorio vacío, normalmente se suele usar para montajes de unidades temporales que deseamos
cargar en ese momento.
/var

Contiene varios archivos que definen el sistema así como archivos log que almacenan cada movimiento
del sistema como por ejemplo el fichero /var/log/messages.

/cdrom

Normalmente es un enlace simbólico hacia /media/cdrom

/dev

Aquí es donde están todos los drivers y los dispositivos, estos se identifican en forma de archivo.

/lib

Contiene librarias para C y otros lenguajes de programación.

/proc

Directorio que contiene información sobre diferentes partes del sistema, cpu, discos, tiempo uptime,
irqs, memoria, etc …

/opt

En este directorio se suelen almacenar todos los archivos de una instalación fuera de los repositorios
como puede ser cuando instalamos un .deb

/etc
Contiene prácticamente todos los archivos de configuración del equipo y los demonios de inicio en
/etc/init.d entre otras cosas.

/lost+found

Directorio especifico para archivos perdidos. Cada partición tiene el suyo propio independientemente.

/root

Directorio particular del superusuario del sistema ( root )

/tmp

Directorio temporal que pueden usar todos los usuarios para archivos temporales y del sistema.

Gestion de procesos de Linux


Un proceso en Linux es, en resumen, un programa en ejecución. Un proceso puede crear a
su vez otros procesos. Al proceso que genera otro proceso se le llama proceso padre. Al
proceso generado por otro proceso se le llama proceso hijo. Los procesos pueden ser padres
e hijos y además, varios procesos pueden ser hijos del mismo padre a la vez. Veamos un
ejemplo.
El terminal o consola es un proceso, ya que se trata de un programa que ejecutamos. Si en el
terminal escribimos, por ejemplo, el comando “ls -l”, se estaría generando un nuevo proceso
que sería proceso hijo del terminal. En este caso el shell sería el proceso padre y el comando
“ls -l” sería el proceso hijo.
Trabajando con procesos. El comando ps.
El comando ps proporciona información sobre los procesos que se están ejecutando en el
sistema. Si escribimos en el terminal “ps”, obtendremos como salida un listado de los
procesos lanzados con el usuario actual que aún se están ejecutando.
Veamos qué significan cada una de las columnas que se muestran cuando ejecutamos el
comando ps.
 La primera columna es el PID o identificador de proceso. Cada proceso tiene un
asociado identificador que es único, es decir que no puede haber dos procesos con el
mismo identificador.
 La segunda columna nos informa del terminal en el que se está ejecutando el
proceso. Si aparece una interrogación (?), el proceso no tiene asociada ninguna
terminal.
 La tercera columna indica el tiempo total que ha estado ejecutándose el proceso.
 La cuarta columna es el nombre del proceso.
En la imagen anterior observamos que hay dos procesos corriendo: el bash, que es el shell o
intérprete de comandos, y el comando ps.
El comando ps admite algunos parámetros/modificadores:
-e devuelve un listado de todos los procesos que se están ejecutando.
-f devuelve un listado extendido. En este último caso veremos en pantalla el PPID del
proceso (identificador del proceso padre) y la hora en la que se ejecutó el proceso (STIME).
2
-ef obtendríamos un listado extendido de todos los procesos que se están ejecutando en el
sistema.
-u informa de los procesos lanzado por un determinado usuario. De tal forma que si
escribimos “ps -u alex”, aparecerá un listado de los procesos que está ejecutando el usuario
alex.
El comando pstree
El comando pstree visualiza, en forma de árbol, todos los procesos del sistema. Así podemos
ver las relaciones que existen entre los procesos.
El comando top
El comando top devuelve un listado de los procesos de forma parecida a como lo hace ps,
con la diferencia que la información mostrada se va actualizando periódicamente lo que nos
permite ver la evolución del estado de los procesos. Además, en la parte superior muestra
información adicional, como el espacio en memoria ocupado por los procesos, el espacio
ocupado por la memoria de intercambio o swap, el número total de tareas o procesos que se
están ejecutando, el número de usuarios o el porcentaje de uso del procesador.
3
Aunque el tema de las prioridades de los procesos lo trataremos más adelante, mientras el
comando top está en marcha podremos cambiar fácilmente la prioridad de los procesos. A
modo de resumen cada proceso en Linux tiene un nivel de prioridad que va de -20 (prioridad
más alta) hasta 20 (prioridad más baja). Cuanto mayor sea el nivel de prioridad, más
lentamente se ejecutará el proceso. ¿Y cómo podemos cambiar con top la prioridad de un
proceso? Muy sencillo. Con el comando top en marcha pulsamos la tecla „r‟. A continuación
introducimos el PID del proceso al que vamos a cambiar la prioridad, y acto seguido el nivel
de prioridad que vamos a asignar. Debemos tener en cuenta una consideración, solamente el
superusuario „root‟ puede asignar valores negativos a la prioridad de un proceso.
Procesos en primer plano y segundo plano
Los procesos pueden ejecutarse en primer plano o segundo plano. El proceso que está en
primer plano es aquel con el que se interactúa. Si ejecutamos, por ejemplo, el comando ls -l,
se mostrará por pantalla el resultado, y hasta que no acabe de mostrarse el listado no
podremos ejecutar ningún otro comando. En este caso el terminal permanece bloqueado, sin
poder introducir ningún otro comando, hasta que el proceso en primer plano termine.
Pondremos un proceso en segundo plano añadiendo el símbolo ampersand (&) al final del
comando. Cuando se ejecuta un proceso en segundo plano, se permite al usuario iniciar y
trabajar con otros procesos. Ejemplo:
$ sleep 10 &
El comando sleep simplemente espera el número de segundos que le pasemos como
parámetro.
4
En la imagen anterior se observa que al ejecutar un proceso en segundo plano se devuelve
un número entre corchetes seguido de otro número. El número entre corchetes indica el
número de procesos que se tienen ejecutándose en segundo plano. El segundo número es el
PID o identificador del proceso.
Para ver que trabajos se están ejecutando en segundo plano, se usa el comando jobs.
El signo + seguido del número de trabajo entre corchetes indica el trabajo más reciente que
se está ejecutando. El signo menos indica el siguiente trabajo más reciente.
Pasar procesos en segundo plano a primer plano
Para pasar procesos en segundo plano a primer plano, se utiliza el comando fg, seguido de
%n, donde n es el número de proceso que queremos pasar a primer plano. Por ejemplo, fg
%1 pondría en primer plano la tarea número 1. En la siguiente imagen se ejecuta sleep 80 en
segundo plano, y después pasa a primer plano con el comando fg.
Pasar procesos en primer plano a segundo plano
El comando bg permite pasar procesos desde primer plano a segundo plano. Para pasar un
proceso que se encuentra en primer plano a segundo plano, debemos suspenderlo primero
utilizando la combinación de teclas Ctrl+Z. Cuando se pulsa esa combinación de teclas, el
proceso en ejecución se para y no vuelve a ejecutarse hasta que se pasa a primer o segundo
plano. Con bg pasaremos el proceso a segundo plano.
5
Cambiando la prioridad de los procesos
Como anteriormente se ha comentado antes, cada proceso en Linux tiene un nivel de
prioridad que oscila entre -20 (prioridad más alta) y 20 (prioridad más baja). Cuanto mayor
sea el nivel de prioridad, más lentamente se ejecutará el proceso. Solamente el
superusuario ‘root’ puede asignar valores negativos a la prioridad de un proceso.
Para asignar determinada prioridad a un proceso en concreto se utiliza el comando nice.
nice prioridad proceso
Podemos cambiar la prioridad de un proceso con el comando renice. Este comando admite
los siguientes parámetros/modificadores:
 -g. Establece el nivel de prioridad de los procesos ejecutados por los miembros del
grupo especificado.
-u. Establece el nivel de prioridad de los procesos ejecutados por los miembros del
Usuario especificado.
-p. Indica el nivel de prioridad para el proceso especificado.
Finalizar procesos
Para finalizar un proceso se utiliza el comando kill, que tiene la siguiente sintaxis:
kill [parámetro] PID
Si, por ejemplo, queremos eliminar un proceso con PID 17122, tendríamos que escribir: kill
17122.Puede que en ocasiones el proceso no finalice al emplear el comando kill sin
parámetros. Para matar un proceso asegurándonos de que no ignorará la petición de finalizar
su ejecución se emplea el parámetro -9.
kill -9 17122
Hay un total de 32 señales que se pueden enviar a los procesos. Las más utilizadas son las
Siguientes:
kill -1 (Sighup). Reinicia el proceso.
kill -9 (SigKill). Mata el proceso.
kill -15 (SigTerm). Termina el proceso.
Por otra parte, el comando killall nombre_programa finaliza todos los procesos que estén
Ejecutando el programa.

Gestión de memoria de Linux


Linux soporta las características de Memoria Virtual (virtual memory). Esto significa usar un disco
como una extensión de la memoria RAM, de forma tal que el tamaño efectivo de memoria utilizable
crezca considerablemente. El kernel se encarga de escribir el contenido de un bloque de memoria que
no está siendo utilizado al disco rígido de forma que esta porción de memoria quede disponible para
otro propósito. Cuando los bloques originales vuelven a ser requeridos, son leídos y colocados
nuevamente en memoria. Todo esto es realizado en forma completamente transparente para el usuario.
Los programas ejecutados bajo Linux solo ven una gran cantidad de memoria disponible y no saben
que parte de ellos reside en el disco en un momento dado. Por supuesto que leer y escribir en el disco es
mucho mas lento que utilizar la memoria real (en el orden de 1000 veces mas lento), Por lo que los
programas se tornan mucho mas lento también. La parte del disco que es usado como memoria virtual
se llama área de swap (swap space).

Linux puede utilizar tanto un archivo normal en el sistema de archivos como una partición separada del
disco como área de swap. Una partición swap es mucho mas rápida, pero es mucho mas fácil cambiar
el tamaño del área de swap si este es un archivo (y no hay necesidad de particionar el disco rígido
entero, y posiblemente instalar todo desde cero). Cuando se conoce la cantidad de espacio swap que se
necesita, es más indicado optar por una partición swap. Pero si no se está seguro de la cantidad de
espacio que se necesita, se puede crear primero un archivo swap, probar el sistema hasta que se esté
seguro del tamaño necesario, y luego construir una partición con dicho tamaño.

Cabe señalar que Linux permite también usar una o varias particiones de swap y/o archivos de swap al
mismo tiempo. Esto significa que si ocasionalmente se necesita una cantidad adicional de espacio
swap, se puede crear un archivo de swap extra para ese momento especial, en lugar de mantener una
partición con todo ese espacio necesario en forma permanente.

Una nota sobre la terminología en Sistema Operativo: La ciencia de la computación distingue


habitualmente entre la palabra swapeado o "swaping" (escribir el proceso entero al área de swap) y
paginado (escribir solo porciones fijas de memoria, generalmente unos pocos kilobytes, por vez). El
paginado generalmente es mas eficiente y es lo que hace Linux, aunque de todos modos en la
terminología Linux se dice Swapeo o "swapping"

Entrada y salida
Decíamos que un descriptor de fichero es un nombre lógico que se asocia a un fichero, y que es
necesario resolver esta asociación para que cuando se ejecuta una llamada read() o write() la operación
se realice satisfactoriamente.

Vimos que la biblioteca estándar establece los nombres stdin, stdout y stderr para los descriptores de
entrada estándar, salida estándar y salida estándar de errores, respectivamente, y ahora sabemos que
estos se identifican respectivamente por los enteros 0, 1 y 2 en la interfaz de llamadas al sistema.
Las llamadas al sistema usan el descriptor como un índice de la tabla de descriptores de ficheros del
programa, que es donde se registra la asociación del descriptor con el dispositivo. Por lo tanto, los
descriptores estándar ocupan las tres primeras posiciones de la tabla de descriptores. En principio, la
asociación de estas tres posiciones se establece cuando el programa empieza a ejecutarse, ya veremos
cómo.

Por supuesto, la tabla de descriptores contiene más posiciones que las reservadas para la entrada/salida
estándar. La llamada al sistema open() reserva una nueva posición en la tabla para ubicar el descriptor
del fichero y devuelve el índice de esa posición como identificador del descriptor. El descriptor que
devuelve open será simplemente la primera posición libre de la tabla en orden ascendente. Eso significa
que nuestros ejemplos de stee y ctee asignarán el descriptor 3 para el fichero que se pasa como
parámetro (al menos cuando los ejecutamos como habitualmente, ya que el tema es algo más
complicado). Un descriptor se libera con la llamada al sistema close().

La llamada open() hace apuntar la posición reservada en la tabla de descriptores a una estructura (en
una tabla de ficheros abiertos) donde se almacena la información necesaria poder gestionar las
operaciones sobre ese descriptor, básicamente:

El nombre del fichero, por ejemplo para poder identificarlo en caso de error.
El modo de operación especificado como parámetro: solo lectura, solo escritura, ambas o append
(añadir), aparte de otros más específicos, que el sistema verificará cuando se use el descriptor por
read/write.
Los apuntadores a las rutinas de entrada/salida del sistema operativo que habrán de ejecutarse en las
operaciones que usen el descriptor. Obviamente, el sistema no ejecuta el mismo código cuando se lee
del teclado, que es un dispositivo de caracteres con entrada por interrupción, que cuando se lee de un
fichero en el disco, que está ubicado en algún lugar de un dispositivo de bloques que requiere DMA.
La siguiente posición del fichero a la que se va a acceder. Esto no tiene sentido para un dispositivo
como el teclado, pero sí para los ficheros y otros elementos que estudiaremos más adelante. Una
llamada read/write actualiza este apuntador incrementándolo en el número de bytes leídos/escritos en la
operación. Linux guarda memoria de esto porque sabe que los ficheros se acceden casi siempre de
forma secuencial, evitando así trabajo al programador, que dispone de una llamada lseek(2) para
posicionar el apuntador en un lugar determinado del fichero cuando quiera saltarse la disciplina de
acceso secuencial.
Un apuntador a otra estructura con la información del i-node del fichero y otra información que permite
gestionar el acceso concurrente al fichero, como el número de descriptores que se refieren al fichero,
tanto para lectura como para escritura.
La llamada al sistema open() lleva a cabo los siguientes pasos:
Comprueba que hay una entrada libre en la tabla de descriptores (es altamente improbable que esté
llena).
Busca el nombre del fichero en el directorio correspondiente. Esto implica el acceso a cada directorio
que forma parte de la ruta del fichero, y si el directorio no está cargado en memoria, su transferencia
desde el dispositivo.
Comprueba los derechos de acceso al fichero por el propietario del programa.
Gestiona si el fichero se va a compartir y cómo.
Si los pasos anteriores han tenido éxito, se crea el descriptor del fichero, y se establecen valores
iniciales para algunos parámetros, como el apuntador al comienzo del fichero.
El paso (4) depende del modo de operación (si en modo append o no) y de la naturaleza del fichero
abierto. Por ejemplo, para un fichero compartido en modo append hay que gestionar la posición de
escritura mediante un apuntador compartido, mientras que para otros modos la posición es de uso
privado para el descriptor. Además, también se pueden usar concurrentemente por varios programas
determinados elementos de comunicación (que siguen siendo ficheros) de los que nos ocuparemos en la
última parte del curso, y que requieren compartir punteros de acceso para lectura y para escritura.

Los detalles de cómo se implementan y gestionan las estructuras de entrada/salida los puedes encontrar
en la literatura específica sobre la implementación de UNIX o Linux, pero no son el objetivo de este
curso. El modelo (simplificado) de funcionamiento de la entrada-salida que hemos descrito permite
hacernos una idea de cómo actúan el resto de las llamadas al sistema que operan sobre ficheros. Por
ejemplo, cuando un programa elimina un fichero (llamada al sistema unlink()) que está siendo usado
por otro programa, la semántica de UNIX/Linux establece que el segundo programa puede seguir
accediendo al fichero hasta que libera su descriptor (explícitamente con close() o cuando el programa
acaba). Esto significa que unlink() marca el fichero como borrado y su nombre desaparece del
directorio, pero no se elimina físicamente (es decir, se mantiene su i-node). La llamada close(), además
de liberar el descriptor del fichero, decrementa la cuenta de referencias al fichero. Si la cuenta de
referencias llega a cero, close() libera la entrada del directorio y la referencia al i-node del fichero.
Recuerda que el i-node contiene un contador de enlaces al fichero desde directorios, de modo que el i-
node (es decir, el fichero) solo se elimina cuando esta cuenta llega a cero.

Sistema de archivos de Linux

Linux soporta gran variedad de sistemas de ficheros, desde sistemas basados en discos, como pueden
ser ext2, ext3, ReiserFS, XFS, JFS, UFS, ISO9660, FAT, FAT32 o NTFS, a sistemas de ficheros que
sirven para comunicar equipos en la red de diferentes sistemas operativos, como NFS (utilizado para
compartir recursos entre equipos Linux) o SMB (para compartir recursos entre máquinas Linux y
Windows).

Los sistemas de ficheros indican el modo en que se gestionan los ficheros dentro de las particiones.
Según su complejidad, tienen características como previsión de apagones, posibilidad de recuperar
datos, indexación para búsquedas rápidas, reducción de la fragmentación para agilizar la lectura de los
datos, etc. Hay varios tipos, normalmente ligados a sistemas operativos concretos. A continuación se
enumeran los más representativos:

ext2: Hasta hace poco era el sistema estándar de Linux. Tiene una fragmentación muy baja, aunque es
algo lento manejando archivos de gran tamaño. Fue la continuación del sistema de ficheros ext,
implementado en 1992 e integrado en Linux 0.96. Las principales ventajas que tenía sobre ext eran las
siguientes:
Compatible con sistemas de ficheros grandes, admitiendo particiones de disco de hasta 4TB y ficheros
de hasta 2GB de tamaño.
Proporciona nombres de ficheros largos, de hasta 255 caracteres.
Tiene una gran estabilidad.
Actualización.
ext3: Es la versión mejorada de ext2, con previsión de pérdida de datos por fallos del disco o apagones.
En contraprestació, es totalmente imposible recuperar datos borrados. Es compatible con el sistema de
ficheros ext2. Actualmente es el más difundido dentro de la comunidad GNU/Linux y es considerado el
estándar. Sus ventajas frente a ext2 son:
Actualización. Debido a que los dos sistemas comparten el mismo formato, es posible llevar a cabo una
actualización a ext3, incluso aunque el sistema ext2 esté montado.
Fiabilidad y mantenimiento.
ext4: Es la última versión de la familia de sistemas de ficheros ext. Sus principales ventajas radican en
su eficiencia (menor uso de CPU, mejoras en la velocidad de lectura y escritura) y en la ampliación de
los límites de tamaño de los ficheros, ahora de hasta 16TB, y del sistema de ficheros, que puede llegar a
los 1024PB (PetaBytes).
ReiserFS: Es el sistema de ficheros de última generación para Linux. Organiza los ficheros de tal modo
que se agilizan mucho las operaciones con estos. El problema de ser tan actual es que muchas
herramientas (por ejemplo, para recuperar datos) no lo soportan.
swap: Es el sistema de ficheros para la partición de intercambio de Linux. Todos los sistemas Linux
necesitan una partición de este tipo para cargar los programas y no saturar la memoria RAM cuando se
excede su capacidad. En Windows, esto se hace con el archivo pagefile.sys en la misma partición de
trabajo, con los problemas que esto conlleva.
Además de estos sistemas de ficheros, Linux también ofrece soporte para sistemas de ficheros de
Windows, como FAT, FAT32 y NTFS. Tanto para FAT como para FAT32, Linux tiene soporte
completo y estable de escritura y lectura, mientras que para NTFS, y con las últimas versiones del
kernel, solo se puede acceder de manera estable en modo lectura. En modo escritura todavía está en
fase experimental y no es estable.

También podría gustarte