Xotira boshqaruvi (Memory management)




Download 0.49 Mb.
bet9/11
Sana15.06.2023
Hajmi0.49 Mb.
#73375
1   2   3   4   5   6   7   8   9   10   11
Bog'liq
kurs ishi. Pythonda nuqta chiziq va ranglar
kkk7, Aniq va tabiiy fanlar metodikasi, Reja Xaara bazislarida spektral analiz-fayllar.org, Sanoat korxonasida marketing faoliyatini tashkil etish. Reja 1 -fayllar.org, Mavzu. Xorijda ijtimoiy pedagogikaning rivojlanish tarixi, 23-24, maruza, 7. ALLAMOV (1), 1 1 Topshiriq EKOLOGIK MADANIYAT VA BARQAROR TARAQQIYOT ASOSLARI.docx tt, test, test 2, test 3, test 4, мустакил иш биоэкология озб
Xotira boshqaruvi (Memory management)
CPythondan hardware qadar orada abstraksiya qatlamlari mavjud. OS har doim applicationlar amal bajarishlari uchun fizik xotiradan joy ajratib virtual xotira yaratadi. Quyidagi to'q kulrang sohalar Python uchun mo'ljallangan xotiradir.

Cpythonning object allocatori object memory sohasidan xotira ajratish uchun javobgardir. Ushbu yashil object allocator soha asosiy mo'jiza yuz beradigon yerdir. U har doim pythonda yangi object yaratilayotganda yoki o'chirilayotganda ishga tushadi.
Pythonning source codiga berilgan izohlarda object allocatorga "umumiy malloc ustida ishlovchi va kichik hajmdagi blocklar uchun qulay" deyiladi. Bu yerda malloc C ning xotira boshqaruvi bibliotekasining funksiyasi hisoblanadi.
Hozir CPythonning xotira boshqaruvi strategiyasidagi 3 ta asosiy aspektga etibor beramiz.
Arena bu xotiradagi bir varoq deb hisoblangan Soha chegarasidir (page boundary). Soha chegarasi (page boundary) bu malum hajmdagi birlik deb hisoblangan va OS foydalanadigan xotiradagi bir bo'shliq. Python xotiradagi sohani 256 kb deb tasavvur qiladi.

Sohalar orasida havzalar (pool) lar mavjud, ular virtual xotirada 4 kb hisoblanadi. Kitob qiyosida oladigan bo'lsak bitta pool bir varoq degani. Har bir pool yanada kichikroq xotira blocklariga bo'linadi.
Pooldagi har bir blockning o'zining size class i bo'ladi. Bar bir size class mahsus block hajmini bildiradi, maxsus block hajmi so'ralayotgan bosh xotira hajmiga bog'liq, Pythonning source codida aynan ushbu izohlar qancha hajm egallaydigan object qanaqa blockga tushishi jadvali keltirilgan.

Misol uchun, 42 byte hajmdagi obyektni saqlamoqchi bo'lsa, python bizga 48 byteli blockga yo'naltiradi.
Poollar bir xil size class dan yaratilgan xotira blocklaridir. Har bir pool o'zida o'xshash size classga tegishli boshqa pool uchun double linked lists saqlaydilar (qo'shaloq ulanganlik havolasi). Shu usulda Python so'ralayotgan xotirani osongina bir nechta pool bo'ylab izlab topishi mumkin.
usedpools har bir xotira blocki uchun ishlatilgan lekin bo'sh joylari bor xotira blocklari listini o'zida saqlaydi. Poollar 3 ta holatda bo'lishlari mumkin: used, full, yoki empty. used ishlatilgan lekin bo'sh orin bor, full bo'sh o'rin yoq, empty ishlatilmagan.
freepools ro'yhati ishlatilmagan poollarni ro'yhatini o'z ichida saqlaydi, lekin qachon poollari ishlatilmasdan qoladi, yoki bo'shatiladi ?
Tasavur qiling, siz 8 byte lik xotira so'radingiz, biror usedpoolda uncha xotira topilmadi, shunda biz freepoollardan birortasini olamiz va unga 8 byte lik xotira blockini yaratib malumotni saqlaymiz, shunda ushbu pool usedpoolss listiga qo'shiladi, keyingi xotira allocationida ishlatiladi.
Yoki biror fullpool ning biror blocki bo'shasa, ushbu block boshqa kerak bo'lmaganligi sababli, u pool o'z size classiga qarab usedpoolsga qo'shiladi.

Diagrammada ko'rib turganingizdek poolning bo'sh xotira blocklariga pointeri qaratilgan bo'ladi. Bu sturkturaning ishlash prinsipida biroz yetishmovchilik bor. Pointer uch qatlam bo'yicha ishlaydi (arena, pool, block) va u haqiqatdan kerak bo'lmasa xotira blockini ishlatmaydi.
Poolning blocklarida 3 ta holat bo'ladi:
1   2   3   4   5   6   7   8   9   10   11




Download 0.49 Mb.

Bosh sahifa
Aloqalar

    Bosh sahifa



Xotira boshqaruvi (Memory management)

Download 0.49 Mb.