ASO U1 Procesos
ASO U1 Procesos
ASO U1 Procesos
GESTIÓN DE PROCESOS
1. Procesos
Un proceso es un programa o un fragmento de programa en ejecución. Para que un programa se
ejecute, el SO debe crear un proceso para él.
Cada proceso necesita una serie de recursos (tiempo de uso de CPU, espacio en memoria,
dispositivos de E/S, etc.), y es el sistema operativo el encargado de proporcionárselos.
Los sistemas operativos modernos son multitarea y multiusuario, esto implica que múltiples
procesos pueden ejecutarse simultáneamente sin interferirse unos con los otros. Las obligaciones
del SO como gestor de procesos son:
Aunque dos procesos estén asociados al mismo programa, se consideran dos secuencias de
ejecución separadas, cada una de las cuales se considera un proceso. Llamamos traza de un
proceso al listado de la secuencia de instrucciones que se ejecutan en el proceso.
• Su estado actual.
• Su PID (número identificador de proceso).
• Valores de registros asociados a él, como el contador de programa,
los punteros, acumuladores, registros, etc.
• Valores de los recursos asignados: espacio en memoria, archivos,
E/S, tiempo consumido, prioridad del proceso, etc.
1
Todos los procesos, desde su creación, tendrán la capacidad de comunicarse y sincronizarse con
otros procesos y con recursos del sistema. Este hecho da lugar a diferentes tipos de procesos:
En cualquier caso, la ejecución de los procesos exigirá concurrencia, cualidad que deberá gestionar
el sistema operativo gracias a técnica denominada multiprogramación, que permite que dos o más
procesos puedan ejecutarse "a la vez".
2. Estados de un proceso
Un proceso, a lo largo de su vida, cambia de estado. En concreto, un proceso puede estar en uno de
los siguientes estados:
• Nuevo (new): Momento en el que se está creando el proceso.
• Preparado (ready): Está esperando a que se le asigne la CPU (un procesador).
• En ejecución (running): Se está ejecutando en la CPU.
• Bloqueado o en espera (waiting): Está a la espera de que suceda un evento.
• Terminado (terminated): Finaliza su ejecución. Muere.
Además de estos estados, en algunos sistemas también existe un estado denominado suspendido
(suspend), que se produce cuando un proceso se suspende y es desplazado a memoria secundaria.
En esta situación, el proceso puede quedar a la espera de un evento (waiting suspend) o suspendido
temporalmente pero listo para ejecutarse (ready suspend).
Un proceso puede cambiar de estado cuantas veces sea necesario, pero nunca puede estar en más de
un estado a la vez.
El objetivo final de un proceso es procesarse, es decir, estar en ejecución durante el tiempo que sea
necesario para ser procesado. Sin embargo, un procesador sólo puede ejecutar un proceso a la vez.
Por ello, se necesitan mecanismos para que los diferentes procesos que compiten por la CPU
puedan hacerlo de la forma más eficiente y beneficiosa para el sistema.
3. Creación de procesos
La creación de un proceso se hace a través de la llamada al sistema "crear proceso" desde otro
proceso denominado proceso padre. El proceso resultante se denomina proceso hijo.
Como se puede deducir, debe existir un proceso inicial con la capacidad de pedir al sistema que se
cree un proceso. Este proceso creador es de vital importancia en los sistemas operativos y
constituye la raíz del árbol de procesos.
Los procesos se marcan en su creación con un número único llamado identificador de proceso
(PID), que es un entero positivo entre 0 y 65535. Salvo el proceso raíz, todos los procesos llevan
dos números:
2
• El PID (Process Identifier) que lo identifica a él.
• El PPID (Parent Process Identifier) que identifica a su padre.
Después de que un proceso genera un hijo, ambos continúan ejecutándose desde el punto en el que
se hizo la creación.
4. Terminación de procesos
Generalmente un proceso finaliza su ejecución cuando pasa al estado terminado y le pide al sistema
que lo elimine utilizando la llamada al sistema "exit".
Los procesos hijos pueden ser eliminados cuando el proceso padre quiera. Esto se denomina matar
un proceso y es habitual cuando:
Hay que prestar especial atención al hecho de que un proceso no debería terminar hasta que todos
sus hijos lo hagan. Sin embargo, las operaciones sobre procesos no son fiables al 100% y se pueden
dar anomalías en la gestión de los procesos:
• Procesos huérfanos. Se denominan así a los procesos que quedan en el sistema cuando su
padre ha finalizado.
• Procesos zombies. Son procesos que han finalizado pero su padre los mantiene como vivos.
Este tipo de procesos suelen ser fruto de errores de programación o de fallos del sistema. Al
contrario que los procesos huérfanos, los zombies no son adoptados por el proceso inicial
sino que tienden a eliminarse para evitar el consumo de recursos.
5. Modelos de proceso
La forma en que un sistema se organiza para gestionar sus procesos da lugar al modelo de proceso.
Los sistemas operativos actuales pueden seguir los siguientes modelos:
Modelo de 2 estados. Es el modelo más simple. El proceso, tras crearse pasa al estado no-
ejecutado, a la espera de entrar en ejecución. Cuando entra en ejecución, puede ejecutarse por
completo (y morir) o hacerlo por partes.
3
Modelo de 3 estados. El modelo anterior es ideal para procesos sin prioridades y que siempre estén
listos para ejecutarse. Sin embargo, esto no siempre sucede y algunos pueden necesitar esperar por
un suceso (que esté listo un archivo, que esté disponible un dispositivo de E/S,..). Para ello, en este
nuevo modelo se divide el estado no-ejecutado en dos: preparado y bloqueado, cada uno con su
propia cola de procesos.
Modelo de 5 estados.
Para mejorar la gestión de los procesos, al modelo anterior se le añaden dos estados extremos:
nuevo y terminado, encargados de controlar los procesos existentes en el sistema (en nuevo se dan
de alta y en terminado se dan de baja).
Modelo de 7 estados. Los procesos a la espera de ser ejecutados residen en memoria principal (en
las colas de preparado y bloqueado). Para evitar que la RAM se colapse se hace una variación en el
modelo anterior, creando unas colas similares a las ya existentes pero en memoria secundaria. Esto
da lugar a los estados suspendido-bloqueado y suspendido-preparado. Entre las correspondientes
colas se produce una operación de intercambio cada vez que se pasa un proceso de una a otra. Hay
que tener en cuenta que esta operación consume recursos y tiempo de CPU.
4
6. Cambio de contexto
El proceso pasa gran parte de su vida esperando ser ejecutado. Cuando un proceso en ejecución ha
de dejar paso a otro proceso, pero su tarea no ha sido completada, se espera que la próxima vez que
se ejecute continúe donde lo había dejado. Esta operación es conocida como cambio de contexto
(context switch).
Todas estas operaciones son gestionadas y supervisadas por el procesador, lo cual quiere decir que
en el tiempo que dura el cambio de contexto no se puede ejecutar ningún otro proceso. Por ello, es
muy importante que el cambio de contexto se realice lo más rápidamente posible, ya que es tiempo
perdido.
Cuando el cambio de contexto se hace sin salir de memoria principal, el tiempo y los recursos
empleados no son excesivos; pero en los cambios de contexto entre memoria principal y secundaria
la situación cambia, siendo más lenta y costosa.
La técnica de cambiar de contexto es útil cuando se quiere dar tiempo de ejecución a todos los
procesos, pero un uso excesivo del cambio de contexto puede ser contraproducente ya que el
procesador estaría más tiempo ocupándose de las acciones asociadas a los cambios de contexto que
a la ejecución de los procesos que se intercambian.
5
7. Planificación de procesos
Los procesos no se ejecutan en cualquier orden, sino que siguen un orden establecido por el sistema
operativo. La forma en la que el sistema operativo gestiona los procesos es lo que se conoce como
planificación y la herramienta que lo hace recibe el nombre de planificador (en inglés, scheduler).
La dificultad de la planificación radica en que no se puede saber, a priori, qué procesos estarán
compitiendo por un recurso ni tampoco el contexto que se generaría en caso de concedérselo. Por
ello, para controlar el acceso de los procesos a los recursos, el planificador puede seguir dos tipos
de política:
• Política no expropiativa: Una vez que el proceso accede al recurso, se permite que haga
uso de él hasta que ya no lo necesite.
• Política expropiativa: Se proporciona acceso al recurso para un proceso pero, en un
determinado momento, se puede ceder el recurso a otro proceso diferente, para lo cual se le
retirará el acceso al primero (pasando a estado suspendido, bloqueado o preparado).
La política expropiativa es mucho más justa cuando existen procesos muy diferentes, ya que
permite, por regla general, que ningún proceso acapare el recurso. Por otro lado, es más compleja y
consume más recursos.
8. Niveles de planificación
La planificación es demasiado compleja como para realizarse en una única fase. Los sistemas
operativos, en general, disponen de tres niveles de planificación, cada uno con su planificador:
6
9. Algoritmos de planificación
Los planificadores funcionan aplicando algoritmos de gestión. De entre todos los existentes,
destacamos estos:
7
• Algoritmo SJF (Shortest Job First).
Intenta reparar el problema de FCFS pero, en este caso, los procesos largos se ven desfavorecidos y
pueden retrasarse en su ejecución continuamente.
Una vez que el proceso entra en ejecución, se ejecuta por completo, aunque haya en cola procesos
más cortos.
En el caso de que existan procesos en cola más cortos, se expropia el proceso en ejecución y se
ejecutaría el de la cola.
8
• Algoritmo RR (Round Robin).
Utiliza una organización en cola circular: Los procesos se ejecutan en cola y cuando acaba el último
se sigue con el primero. A cada proceso se le asigna un tiempo de uso de CPU denominado cuanto.
El problema de este algoritmo está en la fijación del cuanto, ya que cuantos demasiado largos
degeneran en FCFS y cuantos demasiado cortos disminuirían el rendimiento por los continuos
cambios de contexto de los procesos.
Como se puede observar, cada algoritmo tiene sus ventajas y sus inconvenientes. En la práctica se
utiliza un sistema híbrido de varias colas en las que se aplican diferentes algoritmos según las
necesidades y el momento concreto con la finalidad de optimizar los recursos y los tiempos de
respuesta del sistema.
9
10. Hilos de ejecución (Threads)
El manejo de los procesos resulta bastante complejo. Con el avance tecnológico producido en los
microprocesadores con la introducción de los núcleos surgió el concepto de hilo (thread) o
proceso ligero. Con la introducción de los hilos, los procesos pasan a denominarse procesos
pesados.
Un hilo es la parte de un proceso que puede ser ejecutada de forma independiente. De esta
manera, un proceso estará constituido por al menos, un hilo, existiendo la posibilidad de que
tenga varios.
La capacidad (del sistema operativo) de mantener varios hilos de ejecución dentro del mismo
proceso se conoce con el nombre de multihilo. Si no existe, entonces se habla de monohilo. En
general, todos los sistemas operativos modernos son multihilo.
Trabajar a nivel de hilos tiene grandes ventajas sobre hacerlo a nivel de procesos: Al tratarse de
entidades mucho más ligeras, los tiempos empleados para su manejo (creación, terminación, cambio
de estado y de contexto) son mucho menores respecto a los procesos. El tiempo para crear un hilo
es mucho menor que para crear un proceso.
Los hilos hacen más rápida la comunicación entre procesos, ya que al compartir memoria y
recursos, se pueden comunicar entre sí sin invocar el núcleo del SO.
• Bloque de control del hilo: Similar al PCB pero específico para el hilo.
• Pila de ejecución: Estructura que contiene la información de estado del hilo (punteros,
registros, etc.).
Teniendo esto en cuenta y aplicándolo a los diferentes tipos de procesos:
➔ Procesos monohilo.
En este tipo de procesos no existe el concepto de hilo como tal y la representación del proceso es
similar a la explicada al comienzo de la unidad.
➔ Procesos multihilo.
10
Sólo existe un BCP y un espacio de direcciones asociadas al proceso pero, para cada hilo, hay un
bloque de control y una pila de ejecución separados.
Dentro de un mismo proceso los hilos comparten código, datos y recursos del sistema.
Los hilos están pensados para que no sean independientes entre sí. De este modo, es posible que un
hilo pueda acceder a la pila de otro hilo y modificarla. En esta interacción y en el tiempo que se
emplea en ella (mucho menor que la comunicación entre procesos) reside, fundamentalmente, su
potencialidad.
• Crear: en general, al crear un proceso se crea también un hilo para ese proceso que se
colocará en la cola de preparados. De ese hilo pueden salir nuevos hilos (hilos hijos).
• Terminar: cuando se termina un hilo, se libera todo lo asociado a él (el bloque y su pila).
• Bloquear: sucede cuando un hilo necesita esperar a que suceda un evento. Se comporta
como si fuera un proceso, pasando al estado bloqueado y cediendo el procesador a otro hilo.
Puede darse el caso de que el bloqueo de un hilo conlleve el bloqueo de todo el proceso, es
decir, de todos los hilos que componen el proceso.
• Desbloquear: ocurre cuando el evento por el que se esperaba sucede y el hilo pasa a la cola
de preparados. Al igual que antes, si un hilo bloqueaba todo su proceso, el desbloqueo de un
hilo puede conllevar el desbloqueo de todo el proceso, es decir, de todos los hilos que
componen el proceso.
Como se ve, los hilos tienen un comportamiento estacional similar a los procesos. Este hecho unido
a que los hilos son mucho más ligeros que los procesos, hace que los tiempos de creación,
terminación y cambios de estado (y de contexto) sean mucho más reducidos, con lo que se gana en
eficiencia.
• Interrupción. Se produce cuando se quiere que la CPU deje de ejecutar el proceso en curso
y pase a realizar otra función de quien hace la interrupción. Cuando la CPU realiza esa
11
función se dice que está atendiendo la interrupción. Las interrupciones pueden darse a dos
niveles:
◦ Nivel de software: El usuario realiza una llamada al sistema (para hacer uso de un
recurso del núcleo).
◦ Nivel de hardware: Un dispositivo (hardware) requiere la atención de la CPU para
ejecutar su driver.
Cuando se produce una interrupción se pasa el control al sistema operativo, quien salva el contexto
del proceso que se estaba ejecutando y se analiza la interrupción. Las interrupciones están
catalogadas y el sistema operativo dispone de rutinas especiales para manipular cada tipo de
interrupción. Una vez se ha atendido la interrupción la CPU continúa con su anterior tarea.
14. Demonios
Existe un tipo muy particular de proceso que recibe el nombre de demonio. Un demonio es un
proceso que se ejecuta en segundo plano sin necesidad alguna de interacción con el usuario.
En los sistemas Windows los demonios son denominados servicios, pues su finalidad es ofrecer un
servicio al usuario.
Los demonios no disponen de interfaz, ni gráfica ni textual, ya que no necesitan comunicarse con el
usuario. Tampoco hacen uso de los dispositivos de E/S comunes para notificar resultados o errores.
En su lugar, vuelcan toda esta información en un archivo LOG o la comunican a otros demonios
encargados de recopilar este tipo de datos.
A través de la pestaña Procesos podemos gestionar los procesos que están activos en el sistema.
Por defecto sólo se muestran los procesos iniciados por el usuario pero podemos visualizar todos
activando la opción "Mostrar procesos de todos los usuarios".
Para incluir o modificar las columnas de datos de cada proceso iremos a Ver > Seleccionar
columnas y escogeremos los campos que nos convengan.
12
Para cada proceso podemos realizar, entre otras, las siguientes acciones (haciendo clic derecho
sobre él):
13
Mediante la pestaña Servicios podemos administrar los servicios del sistema. En el listado
aparecen todos los servicios, tanto si están en activo como si no. No es posible cambiar la
información que se muestra sobre el servicio, como sucedía con los procesos. Sobre cada servicio se
pueden realizar estas acciones (clic derecho sobre él):
14
línea de comandos clásica (CMD.EXE) y otra, más avanzada, que ofrece Microsoft de forma
gratuita desde 2006 y que en la actualidad se incluye de forma predeterminada en todos sus sistemas
operativos: PowerShell.
Get-Process
Si la salida es demasiado larga y no cabe en la ventana, puedes ir mostrando poco a poco con el
comando more:
Get-Process | more
Si necesitamos sólo algunos de los procesos, podemos establecer un filtro. Por ejemplo, por su
nombre:
Get-Process -Name fi*
En nuestro caso, si queremos ver todas las propiedades del proceso explorer, escribiremos algo
como esto:
Get-Process -Name explorer | Format-List *
Para aplicar condiciones más complejas, por ejemplo obtener los procesos con Id mayor a 500.
Get-Process | Where-Object {$_.Id -gt 500}
15
Esto detendrá todos los procesos cuyo nombre comience por el texto firefox.
Otra forma sería utilizar el argumento -id y el número de proceso. Por ejemplo, si el Bloc de notas
se está ejecutando con el ID 6928, para detenerlo:
Incluso podemos hacer que el cmdlet nos pida confirmación antes de parar el proceso. Para ello,
basta con utilizar el argumento -Confirm:
Debemos tener en cuenta que para detener algunos procesos deberemos tener permisos
administrativos.
De este modo, podríamos ejecutar el Bloc de notas escribiendo una orden como esta:
Start-Process notepad.exe
Start-Process -Filepath win32calc -WindowStyle Maximized
Para el caso de los servicios, PowerShell nos proporciona los siguientes cmdlets:
Get-Service
Stop-Service
Start-Service
Suspend-Service
16
Antes de abordar la gestión de los procesos en sistemas Linux conviene tratar un concepto bastante
interesante: El plano de un proceso. Cuando el usuario está interactuando con un proceso, se dice
que este proceso está en primer plano. Cuando el proceso se ejecuta "en silencio", sin necesidad de
que el usuario interactúe con él se dice que el proceso está en segundo plano. Un ejemplo típico de
procesos en segundo plano son los demonios.
Sólo un proceso puede estar en primer plano en un momento dado. Por el contrario, en segundo
Por otro lado, un proceso puede pasarse de primer plano a segundo plano, y viceversa, cuantas
veces se desee.
La pestaña Procesos muestra todos los procesos (incluidos los demonios) que están asociados al
usuario. A través de la opción Ver del Monitor del sistema podemos seleccionar otro criterio de
visualización, pudiendo mostrar todos los procesos del sistema o solamente aquellos que están en
estado activo.
Para cada proceso, se pueden aplicar una serie de operaciones de entre las que destacamos estas:
(a) Comando ps
El comando ps (abreviatura de Process Status) muestra un listado con el estado de los procesos.
Lee la información de los archivos que se encuentran en /proc. Tiene una gran cantidad de opciones
(man ps o ps –help).
Esta orden admite opciones de las versiones ps propias de System V (precedidas por un guión), de
BSD (sin guiones) y de GNU (precedidas por dos guiones).
• Salida estándar de ps. Muestra todos los procesos lanzados por el usuario en la consola
actual.
#ps
17
PID TTY TIME CMD
22473 pts/0 00:00:00 find
25510 pts/0 00:00:00 ps
31026 pts/0 00:00:00 bash
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 21397 0.0 6.6 1025260 132240 ? Sl Apr20 2:43 /usr/lib64/firefox/firefox
root 21427 0.0 0.2 261396 4028 ? Sl Apr20 0:00 /usr/lib/at-spi2/at-spi-bus-launcher
root 21434 0.0 0.4 292912 9100 ? Sl Apr20 0:00 /usr/lib/mozilla/kmozillahelper
18
Las opciones que podemos aplicar a ps no van más allá de mostrar la información de una u otra
forma, más o menos extensa, o como ya sabemos, filtrar los resultados con grep. Sea cual sea el
método de muestra que elijamos, siempre habrá dos constantes, el PID y el comando o nombre del
programa. Aquí un ejemplo de filtrado sobre ps para obtener únicamente los procesos pertenecientes
a bash.
SALIDA COMANDO PS
En las columnas que devuelve ps podemos encontrar:
Columnas salida PS
PID Process ID, número único o de identificación del proceso.
PPID Parent Process ID, padre del proceso
UID User ID, usuario propietario del proceso
TTY Terminal asociada al proceso, si no hay terminal aparece entonces un '?'
TIME Tiempo de uso de cpu acumulado por el proceso
CMD El nombre del programa o comando que inició el proceso
RSS Resident Size, tamaño de la parte residente en memoria en kilobytes
SIZE Tamaño virtual de la imagen del proceso
NI Nice, valor nice (prioridad) del proceso, un número positivo significa menos tiempo
de procesador y negativo más tiempo (-19 a 19)
PCPU Porcentaje de CPU utilizado por el proceso
STIME Starting Time, hora de inicio del proceso
STAT Status del proceso (ver siguiente tabla)
Estados de un proceso
R Runnable, en ejecución.
S Sleeping, proceso en ejecución pero sin actividad por el momento, o esperando por
algún evento para continuar (durmiendo por menos de 20 segundos).
T sTopped, proceso detenido totalmente, pero puede ser reiniciado
Z Zombie, difunto, proceso que por alguna razón no terminó de manera correcta, no debe
haber procesos zombies
D uninterruptible sleep, son procesos generalmente asociados a acciones de IO del sistema
X dead, muerto, proceso terminado pero que sigue apareciendo, igual que los Z no
deberían verse nunca
I Idle (proceso durmiendo durante más de 20 segundos)
19
(c) Comando top
Top es otro gestor de procesos integrado en la mayoría de sistemas Linux. Mientras que ps nos
muestra un listado de procesos estático, es decir, nos informa de los procesos, nombres, usuarios o
recursos que se están usando en el momento de la petición; top nos da un informe en tiempo real de
los mismos.
20
• f: permite determinar las columnas que se van a mostrar de cada proceso. Los campos a
mostrar están marcados con un *.
• o: permite ordenar los procesos por una determinada columna.
Si no se define una señal, por defecto se envía la señal 15 (SIGTERM), que corresponde con la
solicitud de terminación del proceso.
Con el comando siguiente podemos ver la lista de todas las señales que podemos enviar a un
proceso.
kill -l
En el caso de encontrarnos ante un proceso que “no quiere cerrarse” por la vía diplomática que le
ofrecemos con TERM, pasaremos a eliminar dicho proceso por la fuerza ejecutando el comando kill
con el siguiente argumento:
El comando kill además de para finalizar procesos, también podemos usarlo para reiniciar ciertos
servicios. Uno de los que más necesita reiniciarse suele ser Apache. La mayoría de ellos responde al
argumento ‘HUP’ (Hang up) de kill. Mediante el siguiente comando, el servicio perteneciente a
Apache, se reiniciará y volverá a cargar el fichero de configuración, permitiéndonos ver si los
cambios han surtido efecto y volviendo a dar servicio a los usuarios.
21
preparado para trabajar con nombres de proceso en lugar de con PID. Es decir estos dos comandos
harán exactamente lo mismo:
kill -9 3484
pkill -9 gedit
• Para suspender el trabajo, con el fin de poderlo reanudar más tarde, tendremos que
presionar la combinación de teclas Ctrl+Z
$ sleep 1000
^Z
[1]+ Detenido sleep 1000
22
(j) Operador &
El operador & se utiliza para pasar un proceso a segundo plano.
gedit &
(k) Comando nohup
El comando nohup se usa para pasar un proceso a segundo plano haciéndolo inmune a los hangup
(cuelgues). De una forma simple, se evita que el proceso se cuelgue cuando se cierra la consola.
nohup proceso
(l) Comandos fg y bg
Cuando un proceso está detenido, se pueden utilizar los comandos fg (foreground) y bg
(background) para lanzarlo en primer plano o en segundo plano, respectivamente.
En lugar de utilizar el PID se hace uso del número del trabajo, que es visible ejecutando el comando
jobs.
De entre todos los sistemas operativos disponibles, vamos a estudiar cómo es el proceso de inicio
para sistemas Windows y para sistemas Linux.
Es conveniente resaltar que el proceso de inicio del sistema operativo, incluso tratándose del mismo
tipo de sistema operativo, puede variar de unas versiones a otras e incluso es dependiente del tipo de
procesador para el que se instala (x86 o x64).
• Secuencia de inicio.
Se ejecuta el gestor de arranque (BOOTMGR) y se seleccionará el sistema operativo para iniciar.
Posteriormente se hará una detección del hardware instalado.
23
Se invoca al archivo WINLOAD.EXE para que cargue el archivo NTOSKRNL.EXE, que está
considerado como el núcleo del sistema operativo. También se carga el archivo HAL.DLL, capa
intermedia entre el núcleo de Windows y el hardware.
Tras la carga de HAL se realiza la carga de la clave del registro HKEY_LOCAL_MACHIME\
SYSTEM. El contenedor SELECT determina qué controlador debe cargar y el contenedor
CONTROLSET proporciona los datos de configuración utilizados para controlar el sistema
(controladores, servicios,…).
Esta secuencia finaliza con la inicialización del subsistemas y servicios de orden superior y el
lanzamiento del subsistema Win32 (en sistemas x64 el subsistema es WoW), encargado de habilitar,
entre otros, el interfaz de usuario, que comienza con el proceso WINLOGON.
La secuencia de inicio en sistemas Linux sigue un esquema muy similar al explicado para
Windows:
• Secuencia de inicio.
Se ejecuta el gestor de arranque (GRUB...) y se seleccionará el sistema operativo para iniciar.
Posteriormente se hará una detección del hardware instalado.
24
Posteriormente se ejecuta el comando /etc/rc.sysinit para realizar un inicio básico del sistema,
ejecutando los procesos asociados al nivel de ejecución establecido.
El nivel de ejecución (runlevel), determina qué grupo de procesos se van a ejecutar cuando se inicie
el sistema en ese nivel.
Existen varias convenciones en cuanto al número de runlevels, siendo lo más frecuente asumir que
existen 7, de los que el 0, el 1 y el 6 están reservados. El resto de niveles pueden personalizarse.
En las distribuciones de Linux que no disponen de systemctl, el archivo /etc/inittab se usa para
establecer el valor por defecto de run level del sistema. Este será el valor con el que el sistema
iniciará. Las aplicaciones que son iniciadas por el proceso init se encuentran en /etc/rc.d
En este directorio encontramos una carpeta para cada run level rc0.d, rc1.d, etc.
Los 7 niveles de ejecución (runlevels) estándar
Nivel de Nombre o
Descripción
ejecución denominación
0 Halt Cierre del sistema (Apagado).
No configura la interfaz de red o los demonios de inicio, ni
Modo de usuario
permite que ingresen otros usuarios que no sean el usuario root,
1 único
sin contraseña. Este nivel de ejecución permite reparar
(Monousuario)
problemas, o hacer pruebas en el sistema.
2 Multiusuario Multiusuario sin soporte de red.
Multiusuario con
3 Inicia el sistema normalmente.
soporte de red.
4 No definido Personalizable por el usuario.
Multiusuario gráfico
5 Similar al nivel de ejecución 3 + GUI.
(X11)
6 Reinicio Se reinicia el sistema.
La mayoría de servidores Linux no disponen de interfaz gráfica, por tanto inician con runlevel 3.
Los sistemas con interfaz gráfica inician con runlevel 5.
En el caso de las distribuciones que implementan systemctl, los runlevel reciben el nombre de
targets. En estos sistemas, el cambio de target se realiza de la siguiente forma:
25