Está en la página 1de 12

28/9/22, 11:35 MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O.

[Sistemas Operativos]

NUM. CAMBIOS REALIZADOS: NINGUNO


FECHA DE ULTIMA ENTREGA: NUNCA

CONVOCATORIA DE ENTREGA: VACIA

PREGUNTAS POR CONTESTAR: TODAS

MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O.


El módulo de arquitectura e introducción al sistema operativo se estructura en los siguientes apartados:

Introducción
El directorio /proc
Características del procesador
Soporte físico de la memoria virtual
Organización de los discos
Tabla directorio
Tabla de descriptores de fichero
Redirección
Tubería
Puertos de comunicación
Atributos de un fichero
Control de trabajos en el shell
Crear un ejecutable
Procesos periódicos

INTRODUCCIÓN
En este módulo vamos a revisar una serie de mandatos que nos van a permitir recuperar información sobre ciertas características
del hardware de nuestra máquina. En concreto sobre las características del procesador, la memoria, discos, y periféricos. También
se abordarán aspectos relacionados con el sistema de ficheros, creación de ejecutables y control de trabajos en el Shell.

Los mandatos internos del shell-bash utilizados en este módulo son los siguientes:

bg fg
jobs kill

Los mandatos externos (ejecutables) utilizados en este módulo son los siguientes:

cat df free gcc


hdparm less ls lsdev
ping ps sort stat
top tty vi vmstat

Del directorio etc se manejará el siguiente fichero:

/etc/services
/etc/fstab

Del directorio proc se manejarán los siguientes subdirectorios y ficheros:

/proc/<pid>/fd/
/proc/cpuinfo
/proc/dma
/proc/interrupts
/proc/ioports
/proc/irq
/proc/meminfo
/proc/mounts
/proc/scsi
/proc/sys

Se utilizarán los siguientes programas:


CPUyES.c
Identificadores.c
H2benchw.exe

https://laurel.datsi.fi.upm.es/docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so 1/12
28/9/22, 11:35 MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O. [Sistemas Operativos]

EL DIRECTORIO PROC
El directorio /proc contiene un conjunto de ficheros especiales, que recogen información sobre el estado actual del sistema. Este
conjunto de archivos permite tanto a usuarios como aplicaciones, conocer información detallada del hardware de nuestro sistema
y del conjunto de procesos que se encuentran en ejecución en nuestro sistema. Este último aspecto, tiene como consecuencia,
que el contenido del directorio /proc cambie de manera dinámica.

Por motivos de organización, los ficheros que contienen información sobre un mismo tema, se agrupan en directorios y
subdirectorios. Además, un subdirectorio de un proceso en concreto, contendrá toda la información asociada a dicho proceso.

Hay que tener en cuenta ciertos aspectos relacionados con el directorio /proc:

Algunos de los ficheros solo son accesibles por el usuario root


Los ficheros contenidos en este directorio solo son accesibles en modo lectura.
Al listar el contenido del directorio, los ficheros pueden tener un tamaño de 0bytes, aunque cuando los visualicemos
contengan una gran cantidad de información.
La información relacionada con la fecha y tiempo de creación, reflejan siempre el tiempo actual, puesto que dicha
información se actualiza constantemente.

Los archivos especiales del directorio /proc/sys nos permiten ver y configurar ciertas opciones del kernel durante su ejecución.
Sin embargo, las modificaciones que realicemos, no se conservarán después de reiniciar el sistema.

CARACTERÍSTICAS DEL PROCESADOR


Hasta hace poco tiempo, una de las características fundamentales de un procesador era la frecuencia de funcionamiento. En la
actualidad, otros aspectos de importancia son el número de núcleos que posee, el tamaño de la memoria cache, etc.
En una
máquina con Sistema Operativo Linux, podemos extraer toda la información relativa al/los procesador/es del fichero
/proc/cpuinfo. Cabe destacar que en máquinas multiprocesador, dispondremos de información independiente para cada una de las
CPU.

Para acceder al contenido del fichero, podemos utilizar el mandato cat.

Pregunta 1
Acceda al fichero /proc/cpuinfo. ¿Qué modelo de procesador utiliza la máquina?

Pregunta 2
¿Cuál es la frecuencia de reloj, expresado en Mhz?

Pregunta 3
¿Cuál es el tamaño de la cache interna, expresado en KB?

SOPORTE FÍSICO DE LA MEMORIA VIRTUAL


La memoria virtual está soportada por la memoria principal y por una parte del disco llamada de respaldo o swap.

Para conocer los valores de memoria de un sistema LINUX se puede utilizar el mandato free. El cual extrae su información del
directorio /proc y en concreto del fichero meminfo.

Un ejemplo de ejecución del mandato free es:


alumno@maquinaLinux:~/$ free

total used free shared buffers cached

Mem: 16432176 2810428 13621748 0 241848 1865892

-/+ buffers/cache: 702688 15729488

Swap: 8191992 176 8191816

Ejecute el mandato free en su máquina y conteste a las siguientes preguntas.


Pregunta 9
¿De cuánta memoria principal dispone el sistema?

Pregunta 10
https://laurel.datsi.fi.upm.es/docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so 2/12
28/9/22, 11:35 MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O. [Sistemas Operativos]

