Kompyuterni tashkillashtirish


-§ Birlashtiruvchi xotira


Download 460.14 Kb.
bet8/8
Sana07.05.2023
Hajmi460.14 Kb.
#1439922
1   2   3   4   5   6   7   8
Bog'liq
koputer tashkellashtirish

2.2-§ Birlashtiruvchi xotira
Kerakli sahifaga mos keladigan ramka raqamini izlash ko'p darajali sahifa jadvalida asosiy xotiraga bir nechta murojaatlarni talab qiladi, shuning uchun ko'p vaqt talab etiladi. Ba'zi hollarda bunday kechikish qabul qilinishi mumkin emas. Tezlashtirilgan qidiruv muammosi kompyuter arxitekturasi darajasida hal etiladi.
Mahalliy mulkka ko'ra, dasturlarning aksariyati bir muncha vaqt uchun juda oz sonli sahifalarga aylanadi, shuning uchun sahifa jadvalining faqat kichik qismi faol ishlatiladi.
Tezlashtirish muammosini tabiiy hal qilish-virtual sahifalarni jismoniy sahifalarga murojaat qilmasdan ko'rsatish uchun kompyuterni apparat qurilmasi bilan ta'minlash, ya'ni sahifa jadvalining kerakli qismini saqlaydigan kichik, tezkor Kesh xotiraga ega bo'lish. Ushbu qurilma assotsiativ xotira deb ataladi, ba'zan esa tarjima qidirish buferini (tarjima lookaside buffer - TLB) ishlatadi.
Assotsiativ xotirada bitta jadval yozuvi (bitta kirish) bitta virtual sahifa haqida ma'lumotni o'z ichiga oladi: uning atributlari va unda joylashgan ramka. Ushbu maydonlar sahifa jadvalidagi maydonlarga to'liq mos keladi.
Assotsiativ xotira faqat sahifa jadvalining ba'zi yozuvlarini o'z ichiga olganligi sababli, TLBDAGI har bir yozuv virtual sahifa raqami bo'lgan maydonni o'z ichiga olishi kerak. Xotira assotsiativ deb ataladi, chunki u ko'rsatilgan virtual sahifaning raqamini ushbu kichik jadvalning barcha satrlarida tegishli maydon bilan bir vaqtning o'zida taqqoslaydi. Shuning uchun bunday xotira juda qimmat. Kerakli qiymatga mos keladigan virtual sahifa maydonida sahifa raqami mavjud. 8 dan 4096 gacha bo'lgan TLBDAGI yozuvlarning odatiy soni. Assotsiativ xotiradagi yozuvlar sonining o'sishi asosiy xotira keshining hajmi va bitta buyruq bajarilganda xotiraga kirishlar soni kabi omillarni hisobga olgan holda amalga oshirilishi kerak.
Assotsiativ xotira mavjudligida xotira menejerining ishlashini ko'rib chiqing.
Birinchidan, virtual sahifani jismoniy ko'rinishda ko'rsatish haqida ma'lumot assotsiativ xotirada so'raladi. Agar kerakli yozuv topilsa - har bir narsa yaxshi, imtiyozni buzish hollari bundan mustasno, agar xotira so'rovi rad etilsa.
Assotsiativ xotirada kerakli yozuv bo'lmasa, displey sahifa jadvali orqali amalga oshiriladi. Assotsiativ xotiradagi yozuvlardan biri sahifa jadvalidan olingan yozuv bilan almashtiriladi. Bu erda an'anaviy keshni almashtirish muammosiga duch kelamiz(ya'ni Keshdagi yozuvlarning qaysi biri o'zgartirilishi kerak). Assotsiativ xotira dizayni yozuvlarni yangi yozuvlarni kiritishda eski yozuvlardan qaysi biri o'chirilishi haqida qaror qabul qilish mumkin bo'lgan tarzda tashkil qilishi kerak.
Qidiruv umumiy soniga nisbatan assotsiativ xotirada sahifa raqamini muvaffaqiyatli qidirish soni " hit " (tasodif) nisbati (nisbati, nisbati) deb ataladi. Ba'zan "keshni urish foizi"atamasi ham ishlatiladi. Shunday qilib, hit ratio assotsiativ xotira yordamida amalga oshirilishi mumkin bo'lgan aloqalarning bir qismidir. Xuddi shu sahifalarga murojaat qilish hit nisbatini oshiradi. Hit nisbati qanchalik katta bo'lsa, ramdagi ma'lumotlarga kirish uchun o'rtacha vaqt kamroq bo'ladi.
Zamonaviy operatsion tizimning juda maqbul ishlashi assotsiativ xotiradan foydalanish samaradorligini isbotlaydi. Assotsiativ xotirada ma'lumotlarni topish ehtimoli yuqori bo'lgan qiymat ushbu ob'ektiv xususiyatlarning mavjudligi bilan bog'liq: mekansal va vaqtinchalik joylashuv.
Xotira boshqaruvi operatsion tizimlarning ishlashida markaziy jihatdir. Dasturlash va tizim boshqaruvi sohasiga asosiy ta'sir ko'rsatadi. Bir nechta keyingi postlarda men xotira bilan bog'liq masalalarni ko'rib chiqaman. E'tibor amaliy jihatlarga qaratiladi, ammo ichki qurilmaning tafsilotlari e'tibordan chetda qolmaydi. Ushbu tushunchalar juda keng tarqalgan, lekin asosan Linux va Windows misolida x86-32 kompyuterida ishlaydi. Birinchi post foydalanuvchi jarayonlari xotirasini tashkil etishni tasvirlaydi.

