ОС1/Септембар 2014

Извор: SI Wiki
< ОС1
Датум измене: 20. септембар 2021. у 17:40; аутор: Ivan Pešić (разговор | доприноси) (средити 10. задатак)
(разл) ← Старија измена | Тренутна верзија (разл) | Новија измена → (разл)
Пређи на навигацију Пређи на претрагу

Zadaci na stranici predmeta.

1. zadatak

Postavka

Šta je multiprocesni, a šta multiprocesorski operativni sistem?

Rešenje

Multiprocesni OS je OS koji podržava izvršavanje više procesa uporedo (nad istim procesorom).

Multiprocesorski sistem je računarski sistem sa više procesora koji imaju deljenu memoriju. Procesori mogu da pristupaju toj deljenoj memoriji preko zajedničke magistrale na koju su povezani.

2. zadatak

Postavka

Korišćenjem operacije yield(PCB* old, PCB* new) koja čuva kontekst izvršavanja prvog i restaurira kontekst izvršavanja drugog datog procesa, implementirati operaciju wait na semaforu koji je realizovan klasom Semaphore poput one u školskom jezgru.

Rešenje

Semaphore::wait() {
	lock();
	if(--val < 0) {
		PCB* old = Thread::running->myPCB;
		blocked.put(Thread::running);
		Thread::running = Scheduler::get();
		PCB* new = Thread::running->myPCB;
		yield(old, new);
	}
}

3. zadatak

Postavka

Na jeziku C, korišćenjem sistemskih poziva fork() i execlp() za Unix, napisati program koji pokreće drugi program iz fajla čiji je naziv zadat kao parametar komandne linije prvog programa.

Rešenje

int main(int argc, char* argv[]) {
	if(argc < 2)
		return -1;
	int pid = fork();
	if(pid < 0)
		return -2;
	else if(pid == 0) {
		execlp(argv[1]);
		return -3;
	}
	else
		wait(0);
	return 0;
}

4. zadatak

Postavka

Korišćenjem standardnih brojačkih semafora u školskom jezgru, na jeziku C++ napisati globalne deklaracije i inicijalizacije, kao i kod tela dve uporedne niti A i B koje ciklično rade sledeće:

A: upisuje vrednost u deljene promenljive x i y, a zatim čeka da proces B upiše zbir x i y u promenljivu z čiju vrednost onda ispisuje na standardni izlaz;

B: čeka da proces A upiše vrednosti u deljene promenljive x i y, zatim ove dve vrednosti sabira i zbir upisuje u deljenu promenljivu z.

Rešenje

#include <iostream>

Semaphore semA(0), semB(0);
int x, y, z;

class A : public Thread {
protected:
	void run() {
		while(1) {
			x = ...
			y = ...
			semB.signal();
			semA.wait();
		}
	}
};

class B : public Thread {
protected:
	void run() {
		while(1) {
			semB.wait();
			z = x + y;
			semA.signal();
		}
	}
};

5. zadatak

Postavka

Šta je osnovni razlog za to da linker obavlja zadatak u dva prolaza? Precizno objasniti.

Rešenje

U prvom prolazu linker analizira ulazne fajlove, veličinu njihovog binarnog sadržaja i pravi maou izvršivog fajla. U tabelu simbola unosi sve izvezene simbole iz objektnih fajlova za koje može da izračuna adresu u odnosu na ceo izvršivi fajl. U drugom prolazu linker generiše binarni kod i ujedno razrešava nerazrešena adresna polja mašinskih instrukcija na osnovu informacija o adresama u koje se premeštaju simboli iz tabele simbola.

6. zadatak

Postavka

Navesti najmanje tri sličnosti (npr. zajednički zahtevi, ograničenja ili problemi) između kontinualne alokacije memorije i segmentne alokacije memorije procesa.

Rešenje

  1. OS mora da organizuje i održava strukturu podataka za evidenciju slobodnih fragmenata
  2. OS mora da sprovodi neku od tehnika dinamičke alokacije
  3. problem eksterne fragmentacije

7. zadatak

Postavka

Kojom tehnikom se nedeljivi uređaj može učiniti virtuelno deljivim? Navesti klasičan primer takvog uređaja za koji se najčešće primenjuje ova tehnika.

Rešenje

Spooling-om. Klasičan primer je štampač.

8. zadatak

Postavka

U fajl podsistemu nekog operativnog sistema ne vodi se tabela otvorenih fajlova za svaki proces, već postoji samo jedna globalna tabela otvorenih fajlova za ceo sistem. Drugim rečima, ne postoji nikakva informacija o upotrebi otvorenog fajla lokalna (privatna) za pojedinačni proces, već su sve takve informacije globalno deljene. Da li pojam pokazivača trenutne lokacije (kurzora) za čitanje/upis u fajl ima smisla čuvati u globalnoj tabeli otvorenih fajlova i zašto?

Rešenje

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

9. zadatak

Postavka

Dati procenu kompleksnosti datih operacija sa direktorijumom u odnosu na broj postojećih fajlova n u direktorijumu, za navedene implementacije direktorijuma, ukoliko u slučaju hash tabele nema nijedne kolizije.

Rešenje

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

10. zadatak

Postavka

Neki fajl sistem koristi indeksirani pristup alokaciji fajlova sa indeksima u dva nivoa, blokom veličine 256KB i 64-bitnim adresama fizičkih blokova. Kolika je maksimalna veličina fajla u ovom sistemu?

Rešenje

Broj ulaza: 256KB / 8B = 2^15

Maksimalna veličina fajla: 2^15 * 2^15 * 2^18 = 2^48