arquitectura del sistema operativo linux

15

Click here to load reader

Upload: paola-reza-nevarez

Post on 30-Dec-2015

75 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Arquitectura Del Sistema Operativo Linux

ARQUITECTURA DEL SISTEMA OPERATIVO LINUX,

PRINCIPIOS DEL DISEÑO, PARADIGMAS

Y LLAMADAS AL SISTEMA

El sistema operativo Linux fue desarrollado en 1991 por Linus Torvalds, se basa

en sistema UNIX. A partir de la primera versión de Linux el sistema ha sido

modificado por miles de programadores de todo el mundo bajo la coordinación de

su creador Linux Torvalds. Su interfaz gráfica ha mejorado en los últimos años,

logrando que sea tan fácil de usar como en los sistemas Windows. En los

sistemas operativos Linux el usuario puede elegir entre varias interfaces gráficas

que cuentan con prestaciones similares, entre las que destacan KDE y Gnome. La

principal característica de Linux es que su software no es propiedad de ninguna

persona o empresa, es software libre. Al ser software libre, el código fuente es

accesible para que cualquiera pueda estudiarlo y modificarlo. La licencia de Linux

no restringe el derecho de venta, por lo que diversas empresas de software

comercial distribuyen versiones de Linux. Este sistema operativo dependiendo de

su versión, se utiliza tanto en supercomputadoras y servidores como en

computadoras, la versión más popular a la fecha es Ubuntu 13.0.

Las principales características de Linux son:

Multiusuario y multitarea.

Compatible con Unix.

Proporciona una interfaz de línea de comandos

Proporciona interfaz gráfica.

Es software libre.

Page 2: Arquitectura Del Sistema Operativo Linux

ARQUITECTURA

La arquitectura interna de Linux es compleja pero se puede resumir las

partes importantes de forma breve y fácil de entender.

PROCESOS

Linux se organiza en procesos, que son tareas independientes que se ejecutan de

forma simultánea mientras el sistema está en funcionamiento. Los procesos

cuelgan unos de otros en una dependencia padre/hijo. Inicialmente al arrancar el

sistema sólo existe un proceso, llamado init. Init lee los ficheros de configuración

de arranque presentes en el directorio /etc y va creando procesos hijos. Estos a su

vez tendrán sus propios hijos formando un árbol de descendientes. Los procesos

en ejecución se encuentran alojados en la memoria rápida RAM del sistema.

Cuando se habla de ejecutar o lanzar o arrancar un proceso, nos estámos

refiriendo al proceso de leer un fichero almacenado en el disco duro que contiene

las instrucciones del programa, colocando las mismas en la memoria RAM y a

continuación empezando a ejecutar las instrucciones del programa ya en RAM.

USUARIOS

Linux está diseñado para ser utilizado por varios usuarios simultáneamente. Aun

cuando el sistema sólo vaya a ser utilizado por un único usuario, como es el caso

corriente hoy en día, en general internamente Linux utilizará varios usuarios

'robots' para organizar mejor y de forma más segura el sistema. Linux siempre

tiene un superusuario llamado 'root' ('raíz' traducido). En el siguiente párrafo se

explica el por qué crea varios usuarios en vez de uno único.

Cada uno de los procesos pertenece a un usuario y en función del usuario

asociado, dicho proceso tendrá unos permisos u otros. Un proceso en ejecución

puede cambiar su usuario asociado si tiene los permisos suficientes para hacerlo.

En general sólo tendrá permisos para cambiar de usuario cuando el usuario actual

asociado al proceso sea 'root'. El proceso inicial Init se ejecuta con el usuario

asociado 'root' lo cual le confiere permisos totales sobre la máquina. En general

Page 3: Arquitectura Del Sistema Operativo Linux

cuando Init ejecute sus procesos hijos lo hará asociandolos a usuarios distintos

cuyos permisos se reduzcan a los esenciales para ejecutar la tarea para la cual

están diseñado. P.ej, Init puede arrancar un proceso 'servidor de correo' asociado

al usuario 'mail'. Este usuario tendrá los permisos justos y necesarios para poder

enviar y recibir correo y almacenarlo en el directorio /var/spool/mail. El proceso

'servicio de correo' puede a su vez arrancar procesos hijos pero estos estarán

