Anda di halaman 1dari 11

Llamadas y estructuras de los Sistemas Operativos

Marvin Josue Aguilar Romero, UNAH


marvin.aguilar@unah.edu.hn

LLAMADAS AL SISTEMA PARA ADMINISTRAR PROCESOS, ARCHIVOS Y


DIRECTORIOS
A manera de repaso hemos de considerar nuevamente que el SO tiene dos funciones principales:
1. Proveer abstracciones a los programas de usuario.
2. Administrar los recursos de la computadora.
En su mayoría la relación entre el software y el SO se da en la primera de las funciones. Esta
relación se da a través de llamadas al sistema que se encuentran disponibles en la interfaz destinada
para ello la cual varia de SO a SO.
El SO posee un núcleo, que se ejecuta en modo kernel, y es el encargado de facilitar de facilitar a
los distintos programas acceso seguro al hardware de la computadora a través de servicios de
llamada al sistema (ver figura 1).

Figura 1. Kernel como mediador entre software y hardware. Fuente: [imgKernel]

Una computadora con un solo CPU puede ejecutar solamente una instrucción a la vez, si un proceso
está ejecutando un programa de usuario en modo usuario y necesita un servicio del sistema (como
leer o guardar los datos de un archivo) tiene que ejecutar una instrucción de trap para transferir el
control al SO (porque es el SO el que se encargará de ejecutar el servicio solicitado). El SO
averigua que es lo que quiere el proceso para lo cual inspecciona los parámetros, lleva a cabo la
llamada al sistema y devuelve el control a la instrucción que va después de la llamada al sistema. En
cierto modo una llamada al sistema es similar a una llamada a un procedimiento solo que las
llamadas al sistema entran al KERNEL y las llamadas a procedimientos no.
Veremos por ejemplo una llamada al sistema para leer archivos, la llamada read posee tres
parámetros el primero especifica el archivo, el segundo apunta al búfer y el tercero proporciona el
número de bytes a leer, al igual que casi todas las llamadas al sistema la misma en invocada desde
programas en C mediante una llamada a un procedimiento de la biblioteca con el mismo nombre
que llamada al sistema (read). Una llamada desde un programa en C podría tener la siguiente
apariencia:
cuenta = read(fd, bufer, nbytes);
esta llamada devuelve el número de bytes que se leen en cuenta que por lo general es el mismo
número aunque puede ser menor si se encuentra el final del archivo pero, si no se puede llevar a
cabo la llamada al sistema cuenta se establece a – y el número de error se coloca en una variable
global llamada errno. En la figura 2 se resumen los pasos detallados que ocurren al ejecutar la
llamada al sistema read para cuenta.

Figura 2. Los 11 pasos para realizar la llamada al sistema read(fb, bufer, nbytes).

TRAP: en computación también conocida como excepción o fallo es típicamente un tipo de


interrupción sincronizada causada por una condición excepcional. Generalmente un trap resulta en
un cambio a modo kernel.
A veces suele considerarse como una interurpción normal debido a que realiza una bifurcación ante
la detección de una condición y los trap la mayoría de las veces asume el control para analizar y
realizar su operación.

LLAMADAS AL SISTEMA PARA ADMINISTRAR PROCESOS


POSIX tiene aproximadamente 100 llamadas a procedimientos agrupadas a conveniencia en 4
categorías, si ha ocurrido un error estas llamadas retornan -1:
1. Administración de procesos (ver tabla 1)
2. Administración de archivos (ver tabla 2)
3. Administración del sistema de directorios y archivos (ver tabla 3)
4. Llamadas varias (ver tabla 4)
La mayoría de los procedimientos POSIX invocan al sistema por lo que se asignan directamente a
una llamada al sistema, en algunos casaos en donde los procedimientos requeridos son sólo
pequeñas variaciones de algún otro procedimiento, una llamada al sistema maneja más de una
llamada a biblioteca.

Tabla 1. Llamadas a sistema para administración de procesos en POSIX

Llamada Descripción
pid* = fork() Crea un proceso hijo, idéntico al padre.
pid = waitpid(pid, &statloc, opciones) Espera a que un hijo termine
s = execve(nombre, argv, enornp) Reemplaza la imagen del núcleo de un proceso
exit(estado) Termina la ejecución de un proceso y devuelve el estado
* pid es un id de proceso.

Tabla 2. Llamadas a sistema para administración de archivos en POSIX

Llamada Descripción
fd=open(archivo, como, …) Abre un archivo para lectura, escritura o ambas
s=close(fd) Cierra un archivo abierto
n=read(fd, bufer, nbytes) Lee datos de n archivo y los coloca en un búfer
n=write(fd, bufer, nbytes) Escribe datos de un búfer a un archivo
posicion=Iseek(fd, desplazamiento, dedonde) Desplaza el apuntador del archivo
s=stat(nombre, &buf) Obtiene la información de estado de un archivo
fd es un descriptor de archivo, n es una cuenta de bytes, posicion es un desplazamiento dentro del
archivo.

Tabla 3. Llamadas al sistema para administración de directorios y archivos en POSIX


