Järjestelmäkutsu on tapa, jolla käyttäjäohjelma voi liittyä käyttöjärjestelmään. Ohjelma pyytää useita palveluita, ja käyttöjärjestelmä vastaa käynnistämällä sarjan järjestelmäkutsuja pyynnön täyttämiseksi. Järjestelmäkutsu voidaan kirjoittaa assembly-kielellä tai korkean tason kielellä, kuten C tai Pascal . Järjestelmäkutsut ovat ennalta määritettyjä toimintoja, joita käyttöjärjestelmä voi kutsua suoraan, jos käytetään korkean tason kieltä.
Tässä artikkelissa opit käyttöjärjestelmän järjestelmäkutsuista ja keskustelet niiden tyypeistä ja monista muista asioista.
Mikä on järjestelmäpuhelu?
Järjestelmäkutsu on menetelmä, jolla tietokoneohjelma pyytää palvelua sen käyttöjärjestelmän ytimeltä, jossa se on käynnissä. Järjestelmäkutsu on tapa olla vuorovaikutuksessa käyttöjärjestelmän kanssa ohjelmien kautta. Järjestelmäkutsu on pyyntö tietokoneohjelmistolta käyttöjärjestelmän ytimeen.
The Sovellusliittymä (API) yhdistää käyttöjärjestelmän toiminnot käyttäjäohjelmiin. Se toimii linkkinä käyttöjärjestelmän ja prosessin välillä, jolloin käyttäjätason ohjelmat voivat pyytää käyttöjärjestelmäpalveluita. Ydinjärjestelmään pääsee vain järjestelmäkutsujen avulla. Järjestelmäkutsuja vaaditaan kaikista resursseja käyttävistä ohjelmista.
Miten järjestelmäpuhelut tehdään?
Kun tietokoneohjelmiston on päästävä käyttöjärjestelmän ytimeen, se soittaa järjestelmäkutsun. Järjestelmäkutsu käyttää API:a paljastamaan käyttöjärjestelmän palvelut käyttäjäohjelmille. Se on ainoa tapa päästä kerneljärjestelmään. Kaikkien resursseja suorittavien ohjelmien tai prosessien tulee käyttää järjestelmäkutsuja, koska ne toimivat käyttöjärjestelmän ja käyttäjäohjelmien välisenä rajapintana.
Alla on esimerkkejä siitä, kuinka järjestelmäkutsu eroaa käyttäjän toiminnosta.
monisäikeinen java
- Järjestelmäkutsutoiminto voi luoda ja käyttää ydinprosesseja asynkronisen käsittelyn suorittamiseen.
- Järjestelmäkutsulla on suurempi auktoriteetti kuin tavallisella aliohjelmalla. Järjestelmäkutsu, jolla on kernel-tilan käyttöoikeus, suoritetaan ytimen suojausalueella.
- Järjestelmäkutsut eivät saa käyttää jaettuja kirjastoja tai symboleja, joita ei ole ytimen suojausalueella.
- Järjestelmäkutsujen koodi ja tiedot tallennetaan globaaliin ytimen muistiin.
Miksi tarvitset järjestelmäkutsuja käyttöjärjestelmässä?
On useita tilanteita, joissa sinun on vaadittava järjestelmäkutsuja käyttöjärjestelmässä. Seuraavat tilanteet ovat seuraavat:
- Se on vaadittava, kun tiedostojärjestelmä haluaa luoda tai poistaa tiedoston.
- Verkkoyhteydet vaativat järjestelmäpuhelut datapakettien lähettämiseen ja vastaanottamiseen.
- Jos haluat lukea tai kirjoittaa tiedoston, sinun on tehtävä järjestelmäkutsuja.
- Jos haluat käyttää laitteita, kuten tulostinta, skanneria, tarvitset järjestelmäkutsun.
- Järjestelmäkutsuja käytetään uusien prosessien luomiseen ja hallintaan.
Kuinka järjestelmäpuhelut toimivat
Sovellukset toimivat muistialueella, joka tunnetaan nimellä käyttäjätila. Järjestelmäkutsu muodostaa yhteyden käyttöjärjestelmän ytimeen, joka suoritetaan ydintilassa. Kun sovellus luo järjestelmäkutsun, sen on ensin hankittava lupa ytimeltä. Se saavuttaa tämän keskeytyspyynnöllä, joka keskeyttää nykyisen prosessin ja siirtää ohjauksen ytimelle.
Jos pyyntö on sallittu, ydin suorittaa pyydetyn toiminnon, kuten tiedoston luomisen tai poistamisen. Syötteenä sovellus vastaanottaa ytimen tulosteen. Sovellus jatkaa menettelyä syötteen vastaanottamisen jälkeen. Kun toiminto on valmis, ydin palauttaa tulokset sovellukselle ja siirtää sitten tiedot ytimen tilasta käyttäjän muistiin.
Yksinkertainen järjestelmäkutsu saattaa kestää muutaman nanosekunnin tuloksen, kuten järjestelmän päivämäärän ja kellonajan hakemisen, tuottamiseksi. Monimutkaisempi järjestelmäpuhelu, kuten yhteyden muodostaminen verkkolaitteeseen, voi kestää muutaman sekunnin. Useimmat käyttöjärjestelmät käynnistävät erillisen ydinsäikeen jokaiselle järjestelmäkutsulle pullonkaulojen välttämiseksi. Nykyaikaiset käyttöjärjestelmät ovat monisäikeisiä, mikä tarkoittaa, että ne pystyvät käsittelemään useita järjestelmäkutsuja samanaikaisesti.
Järjestelmäpuhelujen tyypit
Järjestelmäkutsuja on yleensä viisi tyyppiä. Nämä ovat seuraavat:
java virtuaalikone
Nyt opit kaikista erityyppisistä järjestelmäkutsuista yksitellen.
Prosessinhallinta
Prosessinohjaus on järjestelmäkutsu, jota käytetään ohjaamaan prosesseja. Jotkut prosessinhallintaesimerkit sisältävät prosessin luomisen, lataamisen, keskeyttämisen, lopettamisen, suorittamisen, käsittelyn, prosessin lopettamisen jne.
Tiedostonhallinta
Tiedostonhallinta on järjestelmäkutsu, jota käytetään tiedostojen käsittelyyn. Joitakin tiedostonhallintaesimerkkejä ovat tiedostojen luominen, tiedostojen poistaminen, avaaminen, sulkeminen, lukeminen, kirjoittaminen jne.
Laitehallinta
Laitehallinta on järjestelmäkutsu, jota käytetään laitteiden käsittelyyn. Joitakin esimerkkejä laitehallinnasta ovat lukeminen, laite, kirjoittaminen, laitemääritteiden hakeminen, laitteen vapauttaminen jne.
execvp
Tietojen ylläpito
Tiedon ylläpito on järjestelmäkutsu, jota käytetään tietojen ylläpitämiseen. On joitain esimerkkejä tietojen ylläpidosta, mukaan lukien järjestelmätietojen hakeminen, kellonajan tai päivämäärän asettaminen, kellonajan tai päivämäärän hakeminen, järjestelmätietojen asettaminen jne.
Viestintä
Viestintä on järjestelmäpuhelu, jota käytetään viestintään. On joitain esimerkkejä viestinnästä, mukaan lukien viestintäyhteyksien luominen, poistaminen, viestien lähettäminen, vastaanottaminen jne.
Esimerkkejä Windows- ja Unix-järjestelmäkutsuista
Windows- ja Unix-järjestelmäkutsuista on useita esimerkkejä. Nämä on lueteltu alla olevassa taulukossa:
Käsitellä asiaa | Windows | Unix |
---|---|---|
Prosessinhallinta | CreateProcess() ExitProcess() WaitForSingleObject() | Haarukka() Poistu() Odota() |
Tiedoston manipulointi | Luo tiedosto() Lue tiedosto() Kirjoitatiedosto() SuljeHandle() | Avata() Lukea() Kirjoittaa() Kiinni() |
Laitehallinta | SetConsoleMode() ReadConsole() WriteConsole() | Ioctl() Lukea() Kirjoittaa() |
Tietojen ylläpito | Get CurrentProcessID() SetTimer() Nukkua() | Getpid() Hälytys() Nukkua() |
Viestintä | CreatePipe() CreateFileMapping() MapViewOfFile() | Putki() Shmget() Mmap() |
Suojaus | SetFileSecurity() InitializeSecurityDescriptor() SetSecurityDescriptorgroup() | Chmod() umask() Chown() |
Täällä opit lyhyesti joistakin menetelmistä:
avata()
The avata() järjestelmäkutsun avulla voit käyttää tiedostojärjestelmässä olevaa tiedostoa. Se varaa tiedostolle resursseja ja tarjoaa kahvan, johon prosessi voi viitata. Monet prosessit voivat avata tiedoston kerralla tai vain yhdellä prosessilla. Kaikki perustuu tiedostojärjestelmään ja rakenteeseen.
lukea()
Sitä käytetään tietojen hakemiseen tiedostojärjestelmässä olevasta tiedostosta. Se hyväksyy yleensä kolme argumenttia:
- Tiedoston kuvaus.
- Puskuri luetun datan tallentamiseen.
- Tiedostosta luettavien tavujen määrä.
Luettavan tiedoston tiedostokuvaajalla voitaisiin tunnistaa se ja avata se käyttämällä avata() ennen lukemista.
odota()
Joissakin järjestelmissä prosessi saattaa joutua odottamaan toisen prosessin suorittamista loppuun ennen jatkamista. Kun pääprosessi tekee aliprosessin, pääprosessin suoritus keskeytetään, kunnes aliprosessi on valmis. The odota() järjestelmäkutsua käytetään pääprosessin keskeyttämiseen. Kun aliprosessi on suorittanut suorituksensa, hallinta palautetaan pääprosessille.
kirjoittaa()
Sitä käytetään tietojen kirjoittamiseen käyttäjän puskurista laitteeseen, kuten tiedostoon. Tämä järjestelmäkutsu on yksi tapa, jolla ohjelma tuottaa tietoja. Se vaatii yleensä kolme argumenttia:
- Tiedoston kuvaus.
- Osoitin puskuriin, johon tiedot tallennetaan.
- Puskurista kirjoitettavien tavujen määrä.
haarukka()
Prosessit luovat klooneja itsestään käyttämällä haarukka() järjestelmäpuhelu. Se on yksi yleisimmistä tavoista luoda prosesseja käyttöjärjestelmissä. Kun ylätason prosessi synnyttää aliprosessin, ylätason prosessin suoritus keskeytyy, kunnes aliprosessi on valmis. Kun aliprosessi on suorittanut suorituksensa, hallinta palautetaan pääprosessille.
kiinni()
Sitä käytetään tiedostojärjestelmän käytön lopettamiseen. Kun tämä järjestelmäkutsu kutsutaan, se tarkoittaa, että ohjelma ei enää tarvitse tiedostoa ja puskurit tyhjennetään, tiedoston tietoja muutetaan ja tiedostoresurssit puretaan tämän seurauksena.
exec()
Kun suoritettava tiedosto korvaa aiemman suoritettavan tiedoston jo suoritettavassa prosessissa, tämä järjestelmätoiminto käynnistyy. Kun uutta prosessia ei rakenneta, vanha prosessitunniste jää, mutta uusi prosessi korvaa datan, pinon, datan, pään jne.
exit()
The exit() on järjestelmäkutsu, jota käytetään lopettamaan ohjelman suorittaminen. Tämä kutsu osoittaa, että säikeen suoritus on valmis, mikä on erityisen hyödyllistä monisäikeisissä ympäristöissä. Käyttöjärjestelmä ottaa takaisin prosessin käyttämät resurssit sen käytön jälkeen exit() järjestelmän toiminto.
kuinka monta kaupunkia on Yhdysvalloissa