[so2] Semnal in timp ce se executa un apel de sistem.

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Wed Jul 23 13:14:15 EEST 2014


2014-07-23 12:27 GMT+03:00 Catalin Vasile <catalinvasile92 at gmail.com>:
> Din ce am inteles, cand se executa un apel de sistem, acel apel de sistem se
> executa in numele procesului care l-a apelat.

Adică nucleul excuta apelul de sistem în mod privilegiat (kernel
space/mode) în numele procesului.

> Din asta inteleg ca un apel de sistem poate "dormi".

Da.

> Daca apare un semnal catre acel proces, acesta poate trezi procesul in contextul procesarii apelului de sistem?

Da, se poate trezi. Depinde care a fost funcția din kernel care a
cauzat blocarea și dacă acea funcție este interuptibilă (vezi ce ai
spus mai jos). Dacă funcția din kernel este interuptibilă apelul de
sistem se întoarce cu valoarea -EINTR. Majoritatea paginilor de manual
pentru apeluri de sistem (secțiunea 2) precizează valoarea EINTR în
secțiunea ERRORS.

> De asemenea, in contextul unei functii care se executa cu TASK_INTERRUPTIBLE
> sau TASK_UNINTERRUPTIBLE, la ce se refera cand se specifica ca acel task
> poate fi intrerupt sau nu? Mai exact de cine sa fie intrerupt sau nu? De
> intreruperile care vin catre procesor, sau de semnale primite de proces?

Se referă la comportamentul unui task care este blocat în kernel la o
anumită funcție și sosește un semnal. Dacă sosește un semnal și starea
task-ului este TASK_UNINTERRUPTIBLE, procesul rămâne în continuare
blocat la acea funcție. Întreruperile nu au legătură cu
TASK_INTERRUPTIBLE/TASK_UNINTERRUPTIBLE. Vezi aici[1][2] detalii.

Cred că e util să dai search pe Google înainte la astfel de întrebări.
Găsești multe răspunsuri bine puse la punct, precum cele de
aici[1][2]. De exemplu, ca să ajung la aceste link-uri[1][2] am căutat
"task_interruptible" pe Google.

[1] http://humblec.com/proccess-states-in-linux-kernel/
[2] http://stackoverflow.com/questions/223644/what-is-an-uninterruptable-process

Răzvan


More information about the so2 mailing list