¿Cuánta memoria principal está en uso?


Pregunta 11
¿Cuánta memoria de swap está en uso?

ORGANIZACIÓN DE LOS DISCOS


Sobre un disco se construye uno o varios sistemas de ficheros.

A pesar de los avances en tecnológicos, el medio utilizado para el almacenamiento de información no ha cambiado
considerablemente. Ha mejorado la velocidad de transferencia (gracias a la aparición de nuevos interfaces), la capacidad de
almacenamiento ha aumentado y también ha disminuido el coste de almacenamiento.

Originalmente, las máquinas utilizaban dispositivos de almacenamiento IDE o SCSI, en la actualidad, los dispositivos SATA han
sustituido a los IDE y se han convertido en una alternativa interesante frente a los SCSI. Linux además, proporciona soporte para
el manejo de sistemas RAID (Redundant Array of Inexpensive Disks) y la administración de volúmenes lógicos (LVM - Logical
Volume Management). No es propósito de estas practicas proporcionar información detallada sobre estos conceptos, pero se
puede encontrar información adicional, por ejemplo en el capítulo 7 del libro: “La biblia de administración de sistemas Linux”
(Editorial: ANAYA, Autor: Nemeth, Evi).

Nos centraremos en este apartado en conocer las herramientas que proporciona Linux para obtener información sobre los discos
instalados en nuestra máquina.

Una primera aproximación, en máquinas de sobremesa o portátiles, consiste en utilizar el mandato df. Este mandato nos permite
conocer el uso del espacio en los discos instalados en nuestra máquina. Por norma general, en Linux, los discos IDE, serán
referenciados con el siguiente formato: /dev/hdX, donde X será una letra [a-z]. Por ejemplo, /dev/hda hace referencia al disco
IDE primero y /dev/hdb disco IDE segundo. En el caso de tratarse de un disco SCSI o SATA, la nomenclatura será: /dev/sdX,
donde X será una letra [a-z].

Si ejecutamos el mandato df.


alumno@maquinaLinux:~$ df

Filename 1K-blocks Used Available Use % Mounted on

/dev/sda1 3845904 3545732 261100 94% /

tmpfs 647972 4 647968 1% /dev/shm

/dev/sdc1 24027628 20609812 3417816 86% /home

/dev/sdc2 11250644 929123 1959412 83% /home/ftp

/dev/sdb1 8751232 3541684 4765008 43% /var

/dev/sda6 473994 12310 661684 3% /tmp

/dev/sda7 2020060 807012 1213048 40% /usr/local

En el ejemplo mostrado se observa que se dispone de tres unidades de disco SCSI/SATA:


El disco sda tiene tres particiones: la 1, 6 y 7, cada una de las cuales alberga un sistema de ficheros. Por su lado el disco sdb
tiene una sola partición y el sdc tiene dos particiones, cada una de las cuales también tiene un sistema de ficheros.

Podemos encontrar información adicional sobre los dispositivos SCSI conectados a nuestra máquina accediendo al directorio
/proc/scsi y más concretamente en el fichero scsi.

Podemos también utilizar el mandato mount o el fichero /proc/mounts o el fichero /etc/fstab, que proporcionan información
sobre todos los sistemas de ficheros que están montados en el sistema en un momento dado.

Conteste las siguientes preguntas.


Pregunta 13
¿Cuántos dispositivos scsi tiene su computador? ¿Cúales son?

Pregunta 14
¿Cuántos discos tiene la máquina triqui?

Pregunta 15
¿Utiliza la máquina triqui algún sistema RAID o Volumen Lógico?

P t 16
https://laurel.datsi.fi.upm.es/docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so 3/12
28/9/22, 11:35 MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O. [Sistemas Operativos]
Pregunta 16
¿Dispone la máquina triqui de algún sistema de archivos montado por red

TABLA DIRECTORIO
Un directorio no es más que un fichero que contiene una tabla con los nombres de los ficheros y sus
correspondientes identificadores físicos (número de nodo_i en Unix)

Para ver el contenido de un directorio se puede utilizar el mandato ls con la opción -i1. Si se añade la opción -a se muestran
también los ficheros ocultos (que como sabemos son los que empiezan por el carácter «.»). De esta forma se lista simplemente la
tabla directorio (nodo_i más nombre). Como hemos visto, el mandato ls proporciona, con otras opciones, más información sobre
cada fichero, información que obtiene del nodo_i.

alumno@maquinaLinux:~$ls -ail

220571 #pp#

209799 .

24680 ..

220572 .Xauthority

220573 .alias

231785 .backup

220574 .bash_history

220575 .bash_logout

220576 .bash_profile

220577 .bashrc

220578 .cshrc

209800 .emacs.d

220579 .lesshst

220580 .projects.ede

209802 .ssh

71715 .viminfo

220582 .zshrc

231786 ProgrPrac

231795 FicherosPrac

Cree un directorio llamado Prueba y ejecute el mandato ls –ai1.


Pregunta 20
Escriba el nodo_i de su directorio Prueba

TABLA DE DESCRIPTORES DE FICHERO


El sistema operativo mantiene por cada proceso una tabla con los descriptores de los ficheros abiertos por el mismo.

