Pitanja za intervju iz operativnih sistema, 34 pitanja o operativnim sistemima (10.000 reči, 51 ručno crtani crtež), obavezno čitanje za preokret kandidatova 👍
10.000 reči, 51 ručno crtani crtež, detaljno objašnjenje 34 česta pitanja za intervju iz operativnih sistema (da nema teško zapamćivih pitanja), kandidati koji nauče ova pitanja o operativnim sistemima, ovaj put će prebiti intervjuera, mislim da je sigurno (ručni pas). Organizovao: Chenmo Wang Er, kliknilink za repost, autor: Sanfen E, kliknilink originalnog teksta.
Uvod
01,Šta je operativni sistem?
Operativni sistem (Operating System, OS) je sistem srednjeg sloj u računarskom sistemu koji upravlja hardverskim i softverskim resursima, prikriva složenost hardvera i pruža korisnicima pogodan način interakcije, na primer Windows, Linux, MacOS itd.

02,Koje su glavne funkcije operativnog sistema?

①,Odgovoran za stvaranje i okončanje procesa. Proces je instanca programa koji se izvršava, svaki proces ima svoj adresni prostor i resurse.
②,Odgovoran za dodelu resursa procesima, na primer memorije, i oslobađanje memorije kada se proces okonča.
③,Pruža funkcije za stvaranje, brisanje, čitanje i pisanje datoteka, i organizuje strukturu skladištenja datoteka, na primer direktorijume.
④,Kroz upravljačke programe uređaja kontroliše i upravlja hardverskim uređajima računara, kao što su tastatura, miš, štampač itd.
- Vodič za intervju iz Java-e (plateno) uključuje originalno pitanje sa 1. intervjua kandidata iz BYD-a: glavne funkcije operativnog sistema, kao i kontekstnu promenu
GitHab-u sa preko 17000+ zvezdica otvoreni baza znanja „Ergov put napredovanja u Java-i“ koji je konačno stigao! Uključuje osnovnu sintaksu Java-e, nizove&niske, OOP, kolekcijski okvir, Java IO, rukovanje izuzecima, nove funkcije Java-e, mrežno programiranje, NIO, konkurentno programiranje, JVM itd, ukupno preko 320.000 reči, preko 500 ručno crtanih crteža, može se reći da je jednostavno i razumljivo, duhovito i smešno… Detalji klikni: Sjajno, Java vodič na GitHab-u sa preko 17000+ zvezdica
Struktura operativnog sistema
03,Šta je jezgro?
Može se reći da je jezgro računarski program, ono je srce operativnog sistema, pruža naosnovnije sposobnosti operativnog sistema, može kontrolisati sve sadržaje u operativnom sistemu.
04,Šta su korisničko stanje i stanje jezgra?
U računarskom sistemu, memorija se može podeliti u dve velike oblasti: prostor jezgra (Kernel Space) i korisnički prostor (User Space). Ova podela se prvenstveno koristi za zaštitu stabilnosti i bezbednosti sistema.
- Prostor jezgra je memorijska oblast u kojoj se nalaze kod jezgra operativnog sistema i strukture podataka pri izvršavanju, ima potpuni pristup svim resursima sistema, kao što su upravljanje procesima, upravljanje memorijom, sistem datoteka, mrežni stek itd.
- Korisnički prostor je memorijska oblast koju operativni sistem dodeljuje aplikacijama (kao što su procesi koje korisnik pokreće), procesi u korisničkom prostoru ne mogu direktno pristupati hardveru ili strukturama podataka jezgra, mogu komunicirati sa jezgrom samo kroz sistemske pozive.

Kada program koristi korisnički prostor, često kažemo da se program izvršava u korisničkom stanju, a kada program koristi prostor jezgra, program se onda izvršava u stanju jezgra.
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 8 iz Dewu-a: šta su prostor jezgra i korisnički prostor, kada se ulazi u prostor jezgra
05,Kako se vrši promena između korisničkog stanja i stanja jezgra?
Kada aplikacija izvrši sistemski poziv, CPU će preći iz korisničkog stanja u stanje jezgra, ući u prostor jezgra da izvrši odgovarajući kod jezgra, a zatim se vratiti u korisničko stanje.

Sistemski poziv je interfejs kojim aplikacija zahteva usluge od jezgra operativnog sistema, kao što su operacije nad datotekama (npr. open, read, write), kontrola procesa (npr. fork, exec), upravljanje memorijom (npr. mmap) itd.
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 8 iz Dewu-a: šta su prostor jezgra i korisnički prostor, kada se ulazi u prostor jezgra
GitHab-u sa preko 17000+ zvezdica otvoreni baza znanja „Ergov put napredovanja u Java-i“ koji je konačno stigao! Uključuje osnovnu sintaksu Java-e, nizove&niske, OOP, kolekcijski okvir, Java IO, rukovanje izuzecima, nove funkcije Java-e, mrežno programiranje, NIO, konkurentno programiranje, JVM itd, ukupno preko 320.000 reči, preko 500 ručno crtanih crteža, može se reći da je jednostavno i razumljivo, duhovito i smešno… Detalji klikni: Sjajno, Java vodič na GitHab-u sa preko 17000+ zvezdica
Procesi i nitke
06,Koja je razlika između paralelizma i konkurentnosti?
Konkurentnost znači da u određenom periodu, više zadataka će biti obrađeno; ali u određenom trenutku, samo jedan zadatak se izvršava. Jednojezgrani procesor može postići konkurentnost, zapravo koristeći rotaciju vremeskih okna, na primer ako imamo dva procesa A i B, nakon što A radi jedno vremesko okno, prebacuje se na B, nakon što B radi jedno vremesko okno ponovo se prebacuje na A. Zbog brzine promene, na makro nivou izgleda da se više programa istovremeno izvršava u određenom periodu.
Paralelizam znači da u istom trenutku, više zadataka se izvršava. Ovo zahteva višejezgrani procesor da bi se accomplish, na mikro nivou može istovremeno izvršavati više instrukcija, različiti programi se stavljaju na različite procesore za izvršavanje, ovo je fizičko istovremeno izvršavanje više procesa.

07,Šta je promena konteksta procesa?

Promena konteksta je proces kojim operativni sistem prebacuje CPU sa jednog procesa na drugi u okviru konkurentnog obrade više zadataka. Kroz deljenje CPU resursa među više procesa, sistem može konkurentno izvršavati više zadataka.
Promena konteksta procesa obično uključuje sledeće korake:
- Čuvanje trenutnog konteksta procesa: operativni sistem čuva CPU registre trenutnog procesa, status programa i druge ključne informacije.
- Izbor sledećeg procesa: planer bira sledeći proces za izvršavanje.
- Obnavljanje konteksta prethodnog procesa.
- Prebacivanje na sledeći proces.
08,Koja stanja može imati proces?
Kada proces počne da se izvršava, može proći kroz sledeća stanja:
Značenja pojedinačnih stanja na gornjoj slici:
- Stanje izvršavanja (Running): u tom trenutku proces zauzima CPU;
- Stanje spremnosti (Ready): može da se izvršava, privremeno zaustavljeno jer je drugi proces u stanju izvršavanja;
- Stanje blokiranja (Blocked): proces čeka na određeni događaj (npr. završetak operacije unosa/izlaza) i privremeno je zaustavljen, u ovom trenutku, čak i ako mu se da CPU kontrola, ne može da se izvršava;

