Skaičiuojant, a sistemos skambutis yra programinis būdas, kuriuo kompiuterio programa prašo paslaugos iš operacinės sistemos, kurioje ji vykdoma, branduolio. Sistemos iškvietimas yra būdas programoms tai padaryti sąveikauti su operacine sistema . Kompiuterio programa atlieka sistemos iškvietimą, kai pateikia užklausą operacinės sistemos branduoliui. Sisteminis skambutis numato operacinės sistemos paslaugas vartotojo programoms per taikomųjų programų sąsają (API). Tai suteikia sąsają tarp proceso ir operacinės sistemos, kad vartotojo lygio procesai galėtų prašyti operacinės sistemos paslaugų. Sistemos skambučiai yra vieninteliai įėjimo taškai branduolys sistema. Visos programos, kurioms reikia išteklių, turi naudoti sistemos iškvietimus.
Vartotojo programa gali sąveikauti su operacine sistema naudodama sistemos iškvietimą. Programa reikalauja daugybės paslaugų, o OS atsako paleisdama daugybę sistemos iškvietimų, kad įvykdytų užklausą. Sistemos iškvietimas gali būti parašytas aukšto lygio kalbomis, tokiomis kaip C arba Pascal, arba asamblėjos kalba. Jei naudojama aukšto lygio kalba, operacinė sistema gali tiesiogiai iškviesti sistemos iškvietimus, kurie yra iš anksto nustatytos funkcijos.
Sistemos skambutis yra mechanizmas, kurį programos naudoja prašydamos paslaugų iš Operacinė sistema (OS). Paprasčiau tariant, tai yra būdas programai sąveikauti su pagrindine sistema, pavyzdžiui, pasiekti aparatinės įrangos išteklius arba atlikti privilegijuotas operacijas.
Sistemos iškvietimą inicijuoja programa, vykdanti konkrečią komandą, kuri suaktyvina perjungimą į branduolys režimas, leidžiantis programai prašyti paslaugos iš OS. Tada OS apdoroja užklausą, atlieka reikiamas operacijas ir grąžina rezultatą atgal į programą.
Sistemos skambučiai yra būtini tinkamam operacinės sistemos veikimui, nes jie suteikia programoms standartizuotą būdą pasiekti sistemos išteklius. Be sistemos iškvietimų kiekviena programa turėtų įdiegti savo metodus prieigai prie aparatinės įrangos ir sistemos paslaugų, todėl elgsis nenuosekliai ir gali būti klaidų.
Sistemos skambučių teikiamos paslaugos
- Procesų kūrimas ir valdymas
- Pagrindinės atminties valdymas
- Prieiga prie failų, katalogų ir failų sistemos valdymas
- Įrenginio tvarkymas (I/O)
- Apsauga
- Tinklas ir kt.
- Procesų valdymo: baigti, nutraukti, sukurti, nutraukti, paskirstyti ir atlaisvinti atmintį.
- Failų valdymas: kurti, atidaryti, uždaryti, ištrinti, skaityti failus, s ir kt.
- Įrenginių valdymas
- Informacijos priežiūra
- Bendravimas
Sisteminių skambučių ypatybės
- Sąsaja: Sistemos skambučiai suteikia aiškiai apibrėžtą vartotojo programų ir operacinės sistemos sąsają. Programos pateikia užklausas iškviesdamos konkrečias funkcijas, o operacinė sistema atsako vykdydama prašomą paslaugą ir grąžindama rezultatą.
- Apsauga: Sistemos skambučiai naudojami norint pasiekti privilegijuotąsias operacijas, kurios nėra prieinamos įprastoms vartotojo programoms. Operacinė sistema naudoja šią privilegiją, kad apsaugotų sistemą nuo kenkėjiškos ar neteisėtos prieigos.
- Branduolio režimas: Kai atliekamas sistemos iškvietimas, programa laikinai perjungiama iš vartotojo režimo į branduolio režimą. Branduolio režimu programa turi prieigą prie visų sistemos išteklių, įskaitant aparatinę įrangą, atmintį ir kitus procesus.
- Konteksto perjungimas: Sistemos iškvietimui reikalingas konteksto perjungimas, kuris apima dabartinio proceso būsenos išsaugojimą ir perjungimą į branduolio režimą, kad būtų vykdoma prašoma paslauga. Tai gali sukelti papildomų išlaidų, kurios gali turėti įtakos sistemos veikimui.
- Klaidų tvarkymas: Sistemos skambučiai gali grąžinti klaidų kodus, nurodančius problemas, susijusias su prašoma paslauga. Programos turi patikrinti, ar nėra šių klaidų, ir tinkamai jas tvarkyti.
- Sinchronizavimas: Sistemos skambučiai gali būti naudojami norint sinchronizuoti prieigą prie bendrinamų išteklių, pvz., failų ar tinklo jungčių. Operacinė sistema teikia sinchronizavimo mechanizmus, pvz., užraktus ar semaforus, kad būtų užtikrinta, jog kelios programos galėtų saugiai pasiekti šiuos išteklius.
Sistemos skambučių pranašumai
- Prieiga prie aparatinės įrangos išteklių: Sistemos iškvietimai leidžia programoms pasiekti techninės įrangos išteklius, tokius kaip diskų įrenginiai, spausdintuvai ir tinklo įrenginiai.
- Atminties valdymas: Sistemos iškvietimai suteikia galimybę programoms paskirstyti atmintį ir ją išnaudoti, taip pat pasiekti atmintyje susietus aparatūros įrenginius.
- Proceso valdymas: Sistemos iškvietimai leidžia programoms kurti ir nutraukti procesus, taip pat valdyti tarpprocesinį ryšį.
- Saugumas: Sistemos iškvietimai suteikia galimybę programoms pasiekti privilegijuotus išteklius, pvz., galimybę keisti sistemos parametrus arba atlikti operacijas, kurioms reikalingi administravimo leidimai.
- Standartizavimas: Sistemos skambučiai suteikia standartizuotą sąsają programoms sąveikauti su operacine sistema, užtikrinant nuoseklumą ir suderinamumą įvairiose aparatinės įrangos platformose ir operacinės sistemos versijose.
Kaip veikia sistemos skambutis?
Čia yra išsamus žingsnis po žingsnio paaiškinimas, kaip veikia sistemos skambutis:
- Vartotojui reikia specialių išteklių: Kartais programoms reikia atlikti tam tikrus specialius veiksmus, kurių negalima padaryti be OS leidimo, pvz., skaityti iš failo, rašyti į failą, gauti bet kokią informaciją iš aparatinės įrangos arba paprašyti vietos atmintyje.
- Programa pateikia sistemos skambučio užklausą: Yra specialios iš anksto nustatytos instrukcijos, kaip pateikti užklausą operacinei sistemai. Šios instrukcijos yra tik sistemos iškvietimas. Programa naudoja šiuos sistemos iškvietimus savo kode, kai reikia.
- Operacinė sistema mato sistemos iškvietimą: Kai OS mato sistemos iškvietimą, ji pripažįsta, kad programai šiuo metu reikia pagalbos, todėl ji laikinai sustabdo programos vykdymą ir visą valdymą suteikia ypatingai savo daliai, vadinamai „Branduolis“. Dabar „branduolis“ išsprendžia programos poreikį.
- Operacinė sistema atlieka tokias operacijas: Dabar operacinė sistema atlieka operaciją, kurios reikalauja programa. Pavyzdys: turinio skaitymas iš failo ir pan.
- Operacinė sistema grąžina programos valdymą: Atlikus specialią operaciją, OS grąžina kontrolę programai tolimesniam programos vykdymui.
Sistemos skambučio pavyzdžiai „Windows“ ir „Unix“.
Sistemos skambučiai, skirti „Windows“ ir „Unix“, būna įvairių formų. Jie išvardyti toliau esančioje lentelėje:
| Procesas | Windows | Unix |
|---|---|---|
| Procesų valdymo | CreateProcess() ExitProcess () WaitForSingleObject() | Šakė () Išeiti () Laukti() |
| Failų manipuliavimas | Sukurti failą () Skaityti failą () WriteFile () | Atviras() Skaityti () Rašyti () java pabėgimo simboliai Uždaryti() |
| Įrenginių valdymas | SetConsoleMode() ReadConsole () WriteConsole () | Ioctl() Skaityti () Rašyti () |
| Informacijos priežiūra | GetCurrentProcessID() SetTimer () Miegas () | Getpid () dfs vs bfs Signalizacija () Miegas () |
| Bendravimas | CreatePipe() CreateFileMapping() MapViewOfFile() | Vamzdis () Shmget () Mmap () |
| Apsauga | SetFileSecurity() InitializeSecurityDescriptor() SetSecurityDescriptorgroup() | Chmod () Umask() Chown () |
atviras(): Prieiga prie failo failų sistemoje galima naudojant open() sistemos iškvietimą. Tai suteikia reikalingus failo išteklius ir tvarkyklę, kurią gali naudoti procesas. Failą gali atidaryti keli procesai vienu metu arba tik vienas procesas. Viskas pagrįsta struktūra ir failų sistema.
skaityti (): Duomenys iš failo failų sistemoje nuskaitomi naudojant jį. Apskritai jis priima tris argumentus:
- Failo aprašymas.
- Buferis skaitymo duomenims saugoti.
- Kiek baitų reikia nuskaityti iš failo
Prieš skaitant failą, kurį reikia skaityti, galima identifikuoti pagal jo failo aprašą ir atidaryti naudojant funkciją open().
laukti(): Kai kuriose sistemose prieš tęsiant procesą gali tekti atidėti, kol baigsis kitas procesas. Kai pirminis procesas sukuria antrinį procesą, pirminio proceso vykdymas sustabdomas, kol bus baigtas antrinis procesas. Pirminis procesas sustabdomas naudojant „wait()“ sistemos iškvietimą. Pirminis procesas atgauna kontrolę, kai baigiasi antrinis procesas.
rašyti (): Duomenys iš vartotojo buferio įrašomi naudojant jį į įrenginį, pavyzdžiui, failą. Programa gali sukurti duomenis vienu būdu, naudodama tai sistemos skambutis . paprastai yra trys argumentai:
- Failo aprašymas.
- Nuoroda į buferį, kuriame saugomi duomenys.
- Duomenų, kurie bus įrašyti iš buferio, kiekis baitais.
šakutė (): Fork() sistemos iškvietimą procesai naudoja norėdami sukurti savo kopijas. Tai vienas iš metodų, dažniausiai naudojamų operacinėse sistemose procesams kurti. Kai pirminis procesas sukuria antrinį procesą, pirminio proceso vykdymas sustabdomas, kol bus baigtas antrinis procesas. Pirminis procesas atgauna kontrolę, kai baigiasi antrinis procesas.
išeiti (): Sistemos iškvietimas, vadinamas exit(), naudojamas programai užbaigti. Aplinkose su keliomis gijomis šis iškvietimas rodo, kad gijos vykdymas baigtas. Panaudojus exit() sistemos funkciją, operacinė sistema atkuria proceso naudojamus išteklius.
Parametrų perdavimo OS metodai
Jei įvyksta sistemos iškvietimas, turime perduoti parametrą operacinės sistemos branduolio daliai.
Pavyzdžiui, pažiūrėkite į pateiktą atviras() sistemos skambutis:
C
//function call example> #include> int> open(>const> char> *pathname,>int> flags, mode_t mode);> |
>
>
čia kelio pavadinimas , vėliavos ir mode_t yra parametrai.
Taigi reikia pažymėti, kad:
- Mes negalime perduoti parametrų tiesiogiai, kaip įprastu funkcijų iškvietimu.
- Kernal režimu funkcijos iškvietimas gali būti kitoks.
Taigi negalime jo paleisti įprastoje adresų erdvėje, kurią procesas jau sukūrė, todėl negalime dėti parametrų krūvos viršuje, nes operacinės sistemos branduolys jo negali apdoroti. todėl turime naudoti bet kokius kitus metodus, norėdami perduoti parametrus OS branduoliui.
Mes galime tai padaryti per,
- Parametrų perdavimas registruose
- Bloko adresas perduodamas kaip parametras registre.
- Parametrai sustumiami į krūvą.
Leiskite mums išsamiai aptarti kiekvieną punktą:
1. Parametrų perdavimas registruose.
- Tai yra paprasčiausias būdas iš trijų
- Čia mes tiesiogiai perduodame parametrus registrams.
- Bet tai bus ribota, kai parametrų skaičius yra didesnis nei registrų skaičius.
- Čia yra C programos kodas:
C
kokia kolekcija java
// Passing parameters in registers.> #include> #include> int> main()> {> >const> char>* pathname =>'example.txt'>;> >int> flags = O_RDONLY;> >mode_t mode = 0644;> >int> fd = open(pathname, flags, mode);> >// in function call open(), we passed the parameters pathanme,flags,mode to the kernal directly> >if> (fd == -1) {> >perror>(>'Error opening file'>);> >return> 1;> >}> >// File operations here...> >close(fd);> >return> 0;> }> |
>
>
2. Bloko adresas perduodamas kaip parametrai
- Jis gali būti taikomas, kai parametrų skaičius yra didesnis už registrų skaičių.
- Parametrai saugomi blokuose arba lentelėje.
- Bloko adresas kaip parametras perduodamas registrui.
- Dažniausiai naudojamas Linux ir Solaris.
- Čia yra C programos kodas:
C
//Address of the block is passed as parameters> #include> #include> int> main() {> >const> char> *pathname =>'example.txt'>;> >int> flags = O_RDONLY;> >mode_t mode = 0644;> >int> params[3];> >// Block of data(parameters) in array> >params[0] = (>int>)pathname;> >params[1] = flags;> >params[2] = mode;> >int> fd = syscall(SYS_open, params);> >// system call> >if> (fd == -1) {> >perror>(>'Error opening file'>);> >return> 1;> >}> >// File operations here...> >close(fd);> >return> 0;> }> |
>
>
3.Parametrai stumiami krūvoje
- Šiuo metodu parametrus galima įstumti naudojant programą ir iššokti naudojant operacinę sistemą
- Taigi branduolys gali lengvai pasiekti duomenis, gaudamas informaciją iš kamino viršaus.
- Čia yra C programos kodas
C
skaitytuvo nuskaitymas java
//parameters are pushed into the stack> #include> #include> #include> int> main() {> >const> char> *pathname =>'example.txt'>;> >int> flags = O_RDONLY;> >mode_t mode = 0644;> >int> fd;> >asm>volatile>(> >'mov %1, %%rdi
'> >'mov %2, %%rsi
'> >'mov %3, %%rdx
'> >'mov , %%rax
'> >'syscall'> >:>'=a'> (fd)> >:>'r'> (pathname),>'r'> (flags),>'r'> (mode)> >:>'%rdi'>,>'%rsi'>,>'%rdx'> >);> >if> (fd == -1) {> >perror>(>'Error opening file'>);> >return> 1;> >}> >// File operations here...> >close(fd);> >return> 0;> }> |
>
>
Dažniausiai užduodamas klausimas
1 klausimas: kaip veikia sistemos skambutis?
Atsakymas:
Kai programa vykdo sistemos iškvietimą, ji pereina iš vartotojo režimo į branduolio režimą, kuris yra aukštesnių privilegijų režimas. Perėjimas paprastai inicijuojamas iškviečiant konkrečią funkciją arba pertraukiant programavimo kalbos arba operacinės sistemos teikiamas instrukcijas.
Įjungus branduolio režimą, sistemos iškvietimą tvarko operacinė sistema. Branduolys programos vardu atlieka prašomą operaciją ir grąžina rezultatą. Po to valdymas grąžinamas į vartotojo lygio programą, kuri tęsia savo vykdymą.
2 klausimas: kodėl reikalingi sistemos iškvietimai?
Atsakymas:
Sistemos skambučiai būtini dėl kelių priežasčių:
Prieiga prie privilegijuotų operacijų: Daugeliui operacijų, tokių kaip aparatinės įrangos įrenginių valdymas ar sistemos konfigūracijų keitimas, reikia didesnių privilegijų, kurios pasiekiamos tik per sistemos skambučius.
Resursu valdymas: Sistemos skambučiai suteikia standartizuotą sąsają sistemos ištekliams, pvz., atminčiai, failams ir įrenginiams, paskirstyti ir valdyti, užtikrinant sąžiningą ir kontroliuojamą įvairių procesų prieigą.
Abstrakcija: Sistemos skambučiai abstrahuoja pagrindinius operacinės sistemos sudėtingumus, todėl programų kūrėjai gali sąveikauti su sistema aukštesnio lygio, nuo platformos nepriklausomu būdu.
Saugumas ir apsauga: Sistemos skambučiai užtikrina prieigos kontrolės ir saugos politiką, užkertant kelią neteisėtai prieigai prie jautrių išteklių ir apsaugodami sistemos vientisumą.