El directorio /proc también contiene información sobre procesos existentes en cada instante. En concreto, contiene un
subdirectorio por cada proceso con el siguiente nombre /proc/<pid>, donde pid es el identificador del proceso (que se puede ver
mediante el mandato ps). Entre la información contenida en este directorio, se encuentra la asociada a los ficheros que maneja el
proceso. Cada vez que un proceso empieza a usar (abre) un fichero, a éste se le asigna un número entero no negativo
denominado descriptor de fichero. Para acceder a los descriptores de fichero basta con listar el contenido del directorio
/proc/<pid>/fd.

Los tres primeros descriptores de fichero están reservados para la entrada estándar (0), salida estándar (1) y salida estándar de
errores (2). Estos descriptores están asignados por defecto al teclado y pantalla del terminal.

En la secuencia siguiente se han utilizado dos Shell. El primero sirve para crear un proceso y el segundo para visualizar la tabla
de descriptores de fichero.

Shell 1: Ejecute el editor vi sobre un fichero que no exista previamente en el directorio en el que se está trabajando, por
ejemplo: prueba_vi.txt

alumno@maquinaLinux:~$ vi PracticasAnalisis/ModuloArquitectura/prueba_vi.txt

Shell 2: Ejecute los mandatos ps –u <su_cuenta>, poniendo en vez de <su_cuenta> el nombre de su cuenta. Observe el PID del
proceso vi y ejecute el mandato ls -l /proc/<PID>/fd/, poniendo en vez de <PID> el valor del pid del proceso vi.

alumno@maquinaLinux:~$ ps -u alumno

PID TTY TIME CMD

29638 ? 00:00:00 sshd

29639 pta/1 00:00:00 bash

29666 pta/0 00:00:00 vi

29699 pta/1 00:00:00 ps

alumno@maquinaLinux:~$ ls -l /proc/29666/fd/

total 4

lrwx------ 1 alumno GrupoAlumno 64 Jul 25 06:42 0 -> /dev/pts/0

lrwx------ 1 alumno GrupoAlumno 64 Jul 25 06:42 1 -> /dev/pts/0

lrwx------ 1 alumno GrupoAlumno 64 Jul 25 06:40 2 -> /dev/pts/0

lrwx------ 1 alumno GrupoAlumno 64 Jul 25 06:42 3 -> /home/alumnosSSOO/alumno/PracticasAnalisis/ModuloArquitectura/.prueba_vi.txt.swp

https://laurel.datsi.fi.upm.es/docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so 4/12
28/9/22, 11:35 MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O. [Sistemas Operativos]
Cierre el editor vi.

En la secuencia anterior se ha utilizado el mandato ps con la opción –u que permite obtener todos los procesos de un usuario (si
no se incluye dicha opción se obtienen solamente los procesos asociados al Shell desde el que se ejecuta el mandato). Del
resultado producido por ls -l /proc/29666/fd/ se observará que la entrada estándar (número 0 de la tabla fd), la salida estándar
(número 1 de la tabla fd) y la salida estándar de errores (número 2 de la tabla fd) están asignados al dispositivo /dev/pts/0 que
no es más que la ventana ssh en la que se está ejecutando el proceso vi. Además, dicho proceso tiene abierto el fichero
.prueba_vi.txt.swp (número 3 de la tabla fd). Es un fichero temporal que usa vi durante la sesión de edición. Cuando el usuario
de vi ordene guardar el fichero, aparecerá el descriptor 4 asociado a prueba_vi.txt.

En el caso de que el fichero que abierto mediante el editor vi existiera previamente, podríamos comprobar que el descriptor 3 se
asocia dicho fichero y el descriptor 4 se asocia a .fichero.swp.

Abra un fichero existente mediante el editor vi. Observe los descriptores de fichero presentes en su proceso vi y rellene los datos
siguientes:

Pregunta 21
PID de su proceso vi

Pregunta 22
Dispositivo al que está asociado el descriptor de fichero número 1

Pregunta 23
Número total de descriptores de fichero

El mandato tty permite conocer el dispositivo asociado a la entrada estándar.


alumno@maquinaLinux:~$ tty

/dev/pts/0

REDIRECCIÓN
Los caracteres «<», «>» y « > > » se emplean en el Shell alfanumérico para redirigir la entrada y salida estándar
de los mandatos.

Cada proceso abre tres “archivos” estándar (entrada estándar, salida estándar y salida de error). Estos ficheros son accesibles a
través de unos descriptores de fichero, en concreto:

0: Entrada estándar (normalmente el teclado).


1: Salida estándar (normalmente la consola).
2: Salida de error.

Para redirigir la salida estándar, utilizaremos el operador '>' o el operador '»'. La diferencia entre ambos consiste que en el primer
caso, si el fichero al que se redirecciona la salida existe, su contenido se trunca (eliminamos su contenido y comenzamos a
escribir desde el principio). En el segundo caso, si el fichero existe, el nuevo contenido se añade al ya existente.

Veamos cual es el funcionamiento mediante un ejemplo sencillo. En este ejercicio utilizaremos el mandato sort para redireccionar
su salida y dos Shell. Como ya sabemos, este mandato muestra por su salida estándar lo que recibe por su entrada estándar de
manera ordenada. Si no introducimos nada, sort se queda esperando, que es lo que ocurre en este ejemplo.

