You are on page 1of 19

Introducción

El siguiente trabajo del grupo Green-Minix de la asignatura de Sistemas Operativos consta en la modificación del código fuente del Sistema Operativo Minix en la versión 2.0 que es un clon
del sistema operativo Unix, desarrollado por el profesor Andrew S. Tanenbaum en 1987.

2? El comando CD sin argumentos establece como directorio actual el directorio de inicio del usuario logeado. 3.1.0. . # cd /usr/src En este caso el comando CD (cambiar directorio) establece como directorio actual la dirección usr/src . # cd 3. Comandos Básicos de MINIX/UNIX 3. Colocarpassword root a root.1. 3. ¿Cómo explica el punto 3.3.2.1. pwd Indique qué directorio pasa a ser su currentdirectorysi ejecuta: 3.1.3.1.1.

en el caso de escoger un solo archivo solo se mostrara su contenido.profiley para que sirve. cat El comando CAT sirve para concatenar el contenido de los archivos y muestra por la salida estándar (pantalla).3. En el siguiente ejemplo podemos observar que los archivos adolfo y nemias.cexistentes en la carpeta root pueden ser mostrados de forma individual o colectiva.3. Cual es el contenido del archivo /usr/src/.2. find Este comando nos permite buscar archivos específicos por su nombre o con comodines como *. 3.jsp .

5. cp Este comando que sirve para copiar un archivo de un directrio a otro o en el mismo. Copiamos el archivo passwd correspondiente 3.En que directorio se encuentra el archivo proc.4.c 3. mkdir Genere un directorio /usr/<nombregrupo> Como ejemplo crearemos la carpeta Kernix en la careta USR 3. Verificamos archivo . Mostramos carpeta actual 2. Copie el archivo /etc/passwdal directorio /usr/<nombregrupo> 1.

7.6. Cambie el propietario del archivo /usr/<grupo>/passwdpara que sea ast 3. escritutra y ejecución de un archivo. chown El siguiente comando nos rinda la opción para cambio de propietario. solo el creador del archivo puede cambiar los permisos.8. chgrp El siguiente comando nos brinda la opción de cambiar grupo de un archivo Cambie el grupo del archivo /usr/<grupo>/passwdpara que sea other 3.3. chmod El siguiente comando nos permite cambiar los permisos de lectura. escritura y ejecución el grupo tenga solo permisos de lectura y ejecución el resto tenga solo permisos de ejecución Comprobación: . donde: U (user) usuario G (group) grupo O (other) otro A todos Cambie los permisos del archivo /usr/<grupo>/passwdpara que el propietario tenga permisos de lectura.

grep El siguiente comando nos permite buscar dentro de un conjunto de archivos una expresión regular. Muestre las lineas que tiene el texto includeen el archivo /usr/src/kernel/main.3. .c Muestre las lineas que tiene el texto POSIX que se encuentren en todos los archivos /usr/src/kernel/ Sabiendo que: -i es la discriminación para buscar mayúsculas o minúsculas por igual.9.

3.10. ¿Para qué sirve? El siguiente comando nos permite ingresar en el sistema con cualquier usuario o administrador.10. ingresamos nuevamente el comando exit. Genere una cuenta de <usuario> . pero como era una sesión temporal solo termina esta y el minix sigue ejecutandoce. su 3. Para terminar esta sesión colocamos el comando exit. Que sucede si ejecuta el comando su estando logueado como root? Su ingresamos el comando su se crea una sesión temporal con el mismo usuario (root).2. 3.10.3.10. Si queremos serrar la sesión actual .1.3.

11.10.11.4. Entre a la cuenta <usuario> generada 3.10. Cambie la password del usuario nobody . passwd 3. Repita los comandos de 3.2 3.1.4.3.10.

3.11.11. ¿Que le solicita ? El comando solicita el password de un usuario superior (root) debido a que estamos en un usuario inferior llamado nobody. 3.10.3.1.2? ¿Por qué? No sucede lo mismo al ejecutar el comando SU debido a que estamos en un usuario superior (root) y no en uno inferior como nobody.3. ejecutar el comando su.3.11.11. 3. ¿Sucede lo mismo que en 3. Logearse como nobody 3.3. presione las teclas ALT-F2 y verá otra sesion MINIX.12.2.2. rm Suprima el archivo /usr/<grupo>/passwd .