automáticamente asociados a su usuario 'mail', nunca a 'root'. Este simple sistema

de permisos provee a Linux de un sistema de seguridad muy sólido.

El entorno gráfico estándar de Linux es un proceso más llamado X. Cuando se

arrancan las X todos los programas gráficos (que son a su vez procesos) colgarán

de él y se ejecutarán por normal general con los permisos del usuario que se ha

logeado con su nombre y password al inicio de la sesión. Las aplicaciones que

solemos manejar frecuentemente como el navegador web o el reproductor de

video no son más que procesos hijo del proceso X. Si ejecutamos por ejemplo un

cliente de correo con un agujero de seguridad y descargamos un correo con virus,

dicho virus 'engañará' al cliente de correo para que lo ejecute y entonces

tendremos un nuevo proceso 'virus' colgando del cliente de correo y asociado al

usuario que inició la sesión. Sin embargo puesto que este usuario no tiene

permisos de administración el virus no podrá modificar ficheros claves del sistema,

sólamente los ficheros propios del usuario. Al reiniciar el ordenador el virus habrá

desaparecido. Esto complica enormemente la creación de virus para Linux. El

entorno gráfico X es un proceso más, sin ningún privilegio sobre cualquier otro.

Esto significa que podemos prescindir del mismo si no nos hace falta. En general,

cuando Linux se utiliza como servidor de Internet es normal no iniciar el entorno

gráfico ya que consume mucha memoria y puede ralentizar el sistema. Este ha

hecho que Linux se popularice y desplaze a Windows en el entorno profesionales

ya que por ejemplo permite contratar servicios de hospedaje virtual a precios

mucho más reducidos que sus equivalentes en Windows. También al no depender

de un entorno gráfico, puede administrarse remotamente de forma mucho más

cómoda mediante líneas de comandos, mientras que Windows requiere transmitir

el entorno gráfico a través de Internet (mucho más lento, costoso e inseguro).

Page 4: Arquitectura Del Sistema Operativo Linux

FICHEROS

Los procesos acceden al hardware y a otros recursos como la conexión de red a

internet o los datos almacenados en disco a través de un sistema de ficheros.

Todas las entradas y salidas de datos desde/hacia procesos se realiza a través de

ficheros.

A continuación se muestra un ejemplo real del árbol de procesos hasta llegar al

proceso navegador firefox:

USUARIO PROCESO

root /sbin/init [5]

...

root \_ /usr/sbin/gdm-binary

usuario1 \_ /etc/X11/X

usuario1 \_ gnome-panel

usuario1 \_ /usr/bin/firefox

KERNEL

El primer proceso en ejecutarse es el Kernel. El kernel hace de frontera entre el

software y el hardware. Para nuestra CPU, el kernel es un programa de software

como cualquier otro pero para el resto de procesos, init incluido, el kernel se

comporta como si fuese hardware. Cuando un proceso quiere acceder al hardware

no lo hace directamente, sino que se lo pide al kernel. El kernel hace de

interlocutor entre procesos y hardware. Si varios procesos quieren acceder al

disco duro o a Internet, el kernel asignará un tiempo a cada uno de ellos, copiará

los datos que cada proceso quiere enviar y los enviará al disco duro o a la red.

También es el kernel el encargado de distribuir el tiempo de CPU asignado a cada

proceso. Linux es un sistema multiproceso debido a que, aun disponiendo de un

único procesador, Linux es capaz de ejecutar simultáneamente varias tareas

haciendo rotar el propietario de la CPU cada fracción de segundo. En realidad

puede asignar el control de la CPU a un nuevo proceso entre 100 o 1000 veces

Page 5: Arquitectura Del Sistema Operativo Linux

por segundo, dependiendo de la potencia de la CPU. Para un ser humano da la

impresión de que todas las tareas se están ejecutando de forma simultánea. Este

sistema de asignación de la CPU es clave y está extremadamente estudiado y

optimizado. P.ej, Linux es lo suficientemente inteligente como para saber qué

procesos están a la espera de recibir un dato de internet y, mientras este dato no

llegue, no le asignará el valioso tiempo de CPU. Desde hace unos años a esta

parte, los procesadores han desarrollado sistemas de ahorro de energía

