Bosh sahifa Wiki Process

Process

Process — operatsion tizimda bajarilayotgan dastur instance’i. Executable fayl diskdagi kod bo‘lsa, process shu kodning xotira, register, resurs va bajarilish holatiga ega faol ko‘rinishi.

Bir xil dasturdan bir nechta process ishga tushishi mumkin. Har biri alohida PID va address space oladi.

Operatsion tizim processlarni yaratadi, rejalashtiradi, izolatsiya qiladi va tugatadi.

Process tarkibi

Process quyidagilarga ega:

Kernel process haqidagi metadata’ni process control blockda saqlaydi.

PID

Har processga Process ID beriladi.

PID tizimda ma’lum vaqt davomida noyob.

Process tugagach PID keyin boshqa processga berilishi mumkin.

Uzoq muddatli identifikatsiya uchun faqat PIDga tayanish xavfli.

Parent va child

Yangi process mavjud process tomonidan yaratiladi.

Unixda fork() parent nusxasini yaratadi, exec() esa yangi dastur kodini yuklaydi.

Child parent PIDini bilishi mumkin.

Process daraxti init tizimigacha boradi.

Fork

fork() parentning address space mantiqiy nusxasini yaratadi.

Copy-on-write sabab barcha memory darhol fizik nusxalanmaydi.

Parent yoki child sahifani o‘zgartirganda alohida nusxa yaratiladi.

Exec

exec mavjud process image’ni yangi executable bilan almashtiradi.

PID saqlanadi, ammo:

yangilanadi.

Fork va exec shell buyruq ishga tushirishining klassik modelidir.

Process holatlari

Process quyidagi holatlarda bo‘lishi mumkin:

  • running;
  • runnable;
  • sleeping;
  • uninterruptible sleep;
  • stopped;
  • zombie;
  • dead.

Aniq nom va model OSga bog‘liq.

Running va runnable

Running process ayni paytda CPUda bajarilmoqda.

Runnable process bajarishga tayyor, lekin scheduler CPU navbatini kutmoqda.

Ko‘p runnable process load average va CPU contentionni oshiradi.

Sleeping

Process eventni kutadi:

Interruptible sleep signal bilan uyg‘onishi mumkin.

Uninterruptible sleep ko‘pincha kernel I/O operatsiyasini kutadi.

Zombie

Child tugagan, lekin parent uning exit statusini hali o‘qimagan.

Zombie CPU ishlatmaydi va memoryning katta qismini bo‘shatgan, ammo process table entry saqlanadi.

Parent wait() qilishi kerak.

Ko‘p zombie noto‘g‘ri child managementni ko‘rsatadi.

Orphan

Parent tugab, child ishlashda davom etsa orphan process yuz beradi.

Init yoki subreaper uni o‘ziga qabul qilib, keyinchalik exit statusni yig‘adi.

Address space

Har process o‘z virtual manzil maydoniga ega.

Qismlar:

Virtual memory processlarni bir-biridan ajratadi.

File descriptor

Process ochiq fayl, socket, pipe va device’larni file descriptor orqali boshqaradi.

Standart descriptorlar:

  • 0 — stdin;
  • 1 — stdout;
  • 2 — stderr.

Forkda descriptorlar childga meros bo‘lishi mumkin.

Environment

Environment variable process ishga tushganda beriladi.

Misollar:

  • PATH;
  • HOME;
  • LANG;
  • application setting;
  • secret.

Process boshqa process environmentini permission bo‘lsa ko‘rishi mumkin. Secretni environmentda saqlash xavfsizlik siyosatiga bog‘liq.

User va permission

Process real va effective user IDga ega.

Kernel fayl, socket va signal ruxsatini shu identifikatorlar asosida tekshiradi.

Setuid executable vaqtincha boshqa effective user bilan ishlashi mumkin.

Scheduler

Scheduler runnable process va threadlarga CPU vaqt beradi.

Siyosatlar:

  • fair scheduling;
  • real-time FIFO;
  • round-robin;
  • priority;
  • nice value.

Juda yuqori real-time process tizimni bloklashi mumkin.

Context switch

CPU bir processdan boshqasiga o‘tganda register va boshqa holat saqlanadi.

Context switch zarur, ammo overheadga ega.

Ko‘p thread, lock va I/O switch sonini oshirishi mumkin.

Signal

Processga asinxron hodisa yuboriladi.

Misollar:

  • SIGTERM;
  • SIGKILL;
  • SIGINT;
  • SIGCHLD;
  • SIGHUP;
  • SIGSEGV.

Process ayrim signalni handler bilan qayta ishlaydi.

Exit status

Process tugaganda integer exit code qaytaradi.

Odatda:

  • 0 — muvaffaqiyat;
  • boshqa qiymat — xato.

Shell $? orqali oxirgi buyruq statusini ko‘radi.

Signal bilan tugash alohida qayd etiladi.

Resource limit

Process uchun limitlar:

  • open file;
  • CPU time;
  • memory;
  • process soni;
  • stack;
  • core dump;
  • locked memory.

Limitlar bitta processning butun tizim resursini egallashini cheklaydi.

Namespace va cgroup

Container processlari namespace orqali alohida ko‘rinish oladi.

Cgroup CPU, memory va I/Oni cheklaydi.

Container ichidagi PID 1 hostda boshqa PID bo‘lishi mumkin.

Process va thread

Process address space va resurs konteyneri.

Thread shu process ichidagi bajarilish oqimi.

Threadlar:

  • heap;
  • code;
  • file descriptor

ni bo‘lishadi, lekin har biri o‘z stack va registeriga ega.

Monitoring

Process uchun:

kuzatiladi.

Faqat CPU foizi process holatini to‘liq ko‘rsatmaydi.

Diagnostika

Process muammosida:

tekshiriladi.

Process mavjud bo‘lsa ham, deadlock yoki I/O kutish sabab foydali ish qilmayotgan bo‘lishi mumkin.

Core dump

Process segmentation fault yoki boshqa signal bilan tugaganda xotira holati core dumpga yozilishi mumkin.

Debugger core fayl orqali:

ni tahlil qiladi.

Core dump ichida parol va foydalanuvchi ma’lumoti bo‘lishi mumkin. Saqlash ruxsati va retention cheklanadi.

Process group va session

Shell pipeline’dagi processlar bitta process groupga birlashtiriladi. Terminal signalni butun foreground groupga yuborishi mumkin.

Session bir nechta process groupni qamrab oladi. Daemon setsid() orqali terminaldan mustaqil yangi session yaratadi.

Bog‘liq tushunchalar

PID, Thread, Fork, Exec, Scheduler, Virtual memory, File descriptor, Signal, Zombie, Cgroup, Namespace