Actualizado el 26 de Octubre del 2020 (Publicado el 23 de Febrero del 2018)
806 visualizaciones desde el 23 de Febrero del 2018
1,4 MB
41 paginas
Creado hace 18a (10/10/2006)
Tema 1 : Introducción
Sistemas Operativos:
Programación de Sistemas
Oscar Déniz Suárez
Alexis Quesada Arencibia
Francisco J. Santana Pérez
Curso 2006-07
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
1
Concepto y definición
Construcción de módulos orientados a:
Aumentar la seguridad y eficiencia del sistema,
Mejorar el entorno de desarrollo de las aplicaciones
generales, mediante facilidades que permitan una
mayor comodidad y productividad en la
programación.
mediante facilidades que controlen el acceso a los
recursos del sistema, mejoren y faciliten al usuario su
uso.
integración de nuevos recursos en el sistema.
Aumentar la capacidad del sistema, mediante la
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
2
Llamadas al sistema/Funciones. de librería
Se distinguen por:
Acceso al kernel o ejecución en esp. de
usuario
Funcionalidad
“permanencia”o sustituibilidad
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
3
Llamadas al sistema /
Funciones. de librería
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
4
KERNELAppsLlamadas al sistemaFones. de libreríaLlamadas al sistema /
Funciones de librería
Ejemplos:
sbrk / malloc
printf / write
Funciones de fecha
fork, exec / wait / system
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
5
Llamadas al sistema
Ejemplo de llamada:
count = read(file, buffer, nbyte);
read ‑> nombre de la llamada al sistema
file ‑> fichero de donde leer
buffer ‑> zona de memoria donde colocar los datos
nbytes ‑> nº de bytes a leer
count ‑> nº de bytes leídos,
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
6
Llamadas al sistema
Ejemplo de uso del open para abrir el fichero especial
“/dev/tty” asociado con la consola asociada al proceso
# include <fcntl.h> // control y manejo de ficheros
int main (int argc, char **argv) {
/* abrimos la consola */
/* el descriptor de fichero “fd” devuelto por open es utilizado por write
int fd = open(“/dev/tty”, O_RDWR);
para escribir */
write(fd, “hola joven!\n”, 12);
exit(0);
/* cerramos el fichero */
}
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
7
Arquitectura básica de UNIX
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
8
Arquitectura básica de UNIX
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
9
Manejo de errores
En caso de error: Las llamadas al sistema
devuelven -1 ó NULL (si la función devuelve
tipo puntero)
Deben siempre comprobar después de una
llamada si todo es correcto, para ello Linux
proporciona una variable errno y una función
perror():
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
10
Manejo de errores
Ejemplo de programa, del uso de la variable global errno y del
procedimiento perror()
/* errores.c: lista los 53 primeros errores de llamadas al sistema */
# include <stdio.h>
main(argc,argv)
int argc;
char *argv[];
{
int i;
extern int errno;
for (i=0;i<=53;i++){
fprintf(stderr,"%3d",i);
errno=i;
perror(" ");
}
exit(0);
}
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
11
Búsqueda de información
man sección función. Secciones en Linux:
1 = comandos de usuario
2 = llamadas al sistema, definiciones en C
3 = funciones de librería
4 = ficheros especiales
5 = ficheros de configuración
6 = juegos
8 = comandos administrativos y de mantenimiento
Buscar ficheros con cierto texto:
grep funcion /usr/include/*.h
grep funcion /usr/include/sys/*.h
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
12
Ficheros cabecera
Puede recurrirse a ellos para buscar
funciones y/o ver la sintaxis exacta de las
mismas
unistd.h // standard POSIX
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
13
Normas y estándares
ANSI C: Define sintaxis, semántica y librería
POSIX: Portable Operating System Interface
Definidos como un conjunto de ficheros
estándar
cabecera, con grupos de funciones
tiene alrededor de 200
llamadas al
idénticas a UNIX V7 (estándar
sistema,
POSIX) en nombre, función y parámetros.
LINUX
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
14
Fases de la compilación
ejemplo.c
gcc
cpp
cc1
as
ld
ejemplo.i
ejemplo.s
ejemplo.o
a.out
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
15
gcc
Opciones más importantes:
-o = fichero ejecutable
-c = cambia el objeto a otro nombre en vez de a.out
-l = librería. Útiles: m, curses
-I = directorio de include
-L = directorio de librerías
-g = genera información para depuración
gcc -o ejemplo ejemplo.c -lm -I /usr/fsantana/include
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
16
Depurador
Sintaxis: gdb ejecutable
Opciones más importantes:
run, help, quit
set args <argumentos>
break <nombre_de_funcion>
list
step, next (no entra en las funciones), continue
print <variable>
where
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
17
strace
Para ver las llamadas al sistema que
hace un programa
Sintaxis: strace a.out
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
18
make
Imaginemos un programa complejo
compuesto por un conjunto de módulos (cada
uno de ellos con sus respectivos ficheros
cabecera)
pantalla.c ficheros.c bdatos.c principal.c
pantalla.h ficheros.h bdatos.h
$gcc -c pantalla.c
$gcc -c bdatos.c
$gcc -c ficheros.c
$gcc -c principal.c
$gcc -o programa pantalla.o ficheros.o bdatos.o principal.o
// en un solo paso
$gcc -o programa pantalla.c ficheros.c bdatos.c principal.c
19
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
make
Solución:
Para no tener que teclear tanto cada vez que
necesito recompilar me creo un script de shell
(compila)
Problema
En el ejemplo anterior realizamos una pequeña
Cuando lanzamos “compila” se compilaría todo
modificación en el programa principal (principal.c)
nuevamente
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
20
make
Herramienta que teniendo en cuenta las
dependencias entre los módulos sólo compile
aquellos que hayan sido modificados
Programa make
fichero makefile
un fichero ejecutable compilando sólo aquellos
módulos que hayan sufrido modificaciones
La información de dependencias se escribe en un
Al ejecutar make, se lee dicho fichero y se genera
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
21
make
Dependencias de un fichero
Conjunto de ficheros que participan directa
o indirectamente en su elaboración
Reglas explícitas
El programa make lee del fichero makefile
un conjunto de reglas de construcción de
ficheros
objetivo: fich1 fich2 .....
orden1
orden2
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
22
make
Para construir un objetivo se entra la orden
make objetivo
Funcionamiento
y se busca la regla para construir objetivo
Se lee el fichero makefile del directorio de trabajo
Se aplican las reglas de dependencia, si existen
Se ejecutan las órdenes de construcción en caso
de que:
• No existe el objetivo
• La fecha de ultima modificación de alguna de
las dependencias es posterior a la del objetivo
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
23
make
Ejemplo:
programa: principal.o pantalla.o
cc –o programa principal.o pantalla.o
principal.o: principal.c pantalla.h
cc –c principal.c
pantalla.o: pantalla.c pantalla.h
cc –c pantalla.c
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
24
make
Otro tipo de objetivos:
...
clean:
rm programa *.o
Comentarios con #
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
25
make
Las macros se utilizan en make para abreviar
textos que se utilizan en varias partes del
fichero makefile
Se declaran en cualquier parte del fichero
makefile
nombre=texto
Uso: $(nombre)
Se distinguen mayúsculas de minúsculas
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
26
make
Ejemplo con macros:
OBJ=principal.o pantalla.o
programa: $(OBJ)
cc –o programa $(OBJ)
principal.o: pantalla.h
cc –c principal.c
pantalla.o: pantalla.h
cc –c pantalla.c
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
27
make
Si una regla no tiene dependencias se
aplica siempre
Se pueden escribir reglas pertenecientes
a varios proyectos de software en el
mismo fichero makefile
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
28
touch
Cambia la fecha de última modificación
del fichero
Sintaxis: touch fichero
El fichero será recompilado por make
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
29
Gestión de librerías - ar
(d), listar (t) y extraer miembros (x)
Gestión de bibliotecas: crear-añadir (r), borrar
Ejemplos de bibliotecas: libc.a, libm.a
Extensión: .a
Ejemplo:
gcc –c complejo.c
ar r libcomplejo.a complejo.o
...
cc principal.c libcomplejo.a
ar t libcomplejo.a
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
30
nm
Sirve para mostrar el contenido de una
biblioteca o módulo objeto. Las funciones
que exporta
Sintaxis: nm libcomplejo.a
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
31
ldd
Muestra las bibliotecas compartidas que un
ejecutable necesita para funcionar:
$ ldd /usr/bin/mutt
libnsl.so.1 => /lib/libnsl.so.1 (0x40019000)
libslang.so.1 => /usr/lib/libslang.so.1
libm.so.6 => /lib/libm.so.6 (0x40072000)
libc.so.6 => /lib/libc.so.6 (0x4008f000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
(0x4002e000)
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
32
Editores
vi
emacs
gedit
xemacs
kdevelop
...
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
33
Ejercicio Práctico:
“Manejo de polinomios”
Realizar un “proyecto” que permita
realizar las operaciones de
lectura/escritura de polinomios, así como
las operaciones aritméticas de
sumar/restar/simplificar polinomios”
(c) Oscar Déniz / Alexis Quesada
/ Francisco J. Santana
34
Desarrol
Comentarios de: Tema 1 - Introducción - Sistemas Operativos: Programación de Sistemas (0)
No hay comentarios