permitiendo disminuir la frecuencia, potencia o ciclo de trabajo de la CPU cuando

no hay tareas que hacer. Linux está al tanto de este hecho y si observa que no

hay aplicaciones demandando la CPU automáticamente le indica al procesador

que disminuya el consumo de energía.

Si antes nombrábamos que los procesos están asociados a usuarios y gestionan

ficheros, en realidad estos usuarios y ficheros son gestionados por el kernel.

Cuando un proceso quiere acceder a un fichero, en realidad le pide al kernel que

acceda al fichero y será el kernel quien le devuelva los datos que haya leido.

Antes de ello el kernel comprueba el usuario y grupo asociado al proceso,

comprueba a su vez los usuarios o grupos que pueden acceder a dicho fichero. Si

no concuerdan, en vez de devolver el dato, devolverá un error o excepción al

proceso llamante indicándole el "porque".

Otra labor del kernel es abstraer a los procesos del hardware real de la máquina.

Un proceso 'visor de fotos' que quiera acceder al fichero

/home/usuario1/FOTOS/vaciones001.png no tiene que preocuparse si dicho

fichero está en un disco duro, una memoria SSD o debe ser accedido a través de

la red local ya que se encuentra en otro ordenador. El kernel mediante un sistema

llamado "montaje" mapea rutas lógicas de directorios, p.ej, /home/usuario1 con un

dispositivo físico, p.ej, el disco duro local o un disco duro en Internet a 1000 kms.

de distancia. El proceso 'visor de fotos' no se tiene que preocupar de dónde está

fisicamente el fichero, sólamente de su ruta simbólica

/home/usuario1/FOTOS/vacaciones0001.png.

Page 6: Arquitectura Del Sistema Operativo Linux

La memoria RAM de un sistema es limitada, y de nuevo el kernel se encarga de

asignar memoria a los procesos. Además, de nuevo, es lo suficientemente

inteligente como para saber qué procesos llevan mucho tiempo sin ejecutarse (por

ejemplo un servidor de correo que lleva 10 minutos sin enviar ni recibir correos) y

si la memoria RAM escasea, es capaz de mover el proceso de RAM al disco duro

y asignar la memoria RAM a procesos que en un instante dado puedan hacer

mejor uso de la misma.

La palabra Linux, estrictamente hablando, en realidad se refiere sólamente al

kernel. Los procesos normales en realidad no son Linux, son procesos

desarrollados por diferentes grupos de trabajo (fundación GNU, Mozilla,

empresas,...). Sin embargo es costumbre resumir, por abuso del lenguaje, como

Linux a todo y cuanto se ejecuta bajo el kernel (algo que en realidad siempre ha

molestado a otros grupos de desarrollo que se ven injustamente ignorados por

este hecho).

PRINCIPIOS DE DISEÑO

Un sistema basado en Linux es un sistema operativo tipo Unix modular. Se deriva

gran parte de su diseño básico de los principios establecidos en Unix durante los

años 1970 y 1980. Este sistema utiliza un kernel monolítico, el kernel de Linux,

que maneja el control de procesos, creación de redes, y el acceso al sistema

periférico y el archivo. Los controladores de dispositivo están integradas

directamente con el kernel o añadirse como módulos cargados, mientras que el

sistema está funcionando.

Proyectos separados que interactúan con el núcleo proporcionan gran parte de la

funcionalidad de alto nivel del sistema. El espacio de usuario de GNU es una parte

importante de la mayoría de los sistemas basados en Linux, proporcionando la

aplicación más común de la biblioteca C, el shell popular, y muchas de las

Page 7: Arquitectura Del Sistema Operativo Linux

herramientas comunes de Unix que llevan a cabo muchas de las tareas básicas

del sistema operativo. La interfaz gráfica de usuario utilizada por la mayoría de los

sistemas Linux está construido en la cima de una implementación del sistema X

Window.

Algunos de los componentes de un sistema Linux instalado son:

Un gestor de arranque - por ejemplo, GRUB o LILO. Este es un programa

que es ejecutado por el ordenador cuando se enciende por primera vez, y

carga el kernel Linux en la memoria.

Un programa init. Se trata de un proceso iniciado por el núcleo Linux, y está