txt la salida del comando lsque muestra todos los archivos del directorio /usr/srcy de los subdirectorios bajo /usr/src 4.3. Uso de STDIN.1. del archivo /etc/passwdal final del archivo/usr/<grupo>/fuentes.txt 4. Agregue el contenido. STDIN 4.3.1.txt 4.1 4.1.2. STDOUT 4.1.3.2.1.txt usando el comando echo con el siguiente contenido: 2355 4.2.txt 4. cambie la hora del sistema usando el archivo /usr/<grupo>/hora.2.3.txt generado en 4.2. Presente la fecha del sistema 4. ln Enlazar el archivo /etc/passwda los siguientes archivos /tmp/contra1 /tmp/contra2 Hacer un ls l para ver cuantos enlaces tiene /etc/passwd 4.2. STDERR Guarde el resultado de ejecutar el comando dosdir k en el archivo .1. palabras y caracteres tiene usr/<grupo>/fuentes. Genere un archivo llamado /usr/<grupo>/hora.3. ordenado alfabeticamente.4. STDOUT 4.13. Presente cuantas líneas.3. palabras y caracteres tiene/usr/<grupo>/tmp/fuentes. STDERR y PIPES 4. Presente cuantas lineas. conserve en el archivo /usr/<grupo>/fuentes.3. STDOUT.

Nota 1: Está prohibido.5. una vez que haya hecho eso: 4.txt. 6. cierre el proceso de la otra sesion. seleccione las líneas que contienen el texto synce informe la cantidad de caracteres. PIPES Posiciónese en el directorio / (directorio raíz). printf("%d". quepermita crear. Creará en caso de que no exista. su directorio asociado o directorio de trabajo. Modificará los archivosgroup y shadow con los nuevos valores. Muestre el contenido de /usr/<grupo>/error. Asignará al nuevo usuario un shell particular. en este ítem. Indicando a la macro idgrupo el valor de su grupo. haciéndolo su propietario. Diseñar y programar un utilitario en shell script Diseñar y programar un utilitario en shell script para el administrador del sistema. i = i % idgrupo. Ejecución de procesos en Background Crear el siguiente programa /usr/src/loop. shell y grupo.tmp 4. 5.h> int main(){ int i. borrar o modificar en forma automática cuentas de usuarios.contraseña. El programa compilado debe llamarse loop. En todos los casos deberá controlar la consistencia de la información. a) Correrlo en foreground. automáticamente comprobará y validará el identificador del nuevo usuario. por medio de un menú.1.c #include <stdio. c. La modificación de una cuenta deberá permitir por lo menos cambiar: home.5. haga un kill sobre los procesos update y getty. Liste en forma amplia los archivos del directorio /usr/binque comiencen con la letras.c)./usr/<grupo>/error. i++. El borrado de un usuario llevará consigo la desaparición de todos sus archivos ydirectoriosasociados y la modificación de los archivos group y shadow. De forma interactiva pedirá todos los parámetros necesarios para lo opción seleccionada. es por falta de memoria. ¿Quesucede ? Mate el proceso con el comando kill . Del resultado obtenido. Para el alta de una cuenta de usuario. palabras y líneas. En caso que el grupo no exista deberá generarlo y agregar el usuario al grupo. } } Compilarlo. usar archivos temporales de trabajo Nota 2: si le da error. while(1) { c = 48 + i.

¿Qué sucede? El programa en ejecución es un bucle infinito por lo tanto hace que que proceso utiliza todos los recursos posibles del procesador. .

b) Ahora ejecútelo en background/usr/src/loop> /dev/null& .Terminamos el proceso con Ctrl+c que es como un kill.

.Que se muestra en la pantalla ? El proceso realizado no se muestra en pantalla pero en los recursos del procesador podremos darnos cuenta que esta funcionando.

Que sucede si presiona la tecla F1? Que significan esos datos ? Que sucede si presiona la tecla F2? Que significan esos datos ? .