Naravno, proces ima još dva osnovna stanja:
- Stanje stvaranja (new): stanje kada se proces upravo stvara;
- Stanje okončanja (Exit): stanje kada proces upravo nestaje iz sistema;

09,Šta je zombi proces?
Zombi proces je proces koji je završen i u stanju okončanja, ali i dalje postoji u tabeli procesa.
Zombi procesi se obično javljaju među procesima koji su u roditeljsko-dečijoj vezi, deskriptor procesa deteta se ne oslobađa kada se dete-proces okonča, oslobađa se samo kada roditeljski proces procesi informacije o detetu kroz wait() ili waitpid(). Ako se dete-proces okonča, a roditeljski proces nije pozvao wait() ili waitpid(), onda će deskriptor dete-procesa i dalje biti sačuvan u sistemu.
10,Šta je siroče proces?
Kada se roditeljski proces okonča, a jedan ili više dete-procesa se još uvek izvršavaju, onda će ti dete-procesi postati siroče procesi. Siroče procese će usvojiti init proces (proces sa ID-em 1), i init proces će obaviti posao prikupljanja njihovog stanja. Zbog toga što će siroče procese usvojiti init proces, siroče procesi neće naštetiti sistemu.
11,Koji algoritmi planiranja postoje za procese?
Planiranje procesa je jedna od osnovnih funkcija u operativnom sistemu, odgovorna je za odluku koji procesi kada će koristiti CPU. Ova odluka se zasniva na algoritmu planiranja procesa u sistemu.

①,Prvi došao, prvi servis
Ovo je najjednostavniji algoritam planiranja, takođe poznat kao FIFO (First In First Out). Procesi se planiraju redosledom kojim zahtevaju CPU. Ovaj način je lak za implementaciju, ali može dovesti do toga da kraći procesi čekaju duže procese da se završe, čime se stvara fenomen „gladovanja“.

②,Prvo kraći posao
Bira se proces sa najkraćim predviđenim vremenom izvršavanja za prioritetno izvršavanje. Ovaj način može smanjiti prosečno vreme čekanja i vreme odziva, ali mana je teško tačno predvideti vreme izvršavanja procesa, i može doći do toga da se dugi poslovi kontinuirano odlažu jer se kratki poslovi stalno izvršavaju.

③,Planiranje po prioritetu
U ovom režimu planiranja, svakom procesu se dodeljuje prioritet. CPU se prvo dodeljuje procesu sa najvišim prioritetom. Planiranje po prioritetu može biti non-preemptive ili preemptive. Kod non-preemptive planiranja po prioritetu, kada proces počne da se izvršava, radi se do kraja; kod preemptive planiranja po prioritetu, proces sa višim prioritetom može da prekine proces sa nižim prioritetom koji se upravo izvršava.

④,Rotacija vremenskih okna
Rotacija vremenskih okna dodeljuje svakom procesu fiksno vremesko okno, proces može da se izvršava unutar tog vremeskog okna. Ako proces na kraju vremeskog okna nije završen, biće vraćen na kraj reda. Rotacija vremenskih okna je fer način planiranja, može garantovati da svi procesi dobiju fer CPU vreme, pogodan za deljene sisteme.

⑤,Prvo najkraće preostalo vreme
Ovo je poboljšani oblik algoritma „prvo kraći posao“, on je preemptive. Ako predviđeno vreme izvršavanja novog procesa bude kraće od preostalog vremena trenutno izvršavanog procesa, planer će pauzirati trenutni proces i prebaciti se na novi proces. Ovaj metod takođe može minimizirati prosečno vreme čekanja, ali se suočava s istom teškoćom predviđanja vremena izvršavanja.
⑥ Više-nivo red sa povratnom vezom
Jedan proces treba da se izvrši 100 vremenskih okna, ako se koristi algoritam rotacije vremenskih okna, onda će biti potrebno 100 promena.
Više-nivo red upravo razmišlja o takvim procesima kojima treba kontinuirano izvršavanje više vremenskih okna, on postavlja više redova, svaki red ima različitu veličinu vremenskog okna, na primer 2,4,6,8······. Kada proces u prvom redu ne završi izvršavanje, biće premešten u sledeći red.
Pod ovim režimom, prethodni proces treba samo 7 promena. Svaki red ima različit prioritet, najviši red ima najviši prioritet. Stoga samo kada u prethodnom redu nema procesa u čekanju, može da se planira proces na trenutnom redu.
Može se smatrati da je ovaj algoritam planiranja kombinacija algoritma rotacije vremenskih okna i algoritma planiranja po prioritetu.

- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 9 iz Huawei-a Java opšti softverski razvoj: načina planiranja procesa
12,Koji načini komunikacije među procesima postoje?
Preporučujem čitanje: 100.000 pitanja o programiranju: koji načini komunikacije među procesima postoje?
Postoji 6 načina komunikacije među procesima: cev, signal, red poruka, deljena memorija, semafor i soket.

Kratko o cevi:
Cev može da se shvati kao meufon između različitih procesa, jedna strana govori, druga strana prima, medijum zvuka može biti vazduh ili kabl.
Cev među procesima je jedan keš u jezgru, s jednog kraja cevi se upisuju podaci, s drugog kraja se čitaju. Podaci se mogu kretati samo u jednom smeru, sledeći principe FIFO (First In First Out).

①,Anonimna cev: omogućava komunikaciju između procesa srodnih odnosa (npr. roditelj-dete).

Primer korišćenja C-a u Unix/Linux okruženju kroz anonimnu cev za ostvarivanje komunikacije između dva procesa (obično roditelj-dete):
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int main() {
int pipefd[2];
pid_t cpid;
char buf;
// Kreiranje cevi
if (pipe(pipefd) == -1) {
perror("pipe");
exit(EXIT_FAILURE);
}
// Kreiranje dete-procesa
cpid = fork();
if (cpid == -1) {
perror("fork");
exit(EXIT_FAILURE);
}
if (cpid == 0) { /* Dete-proces */
close(pipefd[1]); // Zatvaranje pisaćeg kraja
// Čitanje podataka iz cevi
while (read(pipefd[0], &buf, 1) > 0)
write(STDOUT_FILENO, &buf, 1);
write(STDOUT_FILENO, "\n", 1);
close(pipefd[0]);
exit(EXIT_SUCCESS);
} else { /* Roditeljski proces */
close(pipefd[0]); // Zatvaranje čitaćeg kraja
// Upisivanje podataka u cev
write(pipefd[1], "Hello, Child!", 13);
close(pipefd[1]); // Zatvaranje pisaćeg kraja, okida EOF
wait(NULL); // Čekanje na izlaz dete-procesa
exit(EXIT_SUCCESS);
}
}②,Imenovana cev: omogućava komunikaciju između procesa bez srodnih odnosa, kroz kreiranje posebnog tipa datoteke u sistemu datoteka.
Mana: efikasnost cevi je niska, ne pogoduje za čestu razmenu podataka među procesima.
Kratko o signalima:
Signal može da se shvati kao stari pejdžer, koristi se za obaveštavanje primaoca da se nešto desilo, jedan je od jednostavnijih načina komunikacije, prvenstveno korišćen za rukovanje asinhronim događajima.
Na primer kill -9 1050 označava slanje signala SIGKIL procesu sa PID-om 1050.
Ovde ćemo nakratko predstaviti često korišćene signale u Linux-u:
- SIGHUP: kada izađemo iz terminala (Terminal), svi procesi pokrenuti iz tog terminala će primiiti ovaj signal, podrazumevana akcija je okončanje procesa.
- SIGINT: signal okončanja programa (interrupt). Kada se pritisne
Ctrl+C, svi smo sigurno imali ovu operaciju pri korišćenju terminala. - SIGQUIT: sličan SIGINT-u, pritisak
Ctrl+\će poslati ovaj signal. Će proizvesti fajl sa core dump-om, sačuvati memorijski otisak i stanje programa pri izvršavanju. - SIGKILL: prisilno ubija proces, ovaj signal se ne može blokirati ni ignorisati.
- SIGTERM: različito od SIGKILL-a, ovaj signal se može blokirati i obraditi. Obično se koristi za zahtev da se program normalno završi.
Kratko o redovima poruka:
Red poruka je lista poruka smeštena u jezgru, prenosi se poruke prema tipu, ima visoku pouzdanost i stabilnost.

