Documentos de Académico
Documentos de Profesional
Documentos de Cultura
COMIENZOS
Linux es un kernel (un núcleo de un sistema operativo) creado por Linus Torwalds.
Nació en Finlandia el 28 de Dic 1969 y estudió en la universidad de Helsinki.
Desarrolló Linux porque deseaba disponer de un SO Unix en su PC. Actualmente
trabaja en los EE.UU.
Linus T. quiso compartir su código para que cualquiera pudiera usarlo y contribuir
a su desarrollo. Dado que en GNU ya habían desarrollado bastantes herramientas
para Unix con la misma filosofía de software libre pronto se consiguió un SO
Linux/GNU totalmente libre. Dos de las herramientas más importantes aportadas
por GNU fueron el interprete de comandos, y el compilador de C.
Software libre
• Redistribuir copias;
• Mejorar el programa, y poner sus mejoras a disposición del público, para beneficio de
toda la comunidad.
LINUX/GNU
Quizás ha leído que Linux significa 'L'inux 'I's 'N'not 'U'ni'X'. Pero en realidad Linux
es un núcleo de SO tipo Unix. Su compatibilidad Posix es alta. El SO se
complementa con una serie de aplicaciones desarrolladas por el grupo GNU. Tanto
estas aplicaciones como el núcleo son software libre. Linux/GNU es un SO tipo
Unix, SO Multiusuario, Multitarea, Multiprocesador, Multiplataforma, Multilingüe,
nacido en la red de redes Internet.
Características de GNU/Linux
32 Bits
Gracias a los 32 bits el sistema es rápido eficaz, seguro y fiable, sin que una aplicación
pueda causar problemas a las otras, al no tener que guardar compatibilidad con los
sistemas anteriores de 16 bits.
Multitarea
El ordenador puede estar haciendo varias cosas a la vez, y que no tendrás que esperar a
que acabe una para hacer otra, la multitarea esta controlada por el S.O. no por las
aplicaciones, por lo que a diferencia de otros S.O. nunca se te quedara parado por culpa
de una mala aplicación que consuma todos los recursos del ordenador. Aquí si podrás
bajar correo de Internet, formatear un disco, imprimir 100 hojas y jugar a la vez, y sin
problemas
Multiusuario
POSIX
Aunque para los usuarios normales esto importa poco, POSIX es un estándar de la
industria, que asegura una calidad mínima en ciertas partes del S.O. y asegura su
compatibilidad, a nivel de código, es decir, programas POSIX que funcionan en otros Unix,
no tendrán problema para compilarse y ejecutarse en Linux, Para muchas empresas esto
es muy importante, a la hora de decantarse por un S.O. u otro (por eso Windows NT es
compatible POSIX).
Compatibilidad
Ficheros
Linux No tiene ningún problema para tragarse cualquier tipo de disco de cualquier cosa
que exista, leerlo y usar su contenido, además existen Suites como OpenOffice o Corel
WordPerfect que permiten leer y usar ficheros de aplicaciones comunes como puedan ser
Word o Excel. Además cuando se trabaja en red, Linux es capaz de entenderse y de
mediar entre todo tipo de redes, permitiendo entornos heterogéneos sin ningún
problema.
Programas
Si puedes ejecutar programas de otros S.O. para MAC tienes basilisk2, capaz de crear
un Macintosh virtual y ejecutar MacOs para M68K sin problemas. Para Windows existen
varios programas que permiten hacer funcionar programas de Windows, Cross office para
entornos de oficina, wineX para juegos, y la versión libre de estos Wine, que permite
ejecutar la mayoría de los programas.
Si el programa es para MS-DOS existe DosEmu, un emulador de MS-DOS ( bueno no
exactamente, mas bien habría que decir de 386) donde podrás ejecutar a pantalla
completa, como en la realidad, o en ventana de X Windows, cualquier programa para
este S.O. Además de estos existen vmWARE (comercial) y Bosch que crean PC virtuales
donde ejecutar cualquier sistema operativo.
Estabilidad
Linux es robusto, no se colgara ( el S.O. una aplicación si esta mal echa por supuesto que
se colgara, per no afectara al resto del sistema, nunca tendrás que reiniciar el
ordenador por que un programa lo ha colgado), hay que notar que es posible bloquear
el teclado o la pantalla, pero eso no significa que se cuelgue el ordenador, puedes
entrar al ordenador por otro sitio ( un terminal, por red) y desbloquearlo, y seguir
usándolo, o si se te bloquea un programa mientras estabas conectado a Internet y correo,
quizás no puedas usar el ordenador, pero seguirá bajando el correo sin problemas.
Es libre
Es decir no te costara nada, no tendrás que pagar licencias, podrás copiarlo, venderlo,
instalarlo donde quieras sin problemas, pero lo más importante es que dispones del
código fuente, esto significa que si un día te encontrases con un problema del S.O.
no tendrías que esperar inútilmente a que su creador decidiese que era un
problema importante y crease un service pack para el S.O., tu mismo puedes
solucionar el problema. O puedes indicarle a una 3º personal el problema, y esta no
tendrá que ser de la empresa que creo el S.O. para poder solucionártelo.
Soporte
Parece mentira, siendo gratis, pero aparte del que te da Mandrake, SUSE, o RedHat si le
comprar los CD a estas empresas, existen cientos de personas, de todos los idiomas
conocidos, que gustosos te ayudaran a solucionar cualquier problema que tengas con
Linux, y en pocos días. No dudes de unirte a las listas de distribución que hay en Internet,
no solo aprenderás, podrás ayudar a otros en los problemas que tengan.
INICIANDO EL SISTEMA
1. BIOS
2. BOOT LOADER
3. KERNEL
4. INIT
5. /VAR/LOG/MESSAGES
Nivel de ejecución 0:
Halt. Este nivel de ejecución se encarga de detener todos los procesos activos en el
sistema, enviando a la placa madre una interrupción para el completo apagado del
equipo.
Nivel de ejecución 1:
Single. Nivel de ejecución monousuario, sin acceso a servicios de red. Este nivel es
regularmente utilizado en tareas de mantenimiento del sistema, y el usuario que ejecuta
es root.
Nivel de ejecución 2:
Al igual que el nivel de ejecución monousuario, pero con funciones de red y compartición
de datos mediante nfs.
Nivel de ejecución 3:
Sistema multiusuario, con capacidades plenas de red, sin entorno gráfico. Este nivel de
ejecución es el recomendado para sistemas de servidor, ya que evita la carga innecesaria
de aplicaciones consumidoras de recursos.
Nivel de ejecución 4:
Nivel de ejecución 5:
Al igual que el nivel de ejecución 3, pero con capacidades gráficas. Ideal para entornos de
escritorio.
Nivel de ejecución 6:
Reboot. Este nivel de ejecución se encarga de detener todos los procesos activos en el
sistema, enviando a la placa madre una interrupción para el reinicio del equipo.
GESTIÓN DEL PROCESADOR
Sigue una política Round Robin, con prioridad entre los procesos. La prioridad puede ser
asignada por el usuario de forma dinámica, debido a que existe una función del sistema
operativo que permite asignar la prioridad al proceso.
Linux distingue entre varios tipos de procesos que se pueden ejecutar en el sistema, y
según sean les tratará con el algoritmo de planificación Round Robin o por prioridades
dinámicas calculadas por el sistemas en función del tiempo que se han ejecutado en el
procesador.
El proceso o tarea (nombre con que Linux denomina a los procesos) es una de las
abstracciones fundamentales en los sistemas operativos y también lo es en las distintas
versiones de Unix. Un proceso es un programa en ejecución, por lo que no sólo se incluye
el código que se tiene que ejecutar y los datos del programa, sino que también debemos
tener en cuenta el conjunto de recursos que está utilizando tales como ficheros abiertos y
señales pendientes, los datos internos del núcleo, registros y estado del procesador, el
espacio de direcciones que tiene asignado y los hilos que tiene en ejecución. De hecho
podemos tener dos procesos activos que utilizan el mismo programa, como es el caso de
los procesos ejecutados con fork tal y como veremos más adelante.
Los hilos son partes del código del programa que se pueden ejecutar simultáneamente
dentro del proceso. Cada hilo se diferencia de los otros en que tiene su propio contador
de programa, su pila o stack, y su propio conjunto de registros del procesador. En los
sistemas actuales, como es el caso de Linux, no se diferencia entre procesos e hilos,
considerando a los hilos como un tipo especial de proceso, a diferencia de Microsoft
Windows o Sun Solaris que sí tienen estructuras específicas que los diferencian de los
procesos. Cada hilo tiene una task_struct propia y para el núcleo es un proceso normal (lo
que le permite compartir recursos, y espacio de direcciones, con otros procesos),
constituyen simplemente una manera de compartir recursos entre los procesos, ya que
son bastante ligeros por sí mismos.
Los estados de un proceso son cuatro, tal y como se puede ver en la figura:
TIPOS DE PROCESOS
El algoritmo de planificación deberá repartir de la forma más justa posible el uso de la CPU
entre diversos tipos de procesos:
Los
procesos de tiempo real, que son aquéllos cuyo tiempo de respuesta tiene que
estar acotado para que no excedan un cierto umbral máximo.
Los procesos de segundo plano (compiladores, procesos de cálculo, etc.), que no
tienen interacción con el usuario y cuyo tiempo de respuesta no es crítico.
Los procesos interactivos, no suelen usar mucho tiempo de cómputo, pero, cuando
lo requieren, la respuesta debe ser relativamente rápida, ya que al otro lado hay
un usuario (normalmente impaciente).
Al igual que cualquier sistema de tiempo compartido, Linux logra crear la ilusión de una
aparente ejecución simultánea de varios procesos, pasando de un proceso a otro en un
plazo de tiempo muy corto.
Política de planificación
Favorecer a los procesos limitados por E/S: Para asignar el procesador a los
procesos, Linux los distingue según dos tipos de clasificaciones, una atendiendo al
uso del procesador, y otra según la interactividad de los mismos.
Aunque el sistema ofrece facilidades y funciones que son aplicables para tiempo real, el
planificador está pensado para tiempo compartido, no para tiempo real. Lo que hace con
los procesos de tiempo real es asignarles una prioridad muy alta, forzando a que se
ejecuten antes que los demás, pero en realidad no distingue estos procesos de los demás.
Tampoco distingue entre procesos interactivos y por lotes, ya que la política tiene como
objetivo favorecer a los procesos limitados por E/S, que pueden ser tanto de un tipo como
de otro.
Algoritmo de planificación
El algoritmo de planificación del procesador en Linux se basa en una política basada en los
siguientes principios:
Memoria física
Es el espacio que están utilizando los procesos que se están ejecutando. En Linux también
se utiliza la memoria física para tener cache de los datos de los dispositivos de i/o,
memoria compartida y buffers de intercambio.
Cuando la memoria no es utilizada por las aplicaciones, es decir los procesos no ocupan
toda la memoria, utiliza toda la que puede como cache de datos. Cuando las aplicaciones
vayan requiriendo más memoria estas caches serán más pequeñas.
Memoria Virtual
El tamaño combinado del programa, datos y pila puede exceder la cantidad de memoria
física disponible El sistema operativo guarda aquellas partes del programa
concurrentemente en memoria central y el resto en disco.
El sistema de gestión de memoria es muy complejo.Respecto a memoria virtual, Linux
hace uso de una estructura de tabla de páginas con tres niveles. Para utilizarlas, las
direcciones virtuales en Linux se ven como un conjunto de 4 campos.
tres niveles:
Directorio de páginas: un proceso activo tiene sólo un directorio de páginas, donde cada
entrada en el mismo, señala a una página del directorio intermedio de páginas. Para un
proceso activo, el directorio debe estar en la memoria principal.
Directorio intermedio de páginas: es el que puede ocupar varias páginas y donde cada
entrada al directorio señala a una página de la tabla de páginas.
Tabla de páginas: ésta también puede ocupar varias páginas y en cada entrada se hace
referencia a una página virtual del proceso.
Asignación de páginas
Desde la memoria principal, Linux define un mecanismo para tratar bloques de páginas
contiguos correspondientes a bloques de marcos de páginas contiguos, para ello, se utiliza
el sistema de colegas donde el núcleo mantiene una lista de grupos de marcos de página
contiguos de tamaño fijo.
LIBERACIÓN DE PÁGINAS
Esta técnica de cargar sólo páginas virtuales en memoria conforme son accedidas es
conocida como Paginación por Demanda.
Linux utiliza la paginación por demanda para cargar imágenes ejecutables en la memoria
virtual de un proceso. Siempre que se ejecuta un proceso, se abre el fichero que la
contiene y su contenido se asocia en la memoria virtual del proceso. Esto se hace
modificando las estructuras de datos que describen el mapa de memoria del proceso y se
conoce como asociación de memoria.
Cachés
Buffer Caché
Contiene datos que son utilizados por los manejadores de dispositivos de bloques. Estos
buffers son de tamaño fijo (por ejemplo 512 bytes) y contienen bloques de información
que ha sido leída de un dispositivo de bloques o que va ha ser escrita. Los dispositivos de
bloque son exclusivamente accedidos a través del buffer Cache.
Caché de Páginas
Este se utiliza para acelerar el acceso a imágenes y datos en disco. Se utiliza para guardar
el contenido lógico de un fichero de página en página y se accede vía el fichero y el
desplazamiento dentro del fichero. Conforme las páginas se leen en memoria, se
almacenan en la page caché..
Cache de Intercambio
Solo las páginas que han sido modificadas (dirty) son guardadas en el fichero de
intercambio. Mientras no vuelvan a ser modificadas después de haber sido guardadas en
el fichero de swap, la próxima vez que necesiten ser descartadas (swap out) no será
necesario copiarlas al fichero de intercambio pues ya están allí.
Espacio de nombres
La primera elección antes de escribir un driver es su nombre. Este nombre debe ser corto
(probablemente dos o tres caracteres). Por ejemplo, la impresora se llama "lp", los
disquetes "fd", y los discos SCSI son "sd". Al escribir el controlador, los nombres de las
funciones deberán llevar como prefijo este nombre, y de esta manera poder distinguirlas
de las funciones que gestionan otros dispositivos. Por ejemplo, si llamamos a nuestro
dispositivo, y por tanto el identificador del driver como "dp", las funciones que diseñemos
tendrían nombres como dp_read, dp_write, ...
Asignación de memoria
La asignación de memoria dentro del kernel o núcleo es diferente a como se hace en los
programas de usuario. En lugar de utilizar malloc, la función dentro del núcelo
sería kmalloc que se comporta de forma diferente:
1. Recursos: son las partes del sistema utilizadas por los procesos.
2. Dominios de protección: son el conjunto de recursos y operaciones sobre
estos recursos que podrán utilizar todos aquellos procesos que se ejecuten
sobre él.
En general, en un sistema LINUX, el conjunto de recursos está formado por todos los
archivos del sistema, y el dominio será un usuario y los procesos que el ejecuta y que, por
tanto, tengan el mismo UID efectivo.