c) y permita modificar su valor si el parámetro es un .c) 10. mediante el envío de mensajes o señales. 9. las prioridades de los procesos de usuario son menores que la más pequeña de un proceso del sistema.7. Explique cómo se genera un driver de dispositivo Explique cómo se genera un driver de dispositivo tipo bloque y como se realiza la vinculación con el sistema de archivos en MINIX. El mecanismo conocido como interconexión (pipe) crea un canal entre dos procesos mediante una llamada a una rutina del Kernel. inicializada con el valor 1. (table. c) Generar un nuevo minix que incluya una variable global (int política) al módulo MM. Bootee alternativamente del original y los originados por Ud. ya que si un proceso intenta escribir en un pipe ocupado. Para asegurar una distribución adecuada del procesador entre los procesos se calculan dinámicamente las prioridades de estos últimos. Cada proceso tiene asignada una prioridad. (ver sugerencias al fondo de los enunciados). c) Administrar las operaciones de Entrada/Salida Realice una comparación entre MINIX y LINUX para cada punto anterior. Generación de kernelminix a) Generar un nuevo minix manteniendo la versión original. y se emplea tanto para pasar datos unidireccionalmente entre las imágenes de ambos.h) Dónde se declara la entrada a un driver. Nota: En el sistema operativo Unix los procesos pueden comunicarse internamente entre sí. como para sincronizarlos. Además describa la estructura del procedimiento de una tarea de E/S (I/O task) e indique para que sirven los comandos IOCTL. MINIX Dentro de las tareas del manejo del procesador destaca la asignación dinámica (scheduling). con el fin de determinar cuál será el proceso que se ejecutará cuando se suspenda el proceso activo actual. Explique qué tipo de mecanismo utiliza MINIX y LINUX para: a) Administrar el recurso procesador (scheduler). Sugerencias: Como ayuda busque las respuestas a las siguientes preguntas: Qué es el majornumber de un device. 8. que en Unix resuelve el scheduler mediante un mecanismo de prioridades. b) Compilar los fuentes del kernel y construir un nuevo diskette boot.c) Cómo se llega desde un proceso usuario al driver. debe esperar a que el receptor lea los datos pendientes. LINUX b) Administrar el recurso memoria. (com. (table. Implementar un nuevo systemcallllamado newcall Implementar un nuevo systemcallllamado newcallque devuelva el valor de la variabledeclarada en el punto 7.

por medio del valor de la variable declarada en el punto 7. por medio de un systemcall (tests o pruebas mencionados en Forma de entrega) Sugerencias sobre: Implementación de Semáforos a nivel de usuario . (Tests o pruebas mencionados en Forma de entrega). En ambos casos deberá describir en el informe cuales fueron las decisiones tomadas. agregar y modificar permisos. ni el consumidor retirar la información que ya retiró. 16. (Opcional) Resuelva el problema de dos productores y un consumidor que deberá consumir la información generada por los productores.c). (Opcional) Implementar las primitivas para manejo de semáfororos y las primitivas P y V (deben ser implementadas mediante system-call) (ver sugerencias al fondo de los enunciados) Pruébelo con el siguiente caso: Modelo productor/consumidor. Capture. Se debe generar la lista para un archivo. b) Modifique la administración de memoria original del MINIX. (Tests o pruebas mencionados en Forma de entrega). y la selección de una de ellas. revocar permisos. Modificación de códigos a) Modifique el "scheduler" original del MINIX para el nivel de usuarios. No olvide los test de prueba. adjudicar permisos. verificar que el usuario que ejecuta una acción sobre el archivo posee el permiso correspondiente. guardar modificaciones. 11. los cuales generarán en forma alternada. 15. No olvide los test de prueba. (Tests o pruebas mencionados en Forma de entrega). Asegure la permanencia de esta información entre dos sesiones distintas. todos los mensajes enviados como System_Call Capture.entero positivo. todos los mensajes enviados como System_Calldesde cualquier proceso e imprímalos por pantalla. (Opcional) Agregue las estructuras necesarias para permitir la selección de la administración de procesador original y la nueva implementada en el punto 11a. (tests o pruebas mencionados en Forma de entrega) 13. (Ver sugerencias al fondo de los enunciados). 14. en MINIX. en MINIX. (Opcional) Implemente Lista de Control de Accesos para archivos. permitiendo la coexistencia de la administración original (política = 1) y la nueva (política != 1). No olvide los test de prueba. cuáles fueron las expectativas y cuáles fueron los resultados obtenidos e informar el juego de programas utilizados con los cuales se llegó a alguna conclusión. leer la LCA. (tests o pruebas mencionados en Forma de entrega) 12. no pudiendo los productores producir información si la misma no fue consumida.

