Red de conocimiento informático - Espacio del host - Quiero aprender Unix, ¿por dónde empezar?

Quiero aprender Unix, ¿por dónde empezar?

Categoría: Computadora/Red >> Sistema Operativo/Fallo del Sistema

Descripción del Problema:

Quiero aprender Unix, ¿por dónde empezar?

Análisis:

1. Descripción general

El sistema operativo estándar UNIX es un sistema interactivo de tiempo compartido, que proporciona una base y soporte para todo el proceso de Entorno de desarrollo de programas, puede soportar 40 usuarios finales. El sistema UNIX fue desarrollado entre 1969 y 1970 por dos programadores, K. Thompson (Ken Thompson) y D. Ritchie (Dennis Ritchie), en Bell Labs, una subsidiaria de AT&T. UNIX ha sido muy popular desde su aparición. Se ejecuta en varias máquinas con diferentes capacidades de procesamiento, desde microcomputadoras de alta gama hasta mainframes. En la actualidad, además de ejecutarse en varios modelos de PDP-11 y el sistema VAX-11 de DEC, UNIX también puede ejecutarse en las máquinas de las series 370 y 3300 de IBM y en las máquinas de la serie Amdahi Company, Data General Company y HP Company. En los últimos años, casi todas las máquinas de 16 bits y microcomputadoras de 32 bits han competido para trasplantar UNIX. Esta situación es extremadamente rara en la historia del desarrollo de sistemas operativos. Con la popularidad de UNIX, el lenguaje C del sistema de escritura también se ha convertido en un lenguaje atractivo y ampliamente utilizado.

El sistema UNIX ha logrado un gran éxito y existen razones inherentes y factores objetivos. Una de las condiciones objetivas es que antes de la llegada de UNIX, muchos sistemas operativos se habían desarrollado con éxito. Hay experiencias exitosas y lecciones de fracaso. Los diseñadores de UNIX tomaron las decisiones adecuadas después de una cuidadosa consideración, lo que hizo que UNIX estuviera a la vanguardia. se logró sobre los hombros de las personas (MULTICS tardó 200 personas-año en no lograr el objetivo original, y UNIX solo tardó 2 personas-año en segundo lugar, porque la gente en ese momento necesitaba un sistema que fuera fácil de usar y que pudiera proporcionar); un buen entorno de desarrollo y un tamaño moderado. UNIX nació en el momento adecuado. En tercer lugar, UNIX se desarrolló en la serie de máquinas PDP-11, que han sido ampliamente utilizadas en el mundo, lo que creó las condiciones para que UNIX se extendiera ampliamente; desplegado. Por supuesto, la clave del éxito de UNIX reside en su propio rendimiento y características.

Las principales características de UNIX son: breve y conciso, simple y eficaz, fácil de entender, fácil de ampliar y fácil de trasplantar.

El programa central de UNIX consta de aproximadamente 10.000 líneas de código en lenguaje C y 1.000 líneas de código en lenguaje ensamblador. Está dividido en 44 archivos que se pueden compilar y ensamblar de forma independiente, y cada archivo se divide en varios. procesos. Estos archivos se pueden dividir en las siguientes tres categorías:

⑴ Archivos en lenguaje ensamblador: el sistema tiene solo 2 archivos programados en lenguaje ensamblador, incluidas 33 subrutinas de ensamblaje, partes directamente relacionadas con el hardware de la máquina, como interrupción procesamiento, sistema Para mejorar la eficiencia, algunos procesos básicos de uso frecuente también están escritos en lenguaje ensamblador.

⑵Archivos en lenguaje C: Hay 28, incluidos los procesos principales de gestión de procesos, y se pueden dividir en 190 subrutinas. El archivo se puede compilar de forma independiente y se puede ejecutar después de haber sido conectado y ensamblado por el programa ensamblador.

⑶Archivos de variables globales en lenguaje C: ***14, que contienen instrucciones importantes sobre la estructura. Este tipo de archivo no se puede compilar de forma independiente, sino que debe compilarse junto con un archivo en lenguaje C.

2. Características principales del sistema operativo UNIX

1. Núcleo exquisito y capa práctica rica

El sistema UNIX está dividido estructuralmente en una capa de núcleo y una capa práctica. La capa central es pequeña, pero la capa práctica es rica. La capa central incluye gestión de procesos, gestión de almacenamiento, gestión de dispositivos y sistema de archivos. La capa central de UNIX está diseñada para ser muy sencilla y concisa. Sus algoritmos principales han sido examinados repetidamente y las estructuras de datos y los programas que contiene se han diseñado cuidadosamente. Por lo tanto, la capa central solo ocupa una pequeña cantidad de espacio de almacenamiento y puede residir en la memoria para garantizar que el sistema funcione con alta eficiencia.