Mana: postoji ograničenje na maksimalnu dužinu poruka, ne pogoduje za prenos većih podataka; postoji trošak kopiranja podataka između korisničkog stanja i stanja jezgra.

Kratko o deljenoj memoriji:
Dozvoljava dva ili više procesa da dele dati memorijski prostor, ono što jedan proces upiše, drugi procesi odmah mogu da vide.
Deljena memorija je najbrži način komunikacije među procesima, specijalno je dizajnirana zbog niske efikasnosti drugih načina komunikacije među procesima.

Mana: kada više procesa konkuriše za isti deljeni resurs, može doći do problema neuračenosti podataka.
Kratko o semaforima:
Semafor može da se shvati kao saobraćajna svetla, crveno staj (semafor je nula), zeleno ide (semafor nije nula). U osnovi je brojač, koristi se za kontrolu broja pristupa deljenim resursima.

Često se koristi kao mehanizam brave, sprečava da dok jedan proces pristupa deljenom resursu, drugi procesi takođe pristupaju tom resursu. Java-ina klasa java.util.concurrent.Semaphore implementira sličnu funkcionalnost.
Postoje dve atomne operacije za kontrolu semafora:
- Jedna je P operacija (wait, oduzimanje), kada proces želi da dobije resurs, izvršiće P operaciju. Ako je vrednost semafora veća od 0, to znači da postoji dostupan resurs, vrednost semafora se smanjuje za 1, proces nastavlja sa izvršavanjem. Ako je vrednost semafora 0, to znači da nema dostupnog resursa, proces ulazi u stanje čekanja, dok vrednost semafora ne postane veća od 0.
- Druga je V operacija (signal, dodavanje), kada proces oslobodi resurs, izvršiće V operaciju, vrednost semafora se povećava za 1. Ako postoje drugi procesi koji su blokirani zbog čekanja na taj resurs, onda će se buditi jedan od njih.

Kratko o soketima:
Ovo je vrlo slično sa Socket-om u Java-i, pruža tačke mrežne komunikacije, omogućuje dvosmernu komunikaciju među procesima koji se izvršavaju na različitim mašinama.

- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua iz Huawei-a: pričaj o mehanizmu komunikacije procesa
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua komercijalizacije ByteDance-a: razlika između procesa i niti, razlika između deljene memorije niti i deljene memorije procesa
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua komercijalizacije ByteDance-a: kako procesi komuniciraju
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 6 iz Huawei-a Java opšti softverski razvoj: pričaj o tvojem razumevanju JVM tuning-a
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 2. intervjua kandidata 2 iz Meituan-a logistička tehnologija 2: načini komunikacije među procesima, korišćenje anonimne cevi u kodu da dva procesa komuniciraju
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje kandidata 30 sa intervjua u Tencent Music-u: koji načini komunikacije među procesima postoje pod Linux-om?
13,Koja su veza i razlike između procesa i niti?
Proces je instanca programa koji se izvršava. Svaki proces ima svoj nezavisan adresni prostor, globalne promenljive, stek, i deskriptore datoteka i druge resurse.
Nit je izvršna jedinica unutar procesa. Jedan proces može da sadrži više niti, one dele adresni prostor i resurse procesa.

Svaki proces se izvršava u nezavisnom adresnom prostoru, neće direktno uticati na druge procese. Niti dele memorijski prostor istog procesa, globalne promenljive i deskriptore datoteka.
Promena konteksta procesa zahteva čuvanje i obnavljanje velikog broja kontekstualnih informacija, trošak je veći. Promena konteksta niti je relativno lakša, zato što niti dele adresni prostor procesa, treba samo sačuvati i obnoviti nitne privatne podatke.
Životni ciklus niti kontroliše proces, kada se proces okonča, sve njegove nitke takođe budu okončane.
| Karakteristika | Proces | Nit |
|---|---|---|
| Adresni prostor | Nezavisan | Deljen |
| Memorijski trošak | Visok | Nizak |
| Promena konteksta | Sporo, veliki trošak | Brzo, mali trošak |
| Komunikacija | Potreban IPC mehanizam, veći trošak | Deljena memorija, direktna komunikacija |
| Kreiranje/uništavanje | Veći trošak, sporije | Mali trošak, brže |
| Konkurentnost | Niska | Visoka |
| Uticaj pada | Pad jednog procesa neće uticati na druge procese | Pad jedne niti može dovesti do pada celog procesa |
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 8 iz Dewu-a: razlika između procesa i niti pod Linux-om
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje kandidata 30 sa intervjua u Tencent Music-u: koja je glavna razlika između procesa i niti?
14,Znaš li nešto o promeni konteksta niti?
Treba videti da li niti pripadaju istom procesu:
Kada dve niti ne pripadaju istom processu, onda je proces promene konteksta isti kao promena konteksta procesa;
Kada dve niti pripadaju istom processu, zato što je virtuelna memorija deljena, pri promeni ne miču virtuelni memorijski resursi, treba samo promeniti nitne privatne podatke, registre i druge nedeljene podatke;
Stoga je trošak promene konteksta niti mnogo manji kod procesa.
15,Koji načini implementacije niti postoje?
Postoje tri glavna načini implementacije niti:
- Implementacija niti u stanju jezgra: niti se implementiraju u prostoru jezgra, jezgro direktno upravlja nitima.

- Implementacija niti u korisničkom stanju: niti se implementiraju u korisničkom prostoru, ne zahteva učešće jezgra, jezgro nije svesno niti.

- Hibridna implementacija niti: moderni operativni sistemi kombinuju ova dva načina. Izvršni sistem korisničkog stanja je odgovoran za promenu niti unutar procesa pri neblokirajućem stanju; operativni sistem stanja jezgra je odgovoran za promenu blokiranih niti. To je, istovremeno implementiramo upravljanje nitima u stanju jezgra i u korisničkom stanju. Broj niti u stanju jezgra je manji, a broj niti u korisničkom stanju je veći. Svaka nit u stanju jezgra može da opsluži jednu ili više niti u korisničkom stanju.

16,Kako se vrši sinhronizacija među nitima?
Sinhronizacija rešava problem više niti koje operišu deljene resurse, bez obzira kako se niti isprepleću, konačni rezultat je tačan.
Na nivou operativnog sistema, postoji mnogo načina za garanciju sinhronizacije niti, kao što su brave, semafori itd. Pre toga, treba razumeti šta je kritična sekcija.