Llamada Descripción
s=mkdir(nombre, modo) Crea un nuevo directorio
s=rmdir(nombre) Elimina un directorio vacío
s=link(nombre1, nombre2) Crea una nueva entrada llamada nombre2, que apunta a
nombre1
s=unlink(nombre) Elimina una entrada de directorio
s=mount(especial, nombre, bandera) Monta un sistema de archivos
s=umount(especial) Desmonta un sistema de archivos

Tabla 4. Llamadas varias al sistema en POSIX

Llamada Descripción
s=chdir(nombredir) Cambia el directorio de trabajo
s=chmod(nombre, modo) Cambia los bits de protección de un archivo
s=kill(pid, senial) Envía una señal a un proceso
segundos=tiempo(&segundos) Obtiene el tiempo transcurrido desde 1/1/1970
Segundos es el tiempo transcurrido

En la figura 3 se muestra el código que simula el comportamiento del SHELL cabe recordar que en
el SHELL una instrucción debe esperar a la que se está ejecutando termine para poder empezar.

Figura 3. Versión simplificada del shell, true se define como 1.

En UNIX los procesos tienen la memoria divida en tres segmentos (figura 4): Segmento de texto
(código del programa), segmento de datos (variables) y segmento de pila.
Figura 4. División de la memoria por un proceso en POSIX.

LLAMADAS AL SISTEMA PARA ADMINISTRAR ARCHIVOS


Para leer o escribir un archivo el mismo debe existir y debemos abrirlo mediante la llamada al
sistema “open”, a esta llamada se le manada por parámetros el nombre del archivo que se va abrir,
ya se absoluto o relativo al directorio de trabajo, y un código para saber si debe abrirse en modo de
lectura (O_RDONLY), escritura (O_WRONLY) o ambos (O_RDWD).
Como es necesario que el archivo exista es necesario crearlo a través de O_CREAT y es más se
puede aprovechar el descriptor del archivo que devuelve este llamado para leer o escribir. Al
terminar el archivo se cierra con la llamada al sistema close.
Al trabajar con archivos las llamadas al sistema mas comunes son read y write, las mismas pueden
trabajar con los archivos de manera secuencial (el siguiente byte a tratar esta dispuesto enseguida) o
aleatoria (el siguiente byte no esta dispuesto inmediatamente después), recordemos que read y write
trabajan con una posición y el comando lseek permite cambiar este valor.
Lseek posee tres parámetros:
1. Descriptor del archivo: nombre del archivo.
2. Posición en el archivo: en donde se realizará la lectura o escritura.
3. Relación de la posición: que nos indica si la posición del archivo es relativa al inicio del
archivo, a la posición actual o al final del mismo.
El valor devuelto por lseek es la posición absoluta en el archivo después de modificar el apuntador.

