Está en la página 1de 8

CASO DE ESTUDIO LINUX

Historia De Linux

UNICS

En la década de 1960 el programador llevaba al cuarto de maquina un trabajo tarjetas perforadas y


luego tenía que esperar horas esperando el resultado. Para solucionar este problema se inventó el
tiempo compartido en el Dartmouth College y el MIT. tiempo después, los investigadores del MIT
unieron fuerzas con General Electric y Bell Labs para diseñar un sistema de segunda generación,
conocido como MULTICS (Servicio Multiplexado de información y computo).

Luego Bell Labs se retiró entonces uno de sus investigadores de nombre Ken Thompson, decidió
escribir una versión simplificada de MULTICS en una computadora PDP-7 en lenguaje ensamblador,
el cual nombro en son de broma UNICS (Servicio Uniplexado de Información y Computo) y más
adelante se cambió a UNIX.

UNIX EN LA PDP-11

Al ver el trabajo de Ken Thompson se unió Dennis Ritchie y todo su departamento. Y diseñaron UNIX
para las PDP11/20, PDP11/45 y PDP11/70. Estas dos últimas maquinas era las que dominaban en
aquel entonces, al ver que era muy tedioso hacer todo el sistema para cada máquina se decidió
reescribir UNIX en un leguaje de alto nivel llamado B, pero la falta de estructuras en B no se pudo
realizar UNIX, Dennis creo un sucesor de B el cual llamo C y desde entonces este lenguaje a
dominado la programación de sistemas.

UNIX PORTABLE

Ya que UNIX estaba escrito en C era mucho más Fácil moverlo(portarlo), el único inconveniente que
se tenía era realizar el compilador para la nueva máquina entonces Steve Johnson diseño e
implemento in compilador de C portable.

UNIX ESTANDAR

En la década de 1980 había dos versiones populares SystemV y BSD que provenían de UNIX. La IEEE
se encargó de crear un estándar de UNIX para que todo Desarrollador de software pueda correr su
software en cualquier versión de UNIX. A este proyecto se le nombro POSIX. Lo que se realizo fue
interceptar todas las características de System V y BSD

MINX

Al ir avanzado el tiempo UNIX aumento en gran medida su tamaño, entonces era difícil poder
estudiar y modificar UNIX. Es de ahí donde sale MINIX el crea un microkernel parecido al de UNIX,
pero con mucho menos tamaño.

Linux
Linux es otro clon de UNIX el cual fue creado por Linus Torvalds, y tuvo una gran acogida se fue
añadiendo características lo cual hizo que el Linux fuera uno de los mejores.

Objetivos de Linux

Ya que Linux es un clon de UNIX, vamos a hablar de UNIX este fue un sistema diseñado para manejar
varios procesos y usuarios al mismo tiempo. Fue diseñado por programadores para usuarios
relativamente sofisticados. UNIX tiene muchas herramientas para permitir que las personas
trabajen en conjunto y compartan información.

Los buenos programadores en un sistema quieren que sus sistemas sean simples, elegantes y
consistentes. Por ejemplo, el comando ls A* se van a listar todos los archivos que empiecen por la
letra A y el comando rm A* debe eliminar todos los archivos que empiecen por la letra A* y no el
archivo que su nombre consiste en A y un asterisco, a esta característica se le conoce como el
principio de la menor sorpresa. También a los programadores les disgusta la redundancia inútil, un
ejemplo de esto es el comando copy cuando basta con cp.

Interfaces para Linux

