Системски позиви

Шта је Линук системски позив?

Шта је Линук системски позив?

Идемо редом

Пре него што уђемо у дефиницију Линук системског позива и испитамо детаље његовог извршавања, најбоље је започети са дефинисањем различитих софтверских слојева типичног Линук система.

Линук кернел је специјализовани програм који се покреће и покреће на најнижем доступном нивоу вашег хардвера. Задатак је да оркестрира све што се покреће на рачунару, укључујући руковање тастатуром, диском и мрежним догађајима, да обезбеди временске резове за паралелно извршавање више програма.

Када кернел изврши програм на нивоу корисника, он виртуелизује меморијски простор тако да програми верују да су једини процес покренут у меморији. Овај заштитни балон изолације хардвера и софтвера повећава сигурност и поузданост. Непривилегована апликација не може приступити меморији која припада другим програмима, а ако се тај програм сруши, језгро се прекида тако да не може наштетити остатку система.

Отклањање препрека системским позивима Линук-а

Овај слој изолације између привилегованих апликација пружа изврсну границу за заштиту других апликација и корисника у систему. Међутим, без неког начина повезивања са осталим елементима рачунара и спољног света, програми не би могли да постигну много тога.

Да би олакшао интеракцију, језгро одређује софтверску капију која омогућава покренутом програму да захтева да језгро делује у његово име. Овај интерфејс је познат као системски позив.

Будући да Линук следи УНИКС филозофију „све је датотека“, многе функције се могу извршити отварањем и читањем или писањем у датотеку, која може бити уређај. На пример, у оперативном систему Виндовс можете користити функцију која се зове ЦриптГенРандом за приступ случајним бајтовима. Али на Линуку се то може учинити једноставним отварањем „датотеке“ / дев / урандом и читањем бајтова из њега помоћу стандардних системских позива за унос / излаз датотека. Ова пресудна разлика омогућава једноставнији интерфејс системског позива.

Танки омотач за облатне

У већини апликација системски позиви се не упућују директно на језгро. Практично сви програми се повезују у стандардну Ц библиотеку, која пружа танак, али важан омот око Линук системских позива. Библиотека осигурава да се аргументи функције копирају у исправне регистре процесора, а затим издаје одговарајући Линук системски позив. Када се из позива приме подаци, омотач интерпретира резултате и на доследан начин их враћа у програм.

Иза сцене

Свака функција у програму која комуницира са системом на крају се преведе у системски позив. Да бисмо ово видели на делу, кренимо са основним примером.

воид маин ()

Ово је вероватно најтривијалнији Ц програм који ћете икада видети. Једноставно стиче контролу преко главне улазне тачке, а затим излази. Не враћа чак ни вредност јер је маин дефинисан као воид. Сачувајте датотеку као цтест.ц и хајде да га компајлирамо:

гцц цтест.ц -о цтест

Једном кад је компајлиран, можемо видети величину датотеке као 8664 бајта. Може се мало разликовати на вашем систему, али требало би да буде око 8к. То је пуно кода само за улазак и излазак! Разлог зашто је 8к је тај што је укључено рунтиме либц. Чак и ако скинемо симболе, то је ипак мало више од 6к.

У још једноставнијем примеру, можемо извршити Линук системски позив за излаз, а не у зависности од Ц рунтиме-а да то учини уместо нас.

воид _старт ()
асм ("мовл $ 1,% еак;"
"корл% ебк,% ебк;"
"инт $ 0к80");

Овде премештамо 1 у ЕАКС регистар, уклањамо ЕБКС регистар (који би иначе садржао повратну вредност), а затим позивамо системски прекид Линук позива 0к80 (или 128 у децималном). Овај прекид покреће кернел да обради наш позив.

Ако компајлирамо наш нови пример, који се зове асмтест.ц, и уклоните симболе и изузмите стандардну библиотеку:

гцц -с -ностдлиб асмтест.ц -о асмтест

произвешћемо бинарни садржај мањи од 1к (на мом систему даје 984 бајта). Већина овог кода су извршна заглавља. Сада позивамо директни системски позив Линук-а.

У све практичне сврхе

У готово свим случајевима никада нећете морати да упућујете директне системске позиве у својим програмима Ц. Међутим, ако користите монтажни језик, може се појавити потреба. Међутим, у оптимизацији би било најбоље да функције библиотеке Ц допуштају системске позиве и да у директиве о монтажи буде уграђен само ваш код критичан према перформансама.

Како програмирати упутства за системски позив

Списак свих системских позива

Ако желите да видите листу свих доступних системских позива за Линук, можете погледати ове референтне странице: Потпуна листа системских позива на ЛинукХинт.цом, филиппо.ио / линук-сисцалл-табле / и или сисцаллс.кернелгрок.цом

Најбоље игре за ручно праћење
Оцулус Куест је недавно представио сјајну идеју ручног праћења без контролера. Са све већим бројем игара и активности које извршавају подршку формално...
Како приказати ОСД прекривач у целом екрану Линук апликација и игара
Играње игара преко целог екрана или коришћење апликација у режиму целог екрана без ометања може вам одсећи релевантне системске информације видљиве на...
Топ 5 карата за хватање игара
Сви смо видели и волели стримовање играња на ИоуТубе-у. ПевДиеПие, Јакесептицие и Маркиплиер само су неки од најбољих играча који су зарадили милионе ...