Kompyuter qanday ishlaydi
11-bob

Operatsion tizim

Apparat va ilovalar o'rtasida turadigan asosiy dastur: u yuklanadi, resurslarni taqsimlaydi, dasturlarni bir-biridan himoya qiladi va diskdagi bloklardan "fayl" yasaydi.

Apparat o'z-o'zidan hech narsa qila olmaydi — unga buyruq beradigan dastur kerak. Lekin har bir dastur disk, xotira, ekran bilan to'g'ridan-to'g'ri ishlaganida, tartibsizlik yuzaga kelardi: ikki dastur bir xil xotira joyiga yozib, bir-birini buzardi. Bu muammoni operatsion tizim (OS) hal qiladi. OS — apparat va ilovalar o'rtasida turadigan asosiy dastur. Mashhur OS'lar: Windows, macOS, Linux (serverlarning ~90% i), Android (Linux yadrosi asosida), iOS.

OS'ning uchta asosiy vazifasi bor: (1) resurslarni boshqarish — protsessor vaqti, xotira, disklarni dasturlar o'rtasida adolatli taqsimlash; (2) abstraksiya — apparatning murakkabligini yashirib, dasturlarga oddiy interfeys berish (masalan, "fayl" tushunchasi); (3) himoya — dasturlarni bir-biridan va tizimni xato yoki zararli dasturlardan himoya qilish.

11.1. Kompyuterning yuklanishi

Kompyuter yuklanmoqda t = 0.0 s GPU PSU 12 V 5 V 3.3 Power Good kuchlanish barqarorlashmoqda… CPU RESET ishlamoqda PC (keyingi buyruq): — rejim: — UEFI · SPI flesh · 32 MB 0xFFFFFFF0 · POST + bootloader qidirish Q-LED (POST) CPU DRAM VGA BOOT RAM16 GB DDR5 0x7C00 · bootloaderbo'sh 0x100000 · kernelbo'sh initramfs · drayverlarbo'sh systemd · PID 1bo'sh NVMe SSDGPT bo'limlari EFIGRUB1 MB /bootvmlinuz12 MB / ext4systemd480 GB
Har bosqich keyingisini RAM'ga yuklab, boshqaruvni unga beradi
QuvvatPOSTBootloaderKernelsystemdXulosa
Quvvat tugmasi bosildi. "Yoqish" ni bosing yoki pastga suring — sahna o'zi boshlanadi.
24-rasm. Kompyuterning yuklanish bosqichlari

Quvvat tugmasi bosilganda PSU barqaror kuchlanish hosil qilgach, ona plataga "Power Good" signalini yuboradi. Protsessor qayta o'rnatiladi (reset) va xotiraning belgilangan manzilidan birinchi buyruqni o'qiydi — bu manzil BIOS/UEFI flesh chipiga yo'naltirilgan. UEFI POST (yoqilishdagi o'z-o'zini tekshirish) jarayonini bajaradi: RAM, videokarta, disklarni tekshiradi. Agar biror narsa ishlamasa, signal tovushlari chiqaradi. So'ng u sozlamalarda ko'rsatilgan diskdan bootloaderni (Linux'da GRUB, Windows'da Windows Boot Manager) topib, RAM'ga yuklaydi va boshqaruvni unga beradi. Bootloader OS yadrosini RAM'ga yuklaydi. Yadro qurilmalarni ishga tushiradi, drayverlarni yuklaydi, birinchi jarayonni (Linux'da systemd) boshlaydi, u esa qolgan barcha xizmatlarni va nihoyat grafik interfeysni ishga tushiradi.

11.2. Yadro va himoya rejimlari

OS'ning markaziy qismi — yadro (kernel). U protsessorning maxsus imtiyozli rejimida (kernel mode) ishlaydi va barcha apparat resurslariga to'liq kirish huquqiga ega. Oddiy ilovalar esa foydalanuvchi rejimida (user mode) ishlaydi — ular apparatga to'g'ridan-to'g'ri murojaat qila olmaydi. Protsessorning o'zi bu cheklovni apparat darajasida nazorat qiladi. Ilova faylni o'qishi yoki tarmoqqa ma'lumot yuborishi kerak bo'lsa, u yadroga tizim chaqirig'i (system call) orqali murojaat qiladi. Node.js'dagi fs.readFile() oxir-oqibat Linux'ning open() va read() tizim chaqiriqlariga aylanadi.

user mode · ring 3 · imtiyozsiz kernel mode · ring 0 · apparatga to'liq kirish chegara — faqat syscall buyrug'i orqali o'tiladi, CPU nazorat qiladi bot.js · Node.js jarayoni · PID 2001 fs.readFile('config.json') → libc: read(fd=3, buf, 4096) kutmoqda… registrlar (syscall ABI) rax = — rdi = — rsi = — rdx = — CPU · imtiyoz darajasi (CPL) CPL 3 — ilova CPL 0 — yadro #GP xato: yo'q — syscall jadvali 0 · readsys_read() 1 · writesys_write() 2 · opensys_open() 3 · closesys_close() 60 · exitsys_exit() VFSfd 3 → inode 315 ext4inode 315 → blok 8192 kesh (page cache)? NVMe drayveri buyruq navbati DMA → bufer IRQ bo'sh NVMe SSD (apparat) kutmoqda blok 8192 · 4 KB o'qish ~80 µs
IlovasyscallYadroDrayverQaytishHimoya
bot.js faylni o'qimoqchi. Sahna o'zi boshlanadi.
25-rasm. Dasturiy ta'minot qatlamlari

11.3. Jarayonlar va rejalashtirish