Para hacer llamadas al sistema. Los programas colocan los argumentos en registros o pilas y emiten
instrucciones de trampa para cambiar de modo usuario a modo kernel, como no hay forma de
escribir una instrucción trampa en C, se proporciona una biblioteca para cada llamada del sistema,
los procedimientos de esta biblioteca están en lenguaje ensamblador, pero se pueden llamar desde
C. POSIX indica qué procedimientos de biblioteca debe proporcionar un sistema que esté en
conformidad. Sus parámetros y que resultados debe regresar.
Además de esto Linux proporciona una gran cantidad de programas estándar algunos de los cuales
se especifican en el estándar POSIX, entre ellos se incluye el procesador de comandos (Shell),
compiladores, editores, programas de procesamiento de texto y herramientas de manipulación de
archivos. Por ende, podemos hablar de tres interfaces distintas para Linux: La interfaz de llamadas
al sistema, la interfaz de la biblioteca y la interfaz conformada por el conjunto de programas
estándar.

Shell

Linux tiene una interfaz gráfica de usuario, la mayoría de los programadores aun prefieren una
interfaz de línea de comando (Shell) porque es más rápida de utilizar y más poderosa. Bash Shell es
el Shell predeterminado de los sistemas Linux, el nombre de bash Shell viene del Shell original de
UNIX el cual se llamaba Bourne Shell. Cuando el usuario escribe un comando, el Shell extrae la
primera palabra y asume que es el nombre un programa a ejecutar, busca el programa y si lo
encuentra lo ejecuta. Después el Shell se suspende a si mismo hasta que el programa termine, lo
importante aquí es que la Shell es un programa de usuario el cual tiene la habilidad de leer el teclado,
escribir en el monitor y el de poder ejecutar otros programas.

Un Shell tiene acceso automático al archivo llamado entrada estándar (para leer), salida estándar
(para escribir) y error estándar (para escribir mensajes de error).

Los comandos pueden ir con parámetros como el siguiente:

cp org dest

también van con banderas para cambiar cosas que estaban por defecto y se escribe con “–“, como
el siguiente ejemplo:

head –20 archivo

head 20 archivo

También podemos utilizar el * para decir que puede ser cualquier secuencia de caracteres

ls *.c

o podemos decirle que puede ser una secuencia de algunos caracteres

ls [ape]*

podemos enviar la entrada desde un archivo y enviar la salida a otros archivos

sort <ent >sal

aquí Podemos observar cómo se ejecutan varios comandos en una misma línea, utilizando el mismo
archivo.

sort <ent >temp; head –30 <temp; rm temp

y para evitar crear un archivo como en el anterior caso, se puede utilizar el “|” (tubería) pipe

sort <ent | head -30


al utilizar varias veces “|” estamos haciendo pipelines

grep ter *.t | sort | head –20 | tail –5 >foo

multiprogramación:

como sabemos en UNIX está enfocado a la multiprogramación, entonces podemos ejecutar


comando en un segundo plano con el “&”, como se muestra a continuación:

wc –l <a >b &

sort <x | head &

También es posible crear un archivo con una lista de comandos y después ejecutar todo este archivo
en una Shell. Se pueden asignar variables de Shell y utilizar sentencias como for, if, while. Por lo
tanto, una secuencia de comandos es un programa escrito en lenguaje de Shell

Programas Utilitarios de Linux

La shell de linux consiste en un gran mnumero de programas utilitarios estandar. Estos programas
se pueden dividir en seis categorias, como se muestran a continuación:

1. Comando de manipulación de archivos y directorios.


2. Filtros
3. Herramientas de desarrollode programas , como editores y compiladores.
4. Procesamiento de texto.
5. Administración del sistema.
6. Miscelaneos.

En la siguiente imagen pueden observar una lista de los programas que tiene todo sistema linux con
una breve descripción
Estructura del Kernel

El kernel se ubica directamente en el hardware y permite las interacciones con los dispositivos de
E/S y la unidad de administración de la memoria; ademas controla el acceso a la CPU. En el nivel
más bajo del kernel tenemos los manejadores de interrupciones y el mecanismo de
despachamiento; el despachamiento ocurre cuando hay una interrupcion, el codigo de bajo nivel
que esta escrito en lenguaje ensamblador detiene el proceso en ejecución, guarda el estado del
proceso en una estructuras de procesos del kernel e inicia el driver apropiado.

