Süsteemikõned

Mis on Linuxi süsteemikõne?

Mis on Linuxi süsteemikõne?

Esimesed asjad kõigepealt

Enne kui süveneme Linuxi süsteemikõne definitsiooni ja uurime selle käivitamise üksikasju, on kõige parem alustada tüüpilise Linuxi süsteemi erinevate tarkvarakihtide määratlemisega.

Linuxi kernel on spetsiaalne programm, mis käivitub ja töötab teie riistvara madalaimal võimalikul tasemel. Selle ülesandeks on orkestreerida kõik, mis arvutis töötab, sealhulgas klaviatuuri, ketta ja võrgusündmuste haldamine, pakkudes ajaviile mitme programmi paralleelseks käivitamiseks.

Kui tuum käivitab kasutaja taseme programmi, virtualiseerib see mäluruumi, nii et programmid usuvad, et need on ainsad mälus töötavad protsessid. See riistvara ja tarkvara eraldamise kaitsemull suurendab turvalisust ja usaldusväärsust. Priviligeerimata rakendus ei pääse juurde teiste programmide mälule ja kui see programm kokku jookseb, lõpetatakse kernel, nii et see ei saaks ülejäänud süsteemi kahjustada.

Tõkke tõkestamine Linuxi süsteemikõnedega

See eraldiseisvate rakenduste eralduskiht pakub suurepäraseid piire teiste rakenduste ja kasutajate kaitsmiseks süsteemis. Kuid ilma mingil viisil arvuti ja välismaailma muude elementidega liidestamata ei suudaks programmid suurt midagi saavutada.

Suhtlemise hõlbustamiseks määrab kern tarkvaravärava, mis võimaldab jooksval programmil nõuda, et kernel tema nimel tegutseks. Seda liidest nimetatakse süsteemikõneks.

Kuna Linux järgib UNIX-i filosoofiat "kõik on fail", saab paljusid funktsioone täita faili avamise ja lugemise või kirjutamise kaudu, mis võib olla. Näiteks Windowsis võite juhuslike baitide kasutamiseks kasutada funktsiooni nimega CryptGenRandom. Kuid Linuxis saab seda teha, lihtsalt avades faili / dev / urandom ja lugedes sellest baiti, kasutades faili sisend- / väljundsüsteemi standardkõnesid. See oluline erinevus võimaldab lihtsamat süsteemikõne liidest.

Vahvli-õhuke ümbris

Enamikus rakendustes ei helistata süsteemikõnesid otse kernelile. Praktiliselt kõik programmid seovad standardse C teegi, mis pakub õhukest, kuid olulist ümbrist Linuxi süsteemi kõnede ümber. Teek tagab, et funktsiooni argumendid on kopeeritud õigesse protsessoriregistrisse ja väljastab seejärel vastava Linuxi süsteemi kõne. Kui kõne pealt saadakse andmeid, tõlgendab ümbris tulemusi ja tagastab need järjekindlalt programmi tagasi.

Kaamerate taga

Iga programmi funktsioon, mis süsteemiga suhtleb, tõlgitakse lõpuks süsteemikutseks. Selle toimimiseks nägemiseks alustame lihtsa näitega.

void main ()

See on ilmselt kõige tühisem C-programm, mida te kunagi näete. See lihtsalt saab peamise sisenemispunkti kaudu kontrolli ja seejärel väljub. See ei tagasta isegi väärtust, kuna main on määratletud tühiseks. Salvestage fail ctestina.c ja koostame selle:

gcc ctest.c -o ctest

Kui see on kompileeritud, näeme faili suurust 8664 baiti. See võib teie süsteemis veidi erineda, kuid see peaks olema umbes 8 k. See on palju koodi lihtsalt sisestamiseks ja väljumiseks! Selle põhjuseks on 8k see, et kaasatakse libc käitamise aeg. Isegi kui eemaldame sümbolid, on see ikkagi üle 6k.

Veelgi lihtsamas näites võime Linuxi süsteemi helistada väljumiseks, mitte sõltuvalt C-käitusajast, et seda meie jaoks teha.

void _start ()
asm ("movl $ 1,% eax;"
"xorl% ebx,% ebx;"
"int $ 0x80");

Siirdume 1 EAX-i registrisse, kustutame EBX-i registri (mis muidu sisaldaks tagastusväärtust), seejärel helistage Linuxi süsteemi kõne katkestuseks 0x80 (või 128 kümnendkohaga). See katkestus käivitab tuuma meie kõne töötlemiseks.

Kui koostame oma uue näite, mida nimetatakse asmtestiks.c, eemaldage sümbolid ja välistage standardraamatukogu:

gcc -s -nostdlib asmtest.c -o asmtest

toodame binaararvu alla 1 k (minu süsteemis annab see 984 baiti). Enamik sellest koodist on käivitatavad päised. Helistame nüüd Linuxi otsekõnele.

Kõigil praktilistel eesmärkidel

Peaaegu kõigil juhtudel ei pea te oma C-programmides kunagi süsteemikõnesid tegema. Kui kasutate assamblee keelt, võib siiski tekkida vajadus. Kuid optimeerimisel oleks kõige parem lasta C-teegi funktsioonidel süsteemikõnesid teha ja monteerimisdirektiividesse manustada ainult teie jõudluskriitiline kood.

Kuidas programmeerida süsteemi kõneõpetusi

Kõigi süsteemikõnede loend

Kui soovite näha kõigi Linuxi jaoks saadaolevate süsteemikõnede loendit, saate vaadata neid viitelehti: täielik süsteemikõnede loend Linuxis.com, filippo.io / linux-syscall-table / ja või syscalls.kernelgrok.com

Kommertsmängumootorite avatud lähtekoodiga sadamad
Tasuta, avatud lähtekoodiga ja platvormidevaheliste mängumootorite puhkusereise saab kasutada nii vanade kui ka mõnede üsna hiljutiste mängude pealkir...
Parimad Linuxi käsurea mängud
Käsurida pole Linuxi kasutamisel lihtsalt teie suurim liitlane - see võib olla ka meelelahutusallikas, sest saate seda kasutada paljude lõbusate mängu...
Parimad Linuxi mängupuldi kaardistamise rakendused
Kui teile meeldib mängida Linuxis mänge tavalise klaviatuuri ja hiire sisestussüsteemi asemel mängupuldiga, on teie jaoks mõned kasulikud rakendused. ...