procesi oos

Cards (48)

  • Procesi
    • Rani računarski sistemi nisu omogućavali izvršenje više od jednog programa istovremeno
    • Program je imao potpunu kontrolu nad sistemom i pristup svim resursima
    • Danas: istovremeno prebacivanje više programa u memoriju njihovo konkurentno izvršavanje
  • Efikasnost
    Prebacivanjem CPU između procesa, odnosno programa u izvršenju, operativni sistem postaje efikasniji
  • Proces
    • Apstrakcija jednog aktivnog programa
    • Trenutne aktivnosti prezentirane vrijednošću programskog brojača (program counter)
    • Sadržajem procesorskih registara
    • Program - pasivan entitet
    • Proces - aktivan entitet
  • Model procesa
    • Memorijska slika
    • Virtualni programski brojač
    • Strukture u jezgru
  • Memorijska slika procesa

    • Programska sekcija koja se ne mijenja i koja sadrži programski kod
    • Stek sekcija (engl. stack section) koja sadrži privremene podatke (parametre za procedura, povratne adrese, lokalne promjenjive)
    • Sekcija podataka (engl. data section) koja sadrži globalne promjenjive
  • Proces obuhvata vrijednost programskog brojača (engl. program counter)
  • Tok izvršenja procesa
    • Memorija jednog računara koji paralelno računa 2 programa
    • 2 procesa od kojih svaki ima neovisno upravljanje tokom, i radi nezavisno od drugih
    • Napredovanje svih procesa tokom dužeg vremenskog intervala iako je u jednom trenutku aktivan samo jedan proces
    • Troši se i vrijeme za izmjenu konteksta
  • Strukture za opis procesa
    • Procesi se evidentiraju u tabeli procesa
    • Tabela se sastoji od kontrolnih blokova procesa (Process Control Block, PCB)
    • Kontrolni blok je dio radne memorije
    • Memorijska struktura sa osnovnim informacijama o procesu
    • Zahvaljujući kontrolnom bloku izvršenje programa se može prekidati i nastavljati više puta
  • Process Control Block
    • Trenutni status procesa: ready, running, waiting, i dr.
    • Ime ili numerički identifikator procesa (PID)
    • Pokazivač na roditeljski proces (proces koji je kreirao ovaj proces)
    • Pokazivač na naredni proces koji je u listi čekanja na procesor ili periferijski uređaj
    • Prioritet procesa
    • Pokazivač na memorijsko područje dodijeljeno procesu
    • Sačuvano stanje registara
    • Podaci o upravljanju memorijom (tabele stranica, segmenata, ili bazni i limit registri)
    • Lista otvorenih datoteka
    • Lista ulazno/izlaznih uređaja dodijeljenih procesu
    • Oznaka procesora na kome se izvršava
    • Potrošeno procesorsko vrijeme
  • Kontekst procesa
    • Dio kontrolnog bloka ili struktura na koju on pokazuje
    • Podaci koji se čuvaju prilikom oduzimanja procesora
    • Snimanje stanja tekućeg procesa i pozivanje snimljenih podataka novog procesa (engl. context switch)
    • Jezgro snima kontekst starog (tekućeg) procesa u PCB (Process Control Block) i puni sačuvani kontekst procesa koji je raspoređen za rad na CPU
  • Događaji koji uzrokuju pokretanje procesa
    • Inicijalizacija sistema
    • Procesi u prvom planu
    • Pozadinski procesi
    • Sistemski poziv za pokretanjem procesa kroz neki drugi proces (fork, CreateProcess)
    • Korisnički zahtjev za stvaranjem procesa (Komandna linija, GUI)
    • Inicijalizacija batch poslova
  • Pokretanje procesa
    1. Pripremi se područje u memoriji za proces
    2. Pripreme se odgovarajuće kontrolne strukture u jezgru za njegovo praćenje
    3. Proces dobiva jedinstveni identifikator procesa (PID), cijeli broj koji će kasnije lakše omogućiti njegovo praćenje
    4. U sistemima Unix tipa, napravi se kopija sadržaja memorije roditeljskog procesa kreatora u novo-kreiranom procesu
    5. U drugim sistemima inicijalni sadržaj memorije kreiranog procesa se ostavlja praznim ili prebacuje sa diska
    6. Proces roditelj može da nastavi rad ili se zaustavi dok novo-kreirani proces radi
  • Hijerarhija procesa
    • UNIX: proces zajedno sa svim child procesima i njihovim child procesima gradi familiju
    • Windows: ne postoji hijerarhija procesa
    • Skupovi procesa se mogu spojiti u job, koji od Windows 8 imaju hijerarhiju
  • Stanja procesa

    • New - novi: proces je upravo kreiran
    • Running – aktivan (izvršava se): instrukcije se izvršavaju
    • Waiting (blocked) – čeka (blokiran): proces čeka na pojavu nekog događaja kao što je neka U/I operacija
    • Ready – spreman: proces čeka da bude dodijeljen procesoru
    • Terminated – završen: proces je završio izvršenje
  • Prelazi između stanja procesa
    • running - waiting (blocked) (izvršava se - blokiran)
    • ready - running (spreman – izvršava se)
    • running - ready (izvršava se – spreman)
    • waiting – ready (blokiran – spreman)
  • Prošireni dijagram stanja procesa
    • Suspendovanje u stanjima wait i ready – dva dodatna stanja:
    • Suspended-ready (suspendovan u stanju čekanja na procesor)
    • Suspended-wait (suspendovan u stanju čekanja na resurs)
  • Nove tranzicije sa proširenog dijagrama stanja procesa
    • ready - suspended ready
    • wait - suspended waiting
    • suspended ready - ready
    • suspended waiting – waiting
  • Redovi raspoređivanja (scheduling queues)
    • Ready queue – čekaju na CPU
    • Device queue – lista procesa koji čekaju na neki uređaj
  • Redovi čekanja na procesor
    • Proces koji se nalazi u stanju izvršavanja može:
    • Ostati bez procesora kada mu istekne vremenski kvantum
    • Napraviti novi proces i čekati u blokiranom stanju da se novi proces izvrši
    • Ostati bez procesora kad se dogodi prekid
    • Postaviti U/I zahtjev, nakon čega se prebacuje u red čekanja na ulazno-izlazni uređaj, tj. postaje blokiran
  • Promjena konteksta procesa
    • Prebacivanje CPU na drugi proces zahtjeva snimanje stanja starog procesa i pozivanje snimljenog stanja novog procesa
    • Ovaj zadatak se zove promjena konteksta
    • Vrijeme potrebno za promjenu konteksta veoma zavisi od hardverske podrške
    • Dispečer: Pamti stanje procesa koji se prekida, kako bi se proces mogao kasnije nastaviti
    • Puni memoriju stanjem novog procesa kome se dodjeljuje procesor
    • Kontekst procesa: podaci koji se čuvaju prilikom oduzimanja procesora, omogućavaju nastavak izvršenja procesa
    • Kontrolni blok čuva stanje procesa prilikom zamjene konteksta
  • Načini završetka procesa
    • Dobrovoljni normalni izlaz: Proces se završio tako što je sam pozvao sistemski poziv za završetak
    • Dobrovoljni izlaz sa greškom: Sistemskom pozivu za završetak procesa prosljeđuje se parametar koji označava neku grešku
    • Fatalna greška: Operativni sistem je uočio da program pokušava da radi nelegalnu aktivnost
    • Ubijen proces: Od strane drugog procesa pošalje se signal procesu koji kaže da proces treba prekinuti
    • Pad operativnog sistema: Nažalost, dešavaju se nepredviđeni događaji koji ponekad izazivaju rušenje cijelog računarskog sistema, pa time i navedenog procesa
  • WINDOWS API ZA UPRAVLJANJE PROCESIMA
    • CreateProcess
    • CreateProcessAsUser
    • ExitProcess
    • GetCurrentProcessId
    • OpenProcess
    • QueryFullProcessImageName
    • TerminateProcess
    • EnumProcesses
  • POSIX API ZA UPRAVLJANJE PROCESIMA
    • fork
    • execl, execlp, execv, execvp
    • waitpid
    • exit
    • kill
    • sleep
    • pause
    • alarm
    • getpid
    • getppid
  • Fork, wait, exec, exit
    1. Sistemskim pozivom fork() zahtijeva se kreiranje novog procesa
    2. Sistemski poziv wait() suspenduje izvršenje pozivajućeg procesa dok neki od procesa djece završi (ili bude zaustavljen za vrijeme praćenja)
    3. Ako proces dijete završi sa radom a roditelj ga ne čeka sa wait(), proces dijete neće nestati jer bi se onda izgubili podaci o tome sa kakvim exit kodom je završio, proces dijete postaje zombie proces
    4. exec() - proces koji se pozove prestaje sa izvođenjem trenutnog programa i počinje sa drugim (koji je naveden kao argument)
    5. Postoje tri načina kako može završiti proces: pozivom exit, primitkom signala ili padom sistema
  • WINDOWS API ZA UPRAVLJANJE GRUPAMA PROCESA

    • CreateJobObject
    • OpenJobObject
  • kill
    Šalji signal procesu
  • unsigned int sleep(uiSeconds)
    Spavaj navedeni broj sekundi
  • int pause()

    Čekaj signal
  • unsigned int alarm(uiSeconds)

    Postavi alarm za slanje signala
  • getpid()
    Dobavi identifikaciju procesa
  • getppid()

    Identifikacija roditeljskog procesa
  • Fork, wait, exec, exit
    • Sistemskim pozivom fork() zahtijeva se kreiranje novog procesa.
    • Sistemski poziv wait() suspenduje izvršenje pozivajućeg procesa dok neki od procesa djece završi (ili bude zaustavljen za vrijeme praćenja).
    • Ako proces dijete završi sa radom a roditelj ga ne čeka sa wait() proces dijete neće nestati jer bi se onda izgubili podaci o tome sa kakvim exit kodom je završio proces dijete postaje zombie proces i ps će za njega pod STAT ispisati Z.
    • exec() - proces koji se pozove prestaje sa izvođenjem trenutnog programa i počinje sa drugim (koji je naveden kao argument).
    • Postoje tri načina kako može završiti proces: pozivom exit, primitkom signala ili padom sistema (nestanak napajanja ili slično).
  • WINDOWS API ZA UPRAVLJANJE GRUPAMA PROCESA
    • CreateJobObject()
    • OpenJobObject()
    • AssignProcessToJobObject()
    • TerminateJobObject()
  • POSIX API ZA UPRAVLJANJE GRUPAMA PROCESA
    • setpgid()
    • getpgid()
    • getpgrp()
    • kill()
  • MMU (Memory Management Units)
    • sprečavaju da neki proces prepisuje adresni prostor drugog procesa
    • promjena konteksta – znači reprogramiranje MMU
    • Više procesa – više vremena na promjenu konteksta
    • Programske niti – da se izbjegne ovaj problem
    • Programske niti kao child procesi, ali dijele isti adresni porstor
  • Prednost programskih niti
    • Nema zamjene adresnog prostora
    • Manje CPU vremena za prebacivanje
    • Lakša komunikacija- dijele isti adresni prostor
  • Obrada teksta

    • Jedna nit komunicira sa korisnicima
    • Druga vrši formatiranje u pozadini
    • Treća nit – snimanje na disk bez miješanja sa prve dvije niti
    • Četvrta nit kontrola pravopisa
  • Programska nit - laki proces (engl. lightweight process LWP)
    • Osnovni entiteti koji se izvršavaju na CPU
    • Unikatni resursi za niti: poseban identifikator niti (engl. thread ID), posebnu vrijednost programskog brojača, vrijednosti drugih registara procesora i poseban stek
    • Ostali resursi zajdenički za sve niti jednog procesa: sekcija koda, sekcija podataka, otvorene datoteke, signali...
  • Načini za implementaciju programskih niti
    • u korisničkom prostoru (engl. user threads)
    • u jezgru (engl. kernel threads)
    • hibridna implementacija
  • Implementacija niti u korisničkom prostoru
    • Prvi metod paket programske niti postavi potpuno u korisnički prostor.
    • Jezgro ne zna ništa o njemu.
    • Prednost mogu biti implementirane na operativnom sistemu koji ne podržava programske niti.
    • Većina operativnih sistema su bili u ovoj kategoriji a neki su još uvijek.