Está en la página 1de 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.

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

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

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

6. solo el creador del archivo puede cambiar los permisos. chmod El siguiente comando nos permite cambiar los permisos de lectura. 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. chown El siguiente comando nos rinda la opción para cambio de propietario. Cambie el propietario del archivo /usr/<grupo>/passwdpara que sea ast 3.7. escritutra y ejecución de un archivo.3.8. 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.

Genere una cuenta de <usuario> .10.3. 3. Si queremos serrar la sesión actual . su 3. pero como era una sesión temporal solo termina esta y el minix sigue ejecutandoce.1.10. ¿Para qué sirve? El siguiente comando nos permite ingresar en el sistema con cualquier usuario o administrador.2. Para terminar esta sesión colocamos el comando exit. 3.3. ingresamos nuevamente 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).10.10.

11. Repita los comandos de 3.1.10.3.2 3.10.4.10. Entre a la cuenta <usuario> generada 3.4. Cambie la password del usuario nobody . passwd 3.11.

11. Logearse como nobody 3.3. presione las teclas ALT-F2 y verá otra sesion MINIX.3. ¿Sucede lo mismo que en 3. 3.2.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. rm Suprima el archivo /usr/<grupo>/passwd .1.12. 3.3. 3.11. ¿Que le solicita ? El comando solicita el password de un usuario superior (root) debido a que estamos en un usuario inferior llamado nobody.11. ejecutar el comando su.10.11.2.

2. Presente la fecha del sistema 4. conserve en el archivo /usr/<grupo>/fuentes. STDERR y PIPES 4. del archivo /etc/passwdal final del archivo/usr/<grupo>/fuentes.txt 4. Genere un archivo llamado /usr/<grupo>/hora.2. Presente cuantas líneas.4.3.3.1.2.txt usando el comando echo con el siguiente contenido: 2355 4.1. palabras y caracteres tiene/usr/<grupo>/tmp/fuentes. 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. STDOUT 4.txt 4. Presente cuantas lineas. palabras y caracteres tiene usr/<grupo>/fuentes. Agregue el contenido. Uso de STDIN. STDOUT.txt la salida del comando lsque muestra todos los archivos del directorio /usr/srcy de los subdirectorios bajo /usr/src 4. STDIN 4. ordenado alfabeticamente.txt generado en 4. STDOUT 4. cambie la hora del sistema usando el archivo /usr/<grupo>/hora.3.1.3.1 4.txt 4. STDERR Guarde el resultado de ejecutar el comando dosdir k en el archivo .2.3.2.13.1.1.2.3.1.3.

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

.¿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 ? .

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

todos los mensajes enviados como System_Calldesde cualquier proceso e imprímalos por pantalla. No olvide los test de prueba. y la selección de una de ellas. verificar que el usuario que ejecuta una acción sobre el archivo posee el permiso correspondiente. en MINIX. (tests o pruebas mencionados en Forma de entrega) 12. agregar y modificar permisos.entero positivo. (Tests o pruebas mencionados en Forma de entrega). Se debe generar la lista para un archivo. (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. (Opcional) Resuelva el problema de dos productores y un consumidor que deberá consumir la información generada por los productores. 15. por medio de un systemcall (tests o pruebas mencionados en Forma de entrega) Sugerencias sobre: Implementación de Semáforos a nivel de usuario . Modificación de códigos a) Modifique el "scheduler" original del MINIX para el nivel de usuarios. (tests o pruebas mencionados en Forma de entrega) 13. 11. 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. permitiendo la coexistencia de la administración original (política = 1) y la nueva (política != 1). los cuales generarán en forma alternada. (Opcional) Implemente Lista de Control de Accesos para archivos. b) Modifique la administración de memoria original del MINIX. todos los mensajes enviados como System_Call Capture. ni el consumidor retirar la información que ya retiró. guardar modificaciones. Capture. (Ver sugerencias al fondo de los enunciados). En ambos casos deberá describir en el informe cuales fueron las decisiones tomadas. adjudicar permisos. leer la LCA. 16. 14. (Tests o pruebas mencionados en Forma de entrega). en MINIX. revocar permisos. (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. Asegure la permanencia de esta información entre dos sesiones distintas. no pudiendo los productores producir información si la misma no fue consumida. por medio del valor de la variable declarada en el punto 7.c). No olvide los test de prueba. (Tests o pruebas mencionados en Forma de entrega).

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

*/ #define OS_RELEASE 2.h: /* Minix release and version numbers.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. Cuando el monitor de booteo pregunta con que SO arrancar presionesESC .0 #define UBA_FCEN 1 # ifdefUBA_FCEN #define OS_VERSION 2 SISTEMAS OPERATIVOS . Allí tipear _image= minix /* Si se quiere bootear con la nueva imagen */ _image= minix2 /*Si se quiere bootear con la imagen vieja */ . este seguro de tener un conjunto de diskettes de emergencia: disco de booteo. _Como resguardo ante pruebas con distintos kernels es conveniente generar un d irectorio /minix2 en el /dev/hd2a. backups del kernelminix original y de los archivos fuentes que fueron modificados.UBA-FCEN #else #define OS_VERSION 2 #endif Este mensaje se verá al arrancar minix _Antes de realizar cualquier cambio en el kernel. copiar allí alguna imagen confiable del kernel desde el /minix. De manera de poder restaurar el sistema en caso de que algo salga mal con la compilación del nuevo kernel.