Story Transcript
PONTIFICIA UNIVERSIDAD CATOLICA DEL PERU FACULTAD DE CIENCIAS E INGENIERIA INGENIERIA INFORMATICA INF232 SISTEMAS OPERATIVOS Laboratorio Preliminar 2
Creando un disquete virtual para MINIX 3.1.2 (máquina virtual) a. En Ubuntu ubíquese en el directorio ~/.VirtualBox/VDI b. Ahora procederemos a crear un disquete virtual, escriba en la línea de comandos $ dd if=/dev/zero of=fd0vminix.img count=2880
c. Ejecute la aplicación Virtual Box, teniendo marcado en la izquierda: Minix 3.1.2aLabMP y en la parte derecha haga click en la opción Disquet, que se encuentra en la pestaña que está activa por defecto (Detalles). Aparecerá una ventana como la siguiente:
En esta ventana elija Montar disquete y Archivos de Imagen. Para ubicar el archivo creado anteriormente ayudese del Administrador de discos Virtuales de disquete a montar. d. Inicie la máquina virtual de Minix. e. Antes de usar el disquete primero tiene que crearle el sistema de archivo (con el comando mkfs) y luego montarlo en algún directorio.
Importante: Para este y los siguientes laboratorios usted no tiene que volver a crear máquina virtual
alguna ni crear un disco virtual en donde se tenga que instalar Minix. Nosotros le proporcionaremos una imagen de cada uno. Esta máquina virtual está definida como “inmutable” es decir que mientras la máquina virtual no se apague, sus datos permanecerán pero si es apagada el estado de la máquina vuelve a ser como el que estaba en un inicio. Debe distinguir que no se ha dicho reiniciar, usted puede reiniciar la máquina virtual y no perderá los datos, sólo en caso de que la apague, es que los datos se perderán.
INF232 – Lab. S.O.
Preliminar 2
1
ENTORNO MINIX 3.1.2 (máquina virtual) Proceso Un proceso es un programa en ejecución. Cada proceso posee un número identificador llamado pid. 1.
El comando ps muestra en pantalla el estado de los procesos activos. Inicie una segunda sesión e ingrese como usuario genérico (login: alulab y password: alulab) y ejecute el comando ps como se muestra abajo: $
2.
ps –a PID 110 132 135
TTY CO C1 C1
TIME 0:00 0:00 0:00
CMD –sh –sh ps –a
La primera columna indica el identificador del proceso (pid), la segunda columna especifica la terminal virtual donde se ha ejecutado el comando. Una lista de comandos puede ejecutarse en una sola línea si se les separa por punto y coma. Por ejemplo si se desea aclarar pantalla y luego de 2 segundos hacer un listado de los archivos del directorio de trabajo, escriba: $ clr; sleep 2; ls –l
o puede agrupar con paréntesis de acuerdo a su conveniencia. Por ejemplo: $ ls a|(clr; wc –l)>data;echo archivos en directorio actual >> data;cat data
En algunas ocasiones el comando es muy extenso y se desea escribir en dos líneas. En estos casos se coloca el backslash (también conocido como slash invertido) al final de la primera línea y a continuación se presiona la tecla enter luego se continua en la segunda línea. El objetivo del backslash es que el shell no interprete el enter que hay a continuación. Al inicio de la segunda línea, después de presionar enter, no aparece el prompt primario ($), sino el prompt secundario (>). 3.
Un proceso se encuentra ejecutándose en primer plano (foreground) si interactúa con el usuario recibiendo las entradas del teclado y enviando las salidas a la pantalla (mientras no se redirijan). En cambio un proceso se ejecuta en segundo plano (background) si no hace uso de la consola, dejándola libre para ejecutar algún otro comando. Lanzar un proceso en background es útil cuando éste puede tomar mucho tiempo en ejecutarse. En símbolo “&” al final de un comando indica que estos se ejecutarán en segundo plano. En este caso ejecutaremos el comando, que a continuación se muestra, en la consola (ALT+F1). La ejecución se llevará a cabo en background, esto se notará inmediatamente porque el prompt quedará libre y a continuación se podrá ejecutar el comando ps, para monitorear la ejecución en backgroud. Por último, puede ver la salida, que a propósito se ha enviado a la segunda terminal virtual, con ALT+F2 . $ (find / name ‘*.[ch]’ 2>/dev/null | \ > while read file;do cat $file > /dev/ttyc1 2>/dev/null;done)& $ ps
En la consola se mostrará la salida del comando ps, pero si desea ver la salida de los procesos que están en background ingrese a la segunda terminal (ALT+F2).
INF232 – Lab. S.O.
Preliminar 2
2
Manejo del editor de textos vim Lo primero que hay que aprender de vim (muy importante) es que tiene varios modos: •
Al ingresar en vim a editar un fichero, estamos en el modo comando o normal, en el que podremos introducir ordenes (o comandos) para realizar operaciones (borrar linea, deshacer, etc...). IMPORTANTE: En este modo no podemos escribir en el archivo. Las teclas que pulsemos probablemente estarán asociadas a una operación determinada. Muchos de estos comandos (no todos) comenzarán por dos puntos “:”.
•
Para escribir texto en el fichero tendremos que entrar en el modo inserción o edición, que es tan fácil como pulsar la tecla insert (o i). Sabrás que has entrado en este modo porque abajo aparecerá el texto INSERTAR . Ahora todo lo que tecleemos se estará escribiendo en el fichero de texto. Para volver al modo comando sólo hay que pulsar la tecla ESC (Escape).
Operaciones básicas del editor Una vez tengamos nuestro texto escrito, necesitaremos saber como realizar algunas operaciones como guardar fichero, salir del editor, etc... Como hemos dicho antes, para realizar operaciones que no son de escribir en el fichero, necesitamos entrar en el modo normal (pulsando ESC si estamos en el modo edición) y a continuación los atajos que queramos: Secuencia
Significado
¡Mnemotécnica!
:q :q! :wq!
Salir del editor sin guardar quit Salir del editor sin guardar ni pedir confirmación quit ya! Salir del editor guardando sin pedir confirmación write & quit ya!
:w f2.txt
Guardar en un fichero llamado f2.txt y seguir
write en f2.txt
:e f1.txt
Cierra el fichero actual y abre f1.txt
edit f1.txt
.
Operaciones básicas para texto
En vim como en cualquier editor, necesitaremos manipular rápidamente texto, y algo que enseguida se echa en falta en VIM, son las famosas opciones Cortar, Copiar y Pegar. Con los cursores nos desplazamos por el contenido del fichero hasta llegar al inicio de la zona que queremos copiar. Pulsamos ESC (si estamos en el modo edición) y la tecla V para entrar en el modo visual y nos desplazamos hacia el final de la zona que queramos copiar. Se verá que se remarca en otro color la zona seleccionada. Una vez tengamos la zona a copiar seleccionada, sólo tenemos que pulsar C (para cortar) o Y (para copiar). Nos aparecerá abajo un mensaje X lineas copiadas. Ahora sólo tenemos que desplazarnos a donde queramos pegar ese fragmento y pulsar (como siempre, en el modo normal, no en el modo edición) la tecla P (pegar). Veamos más operaciones de texto: Secuencia Significado
¡Mnemotécnica!
dd u CTRL+R guu
delete undo redo lowercase
Suprimir línea actual al buffer (p para pegar) Deshacer el último cambio en el fichero Rehacer el último cambio en el fichero Convertir a minusculas la línea actual
INF232 – Lab. S.O.
Preliminar 2
3
gUU :num gg G ga
Convertir a mayúsculas la línea actual UPPERCASE Posicionarse en la línea num del fichero Posicionarse al principio del fichero Posicionarse al final del fichero Muestra código ASCII, hex y octal del caracter actual
.
Operaciones de búsqueda y sustitución
Otra función que solemos echar de menos enseguida es la de buscar algún texto, reemplazar, etc. En vim no puede faltar esa opción, con sus respectivas mejoras y añadidos: Para buscar un texto, escribimos (en modo normal, pulsando antes ESC si estamos en modo edición) la secuencia /palabra. Veremos que se resalta la palabra encontrada (o nos avisa de que no existe). Entonces podemos seguir buscando la próxima coincidencia pulsando n o buscarla hacia detrás pulsando N. Para sustituir un texto debemos escribir la secuencia :%s/texto1/texto2/g, donde texto1 es el texto a buscar y texto2 el texto que será reemplazado. Si incluimos la g final (global), sustituirá todas las coincidencias que encuentre, sino sólo la primera que encuentre.
.
Preferencias
Hay ciertas opciones que denominamos preferencias porque son detalles que podemos fijar permanentemente (o no) como por ejemplo que queremos mostrar el numerado de línea (como en los ejemplos de imagen), el resaltado de sintaxis, etc... Ello lo podemos hacer mediante comandos desde el modo normal o en el fichero ~/.vimrc (sin el símbolo :), donde se guardan las preferencias del usuario. Comando :set ts=3 :set sw=3 :set number/nonumber :set backup/nobackup :set directory=dir :syntax on/off :set cindent :set mouse=a/mouse= :set paste/nopaste
.
Significado Fija los tabulados a 3 espacios Fija los indentados a 3 espacios Activa/desactiva el numerado en los archivos Activa/desactiva la copia de seguridad automática Fija la carpeta donde se harán las copias Activa/desactiva el resaltado de sintaxis Activa indentado automático Activa/desactiva el uso del ratón Activa/desactiva el modo pegar texto literalmente
Ejecución y comandos externos
Es posible que mientras estamos editando un fichero, necesitemos ejecutar un comando (por ejemplo, un ls para ver los archivos), esto se puede hacer escribiendo en el modo comando :!orden en nuestro ejemplo: :!ls. También se puede hacer una pausa en la edición escribiendo :shell para realizar alguna operación y cuando la terminemos, escribir exit y volver al editor. Incluso los comandos :make y :cc se pueden utilizar para ahorrarnos el estar saliendo del editor para hacer makes o ver el último error que nos mostró. Puede consultar cualquier manual en Internet para mayor detalle.
INF232 – Lab. S.O.
Preliminar 2
4
4.
En su directorio home cree el directorio disk y monte el sistema de archivos de su disquete virtual sobre él.
5.
Permanezca en el directorio home y haciendo uso del editor pico escriba el programa mostrado abajo y grábelo con el nombre de crea_dir.c (es importante el .c). Recuerde que existen diferencias en el uso de mayúsculas y minúsculas. #include #include #include #include #include #include #define MAX_PATH 255 #define MAX_LINECOMM 255 void main(int n,char *arg[]) { char path[MAX_PATH],comm[MAX_LINECOMM];
if(n d_name); stat(buf,&status); mode_dir = status.st_mode; switch (mode_dir & S_IFMT) { case S_IFREG: printf("regular \t\t %s \n",ptr>d_name);break; case S_IFDIR: printf("directory \t\t %s \n",ptr>d_name);break; case S_IFCHR: printf("carac. \t\t %s \n",ptr>d_name);break; case S_IFBLK: printf("bloque \t\t %s \n",ptr>d_name);break; case S_IFIFO: printf("fifo \t\t %s \n",ptr>d_name);break; } } } /* fin del if */ } /*fin del main */
10. Compílelo y ejecútelo con diferentes rutas como argumento. 11. Guarde la salida a un archivo con nombre salida2 y cópielo al directorio preliminar en su disquete. 12. Desmonte conrrectamente el disquete y apague la máquina virtual. 13. El disquete virtual comprímalo con formato zip. Esto lo puede hacer desde el Navegador de archivos, haciendo click derecho sobre el archivo correspondiente y eligiendo la opción Crear archivador. Coloque por nombre, su código de alumno, por ejemplo: 20000543.zip y súbalo a intranet en la carpeta Buzón que se encuentra en la sección de Documentos de INF232Laboratorio de Sistemas Operativos
Prof. Alejandro Bello
INF232 – Lab. S.O.
Preliminar 2
6