Download Proceso de Inicio en Sis basados en Windows, M Proceso de Inicio
Document related concepts
Transcript
BENEMERITA UNIVERSIDAD AUTONOMA DE PUEBLA Facultad en Ciencias de la Computación Materia: Sistemas Operativos Proceso de Inicio en Sistemas Operativos basados en Windows, Mac OS X y Linux Profesora: Carmen Cerón Garnica Alumno: Tonatiuh Tecuanhuey Tecuatl Ahiezer Herdez Gonzalez Jesus Aviles Trinidad Juventino Tlachi Cuanenemi Antonio Morales Cid Verano 2008 Proceso de inicio en Windows XP, Windows 2000 y Windows 2003 Uno de los procesos mas ocultos que existe en un sistema operativo grafico como Windows XP, es el proceso de inicio del sistema o BOOTING; este proceso es además de todo un proceso critico en el sistema, dado que en el se define el comportamiento posterior del sistema. Inicializar el sistema cuando se prende un equipo es un proceso directo para la mayoría de los usuarios, pero cuando se habla de administración se debe conocer este proceso en detalle para poder resolver muchos de los problemas relacionados con el arranque y configuración de dispositivos. Si usted es administrador de una red de equipos con Windows XP, o Windows NT5 (Windows 2000, Windows 2003) conocer el proceso le ahorrara bastantes horas al mes en la resolución de problemas de sus clientes. El primer paso de todo el proceso de encendido de un sistemas es el denominado POST (Power-on Self Test) este proceso abarca una comprobación eléctrica del sistema es realizado por la BIOS, y abarca los siguientes pasos: • • • • PROM Checksum: esta verificación se hace para lograr validar que la información almacenada en la memoria ROM del sistema es igual a la información de los dispositivos instalados, es una suma de comprobación. Segment Map Addres: en este punto se prepara la memoria para recibir la información, se envía una serie de códigos que luego son leídos para probar que la memoria es completamente funcional. Page Map Address: divide la memoria en segmentos de paginación, y se realiza la comprobación de paginación.. Se lee la información de la memoria C-MOS para ser usada en el resto del proceso. Una ves el sistema ha realizado las comprobaciones eléctricas y físicas (POST) se procede a buscar el sistema operativo que se desea cargar, en muchos sistemas se puede definir el orden de la búsqueda, este orden corresponde a BOOT ORDER en la información almacenada en la BIOS. Depende del orden definido, la secuencia tomara caminos diferentes, en general se dice que la mayoría de los sistemas se pueden programar para que hagan la búsqueda en los siguientes dispositivos: • • • • • • Floppy disk CD-ROM Disco duro Adaptadores de red (si el adaptador soporta este sistema) Unidades de ZIP O almacenamientos externos. Para esta explicación asumiremos que el sistema tendrá el siguiente orden de búsqueda unidad de discos removible (floppy) unidad de CD-ROM, disco duro El sistema inicia la busque da de un Floppy en el drive, si se encuentra este se procede a verificar si tiene o no sistema operativo (archivos de carga inicial) son los archivos básicos que se crean cuando se hace un formato con la opción “/s” de ser asi carga el sistema operativo y el formato de archivos. (esto solo es posible para sistemas Windows 9x, dado que son los que tradicionalmente funcionan con sistema de archivo FAT y/o FAT32; de no tener un Floppy con sistema operativo se obtiene un error del siguiente tipo: Non-system disk or disk error Replace and press any key when ready De tal forma se puede saber que el disco removible no tiene la capacidad de iniciar el sistema, en caso de no haber discos en la unidad se procede a tratar de iniciar el sistema desde otro dispositivo alterno, en nuestro caso el CD-ROM, de haber un disco de instalación de Windows XP, pregunta si desea iniciar por CD el sistema, si así lo desea debe oprimir cualquier tecla para iniciar desde el CD, en caso contrario se procede a la búsqueda del sistema en la unidad de disco duro. Cuando se intenta iniciar el sistema por la unidad de disco duro se busca el MBR ( o master boot record) que son los primeros 512byes de todo disco duro que le dicen al sistema como proceder para lograr el inicio del sistema, adicionalmente contiene los datos de la tabla de partición. En caso de el disco duro no tener un sistema operativo instalado, o en caso de tener problemas con MBR, el mensaje de error que tendrá será el siguiente: Invalid partition table Error loading operating system Missing operating system BOOT: Couldn't find NTLDR NTLDR is missing Desde este punto usted iniciara el proceso de inicialización del sistema operativo como tal, este proceso con lleva la carga en un orden especifico de una serie de archivos; y el cambio del modo de operación del procesador es el primer paso. El proceso de boot difiere a partir de este punto en los equipos con procesador X86 y los equipos con procesador ITANIUM o de 64bits. Para este articulo asumiremos los procesadores X86 como base de estudio dado que son actualmente la mayoría (al 2003). X86 Al Inicio el procesador después de encendido el equipo o reiniciado el procesador arranca en modo REAL esto implica que el procesador es puesto en modo de compatibilidad, lo que quiere decir que le brinda soporte a aplicaciones desarrolladas para 8Bits y 16bits, así se ofrece compatibilidad hacia atrás con aplicaciones antiguas y DOS, para poder aprovechar todo el rendimiento del procesador se debe cambiar de modo REAL a modos EXTENDIDO o Enhanced. Este cambio en los procesadores de familia X86 se hace por medio de software y se puede realizar sin necesidad de reiniciar el equipo, este cambio fue posible desde la serie 486 de Intel. El cambio es realizado por el programa NTLDR. Al hacer este cambio se puede además tener accesos a porciones superiores de memoria puesto que hasta este punto el sistema solo tiene acceso a los primero 640Kb de memoria. Carga del sistema de archivos La carga del sistema de archivos se realiza solo después que el sistema tiene un procesador de 32bits disponible, el sistema de archivos según sea el caso será NTFS, FAT o FAT32; en este punto es que en realidad se puede acceder a la estructura de árbol de la partición y se puede proceder a la lectura de toda la configuración, puesto que hasta este punto solo se podía acceder a los archivos que estuvieran en la raíz de la partición ( para la mayoría de los sistemas Windows C:). Carga de manejador de BOOT.INI En este punto se carga por medio de NTLDR de el archivo BOOT.INI, el cual permite en sistemas con varios sistemas operativos seleccionar cual de ellos desea iniciar. Si el equipo no tiene varios sistemas operativos, se procede ala fase de detección de hardware que permite a la parte lógica reconocer la parte física en el equipo. Detección de hardware Este proceso se lleva acabo por medio del NTDETECT.COM archivo que da la información necesaria al KERNEL de Windows para iniciar de manera apropiada, entre otros datos este sistema busca los perfiles de hardware que se han podido crear y brinda la posibilidad de selección de los mismos para cargar la configuración mas apropiada según el caso; en los sistemas portátiles, esto será muy importante debido a que permite habilitar i no dispositivos de consumo elevado como tarjetas de red o módems, que de estar permanentemente activos drenarían la pila de una manera muy rápida. Adicionalmente se hace la detección de los sistemas de ahorro de energía tipo ACPI incorporados en las torres ATX y en los equipos portátiles. Dado que el reconocimiento de hardware puede ser uno de los puntos mas problemáticos sobre todo cuando se instalan nuevos dispositivos que no son de tipo PLUG AND PLAY nos detendremos un poco para que sistemas en especifico se reconocen en esta fase; la lista de sistemas que se reconocen es la siguiente: • • • • Firmware del sistema Tipos de Buses y adaptadores Adaptadores de video. Teclados • • • • • Dispositivos de entrada Unidades de disco fijo (disco duro) Unidades de disco removible (floppy) Puertos paralelo y seriales Dispositivos instalados en buses ISA En el apartado de Firmware cabe anotar que se debe hacer hincapié en que el sistema ACPI juega un papel vital puesto que la carga de controladores varia según si el sistema es o no compatible con dicho sistema, dado que se debe cargar determinados controladores, así como reservar recursos para su manejo de manera apropiada. Debido a que el sistema Windows ha sido diseñado para poder ser ejecutado en una amplia variedad de sistemas, se debió diseñar una capa de abstracción de hardware, que le permitiera adaptarse a las distintas configuraciones de procesador y modos de funcionamiento, por el contrario de los sistemas LINUX que se puede recompilar el Kernel para poder extraer el máximo de cada familia de procesadores, y se usa el modo genérico solo en maquinas de usuario final. Carga de KERNEL La carga del Kernel de sistema operativo inicia por ejecutar el sistema de abstracción mencionado con anterioridad, a este se le denomina HAL ( o capa de abstracción de hardware por sus siglas en INGLES) y esta ubicado en el archivo HAL.DLL; según sea el sistema en el proceso de instalación se ha seleccionado entre un conjunto de archivos genéricos que al ser copiado se renombran como HAL.DLL así: ACPI Multiprocessor PC …………………………….…...Halmacpi.dll ACPI Uniprocessor PC ……………………….…………...Halaacpi.dll Advanced Configuration and Power Interface (ACPI) PC …Halacpi.dll MPS Multiprocessor PC …………………………………….Halmps.dll MPS Uniprocessor PC ………………………..……………..Halapic.dll Standard PC ………………………………………………..…….Hal.dll Compaq SystemPro Multiprocessor or 100% Compatible … ..Halsp.dll Carga de dispositivos En razón a que el proceso de carga desde este punto comprende la activación de un gran numero de dispositivos y a la cantidad de información de activación de cada dispositivo toda la información para dicho procesos se encuentra almacenada en un conjunto de entradas dentro del registro, bajo la llave HKEY_LOCAL_MACHINESYSTEM entrada a la cual se le hace una copia o clonación que permite ir validando y modificando el estado de cada dispositivo, para asegurar el correcto funcionamiento del sistema y de los dispositivos individuales. Cada entrada dentro de este conjunto informa al sistema operativo cuando se debe cargar el dispositivo y sus respectivos controladores. Así: 0 Boot 1 System 2 Auto load 3 Load on demand 4 Disabled Manejador de sesión Una vez se han cargado los dispositivos, se inicia el manejador de sesión, el que es el encargado de pasar de modo texto a modo grafico, y otras funcionalidades así: • • • • • • Creación de las variables de ambiente Iniciar el modo del Kernel (ubicado en systemrootSystem32Win32k.sys) el que se encarga de cambiar de modo texto a modo grafico, para que las aplicaciones basadas en Windows puedan ser ejecutadas de aquí en adelante, es el encargado de permitir que las aplicaciones puedan desplegar en modo grafico la información y se puedan comunicar a su vez con el sistema operativo. Inicia el modo de usuario que permitirá de aquí en adelante la interacción del usuario con el sistema todo ello implementado en systemrootSystem32Csrss.exe. Inicia al manejador de inicio de session (winlogon) ubicado en systemrootSystem32Winlogon.exe. Crea memoria virtual adicional para cargar mas información del sistema en operación. Ejecuta acciones tardías para operaciones del registro, como la de reiniciar el sistema por cambios en el mismo, por ejemplo instalaciones de nuevos dispositivos encontrados u otros que requieran reiniciar el sistema después de su configuración. El subsistemas Windows y el de modo de usuario nunca tiene accesos directo a la capa de hardware del sistema, esto evita dependencia de sistemas específicos, en caso de un sistema requerir mas memoria para su ejecución solicita la misma al modo Kernel mas y el se encarga de gestionar la creación de una mayor archivo de paginación. El administrador de sesión se encarga adicionalmente de buscar en el registro varias llaves de configuración e inicio para procesarlas y terminar el arranque del sistema las llaves de procesamiento son las siguientes: HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession Manager: procesa las entradas previas al inicio de servicios, así como la herramienta de verificación de discos Autochk.exe que es el equivalente a Chkdsk de DOS. Para garantizar la integridad del disco y las particiones. HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerSubsystems: inicia los sub-sistemas de modo de usuario Csrss.exe. HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesserviceman: es la seccion encargada de iniciar los servicios de autocarga dentro del sistema. Hasta este punto no se ha hecho la carga del subsistema de seguridad dentro de equipo. Sistemas de Seguridad Cuando se inicia el procesos cada procesos tiene una entrada de control de acceso (ACL) que identifica los permisos que tiene el mismo en el sistema, pero depende de si el sistema es parte de un dominio o no, para lograr que el sistema tome las credenciales, se debe cargar un componente especifico que permita la carga de los descriptores de los archivos, este componente es el SRM o monitor de referencia de seguridad, el cual se inicia en el modo de KERNEL y se comunica con el modo de usuario a través de LSA. Pero que es LSA? Es un sistema de seguridad local que permite buscar de manera local si el objeto tiene permisos apropiados, si el objeto tiene los permisos adecuados, se determina por medio de la comunicación de LSA con el registro en el caso local (con la porción de SAM) o si el sistema tiene permisos en el dominio se hará por medio de la comunicación con el directorio activo AD. Desde este punto iniciara la carga de la interfase apropiada para el LOGON; la cual hará las validaciones necesarias a nivel de AD o usuario local según sea el caso. WINLOGON Desde aquí ya vemos interacción con el sistema, aparece la ventana de inicio de sesión interactiva, esta ventana hace posible que digitemos nuestro login y password (el método mas común de autenticación) si el sistema se encuentra en una red 2000 pura o superior el sistema de validación en el directorio activo será Kerberos, en caso de ser una red con maquinas NT o Windows 9x el esquema de autenticación será NTLM, en caso de ser autenticación local se validaran las credenciales ante la sección del registro de usuario (SAM). El proceso desde aquí es relativamente simple, dado que ya todos los servicios deben estar en proceso de inicio o iniciados, lo que debe hacerse es hacer cambios finales al registro, para verificar cualquier cambio de dispositivos. Se verifica las entradas clonadas del sistema de registro para validar cualquier cambio, y actualizarlo; y poder garantizar el correcto funcionamiento de la opción ultima configuración buena conocida (LastKnowGood configuration). La que usted vera si al iniciar el sistema oprime F8 para resolver algún problema de inicio. Se aplican las políticas de seguridad para maquina y usuario permitiendo restringir o garantizar el acceso a ciertos recursos. Estas son las denominadas políticas de grupo. Por ultimo se ejecutan los programas que el usuario haya definido en un perfil como de inicio en la opción inicio o startup enlas entradas del reguistro estas corresponderan a: • HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRunonce • HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionpoliciesExplorerRun • HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionRun • HKEY_CURRENT_USERSoftwareMicrosoftWindows NTCurrentVersionWindowsRun • HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRun • HKEY_CURRENT_USERSoftwareMicrosoftWindowsCurrentVersionRunOnce • systemdriveDocuments and SettingsAll UsersStart MenuProgramsStartup • systemdriveDocuments and SettingsusernameStart MenuProgramsStartup • windirProfilesAll UsersStart MenuProgramsStartup windirProfilesusernameStart MenuProgramsStartup • El ultimo paso En este punto usted tiene un entendimiento bastante alto de todo el proceso, de boot de un sistema operativo WINDOWS tipo 2000, pero esto no seria suficiente si no tenemos en cuenta que existen los dispositivos plug and play, los que se pueden conectar después de iniciado el sistema Si se inserta un dispositivo USB o FIREWIRE (i-1394) el proceso de reconocimiento procede a verificar el bus de datos y ver si se tiene el controlador del bus para poderlo manejar de manera adecuada, si es así se procede a la verificación del FIRMWARE del dispositivo y instalar el DRIVER apropiado para el mismo, en el caso de USB 1.0 o 1.1 se debe reiniciar el sistema si el dispositivo es compatible con USB 2.0 el sistema no deberá reiniciar en la mayoría de los casos. Espero que con este articulo se haya aclarado un poco mas del mundo de inicio del sistema en Windows 2000, XP y 2003 si tiene algún comentario escribanos a angelo@creangel.com Proceso de Inicio en MAC OS X El proceso de arranque de una máquina Mac OS X se puede resumir en cuatro pasos: El primer paso es el arranque de la BIOS, durante este proceso se comprueba el hardware disponible y se elige el sistema operativo a ejecutar. Este primer paso se puede dividir en: • POST (Power-On Self Test) donde se determinar el hardware disponible y se comprueba que exista suficiente memoria, así como que éste está en buen estado. • Open Firmware construye un árbol de dispositivos hardware existentes (una representación jerárquica del ordenador), y elige el sistema operativo a ejecutar. El segundo paso sería la carga del núcleo del sistema operativo. Se carga una imagen del núcleo en memoria. Durante este proceso la máquina suele mostrar el icono con la manzana de Apple. Al acabar la carga del núcleo se lanza el proceso de usuario root, que es launchd. Durante el tercer paso launchd lanza los demonios necesarios para configurar el sistema. Para ello launchd lanza los procesos indicados en el script /etc/rc, así como otro procesos que comentaremos más adelante. Esta es la parte que ha sido optimizada con el uso de launchd. En el cuarto paso launchd lanza loginwindow que es el proceso encargado de autentificar a los usuarios y controlar su sesión. Proceso de Inicio en Linux El proceso de arranque de la mayoría de distribuciones Linux. Es válido para cualquiera de las que usan el "SystemV init setup", es decir, para todas salvo las derivadas de Slackware, ya que esta usa el arranque "estilo BSD" (como FreeBSD, OpenBSD y *BSD, por supuesto :-), que es diferente. Paso 1: EL gestor de arranque (boot manager) El gestor de arranque es un pequeño programa que reside generalmente en el MBR y que presenta un menú que permite elegir que SO (si tiene varios) o que versión de un determinado SO quiere arrancar (diferentes kernels). Lo más habitual actualmente es utilizar GRUB, que tiene varias ventajas sobre el clásico y segundo más actualizado, LILO. Las tareas que debe realizar el gestor de arranque son: 1. Cargar el kernel en memoria. 2. Cargar un ramdisk llamado initrd conteniendo cosas como drivers de disco. 3. Pasarle los argumentos al kernel (por ejemplo, runlevel e init). 4. Comenzar la ejecución del kernel. Paso 2: init El argumento init que el gestor de arranque pasa al kernel es el nombre de un programa. Habitualmente no se pasa ninguno y se utiliza el predeterminado: /sbin/init. Se puede pasar, por ejemplo, init=/bin/sh, y se usará una shell en su lugar. El kernel ejecuta init y este será el proceso encargado de iniciar el resto de los procesos. init es el único proceso que ejecuta el kernel. El proceso init lee entonces el fichero /etc/inittab para ver que tiene que hacer. La sintaxis de este fichero es rara y arcaica, pero no es muy compleja. Para entenderlo hay que saber lo que es un runlevel. Un runlevel es un estado del sistema. Habitualmente existen los runlevels 0, 1, 2, 3, 4, 5 y 6, indicando cada uno de ellos que procesos se deben ejecutar o detener. El runlevel de inicio está determinado en el fichero /etc/inittab, a no ser que queramos iniciar en algún otro de forma ocasional y entonces haremos que el gestor de arranque pase al kernel el runlevel elegido. Paso 2.1: /etc/inittab La líneas que comienzan con # son comentarios. El resto tienen este aspecto: 1:2345:respawn:/sbin/mingetty tty1 Son lineas con 4 campos separados por ":", cuyo significado, según la página man:inittab : id: Sin significado. Un identificador, de hasta 4 caracteres, diferente para cada línea. runlevels: Los runlevels a los que afecta esta línea. action: Describe la acción la acción a realizar. process: El proceso que se ejecutará. Algunas acciones no requieren proceso. El runlevel predeterminado se indica en la línea con la acción initdefault. Por ejemplo: id:5:initdefault: ... indica que el runlevel predeterminado en el arranque será el 5. Si lo queremos cambiar de forma permanente, esta es la línea que debemos cambiar. Cada runlevel ejecuta una configuración de software distinta. En uno puede que exista un servidor web corriendo, y en otro no, en uno podemos tener un login gráfico y en otro no, etc. Con ciertas variaciones dependiendo de la distribución, cada runlevel tiene asignada una configuración determinada. Según se indica en los comentarios de /etc/inittab, (en español): #0 - parar (NO PONER initdefault a 0) #1 - Mono-usuario #2 - Multi-usuario, sin NFS (Como la 3, si no hay red) #3 - Multi-usuario completo #4 - no usada #5 - X11 (modo gráfico) #6 - reiniciar (NO PONER initdefault a 6) Así, por ejemplo, si cambiamos al runlevel 6, reiniciaremos el sistema. Se puede cambiar en cualquier momento de runlevel con el comando telinit (1). Tras seleccionar el runlevel, si estamos en el proceso de arranque, se ejecutan las líneas cuya action sea sysinit, boot y bootwait, en ese orden. En el caso de Mandrake (y otras, como Red Hat), tenemos: si::sysinit:/etc/rc.d/rc.sysinit ...que ejecuta el script /etc/rc.d/rc.sysinit, el cual efectua tareas como cargar un tipo de letra para la terminal, montar sistemas de ficheros, etc. Entonces se tratan las líneas cuya action sea once y wait y tengan en el campo runlevels el runlevel en el que estamos, se ejecutan los comandos asociados y se espera hasta que los comandos de las líneas wait acaban. En Mandrake, para el runlevel 5: l5:5:wait:/etc/rc.d/rc 5 ...el cual inicia todos los servicios configurados para el nivel 5, como veremos a continuación. Paso 3: Servicios (En realidad los servicios comienzan antes de que finalice el paso 2.1) Cuando se instala un programa que necesita correr sin intervención de ningún usuario (por ejemplo, un servidor web), debe proporcionar un script de control, que se encontrará situado en /etc/init.d/ o /etc/rc.d/init.d/ dependiendo de la distribución. Ver Linux/servicios. Para cada runlevel hay una lista de servicios que debe iniciar y una lista de servicios que deben parar. Esta lista, para el runlevel "N", se encuentra en el directorio /etc/rc.d/rcN.d (2). Así, para el runlevel 5, tenemos: K09smb -> ../init.d/smb K15httpd -> ../init.d/httpd S03iptables -> ../init.d/iptables S10network -> ../init.d/network ... Como se ve, la lista no es más que una serie de enlaces a los correspondientes scripts de control del servicio. Los enlaces que comienzan por K son los servicios que deben detenerse (Kill), y los que empiezan por S son los que deben arrancar (Start). Los números indican el orden en que deben detenerse o arrancar.(3) En Mandrake (y Red Hat), hay un servicio particular llamado local que arranca en último lugar (S99local), el cual ejecuta el script /etc/rc.d/rc.local. Si se necesita ejecutar algo al inicio y no se le quiere asignar un nuevo script o un nuevo servicio, se debe añadir al final de este script.(4)* En otras distribuciones hay un directorio dónde añadir sus propios scripts, en lugar de un único fichero. Paso 4: más sobre inittab Ahora init busca las líneas cuya action sea respawn para el runlevel en el que estamos y ejecuta sus procesos. Este tipo de procesos (respawn) son reiniciados cuando terminan, así que estarán en ejecución todo el tiempo que se permanezca en este runlevel. En Mandrake, en el runlevel 5: 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 Estas líneas hacen que se tengan 6 terminales, numeradas del tty1 al tty6, las cuales son las que aparecen habitualmente al pulsar de ALT+F1 a ALT+F6. Otras líneas del fichero /etc/inittab controlan qué ocurre cuando se pulsa CTRL+ALT+Supr o cuando hay un fallo de corriente (avisado por un SAI). Resumen Arranca el gestor de arranque (GRUB o LILO). Esta carga y ejecuta el kernel; este a su vez ejecuta init; e init arranca los servicios del rc elegido, como por ejemplo network, httpd o getty; y getty arranca login; y login arranca una shell, etc, etc. GRUB -> kernel -> init -> servicios de rcN.d