Professional Documents
Culture Documents
PR 01 09 10
PR 01 09 10
Sistemes Operatius II
curs 2009-2010
Pràctica 1: microshell
Calendari de pràctiques
Un grup de pràctiques:
– Dilluns de 19:30 a 21:30
Sistemes operatius II
Calendari de pràctiques:
– 22/02: Introducció.
– 01/03: Inici Bloc I.
– 08/03
– 15/03
– 22/03
– 29/03: Fi Bloc I. ENTREGA DE LA MICROSHELL.
– 26/04: Inici Bloc II.
– 03/05
S02
– 10/05
– 17/05: Fi Bloc II.
1
Pràctica 1: Microshell
Índex:
– Introducció.
– Característiques d’un shell.
Sistemes operatius II
Pràctica 1: Microshell
Introducció.
Característiques d’un shell
Sistemes operatius II
2
1. Introducció
Objectius
– Programació d’un shell utilitzant cridades al sistema
– Es pretén obtenir experiència pràctica en :
Sistemes operatius II
gestió de processos
readreçaments i tubs
senyals
Planificació (6 sessions)
setmana 1 Introducció a la pràctica (22/02)
setmana 2 Realització del bucle principal (01/03)
setmana 3 Implementació del readreçament i tubs (08/03)
setmana 4 Mòdul d’execució d’ordres (15/03)
S02
Pràctica 1: Microshell
Introducció.
Característiques d’un shell
Sistemes operatius II
3
2. Característiques d’un shell
Concepte
– És la interfície primària entre l’usuari i el sistema operatiu (en mode caràcter)
– És un programa que llig una ordre (o un fitxer amb múltiples ordres),
Sistemes operatius II
l’analitza i l’executa
– Realitza les cridades al sistema que són necessàries per a executar una ordre.
Interfície usuari
Entorn de finestres
Shell Programes
(KDE, Gnome)
Interfície cridades al sistema
Protocols
Fitxers
Processos xarxa
S02
Mem.
Programes de control (drivers)
virtual
Interfície maquinari-programari
CPU Memòria E/S Xarxa
Tema: Presentació microshell 7
$ PATH=/usr/bin:/bin
$ cd ..
$ cd $HOME
– Externes: estan implementades en programes independents
el shell s’encarrega de buscar el programa i executar-lo passant els arguments
corresponents.
$ ls -la
$ ps
S02
$ mv fic.txt fich2.txt
$ grep hola f1
Tema: Presentació microshell 8
4
2. Característiques d’un shell
Readreçaments
$ cat f1 > f2
Sistemes operatius II
Tubs (pipes)
$ ls -la | more
$ ls -la | grep old | wc -l > resultado
Execució en background
S02
$ NOMBRE=pepe
Sistemes operatius II
$ PATH=$PATH:$HOME/bin
$ unset NOMBRE
$ export PATH
$ echo $PATH
Control de flux
$ for k in *
> do
> cp $k $k.bak
S02
5
Pràctica 1: Microshell
Introducció.
Característiques d’un shell
Sistemes operatius II
3. Sintaxis de la microshell
Exemples vàlids
$ ls –la
$ cat f1 > f2
$ ls -la > fitxers
$ wc < fitxers
$ ls -la | sort
$ ls -la | grep old | wc -l > resultat
S02
6
3. Sintaxis de la microshell
$ cd /etc/usr/PEPE
$ cd ..
$ exit
– Versió no interactiva (permet executar l’ordre directament)
$ ush -c ls -la
$ ush -c gcc programa.c –o programa
S02
Pràctica 1: Microshell
Introducció.
Característiques d’un shell
Sistemes operatius II
7
4. Descripció modular
analizador.h/.c
int analizar(char *s);
Descomposició modular
Funcions Consulta {
num_ordenes, get_ordenes,
defines.h num_argumentos, get_argumentos,
fich_salida, fich_entrada,
Sistemes operatius II
redireccion.h/.c
ush.c int pipeline(...);
int redirigir_entrada(int i);
int redirigir_salida(int i);
int main(...) { int cerrar_fd(void);
}
ejecucion.h/.c
S02
4. Descripció modular
ush.c
Bucle principal
int main(...) {
…
Sistemes operatius II
while (TRUE) {
}
…
}
8
4. Descripció modular
4. Descripció modular
9
4. Descripció modular
Funcions mòdul readreçament
– void redireccion_ini(void);
Inicialitza el readreçament.
– int pipeline (int ncmd, char * infile, char * outfile, int append, int bgnd);
Sistemes operatius II
Crea els tubs necessaris (n-1) per a executar n ordres en tub i readreça la
STD_INPUT i STD_OUTPUT d’un procés. Han d’especificar-se
readreçaments d’entrada, d’eixida i background.
Paràmetres
– ncmd: nombre d’ordres del pipe.
– infile: fitxer on es readreça la STD_INPUT.
– outfile: fitxer on es readreça la STD_OUTPUT.
– append: (TRUE o FALSE) indica si, al fitxer al qual es readreça l’eixida
estàndard, se li afegeix l’eixida al final o ha de ser sobreescrit.
– bgnd: (TRUE o FALSE) indica si la instrucció s’executa en mode background.
– int redirigir_entrada(int i);
Readreça STD_INPUT del procés i al descriptor fd del tub/fitxer
corresponent del tub.
S02
4. Descripció modular
mode backgroung.
Retorna OK si s’ha executat correctament.
10
Pràctica 1: Microshell
Introducció.
Característiques d’un shell
Sistemes operatius II
Vectors (arrays)
– Un vector és una variable indexable que conté molts objectes (anomenats
elements) d’un mateix tipus que s’emmagatzemen consecutivament en
Sistemes operatius II
memòria.
– Els elements estan indexats des de 0 fins n-1
int B[10];
int N[5] = { 5, 25, 12, 2, 8 } 500 504 508 512 516
int a,b;
a = N[2]; // a és 12 5 25 12 2 8 ... ...
N[2] = 4; // Es modifica 3r element 4
N[0] N[1] N[2] N[3] N[4]
b = N[3]*N[3]; // b val 4
b = N[10]; // Error!!! en execució
– Vectors multidimensionals
S02
11
A1: Punters i vectors en C
Punters
– Un punter és una variable que conté l’adreça d’un altre objecte.
– Es defineix com a tipus *nom
Sistemes operatius II
– Per a treballar amb cadenes s’usen les funcions de strings (strcpy, strlen,
etc.).
– Exemples
char *Nombre = “PEPITO PEREZ”;
char Nombre2[20]; Nombre[2]
char c;
Nombre
char *p;
c = Nombre[2]; // c vale ‘P’
p = Nombre // p apunta a Nombre
c = p[4]; // c vale ‘T’ P E P I T O P E R E Z \0
strcpy(Nombre2, Nombre);
S02
p[4]
p
12
A1: Punters i vectors en C
Aritmètica de punters
– C permet realitzar diverses operacions amb variables punters
– Operadors increment/decrement (++/--).
Sistemes operatius II
printf(“Datos[%u]=%u”, i, Datos[i]);
printf(“Datos[%u]=%u”, i, *p++);
}
p
Tema: Presentació microshell 25
void *v;
int i[10];
int a;
v = i;
a = (int)v; // S’ha de fer càsting
v = malloc(100000000); // Segurament dóna error
S02
if (v == NULL) exit(-1);
13
A1: Punters i vectors en C
cad[4] = p; 0 D A V I D \0
p
Tema: Presentació microshell 27
int num_ordenes;
int *num_argumentos; char ls
char **ordenes; *
char sort
*
char ***argumentos; char
* wc
char *fich_entrada, *fich_salida; 2
1
num_ordenes = num_ordenes(); 3 2
..
ordenes = get_ordenes(); char **
. = num_argumentos();
num_argumentos int *
char ls
*
char -la
char **
argumentos = get_argumentos(); char *** *
S02
char **
char sort
char ** *
fich_entrada = fich_entrada(); ““ char wc
fich_salida = fich_salida(); “resultado” * -l
char
*
Tema: Presentació microshell 28
14
Pràctica 1: Microshell
Introducció.
Característiques d’un shell
Sistemes operatius II
Descripció
– L’eina make ajuda a automatitzar la compilació i el muntatge;
Sistemes operatius II
15
A2: Eina make
(TABULADOR)ordres
– Exemple: Dependències
prog: data.o main.o io.o
gcc data.o main.o io.o -o prog
data.o: data.c data.h
Objectiu gcc -c data.c
main.o: data.h io.h main.c Ordres
gcc -c main.c
io.o: io.h io.c
S02
gcc -c io.c
16