# Laboratoriya ishi №2: Operatsion tizimlarning ichki tuzilishi va jarayonlarni boshqarish

**Maqsad:** Talabalarda operatsion tizim (Linux) arxitekturasi, jarayonlar (processes), oqimlar (threads), tizimli chaqiruvlar (system calls) va xotira boshqaruvini amaliy jihatdan o'rganish hamda terminalda OT resurslarini boshqarish ko'nikmalarini shakllantirish.

**Kerakli vositalar:** Linux operatsion tizimi o'rnatilgan kompyuter yoki virtual mashina (masalan, Ubuntu/Debian), terminal.

---

## 1-qism. Tizimli chaqiruvlarni (System Calls) kuzatish

Nazariy qismda aytilganidek, foydalanuvchi rejimidagi dasturlar apparatga faqat tizimli chaqiruvlar orqali murojaat qiladi. Buni bevosita tekshiramiz.

**Amaliy qadamlar:**
1. Terminalni oching.
2. Odatiy `ls` buyrug'ining OT yadrosiga qanday tizimli chaqiruvlarni jo'natishini kuzatish uchun `strace` utilitasidan foydalanamiz:
   ```bash
   strace ls
   ```
3. Natijani tahlil qiling. Ekranda ko'plab qatorlar paydo bo'ladi. Ular orasidan quyidagi chaqiruvlarni topishga harakat qiling:
   - `execve` (dasturni ishga tushirish)
   - `openat` (fayl va kataloglarni ochish)
   - `read` (ma'lumot o'qish)
   - `write` (ekranga ma'lumot yozish/chiqarish)

**Vazifa (Topshiriq):** 
1. O'zingiz oddiy Python (`print("Salom, OT!")`) yoki Bash skripti yozing. 
2. Uni `strace python3 skript.py` (yoki `strace bash skript.sh`) orqali ishga tushiring.
3. Ekranga yozuv chiqaruvchi `write` tizimli chaqiruvini topib, o'sha qatorni hisobotga nusxalang va nima sodir bo'layotganini izohlang.

---

## 2-qism. Jarayonlar (Processes) bilan ishlash

Jarayon - bu bajarilayotgan dastur. Jarayonlarni kuzatish va boshqarish OT ning asosiy vazifalaridan biridir.

**Amaliy qadamlar:**
1. Tizimda ishlayotgan barcha jarayonlarni ko'rish uchun terminalda quyidagi buyruqni tering:
   ```bash
   ps aux
   ```
2. Jarayonlarni real vaqtda (interaktiv) kuzatish uchun `top` yoki `htop` buyrug'idan foydalaning (chiqish uchun `q` tugmasini bosing).
3. Yangi jarayon yaratamiz. Terminalda 60 soniya hech narsa qilmay uxlab turuvchi jarayonni fonda (background) ishga tushiring:
   ```bash
   sleep 60 &
   ```
4. Yaratilgan jarayonning PID (Process ID) raqamini qidirib toping:
   ```bash
   ps | grep sleep
   ```
5. Jarayonni majburiy to'xtatish (kill) uchun quyidagi buyruqni bering (`<PID>` o'rniga yuqorida aniqlangan raqamni yozing):
   ```bash
   kill -9 <PID>
   ```

**Vazifa (Topshiriq):** `top` buyrug'ini ishga tushiring. Protsessorni yoki xotirani eng ko'p band qilayotgan dastlabki uchta jarayonning nomini va PID raqamini yozib oling. Agar shu jarayonlardan biri qotib qolsa, uni to'xtatish uchun terminalda qanday buyruq bergan bo'lar edingiz?

---

## 3-qism. Oqimlar (Threads) bilan tanishuv

Oqimlar - bitta jarayon ichida birgalikda ishlaydigan kichik bajarilish oqimlari bo'lib, ular bitta xotirani bo'lishib ishlatadi.

**Amaliy qadamlar:**
1. Quyidagi oddiy Python kodini nusxalab `threads.py` nomli faylga saqlang:
   ```python
   import threading
   import time

   def worker(num):
       print(f"Oqim {num} ishlamoqda...")
       time.sleep(30)

   threads = []
   for i in range(5):
       t = threading.Thread(target=worker, args=(i,))
       t.start()
       threads.append(t)

   for t in threads:
       t.join()
   ```
2. Skriptni fonda ishga tushiring:
   ```bash
   python3 threads.py &
   ```
3. Uning PID raqamini toping (`ps aux | grep python`).
4. Shu jarayon ichidagi oqimlarni alohida ko'rish uchun quyidagi buyruqdan foydalaning:
   ```bash
   top -H -p <PID>
   ```
   *Siz bitta asosiy jarayon ichida 5 ta qo'shimcha ishchi oqim (jami 6 ta) ishlayotganini ko'rishingiz kerak.*

**Vazifa (Topshiriq):**
Jarayon va oqimni kuzatganingizdan so'ng xulosa qiling: Bitta dastur ichida bir nechta oqim yaratishning asosiy afzalligi nimada? Natijani isbotlash uchun `top -H` ekranidan skrinshot qilib hisobotga ilova qiling.

---

## 4-qism. Xotira holatini o'rganish

OT yadrosi operativ xotirani (RAM) va virtual xotirani (Swap) qanday boshqarayotganini ko'ramiz.

**Amaliy qadamlar:**
1. Tizimdagi bo'sh va band xotirani megabaytlarda ko'rish uchun:
   ```bash
   free -m
   ```
   *Bu yerda "Swap" (sahifalash / podkachka) hajmi ham ko'rinadi.*
2. Xotira bo'yicha batafsil statistikani yadroning `/proc` virtual fayl tizimidan o'qish mumkin:
   ```bash
   cat /proc/meminfo
   ```

**Vazifa (Topshiriq):** 
`cat /proc/meminfo` natijasidan quyidagi uchta parametrni topib, ularning qiymatini va nima ma'no anglatishini tushuntirib bering:
- `MemTotal:`
- `MemFree:`
- `SwapTotal:`

---
**Hisobot topshirish talablari:** 
Talaba har bir qism bo'yicha o'zi bajargan ishlarni tasdiqlovchi terminal natijalari (skrinshotlar) hamda "Vazifa (Topshiriq)" qismlarining yozma javoblarini bitta matnli hujjatga (PDF yoki Word) yig'ib topshirishi lozim.
