Odlomak

Zad 1. Jun 2005.

Potrebno je realizovati drajver (device driver) za jedan izlazni, znakovno orijentisani uređaj, pri čemu korisnički proces može zadati prenos čitavog niza znakova koje će DMA upisivati na uređaj znak po znak. Korisnički proces koji zadaje izlaznu operaciju svoj zahtev predstavlja sledećom strukturom:

struct DeviceRequest {
char* block; // Pokazivač na niz znakova koje treba preneti na uređaj
unsigned long size; // Veličina niza znakova
Semaphore* toSignal; // Semafor koji treba signalizirati po završetku op.
};

Korisnički proces svoj zahtev zapisan u ovakvoj strukturi upisuje u ograničeni bafer koji predstavlja red postavljenih zahteva, a potom se blokira na semaforu na koji ukazuje pokazivač toSignal. Semafor je standardni, brojački semafor sa uobičajenim operacijama signal i wait. Ograničenom baferu pristupa se sledećim operacijama koje su blokirajuće ukoliko je bafer pun, odnosno prazan:

void putDeviceRequest (DeviceRequest*); // Stavlja jedan zahtev u red
DeviceRequest* getDeviceRequest(); // Uzima jedan zahtev iz reda

Sama izlazna operacija obavlja se preko DMA uređaja kome se prenos niza znakova block veličine size iz memorije na uređaj zadaje i pokreće sledećom neblokirajućom operacijom:

void DMARequest (char* block, unsigned long size);

Kada završi prenos bloka podataka, DMA generiše prekid kome pripada ulaz 10h u vektor tabeli. Korišćenjem navedenih operacija (za koje se pretpostavlja da su implementirane) i već realizovanih koncepta događaja i niti, sa interfejsima kao što je definisano projektnim zadatkom za domaći rad, napisati kompletan kod ovog drajvera uređaja.

No votes yet.
Please wait…

Prijavi se

Detalji dokumenta

Više u Elektrotehnika

Više u Skripte

Komentari