En sistemas *NIX los archivos cuentan con una llamada stat (El archivo esta cerrado) o fstat (el
archivo esta abierto) el cual recibiendo el archivo y un apuntador a una estructura de salida, facilita
la metadata del mismo en la figura 5 podemos ver la salida de stat en terminal para [este archivo.
Figura 5. Salida de stat en shell ubuntu 18.04
LLAMADAS AL SISTEMA PARA ADMINISTRAR DIRECTORIOS
En la tabla 3 resumíamos las llamadas al sistema mas comunes para trabajar con directorios junto a
una pequeña descripción en la que hemos de ahondar en éste apartado.
• Mkdir y rmdir son usados para crear y eliminar directorios con la particularidad que al
crearse un directorio el mismo se encuentra vacío y para poder eliminar uno con rmdir
también debe estar vacío.
• Link permite al archivo aparecer bajo dos o mas nombres (a menudo en directorios distintos)
este comando permite compartir un mismo archivo, es decir que los cambios que cada
persona que posea acceso ala rchivo compartido haga, los mismos se reflejarán en las copias
compartidas del resto de usuarios. Esta es una diferencia con las copias creadas ya que un
cambio en una copia no altera las demás copias existentes. Un ejemplo podría ser enlazar el
archivo “lista_de_anime” del usaurio Pablo a un archivo “anime” del usuario Yohana:

link (“/usr/Pablo/lista_de_anime”, “/usr/Yohana/anime”)


Hacer esto es posible gracias a que en UNIX todos los archivos poseen un código único
llamado número-i el cual es un índice a una tabla de nodos-i entonces cuando copiamos un
archivo generamos un nuevo archivo con un número-i diferente mientras que, al hacer link
el nombre pueda que sea diferente pero el número-i es el mismo para ellos.
• Mount Se utiliza para agregar al directorio del raíz directorio de un dispositivo de
almacenamiento en bloque la figura 5 ejemplifica este concepto.

API DE WINDOWS 32
En cuanto a llamadas al sistema windows y UNIX es muy diferente, mientras que en UNIX
poseemos llamadas al sistema que ocasionan trap en windows no sucede así, las interacciones de
llamadas con el kernel son casi inexistentes para el usaurio y todo se maneja a nivel de
procedimientos propios de Windows.
Windows utiliza un modelo de programación basado en eventos y ha definido un conjunto de
procedimientos llamados API Win32 (Interfaz de programación de aplicaciones) que los
programadores usan para tener acceso a los servicios del sistema (no es un acceso directo sino
mediante el api que sirve de intermediario). El número de llamadas llega a los miles y de versión a
versión una de estas llamadas puede que se ejecute enteramente en espacio de usuario mientras que
en otra involucre el modo de sistema.
Entre Windows y UNIX incluso existen diferencias en cuales llamadas son posibles realizar, en la
mostramos figura 6 mostramos llamadas a UNIX con su apenas correspondiente llamada en
windows.
Figura 6. Llamadas a UNIX y a WINDOWS que son similares en conceptualización.
PIPES EN *NIX Y WINDOWS
En informática una tubería (pipe) consiste en una cadena de procesos conectados de tal forma que la
salida de uno sea la entrada del próximo. Es como ejecutar un comando, almacenar la salida en un
archivo temporal y luego usar el archivo temporal como parámetro de entrada de otro comando.
Los pipes permiten la comunicación y sincronización entre procesos y es muy común hacerlo
mediante buffers de datos entre elementos consecutivos.
De manera formal permite conectar la salida estándar de un programa con la entrada estándar de
otro.
Por ejemplo queremos listar elementos de un directorio de forma ordenada (en unix):
LS | SORT
LS por si solo muestra en salida estándar el contenido de un directorio.
SORT permite ordenar de manera alfabética los parámetros recibidos.
Al usar un pipe la salida de ls es la entrada de sort

Veamos ahora un ejemplo en powershell/cmd, digamos que queremos revisar los procesos pero esto
es un tanto engorroso por la cantidad de los mismos, entonces usamos la salida de los procesos y
pedimos que se muestren pantalla a pantalla:
Get-Process | more
Get-Process me muestra todos los procesos.
More me permite dividir la salida estándar en pantallas.
Al usar un pipe mezclo estas dos funcionalidades a mi favor.

Existen dos tipos de tuberías:


1. Sin nombre: Tienen asociado un fichero en memoria principal por lo tanto son temporales y
se eliminan cuando no están siendo usados. Permite la comunicación entre el proceso que
crea un cauce y procesos hijos tras la creación del cauce.
2. Con nombre: El cauce se crea en el sistema de archivos por lo que no se elimina. Se accede
a el mediante llamadas al sistema y permite la conexión entre procesos aunque no haya una
conexión jerárquica sencilla.
ALGUNOS COMANDOS EN *NIX
Ahora veremos algunos comandos propios de UNIX, para ejecutar los mismos haremos uso del
intérprete de comandos SHELL.
• CAT: Éste comando se utiliza para concatenar archivos y/o los muestra como salida cada
byte se imprime en cuanto se lee. Su utilidad radica en poder ver en la terminal el contenido
del archivo.
Con el comando man podemos ver la descripción completa del mismo (man cat)
• | : permite redireccionar la entrada o salida de un comando a otro.

• TEE: A diferencia de CAT, TEE permite copiar los datos que recibe de entrada estandar a
cero o más archivos indicados por el usuario es necesario usar | antes del tee y luego de
generar la entrada estandar para el procedimiento que pretendemos realizar. TEE Esta
relacionado con el concepto de tuberías. (ejemplo usar tee con ls y con cat).
• PS: Retorna los procesos activos.

• PSTREE: muestra los procesos activos en forma de árbol.

• PWD: Indica el directorio actual.

• LS: Lista el contenido de un directorio.

• DATE: Retorna día y hora.

• SPELL: corrige ortográficamente un archivo.

• GREP: Buscar un patrón en los elementos.

• MAN: me permite conocer el funcionamiento de todos los comandos de UNIX.

COMANDO TYPE, MORE, ETC EN WINDOWS


Ahora veremos algunos comandos propios de WINDOWS, para ejecutar los mismos haremos uso
del intérprete de comandos CMD o de POWERSHELL.
• TYPE: Permite mostrar el contenido de un archivo en consola.

• MORE: Type muestra le contenido tal como va leyendo byte a byte lo que dificulta la
visualización del mismo, MORE permite mostrar el contenido de un archivo pero pantalla a
pantalla.
• CLS: Limpia la consola.

• COPY: Permite copiar un archivo de un directorio a otro.

• ROBOCOPY: es un copy mejorado que permite interrumpir y reanudar además de mostrar


barra de progreso.
• TREE: vista de arbol de un directorio.
• SYSTEMINFO: Información del pc.

• HELP: me permite conocer el funcionamiento de todos los comandos de windows.

RECURSOS

1. Llamadas al sistema UNIX http://www3.uji.es/~redondo/so/Capitulo1_IS11_llamadas.pdf


2. Principales comandos en UNIX
https://www.uv.es/sto/libros/cyberdisk/alice/libro/comunix.htm
3. Curso de introducción GNU/LINUX PIPES (3 minutos) https://www.youtube.com/watch?
v=VSH1XpWN1us

Anda mungkin juga menyukai