Ishga tushirilgan dastur jarayon (process) deyiladi. Har bir jarayonning o'z xotira maydoni, ochiq fayllari va kamida bitta bajarilish oqimi (thread) bor. Kompyuteringizda bir vaqtda yuzlab jarayon ishlaydi, protsessor yadrolari esa bor-yo'g'i 4-16 ta. Qanday qilib? OS'ning rejalashtiruvchisi (scheduler) har bir jarayonga bir necha millisekundlik vaqt bo'lagi beradi, so'ng uni to'xtatib, keyingisiga o'tadi. Bu almashinuv (kontekst almashinuvi) shunchalik tez sodir bo'ladiki, barcha dasturlar bir vaqtda ishlayotgandek tuyuladi.

Rejalashtiruvchi (scheduler) · 5 jarayon, 2 yadro t = 0 ms Yadro 0 — bo'sh vaqt bo'lagi: 4 ms Yadro 1 — bo'sh vaqt bo'lagi: 4 ms Tayyor navbat (runqueue) Kutmoqda (I/O) taymer uzilishi · 250 Hz (har 4 ms) kontekst almashinuvlari: 0 PCB: registrlar, PC, ochiq fayllar saqlanadi
5 ta jarayon 2 ta yadroda: navbat, vaqt bo'lagi, I/O kutish
NavbatTanlashVaqt bo'lagiKutishXulosa
5 ta jarayon tayyor, yadrolar bo'sh. Sahna o'zi boshlanadi.
26-rasm. Jarayonning holatlari

Jarayon disk yoki tarmoqdan javob kutayotganda "kutish" holatiga o'tadi va protsessor vaqtini boshqalarga beradi. Node.js'ning asinxron modeli aynan shunga asoslangan: await fetch(...) yozganingizda, Node.js OS'ga so'rov yuboradi va javob kelguncha boshqa so'rovlarga xizmat qiladi. Shuning uchun bitta oqimli Node.js serveri minglab foydalanuvchiga xizmat qila oladi.

11.4. Virtual xotira

Har bir jarayon o'zini butun xotiraning yagona egasi deb "o'ylaydi": uning uchun manzillar 0 dan boshlanadi va juda katta maydon mavjud. Bu virtual xotira deyiladi. Aslida OS va protsessordagi MMU (xotirani boshqarish bloki) har bir virtual manzilni haqiqiy fizik manzilga o'giradi. Xotira 4 KB lik sahifalarga bo'lingan va OS har bir jarayon uchun sahifalar jadvalini yuritadi.

jadval RAM da CPU · jarayon PID 2001 virtual manzil (32 bit): — — sahifa raqami · 20 bit siljish · 12 bit VA = — PA = — MMU TLB — tarjimalar keshi (~1 takt) hit miss 0x00401 → 0x1F0 0x00402 → 0x1F1 — bo'sh — sahifalar jadvali (RAM da, ~100 takt) VPN → PFN · P (RAM da?) Fizik RAMfreymlar · 4 KB Swap (disk)~100 µs · RAM dan 1000× sekin sahifa 0x00405 · PID 2001 (kam ishlatilgan) sahifa 0x00210 · PID 1234 chrome
Virtual manzilTLBJadvalFizik manzilPage faultXulosa
Jarayon xotiraga murojaat qilmoqda. Sahna o'zi boshlanadi.
27-rasm. Virtual xotira: har bir dastur o'z manzil maydonini ko'radi

Bu yondashuvning afzalliklari: (1) izolyatsiya — bir jarayon boshqasining xotirasini ko'ra olmaydi, shuning uchun brauzerdagi bitta sahifa qulasa, boshqalari ishlashda davom etadi; (2) RAM'dan ko'proq xotira — kam ishlatiladigan sahifalar diskka (swap fayl) chiqariladi va kerak bo'lganda qayta yuklanadi; (3) qulaylik — dasturchi fizik manzillar haqida o'ylamaydi. Mashhur "Segmentation fault" xatosi — dastur o'ziga ajratilmagan manzilga murojaat qilganda MMU uni to'xtatishining natijasi.

11.5. Fayl tizimi

Disk aslida raqamlangan bloklarning (odatda 4 KB) katta ketma-ketligi. "Fayl" va "papka" tushunchalarini OS'ning fayl tizimi yaratadi. U har bir fayl haqida ma'lumotni (nomi, hajmi, yaratilgan sanasi, huquqlari va qaysi bloklarda joylashgani) maxsus tuzilmalarda saqlaydi. Linux'da bu tuzilma inode deyiladi. Mashhur fayl tizimlari: NTFS (Windows), ext4 (Linux), APFS (macOS), FAT32/exFAT (fleshkalar).

Yadro · VFS · ext4 yo'l: /home/muhammad/bot.js qidirilmoqda: — joriy inode: — tanlangan inode #— tur: — huquq: — hajm: — bloklar: — nom inode ichida YO'Q — nom katalog blokida saqlanadi inode jadvalihar fayl/katalog = 1 inode inode: tur, hajm, huquqlar, sana, ma'lumot qaysi bloklarda — ro'yxat ma'lumot bloklari · 4 KBdisk
Yo'lni tanlang — OS uni ildizdan boshlab qadam-baqadam bloklarga yechadi
ildiz /1-katalog2-katalogfayl inodema'lumotXulosa
open("/home/muhammad/bot.js") chaqirildi. Sahna o'zi boshlanadi.
28-rasm. Linux fayl tizimining daraxtsimon tuzilishi

Faylni o'chirganingizda, odatda faqat uning yozuvi o'chiriladi, ma'lumot bloklari esa "bo'sh" deb belgilanadi va ustiga yangi ma'lumot yozilgunicha saqlanib qoladi. Shuning uchun maxsus dasturlar o'chirilgan fayllarni ba'zan tiklay oladi.

Tekshirish: yuqoridagi test va 16, 17, 18-savollar