Revision History |
Revision 2.9 |
Minor updates. |
Revision 1.0 |
Initial revision. |
Este documento describe en un lenguaje no técnico los fundamentos de trabajo de computadores tipo PC, sistemas operativos tipo Unix, y la Internet.
Tabla de contenido 60262v
1. Introducción
1.1. Propósito de este documento
1.2. Nuevas versiones de este documento
1.3. Comentarios y correcciones
2. Anatomía básica de su computador
3. ¿Que sucede cuando enciende el compuatdor?
4. ¿Que pasa cuando usted se registra en el sistema?
5. Que sucede cuando usted corre programas desde la ventana de sesión?
6. ¿Como trabajan los dispositivos de entrada e interrupción?
Fundamentos de Unix e Internet. - Parte II
Fundamentos de Unix e Internet. - Parte III
1. Introducción 563p4g
1.1. Propósito de este documento 1u202b
Este documento tiene la intención de ayudar a los s de Linux y de Internet quienes "aprenden haciendo” (learning by doing). Aunque esta es una gran manera de adquirir específicas habilidades, algunas veces nos deja problemas particulares en algunos conocimientos fundamentales. Estos problemas pueden dificultarnos la capacidad de pensar creativamente la solución efectiva de algunos problemas debido a la ausencia de un buen modelo mental sobre lo que realmente esta sucediendo.
Intentaré describir con un lenguaje simple y claro como trabaja todo esto. Este documento ha sido adecuado para personas que usan Unix o Linux en hardware de computadoras tipo PC. Aún así usualmente usaré el termino 'Unix' ya que la mayoría de lo que se describirá es consistente a través de las plataformas y las variantes de Linux.
Voy a asumir que usted esta usando un computador tipo PC Intel. Los detalles difieren ligeramente si usted esta usando un Alpha, un PowerPC o algún otro Unix, y que los detalles básico son los mismos.
No deseo repetir las mismas cosas, así que usted debe poner atención, pero esto no significa que debe aprender cada palabra que lea. Es buena idea solo hojear el documento cuando lo lea por primera vez, y regresar y releerlo unas pocas veces después de que haya digerido lo que haya leído.
Este es un documento en constante cambio. Intentaré crear nuevas secciones en la medida que los s lo soliciten, así que regrese y revise periódicamente.
1.2. Nuevas versiones de este documento 571148
Nuevas versiones de este documento (Unix and Internet Fundamentals HOWTO / COMO de Fundamentos de Unix e Internet) serán periódicamente publicadas en comp.os.Linux.help y comp.os.Linux.announce y news.answers. Estos documentos también serán subidos a varios sitios web y servidores FTP, incluyendo la página de inicio de LDP.
También puede visitar la última version de este documento en Internet...
Este documento ha sido traducido al Polaco y al Español
1.3. Comentarios, sugerencias y correcciones 2g6jo
Si usted tiene preguntas, comentarios o sugerencias sobre este documento,por favor sientase libre de escribir al email de Eric Raymond, en [email protected].Acepto cualquier sugerencia o critica. Especialmente recibo links donde se encuentren detalladas explicaciones sobre conceptos individuales. SI usted encuentra un error en este documento, por favor hágamelo saber para corregirlo en la siguiente versión. Gracias.
Sobre esta traducción al español, comentarios, sugerencias y correcciones a [email protected].
1.4. Recursos relacionados 1o5zj
Si usted esta leyendo este documento buscando como hackear, usted también debe leer el Como Ser un Hacker, Preguntas y Respuestas / How To Become A Hacker FAQ, que contiene links hacia otros útiles recursos.
2. Anatomía básica de su computador 241p3
Dentro de su computador hay un chip de procesamiento que realiza actualmente el proceso de computación. Él tiene una memoria interna (que la gente de DOS/Windows llama "RAM” y la gente de Unix a menudo llama "Nucleo” (El termino en Unix proviene de una vieja costumbre desde cuando las RAM estaban hechas con formas de donas con núcleo de ferrita). El procesador y la memoria viven en la Tarjeta Madre (MotherBoard), que es el corazón de su computador.
Su computador tiene una pantalla y un teclado. tiene un disco duro y un CD-ROM y quizás un disco blando. Algunos de esos dispositivos funcionan gracias a tarjetas controladoras que se insertan dentro de la tarjeta madre y ayudan al computador a manejar estos dispositivos. Otros dispositivos funcionan directamente sobre la tarjeta madre gracias a chipsets (conjunto de chips. n del t.) especializados, que cumplen la misma función de la tarjetas controladoras. El funcionamiento de su teclado es muy sencillo para necesitar una tarjeta aparte; en este caso el controlador esta construido directamente dentro del chasis del mismo teclado.
Más adelante nos adentraremos en algunos de los detalles de como trabajan estos dispositivos. Por ahora, veamos unas pocas cosas básicas para recordar sobre como estos dispositivos trabajan juntos.
Todas las partes dentro de su computador están conectadas por un bus. Físicamente el bus es donde usted inserta las tarjetas controladoras (la tarjeta de video, el controlador de disco o si se tiene, la tarjeta de sonido). El bus es la autopista entre su procesador, su pantalla, su disco y cualquier otra cosa.
(Si usted ha visto referencias a 'ISA', 'PCI', y 'PCMCIA' relacionadas con los computadores y no las ha entendido, estos son tipos de bus. ISA es, excepto por algunas diferencias, el mismo bus que fue usado en los computadores originales IBM en 1980. Actualmente están fuera de uso. PCI (Periferical Component Interconnection / Componente de Interconexión Periférica) es el bus usado en la mayoría de los mas modernos computadores así como en los más modernos computadores Machintosh. PCMCIA es una variedad de el bus ISA con conectores más pequeños, usado en computadores portátiles.
El procesador, quien hace que todo funcione, realmente no puede comunicarse directamente con ninguno de los demás dispositivos, él tiene que hablar directamente con ellos usando el bus. El único otro subsistema que es realmente rápido y con inmediato al procesador es la memoria (el núcleo).
Cuando su computador lee un programa o los datos del disco, lo que realmente sucede es que el procesador usa el bus para enviar al controlador del disco una solicitud de lectura del disco. Un instante después el controlador del disco usa el bus para advertirle al procesador que él (el controlador del disco) ha leído los datos y los ha puesto en algún lugar de la memoria. El procesador entonces puede usar el bus para mirar los datos
El teclado y la pantalla también usan el bus para comunicarse con el procesador, pero de una manera simple. Esto lo discutiremos más adelante. Por ahora usted sabe lo suficiente como para entender que sucede cuando enciende el computador.
3. Que sucede cuando enciende el computador? 3b591e
Un computador sin un programa funcionando es solo un trozo inerte de elementos electrónicos. La primera cosa que un computador hace cuando es encendido es iniciar un programa especial llamado Sistema Operativo. EL trabajo del sistema operativo es ayudar a otros programas del computador a trabajar con los difíciles detalles de controlar el hardware del computador.
El proceso de iniciar el sistema operativo se llama Booting/arranque (originalmente el termino fue bootstrapping/'nicio de si mismo' en alusión al proceso de arrancar "comenzando desde los pies a la cabeza”). El computador sabe como iniciar porque la instrucciones del arranque están definidas dentro de uno de sus chips, el chip BIOS (Basic Input Output Sistem / Sistema básico de entrada y salida)
El chip BIOS le indica al computador que mire un un pequeño lugar, usualmente en el disco duro numerado con el menor numero (por si hay otros discos. n. del t.) buscando un programa especial llamado el 'boot loader'/'cargador del arranque' (en Linux, el cargador del arranque es llamado Grub o LILO). EL cargador de arranque es ubicado dentro de la memoria e iniciado. El trabajo del cargador del inicio es es iniciar el sistema operativo.
El cargador inicia esto buscando primero el kernel, cargándolo dentro de la memoria e iniciándolo. Cuando usted inicia Linux y ve en pantalla el texto "LILO” (o "Grub”. n. del .t.) seguido de un grupo de puntos, significa que se esta cargando el kernel (cada punto significa que ha cargado otro 'bloque del disco' del código del kernel.)
¿Usted podría preguntarse porque el BIOS no carga directamente el kernel?, ¿o porque el proceso del 'cargador del inicio' consta de estos dos pasos? Bien, la razón es porque la BIOS no es muy astuta. En efecto es muy estúpida y Linux no usa la BIOS después del momento del arranque. la BIOS fue originalmente escrita para primitivos computadores de 8 bits con diminutos discos, y literalmente no puede acceder al disco lo suficiente como para cargar directamente el kernel. Adicionalmente el proceso de inicio también permite iniciar (y escoger. n del t.) uno de varios sistemas operativos que se encuentran ubicados en diferentes lugares del disco en el evento poco probable de que Unix no sea suficiente para usted.
Una vez el kernel arranca, él tiene que mirar a su alrededor encontrando el resto del hardware y alistándose para hacer funcionar los programas. El kernel no hace esto metiéndose en las posiciones ordinarias de memoria, en vez de ello lo hace en los puertos I/O ('Input/Output'/'Salida/Entrada)(I/O: son lugares especiales en el Bus que probablemente están para que las tarjetas de control de los dispositivos puedan escuchar las peticiones/ordenes del kernel. El kernel no hace esto de una manera desordenada; él tiene una gran cantidad de información incorporada sobre posiblemente donde y como los controladores responderán en el caso de que estén presentes. Este proceso es llamado autoprobing / autodetección.
La mayoría de los mensajes que usted ve en el momento del arranque es el kernel realizando la autodetección de su hardware a través de los puertos I/O, identificando cual esta disponible para cada dispositivo y adaptando dicho dispositivo a su maquina. El kernel Linux es extremadamente bueno en esto, mejor que la mayoría de los otros kernels Unix y mucho mejor que el de DOS o Windows. En efecto, muchos veteranos de Linux piensan que la habilidad de Linux en la detección del proceso de arranque (lo cual hace que sea relativamente fácil para instalar) fue la principal razón para dejar de ser un paquete experimental y libre de Unix y atraer a una masa critica de s.
El que el kernel se encuentre completamente cargado y funcionando no significa que haya terminado el proceso de arranque; este es solo el primer paso del proceso (algunas veces llamado 'run level 1'/'nivel de funcionamiento 1'). Después del primer paso, el kernel toma control de un especial proceso llamado 'init' el cual despliega varios procesos de istración.
El primer trabajo del proceso 'init' usualmente es el controlar que la supervisión de los discos este bien realizada. El sistema de archivos del disco tiene cosas muy fragiles; podría estar muy afectado por una falla del hardware o un súbito cambio de voltaje, estas son buenas razones para tomar medidas de recuperación antes de que Unix este de nuevo funcionando. Veremos algo de esto mas en detalle cuando hablemos sobre como puede fallar el sistema de archivos.
El siguiente paso del proceso 'init' es arrancar varios 'demonios'. Un demonio es un programa como la cola de impresión, un detector de llegada de emails o un servidor web que funciona escondido en segundo plano, esperando cosas que hacer. Estos programas especiales a menudo tienen que coordinar varias peticiones que podrían entrar en conflicto. Estos procesos son 'demonios' por que a menudo es fácil escribir un programa que funcione constantemente y conozca sobre todas las peticiones que debería tratar para asegurar que una multitud de copias de procesos (cada copia procesando una solicitud y todas funcionando al mismo tiempo) no se amontonen. La especifica colección de demonios de arranque puede variar, pero casi siempre incluye el proceso de la cola de impresión (un demonio portero para su impresora).
El siguiente paso es prepararse para los s. El proceso Init inicia una copia del programa getty para observar/atender su consola (y quizás mas copias para atender conexiones 'dial-in'/'por marcado remoto' en puerto serial). Este programa es el que despliega el aviso de de su consola. Una vez todos los demonios y procesos getty de cada terminal han sido iniciados, entramos al 'run level 2'/'nivel de funcionamiento 2'. En este nivel usted puede acceder y correr programas.
Pero nosotros aún no hemos alcanzado este segundo paso. El siguiente paso consiste en arrancar varios demonios que dan soporte a redes y otros servicios. Una vez esto se ha hecho estamos en el 'run level 3'/nivel de funcionamiento 3' y el sistema se encuentra totalmente listo para ser usado.
4. ¿Que pasa cuando usted se registra en el sistema? 185l5s
Cuando usted se registra (dando un nombre a getty) usted se identifica frente al computador. El corre entonces un programa llamado (naturalmente) . EL cual toma su clave de y revisa si usted esta autorizado para usar la maquina. Si usted no esta autorizado su intento de es rechazado. Si usted esta autorizado el programa realiza unas pocas tareas de 'housekeeping'/'istración-mantenimiento' e inicia el interprete de comandos, el 'shell'/'ventana de sesión'. (Si, getty y pueden ser un programa. Ellos están separados por razones históricas que no son relevantes aquí)
Esto es solo un poco de lo que el sistema hace antes de darle una ventana de sesión (usted necesitará conocer esto mas adelante cuando hablemos sobre los permisos de archivos). Usted se identifica con un nombre de y una clave. Dicho nombre de es revisado en un archivo llamado /etc/wd, el cual contiene una secuencia de lineas, cada una describiendo una cuenta de .
Uno de esos campos corresponde a una versión encriptada de la clave (algunas veces los campos encriptados son realmente almacenados en un segundo archivo /etc/shadow con ajustados permisos haciendo que sea difícil descubrir la clave). Cuando usted ingresa con una cuenta la clave es encriptada exactamente de la misma forma y el programa compara si son iguales. La seguridad de este método esta en el hecho que, mientras que es fácil ir de la versión limpia de la clave a la versión encriptada, la forma inversa es muy difícil. De esta manera, aún si alguien puede ver la versión encriptada de la clave no le será posible usarla. (esto también significa que si usted olvida su clave no hay forma de recuperarla, solo funcionará cambiarla a algo que usted escoja.)
Una vez usted se ha registrado satisfactoriamente, usted obtiene todos los privilegios asociados con la especifica cuenta que usted esta usando. Usted también puede ser reconocido como parte de un 'grupo'. Un grupo es una colección de nombres de s establecida por el del sistema. Los grupos pueden tener privilegios independientes de los privilegios de sus . Un puede ser miembro de múltiples grupos. (para detalles sobre como trabajan los privilegios en Unix vaya a la sección depermisos.
Note que aunque usted se refiera normalmente a s y grupos por un nombre, ellos internamente están realmente almacenados internamente en forma de identificadores numéricos (Idś). El archivo de clave compara su nombre de cuenta contra un identificador de ; el archivo /etc/group compara los nombres de grupo contra un identificador de grupo. Los comandos que negocian con las cuentas y los grupos realizan automáticamente la traducción.
Su inicio de cuenta también contiene un 'directorio de inicio'. EL lugar es donde el sistema de archivos de Unix ubicará sus archivos personales. Finalmente su cuenta de inicio también ajustará su ventana de sesión, el interprete de comandos que el programa arrancará para aceptar sus comandos.
5. ¿Que sucede cuando usted corre programas desde la ventana de sesión? 3z4g48
La ventana de sesión es el interprete para los comandos que usted escribe en ella; es llamada shell (caparazón) porque ella envuelve y oculta el kernel del sistema operativo. Es una importante característica de Unix que el shell y el kernel sean programas separados que se comunican a través de un pequeño conjunto de llamadas del sistema. Esto permite la posibilidad de probar múltiples shells y diferentes sabores de interfaces.
Un shell normalmente mostrará a usted el símbolo '$' que usted ve después de acceder en el sistema (a menos que usted haya ajustado esto para algún otro símbolo). Nosotros no hablaremos sobre la sintaxis de la shell y sobre las sencillas cosas que usted puede ver en la pantalla; en lugar de ello vamos a mirar detrás de la escena de lo que sucede desde el punto de vista del computador.
Desde el momento de arranque y después de que usted corre un programa, usted puede pensar en su computador como un contenedor en el que habita un zoológico de procesos que están esperando algo que hacer. Ellos están en la espera de eventos. Un evento puede ser el presionar una tecla o mover el ratón. O si su maquina está enganchada a una red, un evento podría ser un paquete de datos entrando en la red.
El kernel es uno de estos procesos. Es especialmente único porque el controla cuando pueden correr otros procesos del , y es normal que sea el único proceso que tiene directo al hardware de la maquina. En efecto, los demás procesos del tienen que hacer una petición al kernel cuando ellos quieran conseguir una entrada del teclado, escribir en la pantalla, leer el disco o escribir en él, o solamente hacer cualquier otra cosa que impliquen bits en la memoria.
Normalmente todas las entradas y salidas (I/O) van a través del kernel así que el puede programar las operaciones y prevenir procesos traslapados. Unos pocos procesos de tienen permitido rodear el kernel, usualmente por que se les ha dado directo a los puertos I/O. Los servidores X (programas que manejan solicitudes de otros programas para hacer gráficas de pantalla en la mayoría de los equipos Unix.
La Shell es solo un proceso de sin nada en particular. El espera la pulsación del teclado, escuchando (a través del kernel) al puerto I/O del teclado. Tal como el kernel los ve, los repite en su pantalla. Cuando el kernel recibe la pulsación de la tecla 'Enter' el pasa su linea de texto al shell. El shell intenta interpretar estas teclas como comandos.
Vamos a decir que usted teclea 'ls' y pulsa la tecla 'Enter' para invocar el listador de directorios de Unix. La shell aplica sus reglas preestablecidas para entender que usted desea correr el comando u orden de ejecución en el archivo /bin/ls. El comando hace una llamada de sistema solicitando al kernel iniciar /bin/ls como un nuevo proceso hijo dándole a la pantalla y el teclado a través del kernel. Entonces la shell duerme esperando que ls termine.
Cuando la orden /bin/ls esta hecha, le avisa al kernel que ha terminado emitiendo al sistema una petición de salida. El kernel entonces despierta la shell diciéndole que puede continuar. La shell emite otro aviso y espera por otra entrada.
Sin embargo otras cosas pueden estar sucediendo mientras su orden 'ls' es ejecutada (tenemos que suponer que usted esta listando un directorio muy largo). Usted puede cambiar a otra consola virtual, registrarse en ella, e iniciar por ejemplo un juego de Quake. O suponiendo que usted esta enganchado a la Internet. Su maquina puede estar enviando o recibiendo email mientras /bin/ls corre.
6. ¿como trabajan los dispositivos de entrada e interrupción? 235r1f
Su teclado es un dispositivo de entrada muy simple; simple porque genera pequeñas cantidades de datos muy lentamente (por un estándar de computación). Cuando usted presiona o libera una tecla, el evento es enviado por el cable del teclado para provocar 'una interrupción de hardware' / 'hardware interrupt'.
Es trabajo del sistema operativo el atender este tipo de interrupciones. Para cada posible tipo de interrupción habrá un 'manipulador de interrupción' / ' interrupt handler', como parte del sistema operativo que acoge cualquier dato asociado con dicho manipulador de interrupción (como su valor tecleado) hasta que pueda ser procesado.
Lo que el manipulador de interrupciones hace realmente con su teclado es enviar el valor tecleado dentro del área del sistema cerca del inicio de la memoria. Allí, el valor estará disponible para cuando el sistema operativo pase el control a cualquier programa que se supone esta actualmente leyendo el teclado.
Dispositivos de entrada mas complejos como los discos o la tarjetas de red trabajan de similar manera. Anteriormente mi referencia a un controlador de disco que usa el bus para hacer una petición al disco era suficiente. Lo que realmente sucede es que el disco recibe una interrupción. El manipulador de interrupciones del disco entonces copia los datos recibidos dentro de la memoria para su posterior uso por parte del programa que ha hecho la petición.
Cada tipo de interrupción tiene asociado un 'nivel de prioridad' / 'priority level'. Interrupciones con prioridades bajas (como los eventos del teclado) tienen que esperar por/sobre las interrupciones con prioridades altas (como los tictac del reloj o los eventos del disco. Unix esta diseñado para dar prioridad al tipo de eventos que necesitan ser procesados rápidamente para mantener libre de problema a las respuestas que da la maquina.
En los mensajes que aparecen en el momento del arranque, usted puede ver referencias a números IRQ. Note que una de las típicas formas de hacer una incorrecta configuración de hardware es teniendo a dos diferentes dispositivos intentando usar el mismo IRQ, sin entender exactamente por que.
He aquí la respuesta. IRQ es la abreviatura de "Petición de Interrupción” / "Interrupt Request”. El sistema operativo necesita saber en el momento del arranque que numero de interrupción usara cada dispositivo de hardware, para asociar adecuadamente los manipuladores de interrupción. Si dos diferentes dispositivos tratan de usar el mismo IRQ,las interrupciones serán enviadas al manipulador equivocado. Esto por lo menos inhabilitará el dispositivo y puede algunas veces confundir negativamente al sistema, lo suficiente como para saturarlo o anularlo.