Ko'p vazifali operatsion tizimning har bir jarayoni o'z "Sandbox"da amalga oshiriladi. Ushbu qum qutisi 32-bit xavfsiz rejimida har doim 4 gigabaytga teng bo'lgan virtual manzil maydoni. Virtual makon va jismoniy xotira o'rtasidagi yozishmalar sahifa jadvali (sahifa jadvali) bilan tavsiflanadi. Yadro jadvallarni yaratadi va to'ldiradi va agar kerak bo'lsa, protsessor ularga murojaat qiladi. Har bir jarayon jadvallar majmui bilan ishlaydi. Bir muhim nuqta bor-virtual qabul qilish kontseptsiyasi barcha dasturiy ta'minotga, shu jumladan yadroga ham tegishli. Shuning uchun u virtual manzil maydonining bir qismini saqlab qoladi (kernel space deb ataladi).


Bu, albatta, yadro bu joyni egallaydi degani emas, faqat ushbu manzillar oralig'i yadro tanlovi bo'yicha jismoniy manzil maydonining har qanday qismini almashtirish uchun ishlatilishi mumkin. Kernel space-ga mos keladigan xotira sahifalari sahifa jadvallarida faqat imtiyozli kod uchun (ring 2 yoki undan ko'p imtiyozli) mavjud. Ushbu sahifalarga foydalanuvchi kodi rejimidan kirishga urinayotganda page fault hosil bo'ladi. Linuxda kernel space har doim jarayonning xotirasida mavjud va turli jarayonlar yadro makonini jismoniy xotiraning bir xil maydoniga aylantiradi. Shunday qilib, kod va yadro ma'lumotlari, agar kerak bo'lsa, har doim mavjud uzilish yoki tizim qo'ng'iroqlarini qayta ishlash. Aksincha, user mode space-da ishlab chiqarilgan RAM har bir kontekstni o'zgartirganda o'zgaradi.

Rasmdagi ko'k rang jismoniy xotira joylariga mos keladigan virtual manzil maydonining maydonlarini belgilaydi — oq rang-hali foydalanilmagan joylar. Ko'rib turganingizdek, Firefox virtual manzil maydonining ko'p qismini ishlatgan. Biz hammamiz bu dasturning afsonaviy ochko'zligi haqida RAM haqida bilamiz. Rasmdagi ko'k chiziqlar dasturning xotira segmentlari, masalan, qoziq (heap), Stack va boshqalar. Shuni esda tutingki, bu holda segmentlar ostida biz doimiy manzillar oralig'ini nazarda tutamiz. Bu Intel protsessorlarida segmentatsiyani tavsiflashda gapiradigan segmentlar emas. Yaxshiyamki, Linuxda xotira jarayonini tashkil etishning standart sxemasi:va boshqalar. Shuni esda tutingki, bu holda segmentlar ostida biz doimiy manzillar oralig'ini nazarda tutamiz. Bu Intel protsessorlarida segmentatsiyani tavsiflashda gapiradigan segmentlar emas. Yaxshiyamki, Linuxda xotira jarayonini tashkil etishning standart sxemasi:

Uzoq vaqt oldin, kompyuter texnikasi hali ham bolaligida bo'lganida, segmentlarning dastlabki virtual manzillari mashinaning deyarli barcha jarayonlari uchun bir xil edi. Shuning uchun zaifliklarni masofadan boshqarish ancha osonlashdi. Ekspluatatsiya odatda mutlaq manzillardagi xotiraga, masalan, stackdagi ba'zi manzillarga, kutubxona funktsiyasi manziliga va shunga o'xshash narsalarga murojaat qilish kerak. Uzoq hujumni amalga oshirishni rejalashtirayotgan hacker dasturning segmentlarini turli mashinalarda xotirada joylashtirish bir xil bo'lishiga qarab, ko'r odamga murojaat qilish uchun manzillarni tanlashi kerak. Va, albatta, bir xil bo'lsa, odamlar Hack bo'ladi. Shu sababli, jarayonning manzil maydonida segmentlarning joylashishini randomizatsiya qilish mexanizmi mashhurlikka erishdi. Linux tasodifiy joy suyakka, memory mapping uchun segment, va vayronaga-ularning boshlang'ich manzili ofset qo'shib hisoblab chiqilgan. Afsuski, 32-bitli makon juda katta emas va randomizatsiyaning samaradorligi ma'lum darajada kamayadi.
User mode space-ning yuqori qismida Stack segmenti joylashgan. Eng dasturlash tillari mahalliy o'zgaruvchilar va dalillarni saqlash uchun foydalanish, vazifaga uzatiladi. Funktsiya yoki usulning chaqiruvi so'zda suyakka joylashtirishga olib keladi. Stack ramka. Funktsiya nazoratni qaytarganda, shisha ramka yo'q qilinadi. Stack juda sodda tarzda tashkil etilgan-ma'lumotlar "oxirgi kelgan — birinchi xizmat" (LIFO) printsipiga muvofiq qayta ishlanadi. Shuning uchun, suyakka mazmunini kuzatib borish uchun murakkab nazorat tuzilmalari kerak emas – faqat suyakka yuqori ko'rsatkich. Ma'lumotlarni to'pga qo'shish va ularni olib tashlash – tez va aniq belgilangan operatsiya. Bundan tashqari, Stack segmentining bir xil sohalarini qayta ishlatish, odatda, protsessor keshida bo'lishiga olib keladi, bu esa kirishni yanada tezlashtiradi. Jarayonning bir qismi sifatida har bir deliryum o'z Stack bilan ishlaydi.
Stack segmenti uchun ajratilgan joy qo'shilgan ma'lumotlarga mos kelmasligi mumkin. Natijada, page fault hosil bo'ladi, qaysi Linux funktsiyasi tomonidan qayta expand_stack (). Acct_stack_growth (), suyakka segmentini oshirish qobiliyatini tekshirish uchun mas'ul bo'lgan — bu, o'z navbatida, boshqa vazifasini sabab bo'ladi. Agar Stack segmentining hajmi rlimit_stack sobit qiymatidan (odatda 8 MB) kichik bo'lsa, u quriladi va dastur hech narsa sodir bo'lmagani kabi amalga oshiriladi. Bu standart mexanizm bo'lib, u orqali oqim segmentining hajmi ehtiyojga qarab oshadi. Agar suyakka (to'zg'itib to'zg'itib) sodir bo'ladi, va dastur signal Segmentation Fault yuboriladi suyakka segment maksimal kesib hajmini erishish bo'lsa, ammo,. Stack segmenti kerak bo'lganda ko'payishi mumkin, lekin unda mavjud bo'lgan Stack tuzilishi kichikroq bo'lsa ham, hech qachon pasaymaydi. Federal byudjet kabi, Stack segmenti faqat o'sishi mumkin.

Dinamik Stack kengaytmalari - "emlanmagan" xotira maydoniga murojaat qilish haqiqiy operatsiya deb hisoblanishi mumkin bo'lgan yagona holat. Boshqa har qanday murojaat Page fault-ga, keyin esa Segmentation Fault-ga olib keladi. Ba'zi ishlatiladigan joylar faqat o'qish deb etiketlanadi va ularga murojaat qilish ham Segmentation Faultga olib keladi.

Stack ostida Memory mapping uchun segment mavjud. Yadro ushbu segmentni fayl tarkibini (xotirada ko'rsatish) uchun ishlatadi. Har qanday dastur ushbu funksiyadan mmap() (mmap chaqiruvini amalga oshirish tavsifiga havola) yoki Windows-da CreateFileMapping() / MapViewOfFile() orqali foydalanishi mumkin. Fayllarni xotiraga ko'rsatish qulay va yuqori samarali fayl i / u usuli bo'lib, masalan, dinamik kutubxonalarni yuklab olish uchun ishlatiladi. Anonim displeyni xotiraga (anonymous memory mapping) amalga oshirish imkoniyati mavjud, natijada biz hech qanday fayl ko'rsatilmagan maydonni olamiz va buning o'rniga dastur ishlaydigan turli xil ma'lumotlarni joylashtirish uchun ishlatiladi. Agar Linuxda malloc () yordamida katta xotira blokini tanlashni talab qilsangiz, unda xotirani qoziqda ta'kidlash o'rniga, standart C kutubxonasi anonim displey mexanizmidan foydalanadi. Bu holda "katta" so'zi baytdagi qiymatni MMAP_THRESHOLD sobit qiymatidan katta degan ma'noni anglatadi. Odatiy bo'lib, bu qiymat 128 kb ni tashkil qiladi va qo'ng'iroq orqali nazorat qilinishi mumkin mallopt().

Aytgancha, qoziq haqida. Bu manzil kosmik jarayoni bizning ta'rifi keyingi keladi. Stack kabi, dastur davomida xotira ajratish uchun bir guruh ishlatiladi. Stackdan farqli o'laroq, uyumda ajratilgan xotira ushbu xotira ajratilishiga olib keladigan funktsiya tugagandan so'ng davom etadi. Ko'pgina tillar uyumda xotira boshqaruvini ta'minlaydi. Shunday qilib, tilning yadrosi va muhiti qo'shimcha xotiraning dinamik ravishda ajratilishini birgalikda amalga oshiradi. C tilida, uyum bilan ishlash interfeysi malloc () funktsiyalarining oilasi bo'lib, Garbage collection-ni qo'llab-quvvatlaydigan tillarda C # kabi asosiy interfeys yangi operator hisoblanadi.

Agar qoziqning joriy hajmi talab qilingan xotira hajmini ajratishga imkon beradigan bo'lsa, unda yadrolarni jalb qilmasdan faqat bitta ish muhiti yordamida ajratish mumkin. Aks holda, funktsiya malloc () brk tizimi qo'ng'iroq foydalanadi () zarur qoziq oshirish uchun (BRK qo'ng'iroq amalga oshirish ta'rifi uchun mos yozuvlar). Uydagi xotira boshqaruvi murakkab algoritmlarni hal qilish uchun noan'anaviy vazifadir. Ushbu algoritmlar bizning dasturlarimizda oldindan aytib bo'lmaydigan va xaotik xotira ajratish sharoitida yuqori tezlik va samaradorlikka erishishga intiladi. Uydagi xotira ajratish uchun har bir so'rov uchun sarflangan vaqt juda farq qilishi mumkin. Ushbu muammoni hal qilish uchun Real vaqtda tizimlar maxsus xotira allocatorlaridan foydalanadi. Bir guruh, masalan, rasmda tasvirlangan qismlarga ham ta'sir qiladi:

Nihoyat, biz jarayonning manzil maydonining pastki qismida joylashgan segmentlarga erishdik: BSS, ma'lumotlar segmenti (ma'lumotlar segmenti) va kod segmenti (matn segmenti). BSS va data segmenti C da manba kodidagi statik o'zgaruvchiga mos keladigan ma'lumotlarni saqlaydi. Farqi shundaki, BSS ma'lumotlar saqlanadi, mos bo'lmagan uninitialized o'zgaruvchilar, kimning qiymatlari aniq manba kodi ko'rsatilgan emas (aslida, ob'ektlar bor saqlanadi, o'zgaruvchining deklaratsiyasini yaratish yoki aniq nol qiymatini bildiradi, yoki qiymati dastlab belgilangan emas, va linkuemyh fayllar bilan bir xil umumiy belgilar yo'q, nol bo'lmagan qiymat bilan. – taxminan. tarjima.). BSS segmenti uchun xotirada anonim ekran ishlatiladi, ya'ni ushbu segmentda hech qanday fayl mavjud emas. C-dagi manba faylida int cntActiveUsers-dan foydalansangiz, tegishli ob'ekt uchun joy BSS-da ajratiladi.