iincclluddee//uniissttdd.. ATENCIION::eessttoopueedeeaaffeeccttaarraassrrcc//mm//ttaabllee.cc oossrrcc//ffss//ttaabbllee..h:: Prototipo del SystemCallneewccaalllliincclluddee//ccaallllnrr.cc::Crear este archivo con el código de la nueva SystemCall. lista de procesos bloqueados. argumento) Libera al semáforo y a todos los procesos que aún están bloqueados . ssrrcc//mm//Maakkeeffiillee:: Editar este archivo para que incluya la compilación de neewccaallll. lista de procesos utilizándolo.cc queeuttiilliizzaanNCALLSpaarraassussvveecttoorreess... nro de procesos que lo están utilizando... ssrrcc//mm/pprroottoo.h :: Agregar el prototipo de la función que invocará el MM/FS con nombre ddoo__neewccaallll ssrrcc//mm//ttaabbllee.. Dado que un proceso puede utilizar N semáforos. El administrador de semáforos será el Memory Manager o el File System Manager. val_sem(semaf . argumento) Retorna si semafes un semáforo asignado al proceso p_sem(semaf.h:: Asignarle el número de SystemCall e incrementar la Cantidad de System CallsNCALLSsi fuese necesario.cc yy ssrrcc//ffss //ttaabllee . ssrrcc//mm//neewccaallll.cc ssrrcc//lliibb//ppoossiixx:: Modificar el Makefile para que incluya su compilación. en el caso de que no haya disponibles debe devolver un error. su nombre. argumento) Realiza la operación del operador V liberar_sem(semaf..hoossrrcc//ffss//pprroottoo.. En todos los casos se debe devolver un error cuando corresponda (como por ejemplo hacer P sobre un semáforo no asignado).cc. Cada parte del código que agregue o cambie deberá estar realizada con compilación . argumento) Realiza la operación del operador P v_sem(semaf.ss ssrrcc//lliibb//ssyyssccaallll:: Modificar el Makefile para que incluya su compilación.Deberá implementar la gestión de semáforos a utilizar sólo por procesos de usuario.. no deberán alterar la compilación standard. por cada semáforo debe haber una lista de hasta M procesos que utilizan el semáforo y otra lista de hasta M procesos bloqueados en el semáforo Es decir cada lista la podemos representar por una Matriz de NxM Sugerencias de cómo implementar un systemcall ssrrcc//lliibb//ssyyssccaallll:: Crear el archivo neewccaallll.. Sugerencia para identificar versiones de kernel _Todos los cambios que se hagan al kernel.h: #define UBA_FCEN 1 para forzar la compilación sobre el código nuevo y si se elimina esta línea se compilará con la versión standard.. nproc_sem(semaf.. argumento) Retorna el valor del semáforo.. argumento) Retorna la cantidad de procesos bloqueados en ese semáforo is_sem(semaf.cc::insertar un elemento en la Tabla de funciones de atención de SystemCalls del MM/FS con nombre ddoo__neewccaallll... Sugerencia de estructura como se necesitará tener por un lado datos sobre el semáforo: el valor. Para eso se utilizará en el archivo /usr/include/minix/config. Se sugieren las siguientes llamadas al sistema: semaf = crear_sem(argumento) Asigna un semáforo si ya está creado. ssrrcc//lliibb//ppoossiixx:: Crear el archivo __neewccaallll.

este seguro de tener un conjunto de diskettes de emergencia: disco de booteo. copiar allí alguna imagen confiable del kernel desde el /minix. Allí tipear _image= minix /* Si se quiere bootear con la nueva imagen */ _image= minix2 /*Si se quiere bootear con la imagen vieja */ .UBA-FCEN #else #define OS_VERSION 2 #endif Este mensaje se verá al arrancar minix _Antes de realizar cualquier cambio en el kernel. De manera de poder restaurar el sistema en caso de que algo salga mal con la compilación del nuevo kernel. _Como resguardo ante pruebas con distintos kernels es conveniente generar un d irectorio /minix2 en el /dev/hd2a.h: /* Minix release and version numbers. Cuando el monitor de booteo pregunta con que SO arrancar presionesESC . backups del kernelminix original y de los archivos fuentes que fueron modificados. */ #define OS_RELEASE 2.0 #define UBA_FCEN 1 # ifdefUBA_FCEN #define OS_VERSION 2 SISTEMAS OPERATIVOS .condicional utilizando: #ifdefUBA_FCEN ---------------Nuevo código------------#else -------------Código original------------#endif _A los efectos de verificar que se está ejecutando un kernel compilado por uno mismo cambiar en el archivo /usr/include/minix/config.