Composición del entorno.

Anuncio
MÓDULO I: ENTORNO CENTRALIZADO DE TIEMPO
COMPARTIDO MULTIUSUARIO MULTIPROCESO.
1.-
Composición del entorno.
El entorno dónde se va a realizar esta práctica esta compuesto por una serie de
equipos que se comportan como terminales conectados a un miniordenador que tiene
memoria virtual paginada y, cuyo sistema operativo es una versión del UNIX,
denominada SunOS (Sun Microsystems).
Este entorno tiene las siguientes características: centralizado, interactivo,
multiusuario, multiprogramación y multiproceso. Por consiguiente es de tiempo
compartido.
2.-
Multiusuario.
A continuación se expone distintas formas de detectar que el entorno con el que
se trabaja es multiusuario:
2.1.-
Establecimiento de una sesión.
Antes de trabajar con el entorno es necesario conectarnos con él y que este nos
reconozca como usuario; por tanto es necesario identificarnos. Esta operación se
denomina login.
Cuando ejecutamos el programa de conexión a máquina remota correspondiente
al icono TELNET (bajo Windows), el PC se emula como un terminal y se conecta
físicamente al miniordenador. La primera información que aparece sobre la pantalla es
el denominado saludo de recepción, junto con la siguiente pregunta: Console login:
("dígame cuál es el login que utiliza"). Es decir, cuál es el nombre por el que la máquina
debe conocerte. Al pulsar la tecla Return el sistema pedirá la contraseña: Password:.
Una vez proporcionada la contraseña, el sistema visualizará un mensaje de
bienvenida. Desde este momento, se pone a la espera de cualquier mandato a través del
prompt, que está representado por el carácter dólar ($).
El comando que permite cambiar la contraseña (o crear una si todavía no tiene)
es passwd. Este comando es interactivo, en el sentido de que va indicando lo que quiere
© E.G.R.
1
que introduzca el usuario. Primero le pide la antigua contraseña y posteriormente la
nueva contraseña debe ser escrita dos veces.
Existe un fichero etc/passwd que contiene todas las contraseñas además de
información relevante sobre los distintos usuarios que conoce el entorno. A dicho
fichero todos los usuarios tienen acceso, por lo que para preservar la seguridad de las
contraseñas, éstas están encriptadas. El encriptamiento de la contraseña significa que
nadie, ni siquiera el superusuario o administrador del entorno, puede averiguar cuál es
mirando la versión encriptada, así que no se debe olvidar la contraseña. Al visualizar su
contenido se puede observar que es un fichero normal de texto ASCII. La estructura de
cada línea es la siguiente:
LOGIN:CONTRASEÑA:UID:GID:DIRECCIÓN:DIRECTORIO_RECEPCIÓN:SHELL
Al trabajar en un entorno multiusuario, cada usuario puede, pues, crear ficheros
y directorios dentro de su espacio de trabajo, del que resulta ser propietario y gestor. Por
otro lado, los usuarios pueden pertenecer a un grupo y compartir ficheros con otros
miembros del grupo del que forman parte. Por otra parte, un usuario puede, si lo desea,
dar autorización a otros usuarios, cualquiera que sea el grupo al que pertenece, para
acceder a algunos de sus ficheros y directorios.
Todas estas autorizaciones de acceso y particiones son gestionadas mediante un
sistema de autorizaciones de acceso a ficheros y directorios.
Se utiliza el comando exit para desconectarse con el sistema y cerrar la sesión,
destruyendo el shell en el que nos encontramos.
2.2.-
Lista de los usuarios conectados.
En un entorno multiusuario siempre se tiene la impresión de estar solo con la
máquina, ya que la presencia de otros usuarios es totalmente transparente.
El comando tty nos devuelve el nombre del terminal al que estamos conectados.
Para saber el nombre con que nos conoce el entorno, se puede emplear tanto el
mandato who am i, como el mandato en una sola palabra whoami.
Con el mandato who obtenemos la lista de los nombres de los usuarios
conectados actualmente, el terminal en que se encuentran, la fecha y la hora en que se
conectaron al entorno.
© E.G.R.
2
2.3.-
Comunicación entre usuarios.
En un entorno multiusuario, la comunicación entre los distintos usuarios es un
principio básico del trabajo cotidiano de todos.
Para enviar un mensaje a un usuario es preciso que este último esté conectado.
El envío de un mensaje se hace por medio del mandato write, que escribe directamente
en la pantalla del destinatario. Puede ocurrir que el destinatario esté conectado en varios
terminales a la vez. En este caso, se puede elegir el terminal sobre el que se desea lanzar
el mensaje.
Si no se desea recibir mensajes (por ese terminal), se puede impedir mediante el
mandato mesg n, que desactiva la recepción de mensajes.
Para restablecer la posibilidad de recibir mensajes se usará el comando mesg y.
El comando talk abre una ventana de diálogo con otro usuario sólo si este está
conectado en el momento de intentar la comunicación. A continuación, si el usuario está
conectado es avisado con un pitido y un mensaje a intervalos regulares de tiempo por si
en ese instante no estuviera atendiendo el terminal. Una vez enterado del aviso abrirá
otra ventana de diálogo haciendo uso de este mismo comando, entonces es cuando se
establece la comunicación. Cuando la comunicación es interrumpida (mediante ^c) por
un usuario desaparece la ventana de diálogo también en el otro.
El superusuario puede enviar un mensaje a todos los usuarios que se encuentren
conectados en ese momento mediante el comando wall que es la abreviatura de write
all.
3.-
Interactivo.
Se puede observar que la mayoría de los comandos del sistema operativo
empleados anteriormente, proporciona una salida en un tiempo de respuesta breve. Se
puede recordar los comandos tty, cat, read, echo, passwd, date, ls, etc.
4.-
Multiprogramación. Multiproceso.
© E.G.R.
3
A continuación se expone distintas formas de comprobar que es un entorno
multiprogramable (multiproceso):
4.1.-
Planificación de procesos.
Cuando nos conectamos con el sistema, el diálogo se inicia mediante un
programa especial conocido por shell. Por cada usuario que se conecta se crea un
ejemplar particular de shell. El shell interpreta los comandos introducidos en un
terminal por el usuario, y los transmite al sistema en un lenguaje y una sintaxis
comprensibles para éste.
Se pueden escribir verdaderos programas con las instrucciones del shell,
sirviéndonos de un editor, y convirtiéndolos en ejecutables mediante el comando
chmod. A los programas shell se le denominan scripts, que son ficheros a los que se le
otorgan derecho de ejecución.
Estamos en un entorno multiproceso es decir; el entorno puede atender más de
un trabajo a la vez. Al momento de conectarnos se crea un proceso: el shell que se pone
a la espera de las instrucciones que vayamos a darle a través de nuestro terminal. Esto
quiere decir que siempre hay un proceso, como mínimo, en curso de ejecución y que
sólo desaparecerá mediante la desconexión.
Las entradas y salidas estándar de este shell son el terminal y la primera acción
que realiza el shell es la de visualizarnos el prompt. Todo mandato que le transmitamos
se ejecutará mediante un subproceso específico, diferente del shell de partida. El shell
de conexión espera la señal de fin del subproceso para poder visualizar de nuevo el
prompt y ponerse otra vez a la espera de siguientes instrucciones.
Un entorno es algo "vivo" y siempre tiene un cierto número de procesos en
curso. Cada proceso siempre ha sido generado por otro proceso superior. Cada proceso
recibe un número del sistema; es el PID (processus identification), que es un número
que nos permite encontrarlo en el listado de los procesos.
4.2.-
Tarea de fondo.
Hay dos formas de ejecutar un trabajo:
1.-
de forma interactiva que es la que venimos utilizando. Funciona como un
diálogo de preguntas/respuestas: le damos una orden al shell y esperamos a que
nos devuelva el resultado antes de darle otra orden.
© E.G.R.
4
2.-
con prioridad subordinada también denominada tarea de fondo, que significa
lanzar la orden al shell y continuar nuestro trabajo sin esperar a que nos dé el
resultado de la misma. Esta forma de ejecutar un trabajo es bastante útil cuando
dicho trabajo requiere bastante tiempo.
Para ejecutar un trabajo (mandato) en tarea de fondo, sólo hay que concluir
dicho mandato con el carácter especial &.
Para comprobar como funciona el ejecutar un trabajo en tarea de fondo, vamos
a realizar un programa que calcule los factoriales de los números que se
encuentran en un fichero y los almacene en otro fichero. Se puede observar que
es un programa que requiere mucho cálculo y poca interacción con el usuario.
El comando kill permite anular un proceso en curso. Para ello es preciso saber el
número de identificación que le corresponde. Este mandato envía la señal de
finalización al proceso.
$ kill número_proceso
Cuando se lanzan trabajos como tareas de fondo, a menudo algunos de ellos no
urgen. El mandato nice se encarga de decirle al sistema cuáles son los trabajos
no prioritarios. Estos tardarán en ejecutarse, pero no molestarán a los restantes
trabajos en curso, especialmente a aquellos que se realizan en modo interactivo y
que deben siempre favorecerse.
También se puede encargar un trabajo para que se ejecute cuando vaya a
ausentarse. Esto es bastante útil, especialmente si un trabajo requiere
considerable tiempo. Para ello se utiliza el mandato nohup (no hung up), que
permite la ejecución de tareas después de desconectarse del sistema.
© E.G.R.
5
Descargar