El kernel esta dividido en tres componentes principales

1. Componente de E/S: Es la responsable de interactuar con los dispositivos de entrada y


realizar operaciones de E/S de red y almacenamiento. En el nivel más alto todas las
operaciones estan integradas en un sistemas de archivos virtuales, Es lo mismo realizar una
operación de lectura en un archivo que obtener un carácter de la entrada de una terminal.
Y en el nivel más bajo todas las operaciones pasan a través de cierto driver de dispositivo.
2. Componente administracíon de memoria: la administración de memoria incluye el
mantenimiento de las asignaciones entre memoria virtual y fisica.
3. Componete administración de procesos: La responsabilidad clave del componente de
administración de procesos es la creacion y terminación de procesos. Tambien incluye el
planificador de procesos, que selecciona cual proceso o hilo debe ejecutar a continuación
LOS PROCESOS EN LINUX

En Linux hay procesos que se mantienen ejecutando en todo momento y a estos se les llaman
DEMONIOS. Un ejemplo, es el demonio cron el cual se despierta una vez para revisar si hay trabajos
por hacer. Este demonio es muy importante porque podemos programar envíos de correos a cierta
hora, notificar un recordatorio a un usuario despistado, realizar un respaldo de seguridad a cierta
hora, entre muchas otras cosas.

En Linux, los procesos se crean de una forma especialmente simple. Con la llamada al sistema fork
crea una copia exacta del proceso original. El proceso que va a realizar la bifurcación es el proceso
padre, al nuevo proceso se le conoce como proceso hijo, cada uno tiene sus propias imágenes
privadas. Entonces si el padre cambia, los cambios no son visibles para el hijo, y viceversa. Los
archivos abiertos entre el padre y el hijo se comparten. Es decir, si se abre un archivo antes de hacer
el fork seguirá abierto tanto en el padre como en el hijo y los cambios que se realicen serán visibles
para el otro.
Los procesos se pueden comunicar entre si mediante el uso de paso de mensajes, es posible crear
un canal entre dos procesos; Estos canales se les conoce como tuberías. También existe otra forma
de comunicación entre procesos y es son las interrupciones. El proceso puede enviar una señal a
otro proceso. Los procesos pueden indicar al sistema lo que quieren que ocurra cuando una señal
llegue. Las opciones son, ignorarla, atraparla o dejar que la señal elimine el proceso. En la siguiente
imagen podrán observar las señales requeridas por el POSIX.

Llamadas al sistema para administrar procesos en el Linux

Fork es un buen lugar para empezar con la administración de procesos, y las principales se listan en
la siguiente imagen:

Fork crea un nuevo proceso en el sistema Linux, y este nuevo proceso es un duplicado del proceso
padre; después del fork ambos procesos se van por caminos diferentes PID del hijo es cero mientras
que el del padre es mayor que cero y el pID es -1 cuando haya un error al momento de crear el
proceso, para esperar a que un hijo termine se puede llamar waitpid, waitpid tiene 3 parámetros el
primero dice cual hijo hay que esperar si es -1 (que está por defecto) hasta que termine el primer
hijo, el segundo parámetro es la dirección de una variable se establecerá con el estado de salida de
una hijo, y el tercero determina si el proceso se bloquea

CTRL-C envía una señal al proceso para que se detenga.

Para anunciar que el proceso está dispuesto a atrapar la señal (o cualquier otra), se puede utilizar la
llamada signation, la llamada kill permite que un proceso envié una señal a otro proceso, algunos
procesos no hacen nada hasta que un usuario emita una señal, una solución para dar más cpu a los
demás procesos hasta que se realice dicha señal por parte del usuario es la llamada pause que
detiene el proceso hasta que llegue la próxima señal.

Implementación de procesos e hilos en Linux

También podría gustarte