Shell 1: Ejecute el mandato sort.


alumno@maquinaLinux:~$ sort

Shell 2: Liste todos sus procesos (ps -u <usuario>) y a continuación liste los descriptores de fichero del proceso sort.

alumno@maquinaLinux:~$ ps -u alumno

PID TTY TIME CMD

8627 ? 00:00:00 sshd

8628 pts/2 00:00:00 bash

8643 ? 00:00:00 sshd

8644 pts/3 00:00:00 bash

8671 pts/2 00:00:00 sort

8777 pts/3 00:00:00 ps

alumno@maquinaLinux:~$ ls -l /proc/8671/fd/

total 3

lrwx------ 1 alumno GrupoAlumno 64 Jul 25 12:41 0 -> /dev/pts/2

https://laurel.datsi.fi.upm.es/docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so 5/12
28/9/22, 11:35 MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O. [Sistemas Operativos]
lrwx------ 1 alumno GrupoAlumno 64 Jul 25 12:41 1 -> /dev/pts/2

lrwx------ 1 alumno GrupoAlumno 64 Jul 25 12:40 2 -> /dev/pts/2

Observe que la entrada y salidas estándar están asignadas al dispositivo /dev/pts/2.


Shell 1: Mate el proceso sort (Ctrl+C) y vuelva a ejecutarlo, redireccionando su salida a un fichero, que puede existir o no. Si el
fichero existe se borra su contenido (se trunca) y se llena con la salida del sort. Si no existe se crea.

alumno@maquinaLinux:~$ sort > Salida

Shell 2: Vuelva a listar los descriptores de fichero del proceso sort.


alumno@maquinaLinux:~$ ps -u alumno

PID TTY TIME CMD

8627 ? 00:00:00 sshd

8628 pts/2 00:00:00 bash

8643 ? 00:00:00 sshd

8644 pts/3 00:00:00 bash

8692 pts/2 00:00:00 sort

8710 pts/3 00:00:00 ps

alumno@maquinaLinux:~$ ls -l /proc/8692/fd/

total 3

lrwx------ 1 alumno GrupoAlumno 64 Jul 25 12:41 0 -> /dev/pts/2

l-wx------ 2 alumno GrupoAlumno 64 Jul 25 12:41 1 -> /home/alumnosSSOO/alumno/Salida

lrwx------ 3 alumno GrupoAlumno 64 Jul 25 12:41 2 -> /dev/pts/

Observe que, ahora, el descriptor 1 (salida estándar) está asignado al fichero Salida.

En el caso del operador '<', este se utiliza para redirigir la entrada estándar. Es decir, el contenido del fichero especificado, se
pasaría como parámetro al mandato.

Shell 1: Mate el proceso sort (Ctrl+C), y ejecute la siguiente secuencia de mandatos:

alumno@maquinaLinux:~$ ls -l /proc > listado_proc.txt

De este modo en el fichero listado_proc.txt tendremos un listado del contenido del directorio /proc.

Shell 1: A continuación redireccione la entrada del mandato sort con el fichero listado_proc.txt y la salida estándar al fichero
ordenado_proc.txt.

alumno@maquinaLinux:~$ sort -r -k 8 < listado_proc.txt > ordenado_proc.txt

Pregunta 24
¿Qué significan las opciones indicadas al mandato sort?

También podemos redirigir la salida de error estándar, para ello, deberemos especificar el descriptor de fichero a redirigir y a
donde lo redirigimos. Por ejemplo:

alumno@maquinaLinux:~$ ls -l 2>error_ls.txt

De este modo, si se produce algún error durante la ejecución del mandato ls, dicho error se escribirá en el fichero error_ls.txt

TUBERÍA
La tubería o pipe permite comunicar dos procesos del mismo computador.

El carácter «|» se utiliza en el Shell para unir dos mandatos mediante una tubería. Para observar este hecho se plantea una
secuencia que utiliza dos Shell. El primer Shell se utiliza para crear procesos y el segundo para observar los descriptores de
fichero de los procesos.

Shell 1: Ejecute cat.


alumno@maquinaLinux:~$ cat

Shell 2: Obtenga los descriptores de fichero del proceso cat.


alumno@maquinaLinux:~$ ps -u alumno

PID TTY TIME CMD

9420 ? 00:00:00 sshd

9421 pts/1 00:00:00 bash

13034 pts/5 00:00:00 bash

16327 pts/5 00:00:00 cat

16329 pts/1 00:00:00 ps

alumno@maquinaLinux:~$ls -l /proc/16327/fd/

total 3

lrwx------ 1 alumno GrupoAlumno 64 Jul 19 10:37 0 -> /dev/pts/5

https://laurel.datsi.fi.upm.es/docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so 6/12
28/9/22, 11:35 MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O. [Sistemas Operativos]
lrwx------ 1 alumno GrupoAlumno 64 Jul 19 10:37 1 -> /dev/pts/5

lrwx------ 1 alumno GrupoAlumno 64 Jul 19 10:36 2 -> /dev/pts/5

