Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Que Es Un Sistema Operativo
Que Es Un Sistema Operativo
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.
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.
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.
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.
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.
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.
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).
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.
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).
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 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.
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.
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
/dev
Aquí es donde están todos los drivers y los dispositivos, estos se identifican en forma de archivo.
/lib
/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
/tmp
Directorio temporal que pueden usar todos los usuarios para archivos temporales y del sistema.
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.
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.
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.