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

Хајде да заронимо дубоко у механизам сигнализације у Линук-у и разумемо шта се дешава иза кулиса.

Основни концепти сигнала у Линуку

На Линук-у, процеси генеришу сигнале у три основне ситуације:

  • Када дође до изузетне ситуације на хардверској страни. На пример, можете размишљати о догађајима као што је апликација која покушава да приступи региону изван дозвољен адресни простор (грешка сегментације) или генерисање машинског кода који укључује поделу нулом операција.
  • Ситуације као што је употреба комбинација тастера попут Цтрл + Ц или Цтрл + З на конзоли од стране корисника, мењањем величине екрана конзоле или слањем сигнала за укидање.
  • Тајмер постављен у апликацији истиче, ограничење ЦПУ-а дато апликацији је високо, подаци долазе до отвореног дескриптора датотеке итд.

Концепт сигнала постоји још од раних верзија Уник-а. Раније је постојало неколико разлика између Уник верзија у погледу обраде сигнала. Касније, са стандардизација ПОСИКС направљен за управљање сигналима, Линук и други Уник деривати су почели да прате ове стандарде. Из тог разлога, концепти Уник сигнала и ПОСИКС сигнала, које можете срести у неким документима, указују на разлике.

Сигнални бројеви

Сигнали имају различите нумеричке вредности, почевши од једне. На пример, сигнал 1 је а ХУП сигнал у скоро сваком систему, или сигнал 9 је а КИЛЛ сигнал.

Међутим, коришћење ових бројева се не препоручује када користите сигнале у својим апликацијама. За ПОСИКС сигнале, сигнал.х датотека треба да буде у апликацији и програмер треба да користи константне дефиниције повезаних бројева као што су СИГХУП, СИГКИЛЛ, итд. уместо тога.

Ако прегледате /usr/include/signal.h датотеку на вашем систему, можете видети додатне операције и друге укључене датотеке гледајући дефиниције вредности као што су __УСЕ_ПОСИКС, __УСЕ_КСОПЕН, __УСЕ_ПОСИКС199309, итд. у фајлу. Доступне бројеве сигнала на Линук системима можете пронаћи у /usr/include/asm-generic/signal.h датотеку, коју не морате директно укључивати у код апликације.

Генерисање и слање сигнала

Генерисање сигнала настаје услед неког догађаја. Међутим, слање (испорука) сигнала релевантној апликацији се не дешава истовремено са генерисањем сигнала.

Да би сигнал био послат апликацији, апликација мора бити тренутно покренута и имати ресурсе процесора. Стога се слање сигнала одређеној апликацији дешава када релевантна апликација поново почне да ради након промене контекста.

Концепт сигнала на чекању

Током времена од генерисања до преноса сигнала, сигнали су у стању приправности. Можете приступити броју сигнала на чекању и броју сигнала на чекању дозвољених за процес из /proc/PID/status фајл.

# За процес са ПИД-ом: 2299
мачка /проц/2299/статус

# Излаз
...
СигК: 2/31630
...

Сигналне маске и блокирање

Апликација често не може предвидети тачно време када ће сигнали стићи. Због тога се током било које операције могу појавити неки критични прекиди. Ово може да изазове велике проблеме за апликацију великих размера.

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

Када апликација блокира сигнал, други генерисани сигнали истог типа биће у стању чекања док се не деблокирају. У апликацији је такође обезбеђено слање сигнала на чекању чим се блок уклони.

На овај начин, исти типови сигнала који су стављени на чекање у време блока шаљу се апликацији само једном након што се блок уклони у нормалној употреби. Ситуација је другачија за сигнале у реалном времену.

Типови Линук сигнала

Подразумеване радње могу да се разликују у зависности од типа сигнала. Ако апликација која прима одговарајући сигнал нема функцију руковања сигналом, извршава се подразумевана радња. Понекад то значи прекид апликације, а понекад игнорисање сигнала.

Неки сигнали се не могу ухватити на слоју апликације, ови сигнали увек извршавају подразумевану радњу (као КИЛЛ сигнал).

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

Следеће вредности су засноване на ан узорна МИПС архитектура:

Сигнал Број Подразумевана радња Може ли се ухватити?
СИГХУП 1 Прекините апликацију да
СИГИНТ 2 Прекините апликацију да
СИГКУИТ 3 Прекини апликацију (думп језгра) да
СИГИЛЛ 4 Прекини апликацију (думп језгра) да
СИГТРАП 5 Прекини апликацију (думп језгра) да
СИГАБРТ 6 Прекини апликацију (думп језгра) да
СИГФПЕ 8 Прекини апликацију (думп језгра) да
СИГКИЛЛ 9 Прекините апликацију Не
СИГБУС 10 Прекини апликацију (думп језгра) да
СИГСЕГВ 11 Прекини апликацију (думп језгра) да
СИГСИС 12 Прекини апликацију (думп језгра) да
СИГПИПЕ 13 Прекините апликацију да
СИГАЛРМ 14 Прекините апликацију да
СИГТЕРМ 15 Прекините апликацију да
СИГУСР1 16 Прекините апликацију да
СИГУСР2 17 Прекините апликацију да
СИГЦХЛД 18 Игнорирај да
СИГТСТП 20 Зауставити да
СИГУРГ 21 Игнорирај да
СИГПОЛЛ 22 Прекините апликацију да
СИГСТОП 23 Зауставити Не
СИГЦОНТ 25 Наставите ако сте заустављени да
СИГТТИН 26 Зауставити да
СИГТТОУ 27 Зауставити да
СИГВТАЛРМ 28 Прекините апликацију да
СИГПРОФ 29 Прекините апликацију да
СИГКСЦПУ 30 Прекини апликацију (думп језгра) да
СИГКСФСЗ 31 Прекини апликацију (думп језгра) да

Животни циклус сигнала у Линуку

Сигнали пролазе кроз три фазе. Производе се првенствено у фази производње, језгром или било којим процесом, и представљени су бројем. Раде лагано и брзо, јер немају додатно оптерећење. Али ако погледате ПОСИКС страну, видећете да сигнали у реалном времену могу да преносе додатне податке.

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

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

Шта је процес у Линуку?

Реад Нект

ОбјавиТвеетОбјавиЕмаил

Повезане теме

  • Линук
  • Линук Кернел
  • Системска администрација

О аутору

Фатих Куцуккаракурт (Објављено 9 чланака)

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

Више од Фатих Куцуккаракурт

Претплатите се на наш билтен

Придружите се нашем билтену за техничке савете, рецензије, бесплатне е-књиге и ексклузивне понуде!

Кликните овде да бисте се претплатили