En el ejemplo, observe que el proceso cat tiene tres descriptores de fichero abiertos correspondientes a las salidas y entrada
estándar, todos ellos asociados al dispositivo /dev/pts/5.

Shell 1: Mate el proceso cat (Ctrl+C) y lance la ejecución de los dos mandatos cat y sort unidos por una tubería.

alumno@maquinaLinux:~$ cat | sort

Shell 2: Obtenga los descriptores de fichero de cat y sort.


alumno@maquinaLinux:~$ ps -u alumno

PID TTY TIME CMD

9420 ? 00:00:00 sshd

9421 pts/1 00:00:00 bash

13034 pts/5 00:00:00 bash

16345 pts/5 00:00:00 cat

16346 pts/5 00:00:00 sort

16347 pts/1 00:00:00 ps

alumno@maquinaLinux:~$ ls -l /proc/16345/fd/

total 3

lrwx------ 1 alumno GrupoAlumno 64 Jul 19 10:38 0 -> /dev/pts/5

l-wx------ 1 alumno GrupoAlumno 64 Jul 19 10:38 1 -> pipe:[5637026]

lrwx------ 1 alumno GrupoAlumno 64 Jul 19 10:38 2 -> /dev/pts/5

alumno@maquinaLinux:~$ ls -l /proc/16346/fd/

total 3

l-wx------ 1 alumno GrupoAlumno 64 Jul 19 10:38 0 -> pipe:[5637026]

lrwx------ 1 alumno GrupoAlumno 64 Jul 19 10:38 1 -> /dev/pts/5

lrwx------ 1 alumno GrupoAlumno 64 Jul 19 10:38 2 -> /dev/pts/5

Shell 1: Para terminar pulse la combinación [Ctrl+c] con lo cual matará ambos procesos cat y sort.

En el ejemplo, observamos que el proceso cat tiene su descriptor 1 (salida estándar) asociado a una tubería de número 5637026.
Por su lado, el proceso sort tiene asociada su entrada estándar (descriptor 0) a la misma tubería de número 5637026. Se dice
que el Shell ha redirigido dichas salida y entrada estándar del terminal a la tubería.

Pregunta 25
Indique el número de tubería obtenido en su caso

PUERTOS DE COMUNICACIÓN
Los puertos sirven para comunicar procesos en máquinas remotas. Hay una serie de números identificadores de
puerto que están asignados a determinados programas.

Cuando el fichero es muy grande, listarlo con el mandato cat no es conveniente. Para estos casos es más interesante utilizar el
mandato less que presenta el fichero página a página y que permite navegar por él. Las funciones más importantes son las
siguientes:

Moverse en el fichero línea a línea con las teclas «↓» y «↑» .


Moverse en el fichero página a página con las teclas de retroceso de página (Re Pág) y de avance de página (Av Pág).
Buscar una palabra con la tecla ”/” seguida de la palabra: /palabra_a_buscar
Buscar la siguiente ocurrencia con la tecla “n”, o la anterior con “N”
Salir mediante el carácter «q».

En el sistema UNIX, el fichero /etc/services contiene información de los números de puertos preasignados a programas
servidores. Ejecutando el mandato less /etc/services se puede navegar por la lista de puertos preasignados.

Algunos de los valores producidos se muestran a continuación. La lista incluye el nombre del programa, el número de puerto y el
tipo de puerto (udp o tcp), así como un posible comentario separado por «#».

tcpmux 1/tcp # TCP port service multiplexer

echo 7/tcp

echo 7/udp

discard 9/tcp sink null

discard 9/udp sink null

qotd 17/tcp quotee

msp 18/tcp #messafe send protocol

msp 18/udp

chargen 19/tcp ttytst source

chargen 19/udp ttytst source

ftp-data 20/tcp

https://laurel.datsi.fi.upm.es/docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so 7/12
28/9/22, 11:35 MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O. [Sistemas Operativos]
Pregunta 26
¿Cuál es el número de puerto del servidor de ftp?

Pregunta 27
¿Cuál es el número de puerto del servidor ssh?

Pregunta 28
¿Cuál es el número de puerto del servidor www?

ATRIBUTOS DE UN FICHERO
El servidor de ficheros mantiene para cada fichero información que permite identificarlo de manera única.

El mandato stat nos permite visualizar la información asociada a un fichero. Entre estas informaciones cabe destacar las
siguientes:

Tamaño real del fichero, expresado en bytes (Size)


Espacio físico asignado al fichero, expresado en bloques, y tamaño del bloque
Tipo de fichero: directorio (directory) o normal (regular file)
Nodo_i que mantiene la información del fichero
Permisos de acceso
UID y GID del dueño del fichero
Instantes en los que fue accedido por última vez (Access), modificado el contenido del fichero (Modify) o modificado el
contenido del nodo_i del fichero (Change)

Ejecute el mandato stat aplicado a un directorio y a un fichero normal.


alumno@maquinaLinux:~/PracticasAnalisis$ stat ModuloArquitectura

File: 'ModuloArquitectura/'

Size: 4096 Blocks: 8 IO Block: 4096 directory


Device: 821h/2081d Inode: 1746662 Links: 2

Access: (0755/drwxr-xr-x) Uid: ( 1001/ alumno) Gid: ( 1000/GrupoAlumno)

