Segmentatsiya. 1970-larning oxirida minikompyuterlar 16-bitli 64-kilobaytli manzil chekloviga qarshi ishladilar, chunki xotira arzonlashdi. PDP-11 kabi ba'zi minikompyuterlar murakkab banklarni almashtirish sxemalaridan foydalangan yoki vax digital kompaniyasi uchun 32-bit manzili va ma'lumotlarini to'g'ridan-to'g'ri boshqarishi mumkin bo'lgan juda qimmat protsessorlarni qayta ishlagan. ORIGINAL 8086, oddiy 8080 mikroprotsessor asosida ishlab chiqilgan va asosan juda kichik va arzon kompyuterlar va boshqa maxsus qurilmalar uchun mo'ljallangan, buning o'rniga faqat 4 bit xotira manzili kengligini oshirgan oddiy segmentli registrlarni qabul qildi. Agar siz 64-kilobayt manzilini 16 bilan ko'paytirsangiz, 20-bit manzili jami bir megabayt (1 048 576 bayt) ga murojaat qilishi mumkin, bu esa o'sha paytda kichik kompyuter uchun juda katta miqdor edi. Segmentli registrlar kontseptsiyasi turli xil vazifalarga tezkor o'tish uchun segmentli registrlardan foydalangan ko'plab asosiy ramkalar uchun yangi emas edi. Amalda, x86 da juda ko'p tanqidga uchragan dastur bo'lib, u ko'plab umumiy dasturiy vazifalar va kompilyatorlarni murakkablashtirdi. Shu bilan birga, arxitektura tez orada 32-bit linear manzildan foydalanishga ruxsat berdi (80386-dan 1985-yil oxirida boshlangan), lekin asosiy ishtirokchilar (microsoft kabi) 16-bit tizimlarini aylantirish uchun bir necha yil kerak bo'ldi. Shunday qilib, 80386 (va 80486) yillar davomida asosan tez (lekin hali ham 16-bit) 8086 sifatida ishlatilgan.
Ma'lumotlar va kod "yaqin" 16-bit segmentlarida 64 kb umumiy manzil maydoni 1 mb doirasida boshqarilishi mumkin yoki kompilyator 32-bit segmentini ishlatib," uzoq " rejimda ishlashi mumkin: ofset juftlari 1 mb ga etadi. 1980-yillarning o'rtalariga kelib, bu juda cheklangan omil bo'lib chiqdi, rivojlanayotgan kompyuter bozorida ishladi va eski 8008, 8080, 8085 va Z80 dasturlarini yangi protsessorga o'tkazishni juda osonlashtirdi. 1985 yil mobaynida segmentli manzillashning 16-bitli modeli 32-bitli 386-bitli ofset registrlarini joriy etish bilan samarali hisobga olingan.
Haqiqiy rejimda segmentatsiya segmentning manzilini chap tomonga 4 bitga almashtirish va oxirgi 20-bit manzilini olish uchun ofset qo'shish orqali erishiladi. Misol uchun, agar DS - A000H va SI-5677H bo'lsa, ds:si mutlaq DS × 10H + SI = A5677H manzilini ko'rsatadi. Shunday qilib, haqiqiy rejimdagi umumiy manzil maydoni 220 bayt yoki 1 mb bo'lib, bu 1978 yil uchun juda ta'sirli raqam. Barcha xotira manzillari segment va ofsetdan iborat; har bir kirish turi (kod, ma'lumotlar yoki stack) standart segment registriga ega (ma'lumotlar uchun ro'yxatdan o'tish odatda ds, kod uchun cs va stack uchun ss). Ma'lumotlarga kirish uchun segment registrlari to'rtta segmentli registrlardan foydalanish uchun aniq ko'rsatilishi mumkin (segmentni bekor qilish prefiksi yordamida).
Ushbu sxemada ikki xil juftlik segment / ofset bitta mutlaq pozitsiyani ko'rsatishi mumkin. Shunday qilib, agar DS A111H bo'lsa va SI 4567H bo'lsa, ds:si yuqoridagi kabi bir xil A5677H ni ko'rsatadi. Ushbu sxema bir vaqtning o'zida to'rtta segmentdan ortiq foydalanishni imkonsiz qiladi. CS va SS dasturning to'g'ri ishlashi uchun juda muhimdir, shuning uchun faqat ds va es dasturdan tashqaridagi ma'lumotlar segmentlarini (yoki, aniqrog'i, joriy bajariladigan dastur segmentidan tashqarida) yoki stackni ko'rsatish uchun ishlatilishi mumkin.
80286 da kiritilgan xavfsiz rejimda segment registri endi segmentning boshlang'ichining jismoniy manzilini o'z ichiga olmaydi, lekin segmentning identifikatori deb ataladigan tizim darajasidagi strukturani ko'rsatadigan "selektor" ni o'z ichiga oladi. Segmentning identifikatori segmentning boshlanishi, segment uzunligi va ushbu segmentga kirish huquqlarining jismoniy manzilini o'z ichiga oladi. Ofset segmentning uzunligi bo'yicha tekshiriladi va ofset segmentdan tashqarida joylashgan joylarga tegishli bo'lib, bu istisno keltirib chiqaradi. Segment ichidagi joylarga tegishli joy almashinuvi segmentning boshlang'ich jismoniy manzili bilan birlashib, ushbu ofsetga mos keladigan jismoniy manzilni olish uchun.
Segmentlangan belgilar kompilyatorni dasturlash va rivojlantirishni qiyinlashtirishi mumkin, chunki yaqin va uzoq masofali ko'rsatkichlardan foydalanish ishlashga ta'sir qiladi.
Do'stlaringiz bilan baham: |