Lab+Exercise+8+-+The+OS+API

Opgaven i denne øvelse var at implementerer OSapiet for linux,

Den generelle fremgangmetode var at kopier filerne fra windows-version, og ændre det windowsspecifikke til linux-specifikt.

Semaphores
Umiddelbart var implementeringen af semaphores i linux lige ud af landevejen.

windows funktionerne erstattes med linux-versioner fra biblioteket: semaphore.h

Dog er en væsentlig forskel fra windowsversion at der ikke er nogen max_value for semaphores.

Mutexes
Mutexes i lunex implementeres med pthread.h funktioner.

En væsentlig forskel er dog funktionen nativeHandle der i windows returner CRITICALSECTION, som er windows svar på mutexes. I linux sættes den til at returnere en pthread_mutex_t i stedet for.

Thread
I windows bruges et HANDLE, som en slags pegepind til tråden. I lunux bruges bare en referance til et pthread objekt, som oprettes som privat data.

Der laves en start-funktion, som oprette og initialiserer tråden. Grunden til at dette ikke gøres i constructoren er at trådfunktionen run først implementeres senere hen. Netop derfor er den også virtual. Dette betyder når man i nedarver fra thread bliver man tvunget til at implementerer sin egen run-funktion, hvor thread funktionaliteten også implementes.

til at sætte prioriteten af tråden bruges funktionen sched_p.sched_priority = static_cast (priority);

Med en række hjælpe funktioner i start-funktionen.

Conditionals
lige ud af landevejen. Conditionals implementeres med funktioner fra pthread_cond_t.

En lille spidsfendighed er at mutexen returnes med nativeHandle i waitfunktionen:

void Conditional::wait(Mutex::Mutex& mut) { pthread_cond_wait(&cond_, &mut.nativeHandle); }

Utility
I utility erstattes windows funktionen Sleep med usleep fra unistd, en lille forskel er dog et denne sover microskekunder, derfor ganges argumentet med 1000 for at få milisekunder

Exercise 2
Funktionerne i OSApiet blev testet med simple programmer der oprettede to tråde, som sendte data mellem hinanden, på den måde blev både thread, conditonals og mutexes testet.

Exercise 4
Port your solution to Lab Exercises 7.1 Linux. Make the program run on both host and target. What did you have to do to succeed?

Der skulle ikke ændres andet en Os skulle defines til linux, og så kunne det umiddelbart compile og køre.

Det samme er gældende for øvelse 7.2