6-Mavzu. Jarayonlar va resurslar. Reja Resurslarni taqsimlash Jarayonlar bajarilishini rejalashtirish


Xotirani taqsimlashning asosiy usullari


Download 148.14 Kb.
bet2/4
Sana02.01.2022
Hajmi148.14 Kb.
#202039
1   2   3   4
Bog'liq
6-Mavzu. Jarayonlar va resurslar.

Xotirani taqsimlashning asosiy usullari


Xotirani taqsimlash jarayonida kompilyator til birliklariga xotira manzilini beradi, ularning o‘lchovini aniqlaydi, va birlikka hususiyatlar( atributlar) beradi. Til birligi atamasini ishlatish sababi shundaki, xotira faqatkina berilganlarga emas, balki programma bo‘limlariga ham taqsimlanadi.

Barcha programmalarni semantikasiga ko‘ra, programma bajarilish vaqtida xotira sohasi quyidagilarni saqlashga kerak bo‘ladi:



  • programma kodini;

  • programma ishiga kerak bo‘lgan berilganlarni;

  • hisob davrida unga kerak bo‘lgan tizimli programmalar kodi;

  • ishlash joriy holati to‘g‘risidagi yozuvlarni.



Taqsimlanayotgan xotira sohasi ikkita xususiyatga ega – bu xotiradan programmada foydalanish xususiyati va uni taqsimlash usuli xususiyati. Xotiradan foydalanish usuli bo‘yicha xotira soxasi global va lokal qismga bo‘linadi, taqsimlash usuli bo‘yicha statik va dinamik taqsimlashga bo‘linadi.

Xotirani taqsimlash eng sodda strategiya statik taqsimlashdir, unga ko‘ra kompilyator xotirani avtomatik ravishda statik sohalarga taqsimlaydi. Bu sohalarda taqsimlangan ob’ektlarni o‘lchovi hech qachan o‘zgarmaydi va ularga ko‘rsatadigan manzillar ham o‘zgarmaydi.

Faqat sohani boshlang‘ich manzili o‘zgarishi mumkin, bu ham bajarishdan oldin, programmani xotiraga yuklaganda bo‘ladi.

Agar ob’ektlarni joyi va o‘lchovi oldindan komprilyatsiya jarayonida ma’lum bo‘lmasa, dinamik taqsimlash strategiyasi qo‘llanadi. Dinamik taqsimlash strategiyasini bir nechta usul bilan tashkil qilish mumkin. Eng tarqalgan usullardan stek ko‘rinishda taqsimlash va ihtiyoriy ko‘rinishda taqsimlash ( “ko`cha”da taqsimlash)larni aytib o‘tish mumkin.

Stek dissiplinasida xotiradan stek uchun ma’lum joy ajratiladi, va xotira resursga ehtiyoj bo‘lganda stekdan joy ajratiladi, bunda stek qoidagiga ko‘ra ohirgi ajratilgan joy birinchi bo‘shatiladi.

Ihtiyoriy taqsimlash dissiplinasida hech qanday qoida yo‘q. Xotirani har qanday vaqtida egallash mumkin va kerak paytida bo‘shatish mumkin. Bunday amallar oshkor ravishda dasturchi tamondan yoki oshkormas ravishda, yani avtomatik kompilyator tamondan bajarilishi mumkin.

Strategiya va dissiplinani tanlash quyidagi kriteriyalarga asoslanadi:



  • xotirani boshlang‘ich taqsimlanish effektivligi;

  • “bo‘sh xotirani” statusini tiklash effektligi;

  • bo‘sh xotira maydonlarni yig‘ish effektligi.

Xotirani taqsimlashda manba ma’lumot sifatida programmani tahlil qilish jarayonida hosil bo‘lgan kompilyator jadvallari kiradi. Bu ma’lumotlar barcha fazalardan yig‘iladi, shu jumladan semantik tahlilda ham to‘ldiriladi. Ajratilgan programm ob’ektlariga nisbatan xotirani quyidagicha taqsimlash mumkin:

  1. Foydalanuvchi programm kodi, tizimli programmalar kodi, kiritish va chiqarish buferlari, statik xotira sohasida joylashadi va bunda statik taqsimlash strategiyasi ishlatiladi.

  2. Har hil berilganlar uchun:

    1. Global, statik, konstantalar, translyatsiya jarayonida yaratilgan ichki tizimlar, masalan polimorf sinflar uchun virtual funksiyalar jadvali, statik sohasida joylashadi va bunda statik taqsimlash strategiyasi ishlatiladi;

    2. Lokal o‘zgaruvchilarga ( masalan blok yoki funksiya ichida e`lon qilingan) dinamik taqsimlash strategiya qo‘llanadi va stek dissiplinasi ishlatiladi,

    3. Oshkor ravishda xotira ajratilayotgan o‘zgaruvchilarga (new va malloc funksiyalar orqali) va o‘lchovi o‘zgaradigan ob’ektlar uchun (STL bibliotekadagi turlash) ihtiyoriy dissiplinali dinamik taqsimlash strategiyasi qo‘llanadi, xotira “qismga” ajratiladi;

  3. Programma bajarish jarayonining joriy holatini, blok, funksiya va protseduralarni aktivlashgani to‘g‘risidagi ma’lumotlarni saqlashda, norekursiv blok yoki protseduralar uchun statik taqsimlash strategiyasi qo‘llanib fiksirlangan statik sohada xotira ajratiladi, rekursiv uchun dinamik taqsimlash strategiya qo‘llanib stek dissiplinasi ishlatiladi.

Protseduralar aktivlashganda , xotirada faktik parametrlar, lokal o‘zgaruvchilar, vaqtincha ishlatilgan o‘zgaruvchilar, qaytish manzili registrlar qiymati saqlanadi, protsedura bajarishini tugatgach bu ma’lumotlar tiklanadi yoki o‘chiriladi, ajratilgan xotira bo‘shatiladi.

Global xotira sohasi, programma bajarilishini boshlaganda, bir marta ajratiladi va programma ishini tamomlagunicha saqlanadi.

Lokal xotira sohasi, programma qismi (blok, funksiya, protsedura) ishni boshlaganda ajratiladi va tugatganda bo‘shatiladi. Lokal xotirani programm qismidan tashqarida ishlatib bo‘lmaydi.

Statik xotirani taqsimlash qiyinchilik tug‘dirmaydi. Chunki statik xotiradagi ob’etklarni o‘lchovi va turi ma’lum bo‘ladi.



Download 148.14 Kb.

Do'stlaringiz bilan baham:
1   2   3   4




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling