Historia y Sistemas UNIX
description
Transcript of Historia y Sistemas UNIX
Historia y Sistemas UNIXDra. Karina Figueroa
Contenido• Historia• Evolución de los S.O.• Ambiente del sistema UNIX• Ambiente grafico• Ambiente de texto
• Compilando y debug en UNIX/LINUX
Evolución de los S.O.1. Antes de los S.O.2. Solo Hardware y aplicaciones3. Sistemas Batch4. Operación off-line5. Buffering6. Simultaneous Peripheral Operation On-line: Spooling7. Sistemas de multiprogramación8. Máquinas o procesadores virtuales9. Sistemas de tiempo compartido10. Computadoras personales11. Redes de computadoras personales12. Sistemas distribuídos o redes de estación de trabajo13. Sistemas multiprocesadores14. El presente
Ambiente de LINUX• Estructura del núcleo• Archivos• Interfaz del usuario• Terminales de texto
• Aplicaciones instaladas por defecto
Núcleo Linux
Tipos de archivos• Archivos para el filesystem• Archivo regular• Directorio• Link simbólico
• Hard link (directorio)• Soft link (archivos)
• Dispositivos de entrada y salida o drivers• Archivos de dispositivos Block-oriented
• Transfiere datos en bloques (DD)• Archivos de dispositivos Character-oriented
• Transferencia byte por byte (modem)
• Para la intercomunicación de procesos• Pipe• Socket
Directorios• / raíz• /bin
• utilidades de sistema de bajo nivel• /usr/bin
• utilidades de sistema de alto nivel • /sbin
• uitlidades como super usuario• /lib
• Librerías de programas• /usr/lib
• Librerías de programas de alto nivel• /tmp
• Temporal• /home
• Directorios personales• /etc
• Archivos de configuración• /dev
• Dispositivos de hardware• /proc
• Un pseudo-filesystem usado como una interfaz con el kernel
Descriptores de archivos• Unix hace una clara distinción entre el contenido de un archivo
y la información acerca de un archivo. • Los archivos no tiene ninguna información de control (longuitud, fin
de archivo, delimitador). Cada archivo consiste de una secuencia de bytes. • Con la excepción de dispositivo de un archivo y los archivos especiales
del filesystem
• Toda la información necesaria por el filesystem se mantiene en un archivo llamado inodo.
• Cada archivo tiene su propio inodo con el que el filesystem lo identifica.
archivos• Al menos deben tener• Tipo de archivo• Núm de hard links asociados al archivo• Longitud en bytes del archivo• ID dispositivo (i.e., un identificador del dispositivo que contienen
al archivo)• Núm de inodo que identifica al archivo• UID del propietario del archivo• ID del grupo del archivo• Timestamps que especifican el estatus del inodo en el tiempo• Fecha de modificación• Permisos de acceso al archivo
Sistema de archivos • El sistema de archivos Unix se sitúa dentro del núcleo del S.O.• Se encarga de darle estructura en archivos a una partición del
disco• Implementa el sistema jerárquico de nombres y directorios
Superbloque• Almacena• Tamaño de los bloques• Número de inodos• Número de bloques• Etc
• Por ejemplo ver: en Linux (/usr/include/linux/ext2_fs.h)• Definición de superbloque ext2_sb• Definición de inodo, ext2_inode
Inodo• Es la estructura de datos que representa un archivo. Existe un
inodo por cada archivo• Almacena:• El largo del archivo• Permisos (12 bits)• Número de usuario• Número de grupo• Fecha y hora de creación, modificación y consulta• Núm de enlaces duros• El tipo: archivo normal, directorio, link simbólico, dispositivo• 12 punteros a bloques en disco que contienen los datos del archivo• Un puntero de indirección simple• Un puntero de indirección doble• Un puntero de indirección triple
inodo
Inodos• Los inodos se enumeran como 0,1,2,…• El inodo 0 es el directorio raíz de la petición• Cómo se busca un nombre?• Por ejem /usr/bin/X11/xfig• Ubicar partición /, /usr, /home y /tmp• Buscamos el archivo bin• Buscamos X11 en el inodo donde se encuentra bin• Buscar xfig en el inodo donde se encuentra X11
i-nodo
Acceso a archivos• El usuario propietario del archivo• Los usuarios que pertenecen al grupo• El resto de los usarios• Chmod comando
Comandos de Linux• Abrir una terminal• Comandos “clásicos”• ls• mkdir <directorio>• cd <directorio>• mv <origen> <destino>
• Comandos Linux• man• top• ls –l• echo
• cat <archivo>• more <archivo>• cp <origen> <destino>• history• last• w• ps• talk• write• wall
Comandos sobre archivos• chmod ugo+rwx <archivo>• chown <user>:<group> <archivo>• grep “<expreg>” <archivo>• awk “codigo” <archivo>• diff <archivo1> <archivo2>• wc <archivo>• head <archivo>• tail <archivo>• sed “<expreg>” <archivo>
• Redireccionamiento• < entrada• > salida• | pipe
Compilando y debug• Compilar en C• Debug en C
Llamada de sistema• Qué son?• Son llamados a procedimientos del kernel• Necesitan un cambio de privilegios• Básicamente
• Se realiza almacenando el num de llamada al sistema en el registo EAX• Almacena los argumentos de la llamada• Ejecuta una excepción (código en ensamblador)• Se usa el num de llamada al sistema como índice para una tabla de
apuntadores de código• Obtener la dirección de comienzo del código
• Se ejecuta con privilegios de kernel
• Como se usan?• Se enumeran en /usr/src/linux-2.x/include/asm-i386/unistd.h
• Ejemplos• Close, corresponde a close()• Hay una lista de descriptores entry.S
Modos y llamada de sistema
Tabla de despacho
Procedimiento de servicio
Programa 2 del usuario
Programa 1 del usuario
Modo usuario
Modo Kernel
1
2
3
4
Llamada de Sistema• En su mayoría regresan dos tipos de valores: • menor a cero: hubo un error en la ejecución • cero o mayor a cero: todo salió bien
• Si hubo error es posible ver la naturaleza del error a través de la página del manual de la llamada y de la variable errno del archivo de encabezado errno.h
Código escritura en archivo#include <strings.h> #include <fcntl.h> #include <stdio.h> #include <errno.h>
main() { int fd; char frase[80]; printf(“Leyendo de un archivo \n"); if ( (fd = open(”archivo", O_RDONLY)) < 0) {
printf("Error no. %d en open \n",errno); exit(1);
}
if ( read(fd,fd,sizeof(frase)) < 0 ) { perror("Error en read"); exit(2); } printf("Se leyo: %s \n",frase); close(fd); printf("Fin del ejemplo \n");}
Compilando y ejecutando• karina@~> gcc prueba.c • karina@~>a.out • Escribiendo en un archivo • Error no. 2 en open • karina@~>grep 2 /usr/include/sys/errno.h• #define ENOENT 2 /* No such file or directory */ • #define E2BIG 7 /* Arg list too long */• #define ENOMEM 12 /* Not enough core */• #define ENOTDIR 20 /* Not a directory */::
Una opción más completa
if ( (fd = open(”archivo", O_RDONLY)) < 0) {
printf("Error %d en open\n",errno); perror("Mensaje"); exit(1);
}if ( read(fd, fd ,sizeof(frase)) < 0 ) {
printf("Error %d en read\n",errno); perror("Mensaje"); exit(2);
}
Tarea• Investigar el sistema de archivos FAT• Comparar la estructura con la de Linux• Ventajas y desventajas
• Investigar el sistema de archivos vFAT• Comparar la estructura con la de Linux• Ventajas y desventajas
Compilar un kernel• /usr/src/linux• make xconfig• make dep• make bzImage• Añada una entra en lilo y grub• Lilo.conf• Image=/boot/bzImage.myKernel• Label=myKernel• root=/dev/hda5• read-only