Kritična sekcija: segment koda koji pristupa deljenim resursima, nadamo se da je ovaj kod međusobno isključiv, može garantovati da u određenom trenutku ga može izvršavati samo jedna nit, to jest kada jedna nit izvršava kritičnu sekciju, druge niti treba sprečiti da ulaze u kritičnu sekciju.
Kritična sekcija se ne odnosi samo na niti, takođe se odnosi i na procese. Načini implementacije sinhronizacije:
①,Međusobna isključenost
Korišćenjem operacija zaključavanja i otključavanja može se rešiti problem međusobne isključenosti konkurentnih niti/procesa.
Svaka nit koja želi da uđe u kritičnu sekciju mora prvo izvršiti operaciju zaključavanja. Ako se operacija zaključavanja uspešno završi, nit može ući u kritičnu sekciju; nakon završetka pristupa kritičnom resursu izvršava operaciju otključavanja, da oslobodi taj kritični resurs.
Šta zaključavanje i otključavanje zapravo zaključava? Može biti objekat kritične sekcije, ili jednostavan međusobni isključivi objekat, na primer međusobni isključivi objekat je 0 otključan, 1 označava zaključano.
Prema različitim implementacijama brave, može se podeliti na brava sa zauzetim čekanjem i brava bez zauzetog čekanja.
- Brava sa zauzetim čekanjem (takođe poznata kao spinlock) znači da kada nit pokušava da dobije bravu, ako je brava već zauzeta drugim nitom, trenutna nit neće odmah ući u spavanje ili blokiranje, već će kontinuirano proveravati stanje brave, dok brava ne postane dostupna. Ovaj proces se zove zauzeto čekanje (busy waiting), zato što nit pri čekanju brave i dalje zauzima CPU resurs, u aktivnom stanju. Prednost je što se izbegava promena konteksta niti.
- Brava bez zauzetog čekanja znači da kada nit pokušava da dobije bravu, ako je brava već zauzeta drugim nitom, trenutna nit neće zauzeto čekati, već će dobrovoljno ustupiti CPU, ući u blokirano ili spavaće stanje, čekajući oslobađanje brave. Kada se brava oslobodi, nit će biti_BUDETĆA i ponovo će pokušati da dobije bravu. Glavni cilj ovakve brave je izbegavanje rasterećenja CPU resursa zbog zauzetog čekanja.
②,Semafor
Semafor je metod koji operativni sistem pruža za koordinaciju pristupa deljenim resursima. Obično predstavlja broj resursa, odgovarajuća promenljiva je celobrojna (sem) promenljiva.
Pored toga, postoje dve atomne sistemske pozivne funkcije za kontrolu semafora, to su:
- P operacija: kada nit želi da uđe u kritičnu sekciju, pokušaće da izvrši P operaciju. Ako je vrednost semafora veća od 0, vrednost semafora se smanjuje za 1, nit može ući u kritičnu sekciju; u suprotnom, nit će biti blokirana, dok semafor ne postane veći od 0.
- V operacija: kada nit izađe iz kritične sekcije, izvršava V operaciju, vrednost semafora se povećava za 1, oslobađa jednu blokiranu nit.
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 4 iz Pinduoduo-a tehničko: implementacija sinhronizacije i međusobne isključenosti kroz objekte jezgra operativnog sistema
17,Šta je deadlock?
Kada dva ili više konkurentnih niti svaka drži neki resurs, a čekaju druge nite da oslobode resurse koje trenutno drže, i ne mogu napredovati bez promene ovog stanja, kažemo da je ova grupa niti ušla u deadlock. Popularno rečeno, to je stanje u kome dve ili više niti beskonačno blokirane, međusobno čekaju.

18,Koji uslovi su potrebni za nastanak deadlock-a?
Za nastanak deadlock-a potrebno je istovremeno ispunjenje četiri neophodna uslova:
- Uslov međusobne isključenosti (Mutual Exclusion): resursi ne mogu biti deljeni među više procesa, to jest resurs u jednom trenutku može koristiti samo jedan proces. Ako je resurs već dodeljen jednom processu, drugi procesi moraju čekati, dok se resurs ne oslobodi.
- Uslov držanja i čekanja (Hold and Wait): jedan proces već drži barem jedan resurs, a istovremeno čeka da dobije druge zauzete resurse. U ovom periodu, proces neće osloboditi resurse koje već drži.
- Uslov ne-oduzimanja (No Preemption): resursi dodeljeni procesu ne mogu biti prisilno oduzeti, samo proces koji drži resurs može dobrovoljno da ga oslobodi.
- Uslov kružnog čekanja (Circular Wait): postoji skup procesa
, gde čeka resurs koji drži , čeka resurs koji drži , i tako redom, dok čeka resurs koji drži $P_1, formirajući krug čekanja procesa.
Pretpostavimo da postoje dva procesa
drži resurs i zahteva resurs . drži resurs i zahteva resurs .
U ovoj situaciji, deadlock se događa kroz sledeće korake:
- Uslov međusobne isključenosti: i
i mogu zauzeti samo jedan proces. - Uslov držanja i čekanja:
drži i čeka , dok drži i čeka . - Uslov ne-oduzimanja: ni
ni ne mogu biti prisilno oduzeti iz i . - Uslov kružnog čekanja:
čeka koji drži , dok čeka koji drži $P_1, formirajući krug.
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 8 iz ByteDance-a Java back-end staž 1: uslovi deadlock-a
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 4 iz Pinduoduo-a tehničko: uslovi deadlock-a
19,Kako se može izbeći deadlock?
Postoje četiri neophodna uslova za deadlock: uslov međusobne isključenosti, uslov držanja i čekanja, uslov ne-oduzimanja, uslov kružnog čekanja.
Da bi se izbegao deadlock, treba razoriti jedan od njih.
Uklanjanje uslova međusobne isključenosti
Ovo se ne može realizovati, zato što mnogi resursi mogu biti zauzeti samo od strane jedne niti, na primer brava.
Uklanjanje uslova zahteva i držanja
Uklanjanje ovog uslova je jednostavno, jedna nit jednom zahteva sve resurse koje joj trebaju.
Uklanjanje uslova ne-oduzimanja
Kada nit koja zauzima deo resursa dalje zahteva druge resurse, ako ne može da ih dobije, može dobrovoljno da oslobodi resurse koje zauzima, tako da se uslov ne-oduzimanja razara.
Uklanjanje uslova kružnog čekanja
Može se sprečiti kroz zahtevanje resursa po redosledu. Takozvano zahtevanje po redosledu znači da resursi imaju linearni redosled, pri zahtevanju prvo se zahtevaju resursi sa manjim brojem, a zatim resursi sa većim brojem, nakon linearizacije neće postojati krug.
20,Znaš li nešto o livelock-u i starvation lock-u?
Starvation lock:
Starvation lock, ovda starvation označava glad za resursima, određena nit stalno ne može dobiti resurse koji joj trebaju, pa ne može napredovati, kao osoba koja ne može da raste zbog gladi.
Livelock:
U stanju livelock-a, stanje niti u grupi livelock-a može da se promeni, ali celoj grupi livelock-a niti ne mogu napredovati.
Livelock može da se poredi sa dvema osobama koje prolaze kroz vrlo uzak most: da bi dozvolile drugoj da prođe prvo, obe se pomeraju na stranu, ali obe se uvek pomeraju na istu stranu. Tako, iako se stanje obe osobe kontinuirano menja, ne mogu da napreduju.
GitHab-u sa preko 17000+ zvezdica otvoreni baza znanja „Ergov put napredovanja u Java-i“ koji je konačno stigao! Uključuje osnovnu sintaksu Java-e, nizove&niske, OOP, kolekcijski okvir, Java IO, rukovanje izuzecima, nove funkcije Java-e, mrežno programiranje, NIO, konkurentno programiranje, JVM itd, ukupno preko 320.000 reči, preko 500 ručno crtanih crteža, može se reći da je jednostavno i razumljivo, duhovito i smešno… Detalji klikni: Sjajno, Java vodič na GitHab-u sa preko 17000+ zvezdica
Upravljanje memorijom
21,Koja je razlika između fizičke memorije i virtuelne memorije?
Fizička memorija označava stvarnu hardversku memoriju u računaru. Fizička memorija je stvarni memorijski resurs koji računar koristi za skladištenje programa i podataka koji se izvršavaju, operativni sistem i aplikacije na kraju moraju koristiti fizičku memoriju za izvršavanje.
To je ona memorija od 8G, 16G, 64G koju često pominjemo.
Virtuelna memorija je tehnologija upravljanja memorijom koju operativni sistem pruža, omogućuje aplikacijama da misle da imaju kontinuiran, nezavisan memorijski prostor, a u stvarnosti, ova virtuelna memorija može delimično biti smeštena na fizičkoj memoriji, delimično na disku (kao što je swap particija ili page file na tvrdom disku).