Bssdan farqli o'laroq, ma'lumotlar segmenti manba kodida nol bo'lmagan qiymat bilan boshlangan statik o'zgaruvchilar deklaratsiyasiga mos keladigan narsalarni saqlaydi. Ushbu xotira segmenti anonim emas-dasturning tasvirining bir qismi unga mos keladi. Shunday qilib, agar biz cntworkerbees = 10 static int dan foydalansak, tegishli ob'ekt uchun joy data segmentida ajratiladi va 10 qiymatini saqlaydi. Ma'lumotlar segmenti faylni ko'rsatadi-da, deb atalmish "xususiy mapping" (xususiy xotira mapping). Bu shuni anglatadiki, ushbu segmentdagi ma'lumotlar o'zgarishi tegishli faylning mazmuniga ta'sir qilmaydi. Shunday bo'lishi kerak, aks holda global o'zgaruvchilar uchun qiymatlarni belgilash diskda saqlangan faylning mazmunini o'zgartirishga olib keladi. Bunday holda, bu kerak emas!


Ko'rsatkichlar bilan hamma narsa biroz murakkab. Bizning diagrammalarimizdagi misolda gonzo o'zgaruvchiga mos keladigan ob'ektning mazmuni 4 baytli manzildir – ma'lumotlar segmentida joylashgan. Lekin chiziq, a pointer bilan mos yozuvlar, ma'lumotlar segmentida tushib bo'lmaydi. String kod segmentida bo'ladi, qaysi faqat o'qish uchun mavjud va butun kodni va bunday kichik narsalarni saqlaydi, masalan, string literalleri sifatida (aslida, chiziq bo'limda saqlanadi .olib boriladigan kodni o'z ichiga olgan boshqa bo'limlar bilan birgalikda, ma'lumotlar kodini ijro etish / o'qish huquqi bilan xotiraga Yuklangan segment sifatida qaraladigan rodata. tarjima.). Kod segmentida executable faylning bir qismi ham mavjud. Agar sizning dasturingiz matn segmentiga kirishga harakat qilsa, u holda segmentatsiya Fault ishlaydi. Bu "muhim" belgilar bilan kurashishga imkon beradi, garchi ular bilan kurashishning eng yaxshi usuli S dan foydalanmaslikdir.:

Fayl tarkibini /proc/pid_of_process/maps-ni o'qib, jarayon xotira maydonlaridan qanday foydalanishni ko'rishimiz mumkin. Segmentning mazmuni turli sohalardan iborat bo'lishi mumkinligini unutmang. Misol uchun, memory mapping-da ishlaydigan har bir dinamik kutubxona segmenti o'z maydoniga ega bo'lib, kutubxona BSS va data segmentlari uchun joylarni ajratish mumkin. Keyingi lavozimda "mintaqa"so'zi nimani anglatishini tushuntiramiz. Shuni yodda tutingki, ba'zan odamlar" Data segment " deb nomlanadi, bu ma'lumotlar + BSS + heap ostida.
Siz ikkilik bajariladigan tasvirlarning mazmunini ko'rish uchun nm va objdump dasturidan foydalanishingiz mumkin: belgilar, ularning manzillari, segmentlari va boshqalar.nihoyat, ushbu postda tasvirlangan narsalar Linuxda bir necha yillar davomida ishlatilgan "moslashuvchan" jarayon xotirasi tashkiloti (moslashuvchan xotira tartibi) deb ataladi. Ushbu sxema rlimit_stack sobit qiymatini aniqlaganimizni ko'rsatadi. Bunday bo'lmasa, Linux so'zda ishlatiladi. rasmda tasvirlangan klassik tashkilot:

Bu jarayon xotira tashkil etish haqida kurs ishimiz yakunlandi. Quyidagi postda biz yadro tasvirlangan xotira maydonlarining o'lchamlarini qanday kuzatayotganini ko'rib chiqamiz. Bundan tashqari, fayllarni o'qish va yozish bilan bog'liq bo'lgan va xotiradan foydalanishni tasvirlaydigan raqamlar nimani anglatishini aniqlash masalasiga ham to'xtalamiz.


Xulosa
Kursning nazariy qismida zamonaviy operatsion tizimlarda xotira boshqaruv tizimini yaratish mafkurasini ko'rib chiqdik.
Amaliy qismda biz o'zgaruvchan uzunlikdagi sahifalar bilan RAM manzil maydonini tuzishning vizual modelini dasturiy ta'minotni amalga oshirishni ko'rib chiqdik. Qurilgan model siz manzil maydoni parametrlarini (uning hajmi) va tuzilishi parametrlarini belgilash imkonini beradi (maksimal sahifa hajmi va SB generator, ajratish ishlatiladigan). Bundan tashqari, yaratilgan model, sahifaning ichidagi joy o'zgarishining qiymatiga ko'ra, asl tuzilgan manzil maydonida manzilni topishga imkon beradi.


Foydalanilgan adabiyotlar ro’yhati:

  1. Операционные системы: Учебник для вузов. 2-е изд. / А.В. Гордеев. - СПб.: Питер, 2011. - 416 с.

  2. Эффективное администрирование. Ресурсы Windows Server 2010, Windows Server: Пер. с англ. - М.: Изд-во «Русская Редакция» / В.В. Мельников СПб.: БХВ - Петербург, 2009. - 768 с.

  1. Эффективная работа: Windows - Сулацкая И.М.СПб.:Питер, 2008. – 1069

  2. library.ziyonet.uz

Download 460.14 Kb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8




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