Tentamen

Systemprogrammering, 5p 18 Mars 1994

· Skrivtid 16 - 22

· Hjälpmedel: Kelley and Pohl. A Book on C.

· Maxpoäng 52 p (för godkänt krävs 32 p)

· Uppgifterna är slumpmässigt ordnade

· Fråga om någonting är oklart

Uppgift 1 (12 p)

För varje uppgift i denna tentamen.

a) Börja uppgiften på ett nytt blad och skriv namn och uppgiftsnummer längst upp till höger på bladet.

b) Använd endast en sida på varje blad.

Uppgift 2 (6 p)

Beskriv vad som händer när följande kommando exekveras.

% grep PAT < fil1 | sort > fil2

Hur startas processer och program? När, och av vilken process skapas pipor. Hur hanteras omdirigering etc. Beskriv utförligt och rita gärna figurer.

Uppgift 3 (6 p)

Konstruera en C-funktion, execute(), som exekverar program. Anropsytan för execute ska vara:

int execute(char *command, char **argv)

där command är namnet på programmet som ska exekveras och argv är en array av strängar som är argument till programmet. argv ska avslutas med en NULL-pekare så att den passar till exec-anropen. Använd fork() och någon variant av exec() för att starta en ny process respektive för att exekvera programmet.

Execute ska returnera 0 om allt gick bra och -1 om något gick fel. Om något gick fel ska den anropande rutinen kunna använda errno och perror för att ta hand om felet.

Uppgift 4 (4 p)

Vad skrivs ut av följande C-program ?

struct {
    char *s1;
    char *s2;
    char *s3;
    char *s4;
    } sune = {"ENTER", "NEW", "POINT", "FIRST"};

char **sp[] = {&sune.s4, &sune.s3, &sune.s2, &sune.s1};
char ***spp = sp;

main()
{
    printf("%s ", *(&sune.s1 + 1));
    printf("%s", *spp[1] + 2);
    sp[2] = (++spp)[2];
    printf("%s", **(spp + 2) + 3);
    printf("VI%s\n", sune.s2 + 1);
}

Uppgift 5 (12 p)

Skriv ett förenklat find-program i C. Programmet ska ha följande anropssyntax:
% find options directory
där directory är startdirectory och options kan vara följande:
-n namepattern

-p

-x command
Programmet ska börja sin sökning i directory och rekursivt söka sig ner i directoryhierarkien och leta efter filer som matchar det reguljära uttrycket namepattern. För varje fil som den hittar ska den om "-p"-optionen är angiven skriva ut namnet på filen (hela pathen med start i direc- tory). Om "-x"-optionen är angiven ska programmet utföra kommandot command på filen.

D v s:

command filename
Observera att både "-n" och "-x"-opionerna kan vara givna samtidigt, men att endast en "-x"- option får förekomma.

Exempel:

% find -n '*.c' -print .
skriver ut alla filer som slutar på .c med start i working directory.
% find -n core -x rm ~
Tar bort alla core-filer som ligger i home directoriet eller under.

Använd getopt() för att hantera optioner och argument, opendir(), readdir() etc för att läsa igenom directoryn och execute() från Uppgift 3 för att utföra kommandot com- mand. Du får även anta att det finns en funktion regmatch(char *pattern, char *string) som utför matchning med reguljära uttryck. regmatch returnerar 1 om strängen string matchar det reguljära uttrycket pattern och 0 om den inte matchar.

Uppgift 6 (4 p)

En av operativsystemets uppgifter är att fördela och administrera datorsystemets resurser. Ge exempel på sådana resurser.

Uppgift 7 (4 p)

Hur fungerar en monitor? Hur garanteras ömsesidig uteslutnng i en monitor. Hur synkroniseras processer?

Uppgift 8 (4 p)

Beskriv hur kommunikation med rendezvous fungerar.