Osnovna ideja virtuelne memorije je kroz saradnju hardvera i operativnog sistema, pružanje nezavisnog, potpunog virtuelnog adresnog prostora za svaki proces, rešenje problema nedovoljno fizičke memorije.
①,Svaki proces ima svoj virtuelni adresni prostor, virtuelna memorija koristi logičke adrese, koje su različite od stvarnih fizičkih memorijskih adresa, moraju proći kroz transformaciju adresa da bi se mapirale na fizičku memoriju.
②,Operativni sistem kroz tablicu stranica (Page Table) mapira virtuelne adrese na fizičke adrese. Kada program pristupa određenoj virtuelnoj adresi, CPU će kroz tablicu stranice pronaći odgovarajuću fizičku adresu.
③,Operativni sistem deli virtuelnu memoriju na više stranica (Pages), svaka stranica može biti mapirana na jednu stranicu u fizičkoj memoriji. Ako fizička memorija nije dovoljna, operativni sistem će privremeno smestiti retko korišćene stranice na swap particiju diska, ovaj proces se zove page swapping (Paging).
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 3 iz Sangfor-a Java back-end offline: pokazivač se nalazi u virtuelnoj memoriji, pitaju za razliku između fizičke i virtuelne memorije
22,Šta je segmentacija memorije?
Program se sastoji od više logičkih segmenata, kao što može biti sastavljen iz kod segmenta, segmenta podataka, stek segmenta, hip segmenta. Različiti segmenti imaju različita svojstva, stoga se koristi oblik segmentacije (Segmentation) da se ovi segmenti razdvoje.
Virtuelna adresa u mehanizmu segmentacije se sastoji iz dva dela, broj segmenta i pomeraj unutar segmenta.
Virtuelne adrese i fizičke adrese se mapiraju kroz tablicu segmenata, tablica segmenata uključuje broj segmenta, granice segmenta.

Hajde da vidimo jedno mapiranje, virtuelna adresa: segment 3, pomeraj unutar segmenta 500 ----> bazna adresa segmenta 7000+pomeraj unutar segmenta 500 ----> fizička adresa: 8700+.

23,Šta je straničenje memorije?
Straničenje je da se ceo virtuelni i fizički memorijski prostor iseca na komade fiksne veličine. Takav kontinuiran i fiksne veličine memorijski prostor mi zovemo stranica (Page). Pod Linux-om, svaka stranica je velika 4KB.
Pristup memorijskim podacima u sistemu straničenja zahteva dva pristupa memoriji: jednom se iz memorije pristupa tabelici stranica, iz nje se pronalazi odgovarajući fizički broj stranice, dodaje pomeraj unutar stranice da bi se dobila stvarna fizička adresa, drugi put se na osnovu fizičke adrese dobijene prvim putem pristupa memoriji i izvlače podaci.

24,Znaš li nešto o višenivou tabelice stranica?
Preporučujem čitanje: Uvod u operativne sisteme: višenivo tabelece stranice
Višenivo tabelica stranica (Multilevel Page Table) je tehnologija upravljanja memorijom koja se koristi u sistemu virtuelne memorije za efikasno upravljanje i konverziju virtuelnih adresa u fizičke adrese. Kroz hijerarhijsku strukturu smanjuje memorijski trošak tabele stranica, rešavajući problem efikasnosti jedno-nivo tabele stranica u velikim adresnim prostorima.

