8.1 Operativ yaddaş
Operativ yaddaş (RAM, OZU) kompüterin yaddaş hücrələrinin massivindən ibarətdir, hər bir hücrənin unikal ünvanı var. Bu hücrələrdə müxtəlif tipli məlumatlar, məsələn, ədədlər, simvollar və göstəricilər saxlanıla bilər. Proqram icra olunarkən, məlumatlarını və təlimatlarını tez əldə etmək üçün bu yaddaşda yerləşdirir.
Yaddaş hücrələrinin nümunəsi:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 |
40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 |
50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 |
60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 |
70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 |
Hər bir hücrənin öz sıra nömrəsi var, buna yaddaş hücrəsinin ünvanı və ya sadəcə ünvan deyirlər. Əgər sizin kompüterinizin 8 GB yaddaşı varsa, onun 8 milyard belə hücrəsi var ki, orada nəsə faydalı saxlamaq olar.
Bitlər və baytlar
Hər bir hücrə bir bayt informasiya saxlaya bilər. Hər bir bayt 8 bit-dən ibarətdir və hər bir bit yalnız 0 və ya 1 ola bilər. Nümunə (müsbət tam ədədlər üçün):
Ədəd | Bit təqdimatı | Bayt-a yuvarlaqlaşdırılmış |
---|---|---|
0 | 0 | 00000000 |
1 | 1 | 00000001 |
100 | 1100100 | 01100100 |
1000 | 1111101000 | 00000011-11101000 |
1000 000 000 | 111011100110101100101000000000 | 00111011-10011010-11001010-00000000 |
Bir dəyişən nə qədər çox bayt yer tutursa, o qədər çox dəyər saxlaya bilər. Nümunə:
- 1 bayt — 256 unikal dəyər
- 2 bayt — 65 min unikal dəyər
- 3 bayt — 16 milyon
- 4 bayt — 4 milyard
8.2 Məlumatlar yaddaşda necə təqdim edilir
Verilənlərin tipləri və onların təqdimatı
Sayısal məlumatlar prosessor daxilində və yaddaşda
- Tam ədədlər: ikilik formada saxlanılır. Ölçüsü dəyişə bilər (1 bayt, 2 bayt, 4 bayt).
- Üzdəqiqli ədədlər: üzən nöqtəli formatda saxlanılır (məsələn, IEEE 754 formatı 4-bayt və 8-bayt ədədlər üçün).
x = 42 # Tam ədəd
y = 3.14 # Üzdəqiqli ədəd
Mühüm! Python-da int
və float
daxili tiplər tam siniflərdir, yəni sonsuz uzunluqlu ədədlərlə hesablamalar həyata keçirə bilərlər. Amma əgər siz elmi hesabatlar və ya süni intellekt üçün kitabxanalardan istifadə edirsinizsə, dediyim məlumat formatı ilə qarşılaşacaqsınız.
Simvol məlumatları kompüter yaddaşında
Simvollar və sətirlər yaddaşda bayt ardıcıllığı kimi saxlanılır. Məsələn, ASCII
kodlaşdırmasında hər simvol 1 bayt tutur, UTF-8
kodlaşdırmasında isə 1-dən 4 baytadək ola bilər.
Python 3.x-də sətirlərdə standart olaraq UTF-8
kodlaşdırmasından istifadə edilir, amma siz başqa formatda saxlanılmış mətnləri oxuya və ya şəbəkə vasitəsilə göndərə bilərsiniz.
Nümunə:
char = 'A' # Simvol
string = "Salam, dünya!" # Sətir
Python-da ayrıca simvollar üçün xüsusi bir tip yoxdur — onlar üçün də str
tipi istifadə edilir. Amma yaddaşda bu sətirlər simvol-simvol saxlanılır. Bir simvol adətən 1—4 bayt yer tutur.
Pointerlər
Pointerlər başqa yaddaş hüceyrələrinin ünvanlarını
saxlayırlar. Onlar proqramlara dinamik verilənlər strukturları ilə işləməyə və yaddaşı daha effektiv idarə etməyə imkan verir.
Nümunə:
list = [1, 2, 3, 4] # Siyahı
list_pointer = id(list) # Siyahının başlanğıcına pointer
8.3 Məlumatların operativ yaddaşda təqdim olunması nümunələri
1. Tam ədədlərin təqdimatı
Tam ədədlər yaddaşda ikilik ədəd (bitlər) formasında saxlanılır. Məlumatın növündən asılı olaraq onlar müxtəlif miqdarda bayt işğal edə bilər. Məsələn, int
adətən 4 bayt (32 bit) yer tutur.
Yaddaşda 42 ədədi bu formada olacaq:
00000000 | 00000000 | 00000000 | 00101010 |
2. Həqiqi ədədlərin (float növündə) təqdimatı
Həqiqi ədədlər (məsələn, float növü) yaddaşda üzən nöqtəli formatda saxlanılır, adətən IEEE 754
standartına uyğun olaraq. float
adətən 4 bayt (32 bit), double
isə 8 bayt (64 bit) yer tutur.
Vacib! Bunlar yaddaş və prosessorla əlaqəli standart məlumat növləridir. Python dilində float
növü geniş yayılmış double
növünə uyğun gəlir və 8 bayt yer tutur.
Yaddaşda 3.14 ədədi bu cür təqdim ediləcək:
01000000 | 01001000 | 11110110 | 01100110 |
3. Simvollarin və sətirlərin təqdimatı
Simvollar (məsələn, char növü) yaddaşda bayt ardıcıllığı kimi saxlanılır. Sətirlər simvollardan ibarət massivi təmsil edir. C/C++ dillərində sətirlər null bayt (\0) ilə bitir, lakin Python dilində bu belə deyil.
Hello
sətiri yaddaşda bu şəkildə təqdim ediləcək:
'H' | 'e' | 'l' | 'l' | 'o' |
Bu isə növbəti şəkildə sıfır və birlər kimi olacaq:
01001000 | 01100101 | 01101100 | 01101100 | 01101111 |
8.4 Dinamik yaddaşın adresləndirilməsi
Dinamik yaddaş proqram icra olunarkən, lazım olduqda ayrılır və sərbəst buraxılır. Python-da yaratdığınız bütün obyektlər bu yaddaşda yaradılır.
Bu yaddaş 2 növə bölünür:
Heap: Dinamik obyektlərin ayrıldığı yaddaş sahəsi. Bu yaddaşı idarəetmə ayrılma funksiyaları (məsələn, malloc C-də) və sərbəst buraxma funksiyaları (məsələn, free C-də) vasitəsilə həyata keçirilir.
Stack: Funksiya çağırışının və lokal dəyişənlərin saxlandığı yaddaş sahəsi. Yaddaş avtomatik olaraq funksiyaya daxil olarkən və onu tərk edərkən ayrılır və sərbəst buraxılır.
Yenə də Python dilində buna misal gətirə bilmirəm, çünki o, belə əməliyyatlar üçün çox yüksək səviyyəlidir. Buna görə C dilindən bir misal gətirirəm:
// 10 tam ədəddən ibarət massiv üçün dinamik yaddaşın ayrılması
int *dynamic_var = (int *)malloc(sizeof(int) * 10);
// Yaddaşın sərbəst buraxılması
free(dynamic_var);
Yaddaşı adresləndirmə — yaddaş hüceyrələrinin hər birinə unikal adres təyin etmə prosesidir. Hər bir adres yaddaşda xüsusi yerə işarə edir, hansı ki, məlumat və ya təlimatlar saxlaya bilər.
Adresləndirmə növləri
Fiziki adresləndirmə: yaddaş hüceyrələrinin fiziki adreslərinə birbaşa giriş. Aparat vasitəsilə idarə olunur (məsələn, yaddaş idarəedici ilə).
Virtual adresləndirmə: yaddaşın idarəetmə mexanizmini istifadə edir, məsələn, səhifələnmiş yaddaş və ya seqmentli yaddaş, proseslərə izolyasiya olunmuş və qorunan adres sahəsi təmin etmək üçün.
GO TO FULL VERSION