Access: 2005-07-19 08:27:36.000000000 +0200

Modify: 2005-07-18 18:13:21.000000000 +0200

Change: 2005-07-18 18:13:21.000000000 +0200

alumno@maquinaLinux:~/PracticasAnalisis$ cd ModuloArquitectura/

alumno@maquinaLinux:~/PracticasAnalisis/ModuloArquitectura$ stat identificadores.c

File: 'identificadores.c'

Size: 286 Blocks: 8 IO Block: 4096 regular file

Device: 821h/2081d Inode: 1746842 Links: 1

Access: (0644/-rw-r--r--) Uid: ( 1001/ alumno) Gid: ( 1000/GrupoAlumno)

Access: 2005-07-19 05:39:01.000000000 +0200

Modify: 2005-07-02 10:40:10.000000000 +0200

Change: 2005-07-18 15:34:54.000000000 +0200

Observe, en el ejemplo, que el fichero tiene un tamaño de 286 B pero ocupa en el disco 8 bloques. Para conocer el tamaño del
bloque se puede usar el mandato stat con la opción de formato. En el ejemplo que sigue se obtienen los valores de %b, %B y
%o, que son respectivamente el nº de bloques que tiene asignado el fichero, el tamaño de los bloques asignados y el tamaño del
bloque de E/S, es decir, el tamaño mínimo de información que lee o escribe el sistema operativo cuando accede al fichero.

alumno@maquinaLinux:~/PracticasAnalisis/ModuloArquitectura$ stat identificadores.c --format='Nº bloques = "%b" Tamaño bloque = "%B" Tamaño E/S = "%o"'
Nº bloques = 8 Tamaño bloque = 512 Tamaño E/S = 4096

De los datos anteriores se observa que el tamaño físico del fichero es de 8•512 B = 4 KB, frente a los 286 B de tamaño real que
tiene el fichero.

Ejecute el mandato stat sobre el fichero Identificadores.c y rellene los siguientes datos:

Pregunta 29
Tamaño real del fichero

https://laurel.datsi.fi.upm.es/docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so 8/12
28/9/22, 11:35 MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O. [Sistemas Operativos]
Pregunta 30
Tamaño del bloque asignado

Pregunta 31
Espacio físico ocupado por el fichero

CONTROL DE TRABAJOS EN EL SHELL


Desde un shell alfanumérico se pueden lanzar trabajos en primer plano (foreground) y trabajos en segundo plano
(background).

El modo normal de lanzar un trabajo es en primer plano. Como ya sabemos, esto se hace escribiendo el nombre del trabajo o
mandato en la línea de mandatos. Para lanzar un trabajo en segundo plano basta con añadir al final de la línea de mandatos el
carácter «&», dejando un espacio en blanco entre el mandato y «&». Los trabajos en segundo plano dejan libre el terminal para
seguir ordenando mandatos al Shell. En cada sesión de shell puede haber varios trabajos en segundo plano, pero solo uno (o
ninguno) en primer plano.

Ejecute en segundo plano el mandato vmstat 10 redirigiendo su salida a un fichero (se quedará ejecutando indefinidamente y
más adelante lo terminaremos).

alumno@maquinaLinux:~$ vmstat 10 > estado &

[1] 27430

Pregunta 32
¿Qué información proporciona el mandato vmstat?

Pregunta 33
¿De qué ficheros del directorio /proc obtiene la información?

Observamos que el sistema nos responde con el PID = 27430 del proceso creado y con el número [1], para indicarnos que es el
proceso en segundo plano nº 1.

Ejecute el mandato top. Este mandato presenta una tabla que monitoriza los procesos existentes, refrescando la información
continuamente, hasta que pulsemos la tecla “q”.

alumno@maquinaLinux:~$ top

top - 17:20:19 up 24 days, 5:26, 7 users, load average: 1.07, 1.14, 1.13

Tasks: 169 total, 1 running, 167 sleeping, 0 stopped, 1 zombie

Cpu(s): 0.3% us, 0.5% sy, 0.0% ni, 98.8% id, 0.0% wa, 0.2% hi, 0.2% si

Mem: 1295944k total, 1264724k used, 31220k free, 55088k buffers

Swap: 489448k total, 171152k used, 318296k free, 905240k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

27431 alumno 16 0 2132 1116 836 R 1.3 0.1 0:00.14 top

434 root 15 0 1632 612 520 S 0.3 0.0 27:02.57 syslogd

518 root 16 0 27548 848 696 S 0.3 0.1 249:29.71 ippl


1 root 16 0 1584 456 432 S 0.0 0.0 0:11.41 init
2 root RT 0 0 0 0 S 0.0 0.0 0:03.28 migration/0

3 root 34 19 0 0 0 S 0.0 0.0 0:00.63 ksoftirgd/0

4 root RT 0 0 0 0 S 0.0 0.0 0:03.45 migration/1

5 root 34 19 0 0 0 S 0.0 0.0 0:01.00 ksoftirgd/1

6 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 events/0

7 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 events/1

8 root 10 -5 0 0 0 S 0.0 0.0 0:00.20 khelper

9 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread

10 root 10 -5 0 0 0 S 0.0 0.0 0:15.27 kblockd/0