U sistemu virtuelne memorije, virtuelne adrese treba konvertovati u fizičke adrese. Tablica stranica je ključna struktura podataka za ostvarenje ove konverzije. Za 32-bitne sisteme, adresni prostor jednog procesa može dostići 4 GB, ako se koristi jedno-nivo tabelica stranica, svaki unos tabelice stranica (PTE) zauzima 4 bajta, onda je potrebno 4 MB memorije za skladištenje tabelice stranica. Međutim, mnogi procesi koriste samo mali deo adresnog prostora, što dovodi do rastočljivosti memorije jedno-nivo tabelice stranice.
Višenivo tabelice stranice kroz deobu jedno-nivo tabelice stranice na više nivoa smanjuje rastočljivost memorije. Na primer dvoslojna tabelica stranica:
- Prvi nivo tabelice stranice (direktorijum stranice): smešta adrese drugo-nivo tabelice stranica. Svaki unos direktorijuma stranice (PDE) pokazuje na jednu drugo-nivo tabelicu stranice.
- Drugi nivo tabelice stranice (tabelica stranica): smešta stvarne adrese okvira stranice. Svaki unos tabelice stranice (PTE) pokazuje na jedan fizički okvir stranice.
Virtuelna adresa se deli na više delova, svaki deo se koristi za indeksiranje odgovarajućeg nivoa tabelice stranice. Na primer, za 32-bitnu adresu i 4KB veličine stranice kod dvoslojne tabelice stranice:
- Gornjih 10 bita: indeks prvog nivoa tabelice stranice (indeks direktorijuma stranice).
- Srednjih 10 bita: indeks drugog nivoa tabelice stranice (indeks tabelice stranice).
- Donjih 12 bita: pomeraj unutar stranice.
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 1 iz Dewu-a: višenivo tabelice stranice
25,Šta je brza tabela?
Takođe koristi princip lokalnosti, to jest u određenom periodu, izvršavanje celog programa ograničeno je na jedan deo programa. Shodno tome, i memorijski prostor koji se pristupa ograničen je na određenu memorijsku oblast.
Koristeći ovu karakteristiku, naučnici su stavili nekoliko najčešće pristupanih unosa tabelice stranice u hardver sa bržim pristupom, tako da su naučnici u CPU čipu dodali specijalni Cache za čuvanje najčešće pristupanih unosa tabelice stranice programa, ovaj Cache je TLB (Translation Lookaside Buffer), obično se naziva keš tabelice stranica, bafer za prevođenje adresa, brza tablica itd.
![Shema TLB-a-izvor reference[3]](https://cdn.paicoding.com/tobebetterjavaer/images/sidebar/sanfene/os-cdc02a2f-59bf-45dc-8531-83b46f77bd65.png)
26,Koja je razlika između straničenja i segmentacije?
- Segment je logička jedinica informacija, deli se prema potrebama korisnika, stoga je segment za korisnika vidljiv; Stranica je fizička jedinica informacija, radi se radi lakšeg upravljanja glavnom memorijom, za korisnika je providna.
- Veličina segmenta nije fiksna, određuje se funkcijom koju obavlja; Veličina stranice je fiksirana, određuje je sistem
- Segment pruža korisniku dvodimenzionalni adresni prostor; Stranica pruža korisniku jednodimenzionalni adresni prostor
- Segment je logička jedinica informacija, pogodna za zaštitu skladištenja i deljenje informacija, zaštita i deljenje stranica su ograničeni.
27,Šta je swap prostor?
Operativni sistem deli fizičku memoriju (Physical RAM) na male komade memorije, svaki komad memorije se zove stranica (page). Kada memorijskih resursa nema dovoljno, Linux će preneti sadržaj određenih stranica na jedan prostor na disku, da bi oslobodio memorijski prostor. Taj prostor na disku se zove swap prostor (swap space), a ovaj proces se zove swap-ing (svaping). Ukupni kapacitet fizičke memorije i swap prostora je dostupan kapacitet virtuelne memorije.
Upotreba:
- Kada fizička memorija nije dovoljna, neke retko korišćene stranice mogu biti svap-ane, da bi se oslobodilo za sistem.
- Pri pokretanju programa mnogi memorijski stranice se koriste za inicijalizaciju, nakon toga više nisu potrebne, mogu biti svap-ane.
33,Šta je page fault? (Dopuna)
Dopunjeno 29. marta 2024. godine
Page Fault (greška u stranici) je važan koncept u upravljanju virtuelnom memorijom. Kada program pristupi stranici koja nije u fizičkoj memoriji, dolazi do page fault-a. Operativni sistem treba da učita nedostajuću stranicu sa swap particije diska (ili page file) u memoriju.
Na primer, vi tražite određenu knjigu (podaci/programska stranica) u biblioteci (memorija), police (memorijski prostor) mogu da prime ograničen broj knjiga. Sada, ako knjigu koju tražite baš nalažete na polici, super, direkt uzimajte za čitanje (memorijski pogodak).
Ali ako na polici nema (page fault), prvo morate potražiti bibliotekara.
Bibliotekar (operativni sistem) primećuje da na polici nedostaje ta knjiga, zatim ode u magacin da vam potraži (page fault). Nakon što pronadje knjigu, bibliotekar vidi da su police pune, treba prvo skidati jednu knjigu sa police (odlučuje algoritam za zamenu stranica koju knjigu skinuti), zatim stavlja novo pronadjenu knjigu na police, na kraju vam daje knjigu.
U ovom procesu, „odlazak u magacin da se pronadje i vrati knjiga“ je upravo page fault, a pravila koja određuju koja se knjiga skida sa police da bi se oslobodilo mesto za novu knjigu radi upravo algoritam za zamenu stranica.
Svrha ovoga je što je moguće više osigurati da knjige koje često čitate mogu biti direktno pronadjene na policama (u memoriji), izbegavajući svaki put odlazak u magacin (tvrdi disk) za traženjem, jer je proces traženja u magacinu vreme spekt.
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 9 iz ByteDance-a Feishu back-end tehnologije 1: operativni sistem page fault, algoritam za zamenu stranica
28,Koji algoritmi za zamenu stranica postoje?
Preporučujem čitanje: Detaljno objašnjenje algoritma za zamenu stranica
Cilj algoritma za zamenu stranice je minimiziranje broja page fault-ova, često algoritmi za zamenu stranice su: optimalni algoritam zamene stranica (OPT), FIFO algoritam zamene stranica (FIFO), LRU algoritam zamene stranica (LRU) i algoritam zamene stranice časovnik itd.

①,Optimalni algoritam zamene stranica
Osnovna ideja je uklanjanje stranica koje se neće koristiti u budućnosti. Ovo je teorijski najbolji algoritam, zato što može garantovati najnižu stopu page fault-ova. Ali u stvarnoj primeni, pošto se ne može predvideti budući obrazac pristupa, OPT obično ne može biti implementiran.

②,FIFO algoritam zamene stranica
Osnovna ideja je prioritetno uklanjanje najranije unetih stranica u memoriju. FIFO algoritam održava red, nove stranice se dodavaju na kraj reda, kada dođe do zamene stranice, stranica na početku reda (tj. najranije uneta stranica u memoriju) se uklanja.

③,LRU algoritam zamene stranica
Osnovna ideja je uklanjanje naskorije nekorišćenih stranica. LRU algoritam vrši zamenu na osnovu istorije pristupa stranica, na dugo neizvlašćeće stranice će biti zamenjene.
Relativno više se približava efektu optimalnog algoritma, zato što stranice koje nisu nedavno korišćene možda neće biti korišćene ni u budućnosti. Ali implementacija LRU algoritma treba da prati istoriju pristupa stranica, možda povećava trošak sistema.

④,Algoritam zamene stranice časovnika
Algoritam časovnika je aproksimacija LRU-a i oblik lake implementacije. Kroz kružnu listu (slično kazaljki na satu) prolazi kroz stranice, svaka stranica ima bit upotrebe, kada se stranica koristi, bit upotrebe se postavlja na 1.
Kada je potrebna zamena stranice, kazaljka časovnika se kreće u smeru kazaljke na satu, dok ne pronađe stranicu sa bitom upotrebe 0 da bi se zamenila. Ovaj proces je sličan davanju svakoj stranici druge šanse. Pri izvršavanju algoritma, prvo će se bit upotrebe sa 1 postaviti na 0, ako se stranica ponovo pristupi, njen bit upotrebe se ponovo postavlja na 1.

⑤,Algoritam zamene najređe korišćenih stranica
Vrši zamenu na osnovu frekvencije pristupa stranice, stranice sa najmanjim brojem pristupa se prve zamenjuju. Implementacija je relativno složena, treba zapisati frekvenciju pristupa svakoj stranici.
- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 9 iz ByteDance-a Feishu back-end tehnologije 1: operativni sistem page fault, algoritam za zamenu stranica
GitHab-u sa preko 17000+ zvezdica otvoreni baza znanja „Ergov put napredovanja u Java-i“ koji je konačno stigao! Uključuje osnovnu sintaksu Java-e, nizove&niske, OOP, kolekcijski okvir, Java IO, rukovanje izuzecima, nove funkcije Java-e, mrežno programiranje, NIO, konkurentno programiranje, JVM itd, ukupno preko 320.000 reči, preko 500 ručno crtanih crteža, može se reći da je jednostavno i razumljivo, duhovito i smešno… Detalji klikni: Sjajno, Java vodič na GitHab-u sa preko 17000+ zvezdica
Datoteke
29,Koja je razlika između tvrde veze i meke veze?
- Tvrda veza se kreira u direktorijumu unos koji beleži ime datoteke i broj inode-a, ovaj inode je inode izvorne datoteke. Brisanje bilo kog unosa neće ukloniti datoteku, dok broj referenci nije 0. Međutim tvrda veza ima ograničenja, ne može da se preko sistemi datoteka, niti može da se veže za direktorijume.
![Tvrda veza-izvor reference[3]](https://cdn.paicoding.com/tobebetterjavaer/images/sidebar/sanfene/os-d3f778f9-506b-4b93-9fb7-40eb0a79874e.png)
Meka veza je ekvivalentna kreiranju nove datoteke sa nezavisnim inode-om, ali **sadržaj ove datoteke je **putanja druge datoteke, stoga pri pristupanju mekoj vezi, zapravo se pristupa drugoj datoteci, stoga meka veza može da se prenosi preko sistemi datoteka, čak i **ako se ciljna **datoteka obriše, vezana datoteka je i dalje tu, samo ne može da se otvori datoteka na koju ukazuje.
![Meka veza-izvor reference[3]](https://cdn.paicoding.com/tobebetterjavaer/images/sidebar/sanfene/os-81abf13c-5c60-4263-8fcb-c79c33d865e8.png)
Meka veza-izvor reference[3]
U/I
30,Znaš li nešto o zero-copy-u?
Ako je potreban prenos datoteka, korišćenje tradicionalnog U/I-a, čitanje i pisanje podataka je kretanje između korisničkog prostora i prostora jezgra, dok se podaci iz prostora jezgra čitaju ili pišu preko U/I interfejsa operativnog sistema sa diska, tokom ovog procesa desilo se više promena konteksta između korisničkog stanja i stanja jezgra, kao i više kopiranja podataka.
![Shema tradicionalnog prenosa datoteka-izvor reference[3]](https://cdn.paicoding.com/tobebetterjavaer/images/sidebar/sanfene/os-1e595664-6585-4d56-8939-08b7ce510218.png)
Da bi se poboljšala U/I performansa, potrebno je smanjiti broj promena konteksta između korisničkog stanja i stanja jezgra i broj kopiranja memorije.
Ovde se koristi tehnologija zero-copy, glavne implementacije zero-copy tehnologije su dve:
- mmap + write
Sistemski poziv mmap() će direktno mapirati podatke u baferu jezgra u korisnički prostor, tako da između operativnog sistema jezgra i korisničkog prostora nije potrebno nikakvo kopiranje podataka.
![Shema mmap-a-izvor reference[3]](https://cdn.paicoding.com/tobebetterjavaer/images/sidebar/sanfene/os-6dc49f9d-0bc3-4956-a650-7c7236f234a2.png)
- sendfile
U Linux kernel verziji 2.1, pružen je specijalizovan sistemski poziv za slanje datoteka sendfile().
Prvo, može zameniti prethodna dva sistemska poziva read() i write(), tako da se smanjuje jedan sistemski poziv, time se smanjuje i 2 promene konteksta.
Drugo, ovaj sistemski poziv može direktno kopirati podatke iz bafera jezgra u socket bafer, ne kopira u korisničko stanje, tako da ima samo 2 promene konteksta, i 3 kopiranja podataka.
![Shema sendfile-a-izvor reference[3]](https://cdn.paicoding.com/tobebetterjavaer/images/sidebar/sanfene/os-0b087b8a-8d51-4aad-898d-d99c38d36592.png)
Mnogi projekti otvorenog koda kao što su Kafka, RocketMQ koriste zero-copy tehnologiju za poboljšanje U/I efikasnosti.
31,Pričaj o blokirajućem i neblokirajućem U/I-u, sinhronom i asinhronom U/I-u?
- Blokirajući U/I
Prvo hajde da vidimo blokirajući U/I, kada korisnički program izvršava read, nit će biti blokirana, stalno čeka da kernel podaci budu spremni, i kopira podatke iz bafera jezgra u bafer aplikacije, kada proces kopiranja bude završen, read će se vratiti.
Obratite pažnju, blokirajuće čekanje su kernel podaci spremni i podaci kopirani iz kernel stanja u korisničko stanje ova dva procesa.

- Neblokirajući U/I
Neblokirajući read zahtev se odmah vraća kada podaci nisu spremni, može nastaviti da se izvršava, a aplikacija kontinuirano pool-uje kernel, dok podaci ne budu spremni, kernel će kopirati podatke u bafer aplikacije, read poziv može dobiti rezultat.

- Baziran na neblokirajućem U/I multipleksiranju
Nešto neblokirajući U/I ima jedan problem, kakav problem? Aplikacija stalno treba da pool-uje, tokom ovoga ne može da radi druge stvari, stoga je uvedena tehnologija U/I multipleksiranja.
Kada su kernel podaci spremni, obaveštavaju aplikaciju događajem da izvrši operaciju.

Obratite pažnju: bez obzira da li je blokirajući U/I, neblokirajući U/I ili neblokirajući U/I multipleksiranje, svi su sinhroni pozivi. Zato što pri read pozivu, kernel kopira podatke iz prostora jezgra u prostor aplikacije, proces treba da čeka, to jest ovaj proces je sinhron, ako efikasnost kopiranja kernel implementacije nije visoka, read poziv će u ovom sinhronom procesu čekati duže vreme.
- Asinhroni U/I
Pravi asinhroni U/I je kada ni kernel podaci spremni ni podaci kopirani iz kernel stanja u korisničko stanje ova dva procesa ne treba čekati.
Nakon što se pokrene aio_read, odmah se vraća, kernel automatski kopira podatke iz prostora jezgra u prostor aplikacije, ovaj proces kopiranja je takođe asinhroni, kernel automatski ga završava, različito od prethodne sinhrone operacije, aplikacija ne mora aktivno pokretati akciju kopiranja.

Razumimo različite U/I modele kroz primer
Stari treći prati mnogo UP-era (YouTuber-a), neki UP-eri su stare golubice, u vreme objave:
Blokirajući U/I je kad stari treći ne radi ništa drugo, samo čeka, gleda ažuriranje UP-a.
Neblokirajući U/I je kad stari treći vidi da UP nije ažurirao, ode da pije čaj, posle malo dolazi da pogleda jednom, stalno čeka da UP ažurira.
Baziran na neblokirajućem U/I multipleksiranju je kao što stari treći vidi da UP nije ažurirao, ode da radi druge stvari, posle malo Bilibili šalje obaveštenje, stari treći vidi mnogo poruka, ode da proveri dinamiku, vidi da li je UP koji je čekao ažurirao.
Asinhroni U/I je kad stari treći kaže UP treba da ažuriraš, UP hitno radi video i stavlja ga ispred starog trećeg, ovaj proces ne čeka.

32,Pričaj detaljno o U/I multipleksiranju?
Prvo hajde da razumemo šta je U/I multipleksiranje?
U tradicionalnom U/I modelu, ako server treba da podržava više klijenata, možda moramo za svakog klijenta da dodelimo jedan proces/nit.
Bilo zasnovano na težem modelu procesa ili lakšem modelu niti, ako veza ima više, operativni sistem neće moći da izdrži.
Stoga je uvedena tehnologija U/I multipleksiranja.
Jednostavno rečeno, jedan proces/nit održava više Socket-a, ovo multipleksiranje znači da više veza dele jedan proces/nit.

Hajde da vidimo tri mehanizme implementacije U/I multipleksiranja:
- select
Select način multipleksiranja je:
Sve povezane Socket-e stavi u jedan skup deskriptora datoteka fd_set, zatim poziva select funkciju da kopira fd_set skup u kernel, ostavlja kernel da proveri da li se dogodilo mrežni događaj, način provere je vrlo grub, prolazi kroz fd_set, kada otkrije da se dogodio događaj, označava taj Socket kao za čitanje ili pisanje, zatim kopira čitav fd_set nazad u korisničko stanje, zatim korisničko stanje još treba kroz prolazak da pronađe Socket za čitanje ili pisanje, zatim ih obrađuje.
Select koristi BitsMap fiksne dužine da predstavi skup deskriptora datoteka, a broj deskriptora datoteka koji podržava je ograničen, u Linux sistemu, ograničen je FD_SETSIZE u kernel-u, podrazumevana maksimalna vrednost je 1024, može da prati samo deskriptore datoteka 0~1023.
Mane select mehanizma:
(1) Svaki put kada se poziva select, treba kopirati fd_set skup iz korisničkog stanja u kernel stanje, ako je fd_set skup veći, onda je i ovaj trošak veliki, na primer milion veza a samo malo aktivnih veza, ovakvo radinje je neefikasno.
(2) Svaki put kada se poziva select treba u kernel-u proći kroz sve prosleđene fd_set-ove, ako je fd_set skup veći, onda je i ovaj trošak veliki.
(3) Da bi se smanjilo oštećenje performansi zbog kopiranja podataka, kernel je postavio ograničenje na veličinu fd_set skupova koji se prate, obično 1024, ako se želi modifikovati to može biti problem, možda čak treba kompajlirati kernel.
(4) Svaki put pre poziva select-a treba proći kroz set koji se prati radi postavljanja, ponavljajući rad.
- poll
Poll više ne koristi BitsMap za skladištenje pažnjih deskriptora datoteka, već koristi dinamički niz, organizovan u obliku liste, probija ograničenje broja deskriptora datoteka select-a, naravno će i dalje biti ograničen ograničenjem deskriptora datoteka sistema.
Međutim poll i select nemaju preveliku suštinsku razliku, oba koriste linearnu strukturu za skladištenje skupa Socket-a koje proces prati, stoga oba treba proći kroz skup deskriptora datoteka da bi pronašli Socket koji može da se čita ili piše, vremenska složenost je O(n), takođe treba kopirati skup deskriptora datoteka između korisničkog stanja i kernel stanja, ovaj način sa povećanjem konkurentnosti, gubitak performansi će eksponencijalno rasti.
- epoll
epoll kroz dva aspekta vrlo dobro rešavaju probleme select/poll-a.
Prva tačka, epoll u kernel-u koristi crveno-crno drvo za praćenje svih deskriptora datoteka koje proces treba da proveri, kroz epoll_ctl() funkciju dodaje socket koji treba pratiti u crveno-crno drvo u kernel-u, crveno-crno drvo je efikasna struktura podataka, dodavanje, brisanje, pretraga su uglavnom vremenske složenosti O(logn), kroz operaciju nad ovim crveno-crnim drvom, ne treba kao select/poll svaki put prosleđivati čitav skup socket-a, samo treba proslediti jedan socket koji treba proveriti, smanjuje se veliko kopiranje podataka i dodela memorije između kernel-a i korisničkog prostora.
Druga tačka, epoll koristi mehanizam upravljan događajima, u kernel-u održava listu za zapisivanje gotovih događaja, kada se desi događaj na određenom socket-u, kroz povratnu funkciju, kernel će ga dodati u ovu listu gotovih događaja, kada korisnik pozove epoll_wait() funkciju, vraća samo broj deskriptora datoteka sa desilim događajem, ne treba kao select/poll skenirati čitav skup socket-a, znatno poboljšava efikasnost provere.
![Uloga epoll interfejsa-izvor refference[3]](https://cdn.paicoding.com/tobebetterjavaer/images/sidebar/sanfene/os-cca76ac4-cfb4-4374-8fc6-256cd4d3893f.png)
epoll način čak i kada broj Socket-a koji se prati više, efikasnost se neće značajno smanjiti, može istovremeno pratiti vrlo veliki broj Socket-a, gornja granica je broj maksimalnih deskriptora datoteka koje proces može otvoriti definisan u sistemu. Stoga, epoll **se naziva oružjem za rešavanje ** C10K problema.
34.Koliko je obična memorija brža od običnog mehaničkog tvrdog diska? (Dopuna)
Dopunjeno 10. aprila 2024. godine
Mehanički tvrdi disk, takođe poznat kao HDD (Hard Disk Drive), je uređaj koji koristi okretanje diska i kretanje glave za skladištenje podataka, brzina čitanja i pisanja je relativno spora, obično oko 100.000 puta sporija od memorije.
- HDD vreme pristupa je oko 5-10ms, brzina prenosa podataka je oko 100 do 200 MB/s.
- Memorija, to jest RAM (Random Access Memory), vreme pristupa je oko 10-100ns, brzina prenosa podataka je oko desetina GB/s.
SSD (Solid State Drive), brzina čitanja i pisanja SSD-a je oko 200 puta bža od HDD-a, cena takođe postepeno opada, već postepeno zamenjuje HDD.

- Vodič za intervju iz Java-e (platno) uključuje originalno pitanje sa 1. intervjua kandidata 1 iz Qi'an Xin-a Java tehničko: koliko je obična memorija brža od običnog mehaničkog tvrdog diska?
Detaljno objašnjenje 34 česta pitanja za intervju iz operativnih sistema, ovaj put ćeš prebiti intervjuera, mislim da je sigurno (ručni pas). Organizovao: Chenmo Wang Er, kliknilink za repost, autor: Sanfen E, kliknilink originalnog teksta.
Ništa me ne zadržava – osim cilja, čak i ako na obali ima ruža, ima hlade, ima mirne luke, ja sam brod bez veziva.
Serijski sadržaj:
- Preokret kandidata Java SE deo 👍
- Preokret kandidata Java kolekcijski okvir deo 👍
- Preokret kandidata Java konkurentno programiranje deo 👍
- Preokret kandidata JVM deo 👍
- Preokret kandidata Spring deo 👍
- Preokret kandidata Redis deo 👍
- Preokret kandidata MyBatis deo 👍
- Preokret kandidata MySQL deo 👍
- Preokret kandidata operativni sistemi deo 👍
- Preokret kandidata računarske mreže deo 👍
- Preokret kandidata RocketMQ deo 👍
- Preokret kandidata distributed systems deo 👍
- Preokret kandidata microservices deo 👍
- Preokret kandidata design patterns deo 👍
- Preokret kandidata Linux deo 👍
- Preokret kandidata OpenClaw deo 👍
- Preokret kandidata Skills deo 👍
GitHab-u sa preko 17000+ zvezdica otvoreni baza znanja „Preokret kandidata“ drugo izdanje PDF-a konačno stiglo! Uključuje Java osnove, kolekcijski okvir Java-e, konkurentno programiranje Java-e, JVM, Spring, Redis, MyBatis, MySQL, operativni sistemi, računarske mreže, RocketMQ, distributed systems, microservices, design patterns, Linux, OpenClaw itd, ukupno preko 320.000 reči, preko 500 ručno crtanih crteža, može se reći da je jednostavno i razumljivo, duhovito i smešno… Detalji klikni: Preokret kandidata 2.0 verzija PDF objavljena, Java back-end programeri moraju da nauče, verovatno najbolji pitanja za intervju 2026. godine