La capa de utilidad son aquellas partes que se pueden separar de la capa central. Aparecen como programas fuera del núcleo y se ejecutan en el entorno del usuario. Estos programas fuera del núcleo incluyen programas enriquecidos de procesamiento del lenguaje.

UNIX admite programas de compilación e interpretación de más de una docena de lenguajes de programación de uso común, como C, APL, FORTRAN77, PASCAL, SNOBOL, COBOL, BASIC, ALGOL68 y otros lenguajes y sus compiladores. También incluye otras utilidades comunes del sistema operativo, como programas de edición, depuradores, utilidades de monitoreo del estado del sistema y administración de archivos, etc. UNIX también tiene un conjunto de potentes herramientas de software que los usuarios pueden utilizar más fácilmente para desarrollar software nuevo. Estas herramientas de software incluyen: el programa de utilidad troff para procesar archivos de texto, el programa de control de código fuente SCC

S (Sistema de control de código fuente), el analizador léxico del lenguaje de comandos y el programa de generación de analizadores de sintaxis LEX (Generador de Analizadores léxicos) y YACC (Ye

t Otro compilador compilador), etc. Además, el intérprete de comandos de UNIX Shel

l también es un programa fuera del núcleo. Son estos programas externos los que brindan a los usuarios un entorno de programación bastante completo.

La capa central de UNIX proporciona soporte completo y potente para programas fuera del núcleo. Los programas fuera del núcleo se basan en el núcleo y, en última instancia, utilizan servicios de bajo nivel proporcionados por la capa central. Gradualmente se convierten en parte del "sistema UNIX". La capa central y la capa práctica se combinan en su conjunto para brindar a los usuarios diversos buenos servicios.

2. Utilice el lenguaje de programación de comandos flexible Shell

Shell es ante todo un lenguaje de comandos. Más de 200 comandos UNIX corresponden a 200 programas de utilidad. Shell también es un lenguaje de programación. Tiene las capacidades de flujo de control que tienen muchos lenguajes de alto nivel, como if, for, while, Until, declaraciones de casos, así como la capacidad de asignar, reemplazar, pasar parámetros y ordenar la sustitución de variables de cadena. Los usuarios pueden utilizar estas funciones para escribir programas "Shell" en lenguaje Shell y guardarlos en archivos. En el futuro, los usuarios sólo necesitarán ingresar el nombre del archivo correspondiente para ejecutarlo. Este método es fácil de expandir el sistema.

3. Sistema de archivos jerárquico

El sistema UNIX utiliza una estructura de directorios de árbol para organizar varios archivos y directorios de archivos. Este tipo de organización es útil para la asignación de espacio de almacenamiento auxiliar y la búsqueda rápida de archivos. También puede proporcionar capacidades de control de acceso y uso compartido de archivos para archivos de diferentes usuarios, y garantizar una cooperación segura y efectiva entre los usuarios.

4. Tratar archivos y dispositivos de forma unificada.

Los archivos en sistemas UNIX son secuencias de bytes no estructuradas. De forma predeterminada, se accede a los archivos de forma secuencial, pero si es necesario, los usuarios también pueden crear la estructura que necesitan para el archivo. Los usuarios también pueden realizar acceso aleatorio al archivo cambiando el puntero de lectura/escritura.

UNIX trata los dispositivos periféricos del mismo modo que archivos, y se accede a ellos, se comparten y se protegen como archivos normales en el disco. Los usuarios no necesitan distinguir entre archivos y dispositivos, ni necesitan conocer las características físicas de un dispositivo para acceder a él. Por ejemplo, el nombre de archivo correspondiente a la impresora de líneas en el sistema es /dev/lp. El usuario sólo necesita utilizar la operación de archivo (escritura) para generar sus datos desde la impresora. De esta forma, el concepto de archivos es sencillo y fácil de utilizar frente a los usuarios.

5. Buena portabilidad

El 90% de todas las utilidades y códigos centrales de UNIX están escritos en lenguaje C, lo que convierte a UNIX en un sistema operativo portátil. La portabilidad del sistema operativo trae consigo la portabilidad del programa de aplicación, por lo que el programa de aplicación del usuario se puede utilizar en minicomputadoras y otras microcomputadoras o mainframes. Esto mejora enormemente la eficiencia del trabajo del usuario.

Aunque el sistema UNIX ha logrado un gran éxito, no está exento de defectos. En resumen, las críticas a UNIX son las siguientes:

1. Hay demasiadas versiones de sistemas UNIX, lo que resulta en la imposibilidad de aprovechar plenamente la portabilidad de las aplicaciones

Usos de UNIX Lenguaje C Está escrito para que pueda modificarse y trasplantarse fácilmente. UNIX también anima a los usuarios a utilizar herramientas UNIX para desarrollar un entorno que se adapte a sus propias necesidades. Esto ha dado lugar a demasiadas versiones de UNIX que no están unificadas.

Para resolver este problema, AT&T ha cooperado actualmente con cuatro importantes fabricantes de microcomputadoras (Intel, Motorola, Zilog y National Semiconductor) para desarrollar una versión V del sistema UNIX unificado. Esto tendrá un impacto importante en la estandarización de UNIX.

2. El sistema UNIX carece de capacidades de control en tiempo real, procesamiento distribuido y procesamiento de red.

Esta deficiencia también se mejora continuamente en los sistemas distribuidos y en tiempo real basados ​​​​en UNIX. Ya se están desarrollando sistemas con capacidades de procesamiento, y algunos se han desarrollado con éxito.

3. El núcleo del sistema UNIX es la estructura de módulos desordenada.

El 90% del núcleo del sistema UNIX está escrito en lenguaje C, pero su estructura no es jerárquica, por lo que Es muy complicado, no es fácil de modificar y expandir.

Estas deficiencias del sistema UNIX son muy pequeñas en comparación con sus logros, y su éxito es brillante.

3. Estructura del sistema UNIX

El sistema operativo UNIX adopta una estructura de módulos centrada en variables globales, por lo que la estructura del sistema es relativamente compleja, lo que se refleja principalmente en: llamadas de bucle y archivos entre módulos problema de variable global.

Desde un punto de vista estructural, UNIX se puede dividir en una capa central y una capa de shell. La capa central se divide a su vez en controladores de dispositivos que interactúan con el hardware, la capa más baja para la gestión de bloques de almacenamiento físico. y la implementación de gestión de almacenamiento, gestión de archivos y gestión de dispositivos, gestión de procesos y otras funciones de bajo nivel. La capa exterior del núcleo es la llamada al sistema, que es la interfaz externa del núcleo de UNIX. El Shell más externo es la interfaz entre el usuario y el sistema UNIX. En esta capa también se ejecutan otras utilidades y programas de usuario.

La estructura del sistema se muestra en la Figura 8.1.

1.Shell

La interfaz de usuario proporcionada por UNIX es un lenguaje de comandos llamado Shell. El intérprete de este lenguaje de comandos también se llama Shell. Se establece un proceso de Shell para cada usuario cuando el sistema se inicia inicialmente, y cada proceso de Shell espera a que el usuario ingrese comandos. La forma más simple de comando es una línea de comando, que consta del nombre del comando y varios parámetros, separados por espacios. Cuando Shell interpreta y ejecuta un comando, primero distingue el nombre del comando y los parámetros, luego busca el archivo correspondiente según el nombre del comando, lee el archivo en la memoria, lo interpreta y ejecuta de acuerdo con los parámetros dados.

La ejecución del comando se completa a través de la llamada al sistema fork. Después de que el proceso Shell solicita

k, fork crea un proceso hijo del proceso Shell y deja que el proceso Shell espere. . El proceso hijo interpreta y ejecuta el comando. Cuando finaliza la ejecución del comando, el proceso hijo llama a la llamada del sistema de salida para completar el trabajo de terminar el proceso hijo y liberar el proceso padre. Una vez liberado el proceso de Shell, se proporciona un mensaje para permitir al usuario ingresar la siguiente línea de comando. El proceso de ejecución básico del comando se muestra en la Figura 8.2.

El sistema interactivo de UNIX requiere que el usuario espere a que finalice la ejecución de la línea de comando anterior y luego aparece el mensaje en la terminal antes de ingresar a la siguiente línea de comando. Dado que algunos comandos tardan mucho en ejecutarse, para reducir el tiempo de espera del usuario, en los sistemas UNIX, los usuarios pueden usar el lenguaje de comandos Shell para escribir programas que representen la secuencia de ejecución de un conjunto de programas escritos en el comando. lenguaje se llaman programas Shell. El programa Shell se almacena en un archivo y el intérprete de comandos ejecuta cada comando en el programa Shell cuando es necesario.