11 root 10 -5 0 0 0 S 0.0 0.0 0:11.23 kblockd/1

14 root 15 0 0 0 0 S 0.0 0.0 8:30.86 kswapd/0

15 root 17 -5 0 0 0 S 0.0 0.0 0:00.00 aio/0

16 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 aio/1

Teclee [Ctrl+z]. Con ello pondrá en modo suspendido al proceso del mandato top.

[2]+ Stopped top

El shell indica que dicho proceso ha pasado a segundo plano, con el número 2, y que está parado (Stopped).

El mandato fg trae un proceso de segundo a primer plano.


https://laurel.datsi.fi.upm.es/docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so 9/12
28/9/22, 11:35 MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O. [Sistemas Operativos]
Traiga el proceso del mandato top a primer plano.

alumno@maquinaLinux:~$fg 2

top

top - 17:20:52 up 24 days, 5:26, 7 users, load average: 1.04, 1.12, 1.13

Tasks: 169 total, 1 running, 167 sleeping, 0 stopped, 1 zombie

Cpu(s): 0.3% us, 0.5% sy, 0.0% ni, 95.9% id, 0.5% wa, 2.6% hi, 0.2% si

Mem: 1295944k total, 1267328k used, 28616k free, 55192k buffers

Swap: 489448k total, 171152k used, 318296k free, 908060k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

27431 alumno 16 0 2132 1116 836 R 1.0 0.1 0:00.23 top

624 mysql 16 0 121m 11m 1816 S 0.3 0.9 27:25.06 mysqld


24190 root 16 0 4212 2028 1416 S 0.3 0.2 0:00.30 proftpd

27402 alumno 16 0 14524 1876 1548 S 0.3 0.1 0:00.02 sshd

1 root 16 0 1584 456 432 S 0.0 0.0 0:11.41 init

2 root RT 0 0 0 0 S 0.0 0.0 0:03.28 migration/0

3 root 34 19 0 0 0 S 0.0 0.0 0:00.63 ksoftirgd/0

4 root RT 0 0 0 0 S 0.0 0.0 0:03.45 migration/1

5 root 34 19 0 0 0 S 0.0 0.0 0:01.00 ksoftirgd/1

6 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 events/0

7 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 events/1

8 root 10 -5 0 0 0 S 0.0 0.0 0:00.20 khelper

9 root 10 -5 0 0 0 S 0.0 0.0 0:00.00 kthread

10 root 10 -5 0 0 0 S 0.0 0.0 0:15.27 kblockd/0

11 root 10 -5 0 0 0 S 0.0 0.0 0:11.23 kblockd/1

14 root 15 0 0 0 0 S 0.0 0.0 8:30.86 kswapd/0

15 root 17 -5 0 0 0 S 0.0 0.0 0:00.00 aio/0

Termine el proceso top con [Ctrl+c]


Traiga el proceso del mandato vmstat a primer plano.


alumno@maquinaLinux:~$fg 1

vmstat 10 >estado

Mate dicho proceso con [Ctrl+c].


Ponga en ejecución en segundo plano dos mandatos en una sola línea de mandatos.

alumno@maquinaLinux:~$ ping -i 10 138.100.8.125 > resp & vmstat > estado 10 &

[1] 27669

[2] 27670

Pregunta 34
¿Para qué sirve el mandato ping?

Ejecute el mandato jobs para saber los procesos que están en segundo plano.

alumno@maquinaLinux:~$ jobs

[1]- Running ping -i 10 138.100.8.125 >resp &

[2]+ Running vmstat 10 >estado &

Mate los dos procesos según lo visto anteriormente. Borre los ficheros estado y resp.

Pregunta 35
Escriba el PID del proceso vmstat de su segunda ejecución

CREAR UN EJECUTABLE
Para crear un proceso hemos de tener el programa compilado y montado formando un ejecutable.

Se va a crear un proceso que ejecute el programa escrito en C, CPUyES.c. Se partirá del fichero fuente CPUyES.c.

Abra el fichero con un editor y observe el programa. Se verá que consiste en un bucle que se repite 10.000 veces, que crea unos
directorios, y a continuación los borra los directorios creados. El programa no hace nada útil, simplemente consume ciclos de
procesador y accesos al disco. El programa tardará bastante tiempo en terminar, por lo que le vamos a matar antes.

CE-01.- #define MYNAME "CPUyES"

CE-02.- #include <sys/stat.h>

CE-03.- #include <sys/types.h>

CE-04.- #include <fcntl.h>

CE-05.- #include <stdio.h>

CE-06.- #include <unistd.h>

CE-07.- int main(void)

CE-08.- {

CE-09.- int i;

CE-10.- for (i=0; i<10000; i++)

CE-11.- {

https://laurel.datsi.fi.upm.es/docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so 10/12
28/9/22, 11:35 MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O. [Sistemas Operativos]
CE-12.- mkdir("tmpdir", 0777);

CE-13.- mkdir("tmpdir/subdir", 0777);

CE-14.- mkdir("tmpdir/subdir/subdir", 0777);

CE-15.- sync();

CE-16.- rmdir("tmpdir/subdir/subdir");

CE-17.- rmdir("tmpdir/subdir");

CE-18.- rmdir("tmpdir");

CE-19.- sync();

CE-20.- }

CE-21.- return 0;

CE-22.- }