en la raíz del árbol de procesos: en otros términos, todos los procesos se

ponen en marcha a través de init. Se inicia procesos tales como servicios

de sistema y de inicio de sesión le pedirá

Bibliotecas de software que contienen código que puede ser utilizado por

los procesos que se ejecutan. En los sistemas Linux que utilizan archivos

ejecutables ELF formato, el enlazador dinámico que gestiona el uso de las

bibliotecas dinámicas es "ld-linux.so". La biblioteca de software más

utilizados en sistemas Linux es la Biblioteca de C de GNU. Si el sistema

está configurado para el usuario para compilar software ellos mismos,

también se incluirán los archivos de cabecera para describir la interfaz de

las bibliotecas instaladas.

Programas de interfaz de usuario, tales como los shells de comandos o

entornos de ventanas

PARADIGMAS

Sus principales paradigmas son:

Que es software libre.

Que sus aplicaciones son tanto para desarrollo de software, como para

oficina u ocio.

Page 8: Arquitectura Del Sistema Operativo Linux

LLAMADAS AL SISTEMA

Para hacer uso de las llamadas al sistema desde el lenguaje de programación C,

los sistemas operativos que trabajan con el núcleo Linux ponen a disposición del

usuario varias funciones o procedimientos de librería que representan a las

llamadas del sistema. Los prototipos relativos a estas funciones o procedimientos

pueden encontrarse listados en el archivo de cabecera unistd.h (este se

encuentra en el directorio /usr/include/asm/, aquí también pueden encontrarse los

archivos unistd_32.h y unistd_64.h, archivos relativos a las arquitecturas de 32 y

64 bits respectivamente).

El sistema operativo de núcleo Linux cuenta con aproximadamente 200 funciones

relacionadas con cada llamada al sistema, algunos de los cuales pueden

agruparse en ciertas categorías que permiten el manejo o control de: procesos,

señales, archivos, tiempo, etc.

Los conceptos explicados anteriormente pueden resumirse con el siguiente

esquema:

Page 9: Arquitectura Del Sistema Operativo Linux

Llamadas al sistema para el control de procesos

Este tipo de llamadas al sistema permiten realizar "actividades" relacionadas con

los programas que están en espera para ejecución o que se están ejecutando, es

decir, cuando son un proceso; cada sistema operativo tiene sus formas de invocar

dichas llamadas, en el caso de los sistemas operativos bajo el núcleo Linux estas

se pueden invocar desde el Shell o interprete de comandos y desde el lenguaje C.

Las llamadas más comunes de este tipo son:

1. fork( )

2. getpid( )

3. getppid( )

4. La familia de llamadas exec…(…)

5. wait( )

6. waitpid(…)

7. exit(…)

8. system(…)

Page 10: Arquitectura Del Sistema Operativo Linux

Llamadas al sistema para el control de señales

Las llamadas a sistema para el control de señales, son un tipo de llamada de

sistema que permite a un proceso establecer comunicación con otros procesos

que se están ejecutando en la máquina o para que el kernel se comunique con

ellos, como puede ser, informar sobre alguna condición, una solicitud de espera,

etc.

En tal comunicación el proceso puede ser emisor o receptor de la señal. Las

señales que se pueden producir dependen de la máquina y de los privilegios que

el proceso tenga.

Para la mayoría de aplicaciones grandes, se usan señales como forma de

controlar las tareas, pudiendo así teniendo aplicaciones en segundo plano o

corriendo provisionalmente.

En el caso de los sistemas operativos con núcleo Linux el listado de señales se

puede obtener con el comando kill y la opción -l, para la maquina usada en los

ejemplos, el listado de señales con su respectivo número son:

Las señales no tiene ninguna prioridad u orden para ser atendidas, es posible

ignorarlas (excepto SIGSTOP y SIGKILL) y si en algún momento llegan

simultáneamente varias señales del mismo tipo, solo se tendrá en cuenta una y las

demás se consideraran como si nunca hubieran llegado.

BIBLIOGRAFÍA

http://centrodeartigos.com/articulos-enciclopedicos/article_86283.html

Page 11: Arquitectura Del Sistema Operativo Linux

http://systope.blogspot.mx/2012/06/llamadas-al-sistema-en-linux.html