2. Llamada al sistema

La llamada al sistema es la única forma en la que un programa de usuario solicita al sistema operativo que le proporcione servicios. En UNIX, la llamada al sistema se denomina interfaz del programador. UNIX estipula que los programas de usuario utilizan instrucciones de captura para solicitar servicios del sistema. El programa de captura de interrupción en el núcleo de UNIX cambia al controlador correspondiente según el tipo de trampa. La forma de la instrucción Trap es la siguiente:

UNIX versión 6*** tiene 41 llamadas al sistema, que se pueden dividir en las siguientes tres categorías:

① Llamadas al sistema relacionadas con gestión de procesos, como creación de subsistemas de procesos, espera de procesos secundarios, suspensión, señalización, modificación del tamaño del segmento de datos, etc.

② Llamadas al sistema relacionadas con la administración de archivos, como crear archivos, conectar archivos, abrir archivos, cerrar archivos, leer archivos, escribir archivos, modificar el directorio actual, modificar los atributos del archivo, etc.

③Otras llamadas al sistema, como obtener el número de usuario actual, obtener la hora del calendario, leer el tiempo de ejecución del proceso, cambiar el número de prioridad, etc.

En las llamadas al sistema, hay dos formas de pasar parámetros. La primera forma: transmitir la unidad posterior a través de la instrucción trampa en el programa. Este método se divide en método directo y método indirecto. En el modo directo, se permite colocar hasta 5 parámetros en la unidad sucesora de la instrucción de captura; en el modo indirecto, la unidad sucesora de la instrucción de captura coloca un puntero de área de parámetro y se pueden almacenar más parámetros en este parámetro. área. La segunda forma es pasar parámetros a través de los registros R0 y R1.

La interfaz del programador del sistema UNIX incluye una gran cantidad de subrutinas de biblioteca y archivos de encabezado. Los archivos de encabezado definen estructuras de datos complejas utilizadas en las llamadas al sistema; las subrutinas de la biblioteca y las funciones de la biblioteca brindan soporte de programa adicional para las llamadas al sistema.

3. Gestión de almacenamiento

El sistema UNIX se desarrolló originalmente en PDP-11. PDP-11 es una memoria estructurada en segmentos. En PDP-11, los segmentos se denominan páginas. cada página puede contener varios bloques, cada bloque tiene 64 bytes y la memoria principal se asigna en unidades de bloques.

La asignación de almacenamiento adopta un algoritmo de adaptación de prioridad y el espacio de almacenamiento se gestiona mediante una tabla de área libre. Cada mesa ocupa 50 entradas, cada entrada tiene 2 unidades, una apunta al número de bloque inicial del área libre correspondiente y la otra apunta al tamaño del área libre. Los elementos de la tabla están ordenados de menor a mayor según la dirección del área libre. Si hay dos áreas libres adyacentes, se fusionan en una. El contenido de la entrada de la tabla es 0, lo que indica el final de la tabla.

Dado que PDP-11 no admite memoria virtual, la asignación y liberación del área de usuario de memoria y el área de intercambio de disco en UNIX son administradas por el módulo de administración de almacenamiento. Bajo la gestión del programa de intercambio, el área de usuario de la memoria y el área de intercambio de disco están integradas y desempeñan el papel de memoria virtual. El proceso de intercambio escanea la tabla de PCB y encuentra que hay un proceso listo en la memoria auxiliar. Verifica si hay un área libre en la memoria, si hay un área libre, se transferirá directamente; la memoria debe intercambiarse si no hay ningún proceso que pueda intercambiarse en la memoria, el proceso de intercambio está en un estado de espera hasta que ocurran ciertos eventos, luego se activa y comienza a funcionar nuevamente. Cuando hay varios procesos listos en el almacenamiento auxiliar, la memoria se intercambia según el orden de primero en entrar, primero en salir; cuando hay varios procesos en la memoria que se pueden intercambiar, el proceso con la prioridad más baja entre los procesos intercambiables; está seleccionado para ser intercambiado.

Cuando un proceso quiere aumentar la longitud de la página, puede hacerlo solicitando páginas nuevas y publicando páginas antiguas. Si no hay suficiente espacio en la memoria, se solicitará una nueva página en el almacenamiento auxiliar y todo el proceso se trasladará al almacenamiento auxiliar.