Posiciónese en el directorio especificado anteriormente y compile el programa con el compilador gcc de la siguiente forma:

alumno@maquinaLinux:~/PracticasAnalisis/ModurloArquitectura$ gcc CPUyES.c -o CPUyES

gcc es el compilador utilizado.


CPUyEs.c es el fichero con el código fuente.
-o CPUyES especifica el objeto a crear siendo CPUyES el fichero ejecutable.

Ejecute el mandato ps, que permite conocer los procesos en ejecución, con la opción -l que permite conocer los detalles de dichos
procesos.

alumno@maquinaLinux:~/PracticasAnalisis/ModurloArquitectura> ps -l

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

0 S 27182 28429 28426 0 76 0 - 673 wait pts/0 00:00:00 bash

0 S 27182 28454 28429 0 78 0 - 594 - pts/0 00:00:00 ps

Con ello verá los procesos asociados al Shell desde el que se ejecuta el mandato ps (si se añade la opción -e se verán todos los
procesos del sistema y si se añade la opción -u <usuario> todos los procesos de un usuario). En nuestro caso, se puede observar
que hay dos procesos: el Shell (bash) cuyo PID (Process Identifier) es 28429 y el propio proceso ps con PID = 28454. Podemos
observar que el padre (a) del proceso ps es el bash, puesto que su PPID (Parent Process Identifier) es 28429.
(a) El padre (parent) de un proceso es el proceso que lo ha creado (puesto en ejecución). Análogamente
se denomina “hijo”
(child) al proceso creado.

Ponga en ejecución el programa CPUyES en segundo plano (background):


alumno@maquinaLinux:~/PracticasAnalisis/ModuloArquitectura> ./CPUyES &

[1] 28492

Ejecute otra vez el mandato ps.


alumno@maquinaLinux:~/PracticasAnalisis/ModuloArquitectura> ps -l

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

0 S 27182 28429 28426 0 75 0 - 675 wait pts/0 00:00:00 bash

0 S 27182 28492 28429 99 85 0 - 358 - pts/0 00:00:37 CPUyES

0 S 27182 28494 28429 0 78 0 - 594 - pts/0 00:00:00 ps

Observe que ahora hay tres procesos, puesto que se está ejecutando CPUyES.

Para matar dicho proceso use el mandato kill, al que es necesario indicarle el PID del proceso. Tenga presente que deberá poner
el PID de su proceso. En nuestro caso ejecutamos:

alumno@maquinaLinux:~/PracticasAnalisis/ModuloArquitectura>kill 28492

Ejecute ps y observe que el proceso CPUyES ha terminado.


alumno@maquinaLinux:~/PracticasAnalisis/ModuloArquitectura> ps -l

F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD

0 S 27182 28429 28426 0 75 0 - 675 wait pts/0 00:00:00 bash

0 R 27182 28515 28429 0 77 0 - 595 - pts/0 00:00:00 ps

[1]+ Terminated ./CPUyES

Rellene los siguientes datos:


Pregunta 37
PID del proceso que, en su caso, ejecuta el programa CPUyES

PROCESOS PERIÓDICOS
El demonio cron se encarga de realizar las tareas periódicas.

En Linux, podemos automatizar tareas que se deben de realizar de manera periódica. El demonio (a) cron, que se inicia con el
sistema se encarga de realizar estas tareas. En concreto, este demonio procesa unos archivos de configuración, que contiene la
tarea a realizar por el Shell y la hora a la que debe realizarse.

https://laurel.datsi.fi.upm.es/docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so 11/12
28/9/22, 11:35 MÓDULO DE ARQUITECTURA E INTRODUCCIÓN AL S.O. [Sistemas Operativos]
(a) Los procesos demonio (daemon) se crean al inicio del sistema y ejecutan en background indefinidamente, realizando tareas
de forma periódica o estando a la espera de eventos para dar un servicio.

Los archivos de configuración de cron se denominan crontab (forma abreviada de cron table), y cada usuario del sistema puede
tener el suyo propio. Aunque los ficheros crontab de cada usuario se encuentran en el directorio /var/spool/cron/crontabs, la
forma de crearlos o modificarlos es a través del mandato crontab -e.

Todos los archivos crontab tienen un formato similar, en el que los comentarios van precedidos del símbolo #. Cada línea del
fichero, contendrá los siguientes campos:

minuto hora día mes dia_de_la_semana [nombre_de_usuario] mandato

Los cinco primeros campos se encargan de indicar el momento en el que se ejecutará el mandato

Consulte el manual de crontab (man 5 crontab) y responda a la siguiente pregunta:

Pregunta 38
Escriba la línea del fichero crontab que habría que incluir para eliminar todos los ficheros del directorio /tmp, todos los lunes
a las 6 de la mañana

Enviar las respuestas indicadas.

 
docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so.txt · Última modificación: 2022/09/07 10:56 (editor externo)
© 2009–2022 Grupo de Sistemas Operativos
DATSI
FI
UPM

https://laurel.datsi.fi.upm.es/docencia/asignaturas/sox/prv/practicas/analisis_so5/modulo_so 12/12

También podría gustarte