Datortehnikas jomā a sistēmas zvans ir programmatisks veids, kā datorprogramma pieprasa pakalpojumu no tās operētājsistēmas kodola, kurā tā tiek izpildīta. Sistēmas izsaukums ir veids, kā programmas var to darīt mijiedarboties ar operētājsistēmu . Datorprogramma veic sistēmas izsaukumu, kad tā veic pieprasījumu operētājsistēmas kodolam. Sistēmas zvans nodrošina operētājsistēmas pakalpojumus lietotāju programmām, izmantojot lietojumprogrammu interfeisu (API). Tas nodrošina saskarni starp procesu un operētājsistēmu, lai lietotāja līmeņa procesi varētu pieprasīt operētājsistēmas pakalpojumus. Sistēmas zvani ir vienīgie ieejas punkti sistēmā kodols sistēma. Visām programmām, kurām nepieciešami resursi, ir jāizmanto sistēmas izsaukumi.
Lietotāja programma var mijiedarboties ar operētājsistēmu, izmantojot sistēmas zvanu. Programma pieprasa vairākus pakalpojumus, un OS atbild, palaižot vairākus sistēmas izsaukumus, lai izpildītu pieprasījumu. Sistēmas zvanu var rakstīt augsta līmeņa valodās, piemēram, C vai Pascal, vai montāžas valodā. Ja tiek izmantota augsta līmeņa valoda, operētājsistēma var tieši izsaukt sistēmas izsaukumus, kas ir iepriekš definētas funkcijas.
Sistēmas izsaukums ir mehānisms, ko programmas izmanto, lai pieprasītu pakalpojumus no operētājsistēma (OS). Vienkāršāk sakot, tas ir veids, kā programma var mijiedarboties ar pamatā esošo sistēmu, piemēram, piekļūt aparatūras resursiem vai veikt priviliģētas darbības.
Sistēmas izsaukumu iniciē programma, izpildot noteiktu instrukciju, kas aktivizē pārslēgšanos uz kodols režīms, ļaujot programmai pieprasīt pakalpojumu no OS. Pēc tam OS apstrādā pieprasījumu, veic nepieciešamās darbības un atgriež rezultātu atpakaļ programmai.
Sistēmas izsaukumi ir būtiski operētājsistēmas pareizai darbībai, jo tie nodrošina standartizētu veidu, kā programmām piekļūt sistēmas resursiem. Bez sistēmas izsaukumiem katrai programmai būtu jāievieš savas metodes, lai piekļūtu aparatūrai un sistēmas pakalpojumiem, tādējādi radot nekonsekventu darbību un kļūdu iespējamību.
Sistēmas zvanu sniegtie pakalpojumi
- Procesu veidošana un vadība
- Galvenās atmiņas pārvaldība
- Piekļuve failiem, direktoriju un failu sistēmas pārvaldība
- Ierīces apstrāde (I/O)
- Aizsardzība
- Tīklošana utt.
- Procesa kontrole: beigt, pārtraukt, izveidot, pārtraukt, piešķirt un atbrīvot atmiņu.
- Failu pārvaldība: izveidot, atvērt, aizvērt, dzēst, lasīt failus utt.
- Ierīču pārvaldība
- Informācijas uzturēšana
- Komunikācija
Sistēmas zvanu funkcijas
- Interfeiss: Sistēmas izsaukumi nodrošina labi definētu saskarni starp lietotāja programmām un operētājsistēmu. Programmas veic pieprasījumus, izsaucot noteiktas funkcijas, un operētājsistēma atbild, izpildot pieprasīto pakalpojumu un atgriežot rezultātu.
- Aizsardzība: Sistēmas izsaukumi tiek izmantoti, lai piekļūtu priviliģētām darbībām, kas nav pieejamas parastajām lietotāju programmām. Operētājsistēma izmanto šo privilēģiju, lai aizsargātu sistēmu no ļaunprātīgas vai nesankcionētas piekļuves.
- Kodola režīms: Kad tiek veikts sistēmas izsaukums, programma īslaicīgi tiek pārslēgta no lietotāja režīma uz kodola režīmu. Kodola režīmā programmai ir piekļuve visiem sistēmas resursiem, tostarp aparatūrai, atmiņai un citiem procesiem.
- Konteksta pārslēgšana: Sistēmas izsaukumam ir nepieciešams konteksta slēdzis, kas ietver pašreizējā procesa stāvokļa saglabāšanu un pārslēgšanos uz kodola režīmu, lai izpildītu pieprasīto pakalpojumu. Tas var radīt papildu izmaksas, kas var ietekmēt sistēmas veiktspēju.
- Kļūdu apstrāde: Sistēmas zvani var atgriezt kļūdu kodus, lai norādītu uz problēmām ar pieprasīto pakalpojumu. Programmām ir jāpārbauda šīs kļūdas un tās atbilstoši jāapstrādā.
- Sinhronizācija: Sistēmas zvanus var izmantot, lai sinhronizētu piekļuvi koplietotajiem resursiem, piemēram, failiem vai tīkla savienojumiem. Operētājsistēma nodrošina sinhronizācijas mehānismus, piemēram, slēdzenes vai semaforus, lai nodrošinātu, ka vairākas programmas var droši piekļūt šiem resursiem.
Sistēmas zvanu priekšrocības
- Piekļuve aparatūras resursiem: Sistēmas izsaukumi ļauj programmām piekļūt aparatūras resursiem, piemēram, diskdziņiem, printeriem un tīkla ierīcēm.
- Atmiņas pārvaldība: Sistēmas izsaukumi nodrošina iespēju programmām piešķirt un atdalīt atmiņu, kā arī piekļūt ar atmiņu kartētām aparatūras ierīcēm.
- Procesu vadība: Sistēmas izsaukumi ļauj programmām izveidot un pārtraukt procesus, kā arī pārvaldīt starpprocesu komunikāciju.
- Drošība: Sistēmas izsaukumi nodrošina iespēju programmām piekļūt priviliģētiem resursiem, piemēram, iespēju mainīt sistēmas iestatījumus vai veikt darbības, kurām nepieciešamas administratīvās atļaujas.
- Standartizācija: Sistēmas izsaukumi nodrošina standartizētu saskarni programmām, lai tās varētu mijiedarboties ar operētājsistēmu, nodrošinot konsekvenci un savietojamību dažādās aparatūras platformās un operētājsistēmu versijās.
Kā darbojas sistēmas zvans?
Šeit ir detalizēts skaidrojums, kā soli pa solim darbojas sistēmas izsaukums:
- Lietotājam nepieciešami īpaši resursi: Dažreiz programmām ir jāveic dažas īpašas darbības, kuras nevar izdarīt bez OS atļaujas, piemēram, lasīšana no faila, rakstīšana failā, jebkādas informācijas iegūšana no aparatūras vai vietas pieprasīšana atmiņā.
- Programma veic sistēmas zvana pieprasījumu: Ir īpašas iepriekš noteiktas instrukcijas, lai veiktu pieprasījumu operētājsistēmai. Šīs instrukcijas nav nekas cits kā tikai sistēmas izsaukums. Programma izmanto šos sistēmas izsaukumus savā kodā, kad nepieciešams.
- Operētājsistēma redz sistēmas izsaukumu: Kad operētājsistēma redz sistēmas izsaukumu, tā atzīst, ka programmai šobrīd ir nepieciešama palīdzība, tāpēc tā uz laiku aptur programmas izpildi un piešķir visu kontroli īpašajai savas daļai, ko sauc par “Kodolu”. Tagad “Kodols” atrisina programmas nepieciešamību.
- Operētājsistēma veic šādas darbības: Tagad operētājsistēma veic programmas pieprasīto darbību. Piemērs: satura lasīšana no faila utt.
- Operētājsistēma atdod kontroli pār programmu: Pēc speciālās darbības veikšanas OS atdod vadību programmai turpmākai programmas izpildei.
Sistēmas izsaukuma piemēri sistēmā Windows un Unix
Sistēmas izsaukumiem Windows un Unix ir daudz dažādu veidu. Tie ir uzskaitīti zemāk esošajā tabulā:
Process | Windows | Unix |
---|---|---|
Procesu kontrole | CreateProcess() ExitProcess() WaitForSingleObject() | Dakša () Izeja() Pagaidi () |
Failu manipulācijas | Izveidot failu() Lasīt failu () WriteFile() | Atvērt () Lasīt () Rakstīt () Aizvērt () |
Ierīču pārvaldība | SetConsoleMode() ReadConsole() WriteConsole() | Ioctl() Lasīt () Rakstīt () |
Informācijas uzturēšana | Get CurrentProcessID() SetTimer() Gulēt() | Getpid() Signalizācija () Gulēt() |
Komunikācija | CreatePipe() CreateFileMapping() MapViewOfFile() | Caurule () Shmget () Mmap() |
Aizsardzība | SetFileSecurity() InitializeSecurityDescriptor() SetSecurityDescriptorgroup() | Chmod () atmaskot () Chown () |
atvērts (): Piekļuve failam failu sistēmā ir iespējama, izmantojot sistēmas izsaukumu open(). Tas nodrošina nepieciešamos faila resursus un rokturi, ko process var izmantot. Failu var atvērt, izmantojot vairākus procesus vienlaikus vai tikai vienu procesu. Visa pamatā ir struktūra un failu sistēma.
lasīt (): Dati no faila failu sistēmā tiek izgūti, izmantojot to. Kopumā tā pieņem trīs argumentus:
- Faila apraksts.
- Buferis lasīšanas datu glabāšanai.
- Cik baitu vajadzētu nolasīt no faila
Pirms lasīšanas lasāmo failu var identificēt pēc tā faila deskriptora un atvērt, izmantojot funkciju open ().
gaidi (): Dažās sistēmās process var būt jāaptur, līdz beidzas cita procesa darbība, pirms turpināt. Kad vecākprocess izveido pakārtoto procesu, vecākprocesa izpilde tiek apturēta, līdz pakārtotais process ir pabeigts. Vecāku process tiek apturēts, izmantojot gaidīt() sistēmas izsaukumu. Vecāku process atgūst kontroli, kad pakārtotais process ir beidzies.
rakstīt (): Dati no lietotāja bufera tiek ierakstīti, izmantojot to ierīcē, piemēram, failā. Programma var iegūt datus vienā veidā, izmantojot šo sistēmas zvans . Kopumā ir trīs argumenti:
- Faila apraksts.
- Atsauce uz buferi, kurā tiek glabāti dati.
- Datu apjoms, kas tiks ierakstīts no bufera baitos.
dakša (): Fork() sistēmas izsaukumu procesi izmanto, lai izveidotu savas kopijas. Tā ir viena no metodēm, ko operētājsistēmās visbiežāk izmanto procesu izveidei. Kad vecākprocess izveido pakārtoto procesu, vecākprocesa izpilde tiek apturēta, līdz pakārtotais process ir pabeigts. Vecāku process atgūst kontroli, kad pakārtotais process ir beidzies.
Izeja(): Sistēmas izsaukums ar nosaukumu exit() tiek izmantots, lai pārtrauktu programmu. Vidēs ar vairākiem pavedieniem šis izsaukums norāda, ka pavediena izpilde ir pabeigta. Pēc sistēmas funkcijas exit() izmantošanas operētājsistēma atgūst procesa izmantotos resursus.
Metodes parametru nodošanai OS
Ja notiek sistēmas izsaukums, mums ir jānodod parametrs operētājsistēmas kodola daļai.
Piemēram, apskatiet doto atvērt () sistēmas zvans:
C
//function call example> #include> int> open(> const> char> *pathname,> int> flags, mode_t mode);> |
>
>
Šeit ceļa nosaukums , karogi un mode_t ir parametri.
Tātad jāatzīmē, ka:
- Mēs nevaram nodot parametrus tieši tāpat kā parastā funkcijas izsaukumā.
- Kernal režīmā funkciju izsaukšanu var veikt citādāk.
Tāpēc mēs nevaram to palaist parastajā adrešu telpā, ko process jau bija izveidojis, un tāpēc mēs nevaram ievietot parametrus steka augšdaļā, jo tas nav pieejams operētājsistēmas kodolam apstrādei. tāpēc mums ir jāizmanto citas metodes, lai parametrus nodotu OS kodolam.
Mēs varam to izdarīt cauri,
- Parametru nodošana reģistros
- Bloka adrese tiek nodota kā parametrs reģistrā.
- Parametri tiek ievietoti kaudzē.
Ļaujiet mums sīkāk apspriest katru punktu:
1. Parametru nodošana reģistros.
- Tā ir vienkāršākā metode starp trim
- Šeit mēs tieši nododam parametrus reģistriem.
- Bet tas ir ierobežots, ja parametru skaits ir lielāks par reģistru skaitu.
- Šeit ir C programmas kods:
C
// 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. Bloka adrese tiek nodota kā parametri
- To var lietot, ja parametru skaits ir lielāks par reģistru skaitu.
- Parametri tiek saglabāti blokos vai tabulā.
- Bloka adrese kā parametrs tiek nodota reģistram.
- Visbiežāk izmanto Linux un Solaris.
- Šeit ir C programmas kods:
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.Parametri tiek stumti kaudzē
- Izmantojot šo metodi, parametrus var iespiest, izmantojot programmu, un izlecot, izmantojot operētājsistēmu
- Tādējādi Kernal var viegli piekļūt datiem, izgūstot informāciju no steka augšdaļas.
- Šeit ir C programmas kods
C
//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;> }> |
>
: java
>
Bieži uzdotais jautājums
Q.1: Kā darbojas sistēmas izsaukums?
Atbilde:
Kad programma izpilda sistēmas izsaukumu, tā pāriet no lietotāja režīma uz kodola režīmu, kas ir augstākas priviliģēts režīms. Pāreja parasti tiek uzsākta, izsaucot noteiktu funkciju vai pārtraucot programmēšanas valodas vai operētājsistēmas sniegtās instrukcijas.
Kodola režīmā sistēmas zvanu apstrādā operētājsistēma. Kodols programmas vārdā veic pieprasīto darbību un atgriež rezultātu. Pēc tam vadība tiek atgriezta lietotāja līmeņa programmā, kas turpina tās izpildi.
2. J. Kāpēc ir nepieciešami sistēmas izsaukumi?
Atbilde:
Sistēmas zvani ir nepieciešami vairāku iemeslu dēļ:
Piekļuve priviliģētām darbībām: Daudzām darbībām, piemēram, aparatūras ierīču pārvaldībai vai sistēmas konfigurāciju modificēšanai, ir nepieciešamas augstākas privilēģijas, kas ir pieejamas tikai ar sistēmas izsaukumiem.
Resursu pārvaldība: Sistēmas izsaukumi nodrošina standartizētu saskarni sistēmas resursu, piemēram, atmiņas, failu un ierīču, piešķiršanai un pārvaldībai, nodrošinot godīgu un kontrolētu piekļuvi dažādiem procesiem.
Abstrakcija: Sistēmas izsaukumi abstrakti nosaka operētājsistēmas sarežģītību, ļaujot lietojumprogrammu izstrādātājiem mijiedarboties ar sistēmu augstākā līmenī, neatkarīgi no platformas.
Drošība un aizsardzība: Sistēmas zvani ievieš piekļuves kontroles un drošības politikas, novēršot nesankcionētu piekļuvi sensitīviem resursiem un aizsargājot sistēmas integritāti.