ОС1/Октобар 2014 — разлика између измена

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу
м (Formatiranje)
 
Ред 17: Ред 17:
Event::wait() {
Event::wait() {
     lock(lck);
     lock(lck);
     if (--val < 0) {
     if (val == 0) {
         if (setjmp(Thread::running->context) == 0) {
         if (setjmp(Thread::running->context) == 0) {
             blocked.put(Thread::running);
             blocked.put(Thread::running);
Ред 23: Ред 23:
             longjmp(Thread::running->context, 1);
             longjmp(Thread::running->context, 1);
         }
         }
    }
    else {
        val = 0;
     }
     }
     unlock(lck);
     unlock(lck);

Тренутна верзија на датум 25. август 2023. у 23:48

Zadaci na stranici predmeta.

1. zadatak

Postavka

Šta je bio osnovni motiv za uvođenje multiprogramiranja u računarske sisteme?

Rešenje

Videti zadatak iz septembarskog roka 2011.

2. zadatak

Postavka

Korišćenjem standardnih bibliotečnih operacija setjmp i longjmp, implementirati operaciju wait na binarnom semaforu koji je realizovan klasom Event poput one u školskom jezgru.

Rešenje

Event::wait() {
    lock(lck);
    if (val == 0) {
        if (setjmp(Thread::running->context) == 0) {
            blocked.put(Thread::running);
            Thread::running = Scheduler::get();
            longjmp(Thread::running->context, 1);
        }
    }
    else {
        val = 0;
    }
    unlock(lck);
}

3. zadatak

Postavka

Na jeziku C, korišćenjem sistemskog poziva fork() za Unix, napisati program koji prihvata celobrojni argument n i koji, kada se nad njim pokrene proces, pokreće jedan proces-dete i završava se, ovaj proces-dete pokreće svoje dete, itd, tako da ukupno bude n procesa u relaciji roditelj-dete (n „generacija“).

Rešenje

int main(int argc, char* argv[]) {
    if (argc < 2) {
        return -1;
    }
    int N = atoi(argv[1]);
    for (int i = 0; i < N; i++) {
        if (fork() != 0) {
            return 0;
        }
    }
    return 0;
}

4. zadatak

Postavka

Korišćenjem standardnih brojačkih semafora u školskom jezgru, na jeziku C++ napisati kod za ograničeni bafer (bounded buffer).

Rešenje

Videti zadatak iz julskog roka 2011.

5. zadatak

Postavka

Koja je osnovna razlika između tehnika dinamičkog učitavanja i preklopa (overlays)?

Rešenje

Videti zadatak iz julskog roka 2011.

6. zadatak

Postavka

Ko i kada upisuje vrednosti u registar bazne adrese i registar ograničenja procesora kod kontinualne alokacije memorije? Ukratko objasniti svrhu ovih registara.

Rešenje

Kada se kreira novi proces, stavlja se u ulazni red. OS alocira memorijske zahteve u ulaznom redu i trenutno stanje memorije i bira proces za učitavanje. OS učitava izabran proces i upisuje vrednost u base i limit registar. Bazni je koristan kod realokacije procesa a limit služi za zaštitu zauzete memorije jednog procesa od drugog.

7. zadatak

Postavka

Primenom tehnike copy-on-write kod virtuelne memorije, hardver je generisao izuzetak tipa „nedozvoljen upis u adresiranu stranicu“. Precizno objasniti šta dalje radi operativni sistem.

Rešenje

Kada proces prvi put upisuje u neku deljenu stranicu hardver generiše izuzetak tipa nedozvoljen upis u adresiranu stranicu. Operativni sistem zaključuje da je upis logički dozvoljen ali je stranica deljena, stranica se tada kopira, prestaje da bude deljena.

8. zadatak

Postavka

Navesti tipične operacije apstrakcije blokovski orijentisanog izlaznog uređaja sa sekvencijalnim pristupom.

Rešenje

Овај задатак није решен. Помозите SI Wiki тако што ћете га решити.

9. zadatak

Postavka

Neki proces izvršava sistemski poziv za upis u fajl koji je prethodno uspešno otvorio i sistem mu to ne dozvoljava, sa porukom da tom procesu nije dozvoljena ta operacija, iako je korisniku u čije ime se taj proces izvršava dozvoljena operacija upisa u taj fajl. Objasnite kako i zašto se ovo dogodilo.

Rešenje

Fajl je otvoren u režimu čitanja.

10. zadatak

Postavka

Koliko pristupa blokovima na disku treba izvršiti za pristup n-tom logičkom bloku sadržaja fajla ako je alokacija fajla

  1. FAT, pri čemu je cela FAT u memoriji
  2. kontinualna?

Rešenje

  1. 1
  2. 1