Bölüm 11 Korumali Mod

Download Report

Transcript Bölüm 11 Korumali Mod

Mikroişlemcilerin Farklı Çalışma
Modları
(Intel İşlemcilerinde Korumalı Mod)
Mikroişlemciler ve Mikrobilgisayarlar
1
Intel İşlemcilerin Tarihsel Gelişimleri
Yıl
Mikroişlemci Fiziksel Bellek Alanı
Yazmaç Uzunluğu
1974
8080
64K
8
1977
8085
64K
8
1978
8086
1 MB
16
1979
8088
1 MB
16
1980
8096
8K (İçsel)
16
1981
80186
1 MB
16
1981
80188
1 MB
16
1982
80286
16 MB
16
1985
80386 DX
4 GB
32
1987
80386 SL
32 MB
32
1988
80386SX
16 MB
32
1989
80486DX
4GB
32
1991
80486SX
4 GB
32
1994
Pentium
4 GB
32
Mikroişlemciler ve Mikrobilgisayarlar
2
İlk kişisel bilgisayarlar ve DOS işletim sistemi 8086’lar zamanında
tasarlandığı için Intel sonraki modellerinde geriye doğru uyumu sürekli
olarak korumuştur.
Intel sonraki modellerinde geriye doğru uyumu koruyabilmek için
işlemciyi çeşitli çalışma modlarına ayırmıştır.
32 bitlik bir Pentium işlemci istendiği taktirde gerçek modda (real mode)
çalıştırılabilir. Bu durumda işlemci bir 8086 gibi çalışmış olacaktır.
Veya korumalı modda (protected mode) çalıştırılarak işlemcinin bütün
özelliklerinin aktif hale gelmesi sağlanabilir.
İşlemcinin hangi modda kullanılacağı işletim sistemine bağlıdır.
Mikroişlemciler ve Mikrobilgisayarlar
3
286,386,486 ve Pentium İşlemcilerin
Çalışma Modları
3 ayrı çalışma modu
sökonusudur.
Korumalı Mod
(Protected Mode)
Sanal x86 Mod
(286’larda mevcut değil)
Mikroişlemciler ve Mikrobilgisayarlar
Gerçek Mod
(Real Mode)
4
Gerçek modda işlemci küçük farklılıklar dışında 8086 gibi çalışır.
Korumalı mod, programlar arasında bellek ayrımının sağlandığı, 32 bit çok
işlemli çalışmaların mümkün olduğu, sayfalama ve sanal bellek
işlemlerinin gerçekleştirilebildiği işlemcinin en geniş çalışma modudur.
Sanal 86 modu, korumalı mod programları ile gerçek mod programları
arasında görevlerarası geçiş yapılabilmesi amacıya tasarlanmıştır. Diğer
bir deyişle sanal 86 mod, korumalı modun çeşitli özelliklerinin
kullanılabildiği gerçek mod denilebilecek bir ara moddur. (80286’da
mevcut değildir.
Mikroişlemciler ve Mikrobilgisayarlar
5
Genel Olarak Korumalı Mod
(Overview of Protected Mode)
Çokişlemli(multiprocessing) işletim sistemlerinde birden fazla program
aynı anda bellekte bulunur.
İşletim
sistemi
Program1
Program2
Program3
……..
Mikroişlemciler ve Mikrobilgisayarlar
6
Eğer sistem üzerinde bir koruma mekanizması mevcut değilse, belleğin
herhangi bir bölgesine erişebilir. Böyle bir durumda ise bir program,
başka bir programın müdahalesi yüzünden bozulacaktır.
Örn: Aşağıda Prog1 isterse İşletim Sisteminin, Program2 veya 3’ün bellek
alanına izinsiz olarak erişebilir.
İşletim
sistemi
Program1
Program2
Program3
……..
Mikroişlemciler ve Mikrobilgisayarlar
Örn: DOS işletim
sisteminde durum
bu şekildedir.
Programcı yanlış bir
bölgeye veri
aktararak o anda
bellekte bulunana
başka bir programı
bozabilir.
7
Programların güvenliğini ve bütünlüğünü sağlamaya yönelik işlemcinin
sağladığı tüm olanaklara koruma mekanizması denir.
Korumalı sistemlerde farklı programlar belirli önceliklerle güvenli bir
biçimde aynı bellek alanı içerisinde çalışırlar.
Koruma mekanizması, etkin bir şekilde işlemci tarafından sağlanır.
Bu tür işlemcilerin bütün veri aktarma komutları, aktarma işleminin
programın kendi bellek alanı içerisinde yapılıp yapılmadığını kontrol
ederek çalışırlar. Örn:
MOV word ptr [SI], AX
Koruma mekanizması, yalnızca bir programın kendi sınırlarını aşarak
başka bir bölgeye erişiminin engellenmesi işlemlerini içermez. Bunun
dışında pek çok işlemi içermektedir.
Mikroişlemciler ve Mikrobilgisayarlar
8
Öncelik Derecelendirmesi (Privilege Level)
Korumalı modda her programın bir önceliği vardır. Genel olarak yüksek
öncelikli programların düşük öncelikli programlara erişmesi serbest
bırakılmıştır, ancak düşük öncelikli programların yüksek öncelikli
programlara erişmesi yasaklanmıştır.
Intel işlemcilerinde toplam 4 öncelik derecesi vardır (0,1,2,3). 0 numaralı
öncelik en yüksek önceliktir ve diğer önceliklere sahip alanlara erişebilir.
Sanal Bellek Kullanımı (Virtual Memory)
Sanal bellek fiziksel belleğin yetmediği durumlarda programların belli
kısımlarının diskte saklanarak yer değişmeli olarak çalışabilmesi
durumudur.
Sayfalama (Paging)
Sayfalama bellek kullanım oranını yükselten bir bellek yönetim tekniğidir.
Sanal bellek kullanımına destek vermektedir.
Intel işlemcilerde sayfalar 4K uzunluğundadır. Programlar sayfalara
rastgele yerleştirilebilirler.
Mikroişlemciler ve Mikrobilgisayarlar
9
8086 İşlemcisinin Kaydedicileri
Mikroişlemciler ve Mikrobilgisayarlar
10
Genel Amaçlı Kaydediciler (AX,BX,CX,DX):
•
•
•
•
Accumulator(AH,AL,AX):Matematiksel hesaplamalarda kullanılan
temel saklayıcıdır.
Base (BH,BL,BX) : Hafıza bölgelerini işaret eder.
Count (CL,CH,CX) : Döngülerde sayaç olarak kullanılır.
Data (DL,DH,DX) : Hesaplamalarda verilerin tutulduğu saklayıcıdır.
Segment Kaydedicileri (CS,SS,DS,ES):
•
Segment saklayıcıları diğer saklayıcılarla beraber hafıza adresleri
üretmede kullanılırlar.
Code Segmet (CS): Komutların bulunduğu hafıza bölgesini gösterir. Bu
saklayıcı program kodunun taban adresini belirler.
•
Data Segment (DS): Verilerin bulunduğu hafıza bölgesini işaret eder.
DS, bu bölgenin taban adresini belirtir.
•
Stack Segment (SS) :Hafızadaki yığın bölgesini işaret eder.
•
Extra Segment (ES,FS,GS) : Ek olarak kullanılan
segmentleridir. 80386 ve sonraki işlemcilerde bulunur.
Mikroişlemciler ve Mikrobilgisayarlar
hafıza
11
Index Kaydedicileri:
•
Source Index (SI) ve Destination Index (DI) : Bu iki kaydedici sırasıyla kaynakhedef kaydedicileridir. Dizilerin başlangıç adreslerini gösterirler. Dizi ve benzeri
data türleri üzerinde işlem yaparken kullanılırlar.
Gösterici Kaydedicileri:
•
Stack Pointer (SP): Yığın olarak isimlendirilen özel bir hafıza bölesini işaret
eder. LIFO prensibine göre çalışır.
•
Base Pointer (BP): Yine yığın bölgesinin adreslenmesinde kullanılır.
•
Intruction Pointer (IP): Bir sonra işlenecek olan komutun bellek adresine işaret
eder.
Bayrak Kaydedicisi (Flag):
•
Flag Register (Flag): Her işlemden sonra bu kaydedicinin içeriği değişir.
CPU dallanma işlemlerinde bu kaydedicideki lojik değerleri kullanarak
karar verir.
Mikroişlemciler ve Mikrobilgisayarlar
12
386,486 ve Pentium İşlemcilerinin
Kaydedicileri
Mikroişlemciler ve Mikrobilgisayarlar
13
32 bit Intel kaydedicilerini 5 grup altında incelemek mümkündür:
 Genel Amaçlı Kaydediciler (General Purpose Registers)
 Segment Kaydedicileri (Segment Registers)
 Koruma Kaydedicileri (Protection Registers)
 Kontrol Kaydedicileri (Control Registers)
 Debug ve Test Amaçlı Kaydediciler (Debug and Test Registers)
Mikroişlemciler ve Mikrobilgisayarlar
14
Amaçlı Kaydediciler (EAX,EBX,ECX,EDX,ESI,EDI,EBP,
I) Genel
ESP): (General Purpose Registers)
Bu kaydediciler, 16 bit 8086 ve 80286 işlemcisiyle uyumu koruyabilmek
için 4 parça halinde tasarlanmışlardır. E kelimesi Extended (Uzatılmış)
anlamındadır. Her biri 32 bittir.
Mikroişlemciler ve Mikrobilgisayarlar
15
Kaydedicileri (CS,SS,DS,ES,FS,GS):
II) Segment
(Segment Registers)
Segment kaydedicilerinin işlevi gerçek mod ile sanal 86 modda
aynıdır. Bu modlarda segment kaydedicileri fiziksel bellekte 64K’lık
segment bölgesinin başlangıcını gösterirler.
Mikroişlemci segment kaydedicisindeki bilgiyi 16 ile çarpar ve bu
değeri bir offset bilgisi ile toplayarak doğrusal bir adres elde eder.
Mikroişlemciler ve Mikrobilgisayarlar
16
Taban Adres
Limit
Erişim
Hakkı
Pentium işlemcilerde her segment kaydedicisinin bir de programcıya
kapalı olan tampon kısmı vardır. Bu kısım betimleyici bilgilerinin
tutulduğu tampon bir kaydedicidir. 8 byte uzunluğundadır.
Betimleyici otomatik olarak betimleyici tablosundan çekilerek ilgili
tampon kaydedicisine yerleştirilir.
Mikroişlemciler ve Mikrobilgisayarlar
17
III)Koruma Kaydedicileri: (Protection Registers)
Koruma ile ilgili olarak 4 temel kaydedici söz konusudur. Bunlar
GDTR, IDTR, LDTR, ve TR’dir.
Taban Adres(32 bit)
Limit(16 bit)
GDTR
IDTR
Taban Adres
Limit
Erişim
Hakkı
GDTR
IDTR
Mikroişlemciler ve Mikrobilgisayarlar
18
GDTR (Global Descriptor Table Register) (48 bit)
Global betimleyici tablosunun başlangıç adresini tutar.
IDTR (Interrupt Descriptor Table Register) (48 bit)
Kesme betimleyici tablosunun başlangıç adresini tutar. Korumalı modda
kesme işlemleri kesme betimleyici tablo yoluyla yönlendirilmektedir.
LDTR (Local Descriptor Table Register) (16 bit)
Yerel betimleyici tablosunun başlangıç adresinin ve limit bilgisinin yazılı
olduğu betimleyiciye ilişkin bir seçici (selector) belirtir. Gereken değer bu
seçicinin gösterdiği yerden çekilir.
GDTR ve IDTR kaydedicileri 48 bit uzunluğundadır.
TR (Task Register)
O anda çalışmakta olan programa ilişkin görev durum segment
betimleyicinin seçici bilgisini tutar. 16 bittir.
Mikroişlemciler ve Mikrobilgisayarlar
19
IV)Kontrol Kaydedicileri (Control Registers)
Konrtol yazmaçları korumalı moda geçiş, sayfalama, matematik
işlemci, içsel tampon(cache) yönetimi gibi önemli işlemlerin
düzenlenmesi amacıyla kullanılır.
32 bit uzunluğundadır.
386,486 işlemcilerinde CR0, CR1, CR2, CR3 bulunmaktadır.
Pentiumlarda ise CR4 eklenmiştir.
Mikroişlemciler ve Mikrobilgisayarlar
20
CR0 Kaydedicisi (32 bit)
Bu kaydedici, işlemcinin en önemli işlevlerinin düzenlenmesi amacıyla
kullanılırı. (Örn: Sayfalamanın etkin olup olmaması, cache belleğin etkin
olup olmaması, matematik işlemcinin emulasyonun olup olmaması gibi)
Cache
Disable
PG
CD
31
30
Paging
Numeric
Exception
Alignment
Mask
NW
29
No
Write
Reserved
AM Resv. WP Reserved
18
17
16
Write
Protect
Task
Switch
NE
ET
5
4
TS
3
Monitor
Coprocessor
EM
2
MP PE
1
Extension Emulate
Type
Math Proc.
0
Protected
Enable
Korumalı moda geçiş PE bitinin 1 yapılmasıyla sağlanır. Fakat bu, tek
başına yeterli olmayıp birtakım ön hazırlıkların da yapılması
gerekmektedir.
Mikroişlemciler ve Mikrobilgisayarlar
21
CR1 Kaydedicisi (32 bit)
Intel bu kaydediciyi ileri modellerinde kullanmak üzere ayırmıştır. Bu
kaydediciden bir okuma yapıldığında 0 değeri elde edilir.
CR2 Kaydedicisi (32 bit)
Bir sayfalama hatası (page fault) oluştuğunda sayfalama hatasını
oluşturan doğrusal adres bu kaydedici içerisinde tutulur. 286’larda tanımlı
değildir.
31
0
Sayfa Hatasına Yol Açan Adres
Mikroişlemciler ve Mikrobilgisayarlar
22
CR3 Kaydedicisi (32 bit)
31
12 11
Dizin Tablosunun Fiziksel Adresi
Reserved
4
3
PCT
PWT
0
Reserved
CR3 kaydedicisi Intel mimarisinde korumalı modda fiziksel
adresi tutan tek kaydedicidir.
80286’larda CR3 kaydedicisi yoktur.
Mikroişlemciler ve Mikrobilgisayarlar
23
CR4 Kaydedicisi (32 bit)
Pentium işlemcilerle birlikte tanımlanmıştır. Önceki işlemcilerde yoktur.
Ancak Pentiumlardan sonra üretilen bazı 486’larda bu kaydedici
bulunabilmektedir.
Debug
Extension
31
Reserved
MCE
6
0
5
Machine
Check
Enable
Mikroişlemciler ve Mikrobilgisayarlar
PSE
4
DE
3
Page Size
Extension
TSD
2
Time Stamp
Disable
PVI
1
VME
0
Virtual 86
Mode
Extension
24
EFLAGS Kaydedicisi (32 bit)
Bayraklar, CPU’nun çalışmasını belirlediği gibi, çalışması sırasındaki
durumları da yansıtır. 8086-80286 mikroişlemcilerinde bayrak saklayıcısı
16 bit olup, 80386 – Pentium serisi işlemcilerde 32 bittir (Extended
Flags).
Mikroişlemciler ve Mikrobilgisayarlar
25
15
0
O
D
I
T
S
Z
A
P
C
• C(Carry) : Toplamadan sonraki eldeyi (Carry) ve çıkarmadan sonraki
ödüncü (borrow) belirtmek için kullanılır.
• P (Parity) : Tek eşlik lojik “0” ; çift eşlik lojik “1” ile ifade edilir.
• A (Auxiliary Carry) : Yapılan aritmetiksel işlem sonucunda, 3. ve 4. bitler
arasında olan carry ve borrow durumunu belirtmek için kullanılır.
• Z (Zero) : Aritmetik veya lojik işlemin sonucunun 0 olduğunu belirtir.
• S (Sign) : Toplama veya çıkarma işleminden sonra sonucun aritmetik
işaretini belirtir.
Mikroişlemciler ve Mikrobilgisayarlar
26
15
0
O
•
D
I
T
S
Z
A
P
C
T (Trap): Bu bayrak 1 ise, tüm devre hata takip (debugging)
durumuna girer.
• I (Interrupt) : INTR girişini kontrol eder. I=1 ise INTR aktif durumdadır.
I=0 ise INTR pasif durumdadır. Bu durumda iken gelen kesmelere
cevap verilmez.
• D (Direction) : String işlemleri yapılırken, DI ve SI saklayıcılarının
arttırılması veya azaltılmasını düzenler. D=1 azaltılır, D=0 ise arttırılır.
• O (Overflow) : İşaretli sayıların toplanıp çıkarılmasından sonra taşma
olup olmadığını bildirir.
Mikroişlemciler ve Mikrobilgisayarlar
27
V) Debug ve Test Kaydedicileri (Debug and Test Registers)
386, 486 ve Pentium işlemcilerde 32 bit uzunluğunda 8 debug kaydedicisi
vardır(DR0,DR1,……….,DR7)
Mikroişlemciler ve Mikrobilgisayarlar
28
KORUMALI MOD
(PROTECTED MODE)
Mikroişlemciler ve Mikrobilgisayarlar
29
Gerçek mod çalışmasıması 8086 işlemcisi incelenirken söz edilmişti. Buna
göre:
Segment kaydedicisindeki bilgi 16 ile çarpılmakta ve ardından çarpılan
segment bilgisi bir offset değeri ile toplanmaktaydı.
Segment saklayıcısının değerine 0h eklenir.
16-bit register
+
0000
16-bit register
FFFFF
Addr1 + 0FFFF
Offset
Addr1
20-bit memory address
Offset
Segment
(64K)
Segment
address
00000
Intel 80x86 hafıza adresi üretimi
Mikroişlemciler ve Mikrobilgisayarlar
1M bellek alanı
30
Segment adresleri segment registerlerinde (CS,DS,ES,SS); ofset adresleri
ise pointer registerlerden birisinde tutulur. Örn:
CS
3
IP +
Instruction address 3
DS
1
DI +
Data address
1
4 8
A 0
SS
4 2
1
4
SP +
8 A B 4
Stack address
2 3
4
0
0 0
2
2
2 3
6
2
5
5
0 0
0
0
F F
E 0
F F
E 0
8088/8086 tarafından yürütülecek bir sonraki komutun adresi, CS:IP ikilisi
yardımıyla edle edilir.
8088/8086 tarafından hafızadaki verinin adresi, DS: DI (veya SI,BX) ikilisi
yardımıyla edle edilir.
Mikroişlemciler ve Mikrobilgisayarlar
31
Korumalı modda, fiziksel adres bir dizi dönüşüm sonucunda elde
edilmektedir.
Bu modda, segment kaydedicilerinde bulunana bilgilere seçici (selector)
denir. Diğer bir deyişle korumalı modda, segemet kavramının yerini
selektor kavramı almaktadır.
Selektör doğrudan fiziksel bellekte bir yer göstermez, betimleyici tablo
(descriptor table) denen bir bölgede index belirtir.
Gerçek segment değeri bu tablodan çekilmektedir.
Mikroişlemciler ve Mikrobilgisayarlar
32
Bir selektör 3 parçadan oluşur.
15
2
Index
TI
0
RPL
13 bit
RPL (Requested Privilege Level) : Selektörün öncelik derecesini gösterir.
Selektörler, daha önce de bahsedildiği gibi betimleyici tablo denen bir tabloda bir index
göstermektedir. Betimleyici tablolar kendi aralarında 3’e ayrılır:
 Global Betimleyici Tablo (Global Descriptor Table)
 Yerel Betimleyici Tablo (Local Descriptor Table)
 Kesme Betimleyici Tablo (Interrupt Descriptor Table)
TI (Table Indıcator) : Tablo göstericisidir.
TI=0 ise index global betimleyici tabloya ilişkindir.
TI=1 ise index yerel betimleyici tabloya ilişkindir.
Index: Selektörün index bilgisini göstermektedir.213=8192 olup index bölgesi tablo
içerisindeki 8192 betimleyiciden birini seçer.
Mikroişlemciler ve Mikrobilgisayarlar
33
15
2
Index
0
TI
RPL
TI=1 ise
TI=0 ise
13 bit
Yerel Betmleyici Tablo
Global Betimleyici Tablo
0
0
1
2
3
1
2
3
LDT
GDT
.
.
.
.
.
.
.
.
.
.
.
.
8192
8192
Mikroişlemciler ve Mikrobilgisayarlar
34
Örn: 211Ah biçiminde bir selektör bilgisi bulunmaktadır. Bu selektörü
incelediğimizde
2
1
1
A
15
0
0
0
1
0
0
0
0
1
0
0
0
1
1
Index = 423h = 1059
0
TI
1
0
RPL
0
1
2
3
GDT
1059
.
.
.
.
.
.
8192
Mikroişlemciler ve Mikrobilgisayarlar
35
Korumalı modda, adres bilgileri 16 bit selektör ile offsetten oluşmaktadır.
Selektör ve offsetten oluşan adrese sanal adres (virtual address) denir.
Sanal Adres (Virtual Address) [Selector : Offset]
Korumalı modun sayfalama özelliği etkin durumdaysa sanal adres önce
doğrusal adrese, daha sonra ise fiziksel adrese çevrilir. Eğer sayfalama
özelliği pasif ise, doğrusal ve fiziksel adresler aynıdırlar.
Sayfalama Aktif:
Sanal Adres
Doğrusal Adres
Fiziksel Adres
Sayfalama Pasif:
Sanal Adres
Sanal Adres = Fiziksel Adres
Mikroişlemciler ve Mikrobilgisayarlar
36
Betimleyici Tablolar ve Betimleyici
Tablo Kaydecileri
Yerel Betmleyici Tablo
Global Betimleyici Tablo
Kesme Betimleyici Tablo
0
0
0
1
2
3
.
.
.
.
.
.
1
2
3
.
.
.
.
.
.
1
2
3
LDT
A)
GDT
B)
.
.
.
.
.
.
IDT
C)
Betimleyici tablolar her biri 8 byte uzunluğunda olan betimleyicilerden
oluşmaktadır. Selektör betimleyici tablo içerisinde bir betimleyiciyi gösterir.
Betimleyici tablo kaydedicileri daha önce koruyucu kaydediciler kısmında
gösterildiği gibi, betimleyici tabloların bellekte nerede bulundukları ve ne kadar
uzunlukta olduğunu gösterir.
Mikroişlemciler ve Mikrobilgisayarlar
37
A) GDTR (48 bit)
Taban Adres(32 bit)
Limit(16 bit)
GDTR
Tablonun
uzunluğu limit
kısmında
bulunan sayının
1 fazlasıdır.
Global
Descriptor
Table
Mikroişlemciler ve Mikrobilgisayarlar
Tablo
Uzunluğu
38
Örn: GDTR kaydedicisinin limit kısmı 0FFF ve taban kısmı 0001F000h’dır.
Buna göre GDT tablosunun başlangıç adresi, bitiş adresi ve uzunluğu
nedir? Bu tablo kaç adet betimleyici içermektedir?
Başlangıç adresi : 0001F000h dır.
Uzunluğu: 0FFF + 1 = 1000h  4096 byte
0001F000
Bitiş adres: 0001F000 + 0FFF = 1FFFF
Bir betimleyicinin uzunluğu 8 byte
olup, bu GDT içerisinde 4096/8 =
512
tane
betimleyici
saklanabilmektedir.
Global
Descriptor
Table
4K
0001FFFF
Mikroişlemciler ve Mikrobilgisayarlar
39
Örn: GDTR kaydedicisinin limit kısmı 16 olduğuna göre GDT’in uzunluğu en
fazla ne kadar olabilir? Böyle bir durumda tabloda kaç adet betimleyici olur?
Limit kısmında yazılabilecek en büyük değer FFFF
olup,
Uzunluğu: FFFF + 1 = 10000h  65536 byte
Böyle bir durumda depolanabilecek betimleyici
sayısı ise: 65536 / 8 = 8192’dir.
Dikkat edilirse bu selektör seçicisinde de 13 bitlik kısım (213 = 8192) bu kadarlık
bir alanı adreslemek için kullanılmaktaydı.
15
2
Index
TI
0
RPL
13 bit
SELECTOR
Mikroişlemciler ve Mikrobilgisayarlar
40
B) LDTR (16 bit)
Bu kaydedici tablonun limit ve taban adreslerini içermez. Yerel betimleyici tablonun
limit ve taban adreslerini global betimleyici tablonun içerisinde bir bir betimleyici
şeklinde bulunur. Bu yüzden LTDR kendi başına bir selektör görevindedir.
15
2
Index
TI
1
2
3
.
.
.
.
.
.
RPL
Taban
13 bit
0
0
GDT
0
1
2
3
LDT
Tablo Uzunluğu
.
.
.
.
.
.
Mikroişlemciler ve Mikrobilgisayarlar
41
Örn: LDTR kaydedicisinin içindeki değer 1F2Ah olsun. LDT tablosunun taban
adresi ve uzunluğu GDT hangi betimleyicisinden çekilmektedir?
1
F
2
A
15
0
0
0
0
1
1
1
1
1
0
0
1
0
1
Index = 3E5h = 997
0
TI
1
0
RPL
0
1
2
3
GDT
997
.
.
.
.
.
.
Mikroişlemciler ve Mikrobilgisayarlar
42
C) IDTR (48 bit)
Bu kaydedici kesme betimleyici tablonun başlangıç adresini ve uzunluğunu tutar.
Kesme betimleyici tablo korumalı modun kesme vektörü gibi düşünülebilir.
Taban Adres(32 bit)
Limit(16 bit)
IDTR
Interrupt
Descriptor
Table
Mikroişlemciler ve Mikrobilgisayarlar
Tablo
Uzunluğu
43
Örn: IDTR kaydedicisinin limit kısmı en fazla ne uzunlukta olabilir ve bu
tabloda en fazla kaç betimleyici olması mümkündür?
Tablonun en büyük uzunluğu FFFFh +1 = 10000h  65536 byte olup x86 ailesinde
toplam kesme sayısı 256 olduğu için 256 x 8 = 2048 byte uzunlukta olması yeterlidir.
Örn: IDTR kaydedicisinin limit kısmı 03FFh ve taban kısmı 00001000h ise
tablo uzunluğu nedir ve tablo içerisinde kaç adet betimleyici bulunmaktadır?
Başlangıç adresi : 00001000h dır.
Uzunluğu: 03FF + 1 = 400h  1024 byte
Bitiş adres: 00001000 + 03FF = 13FF
Bir betimleyicinin uzunluğu 8 byte olup, bu
IDT içerisinde 1024/8 = 128 tane
betimleyici saklanabilmektedir.
Mikroişlemciler ve Mikrobilgisayarlar
44
Betimleyiciler (Descriptors)
Betimleyicilerin türleri ne olursa olsun hepsi 8 byte uzunluğundadır.
Betimleyiciler 2’ye ayrılırlar:
Betimleyiciler
Sisteme İlişkin
Olmayan
Betimleyiciler
Sisteme İlişkin
Betimleyiciler
Mikroişlemciler ve Mikrobilgisayarlar
45
Segment Betimleyicisi
0
31
Segment Base (15-0)
Base
(31-24)
G
D
O
AVL
Segment Limit (15-0)
Limit
(19-16)
P
DPL
S
TYPE
A
Base
(23-16)
63
32
Segment betimleyicileri koruma mekanizması için gerekli olan segment bilgilerini
tutarlar.
Bu yapı sayesinde 8086 işlemcileriyle olan uyumluluk korunmuştur. Bu yöntemle,
8086 işlemcisindeki segment yazmaçları atılmamış işlevleri değiştirilerek
kullanılmıştır.
Böyle bir yapı, işlemci içerinde özel bir saklayıcada saklanamayacak büyüktür.
Mikroişlemciler ve Mikrobilgisayarlar
46
Hatırlanacağı üzere her bir segment kaydedicisinin 8 bytelık bir tampon
kaydedicisi vardır.
Taban Adres
63
Limit
Erişim
Hakkı
0
Segment kaydedicilerine bir yükleme yapıldığında işlemci tablonun ilgili
betimleyicisini bellekten okuyarak bu tampon kaydedicilerine yerleştirir. Böylece
betimleyici tablosuna erişim sadece segment kaydedicilerine yükleme sırasında
sadece 1 kez yapılmaktadır.
Mikroişlemciler ve Mikrobilgisayarlar
47
Örn: MOV AX,1A13
MOV DS, AX komutları korumalı moda çalıştırılırsa işlemci nasıl davranır?
İşlem sonucunda DS 1A13 verisiyle yüklenecektir.
1
A
1
3
15
0
0
0
0
1
1
0
1
0
0
0
0
1
0
Index = 342h = 834
0
TI
1
1
RPL
0
Bu durumda tablonun 834.
elemanından başlayarak 8
byte’lık bilgi tablodan alınarak
DS’in tampon kısmına okunur.
Mikroişlemciler ve Mikrobilgisayarlar
1
2
3
GDT
834
.
.
.
.
.
.
48
Segment Limiti
0
31
Segment Base (15-0)
Base
(31-24)
G
D
O
AVL
Segment Limit (15-0)
Limit
(19-16)
P
DPL
S
TYPE
A
Base
(23-16)
63
32
Betimleyici içerisindeki 20 bit, segmentin bellekteki uzunluğunu göstermektedir.
Bu 30 bitlik kısım betimleyici içerinde ayrık olarak bulunur.
Segmentin limit kısmı koruma mekanizması için gereklidir. Programın kod ya da
data olarak sınırların dışına çıkıp çıkmadığı bu limit değerine bakılarak kontrol
edilir.
Korumalı modda çalışan bir işlemci için
segment limiti ne kadardır ?
Mikroişlemciler ve Mikrobilgisayarlar
49
Limit için 20 bitin kullanıldığı bir durumda segmentin büyüklüğü 220=1048576=1
MB olur.
Fakat korumalı modda segmentin boyutu bununla sınırlı olmayıp G(granularity)
bitinin durumuna bağlı olarak 4 GB’a kadar çıkabilmesi mümkündür.
G=0 ise, segmentin uzunluğu limit kadar olabilir (1 MB).
G=1 ise, segmentin uzunluğu limit kısmında bulunan sayının 4096(4K)
çarpımına eşittir.
G=1 ise, en büyük segment uzunluğu 1 MB x 4096 = 4 GB olur.
ile
Görüldüğü segmentin 1 MB sınırını aşabilmesi için G=1 olması gerekmektedir.
Mikroişlemciler ve Mikrobilgisayarlar
50
Örn: Bir segment betimleyicisinin limit kısmı 001FF ve G bitinin değeri ise 1 ise
segmentin uzunluğu ne kadardır?
Segment uzunluğu = 4096 x (001FF + 1 ) = 2097152 byte = 2 MB
Örn: Bir betimleyicinin yüksek anlamlı bytelarından düşük anlamlı bytelarına
doğru olarak verilen hex karşılığı aşağıdadır. Buna göre betimleyicinin belirtmiş
olduğu segmentin uzunluğu ne kadardır?
0
00 41 EF 01 00 00 FF F0 h
0
F
E
4
1
0
1
0
0
0
0
F
F
F
0
0000 0000 0100 00011110 1111 0000 0001 0000 0000 0000 0000 1111 1111 1111 0000
G
Limit
Limit
0001 1111 1111 1111 0000 + 1 = 131057 byte (yaklaşık 128 K)
Mikroişlemciler ve Mikrobilgisayarlar
51
İşlemci belleğe erişim gerektiren tüm komutlarını çalıştırmadan önce erişilecek
bölgenin segment limitleri içerisinde kalıp kalmadığını betimleyicisine bakarak
test eder.
Eğer erişilecek bölge segment limitlerinin dışında ise, bu durumu içsel bir kesme
kullanarak sisteme programcısına bildirir. Bu tür içsel kesmelere korumalı modda
istina (exception) denir.
Derleyiciler programcının belirledikleri segmentlerin uzunluklarını sayısal
değerlere çevirerek object modül içerisine yazarlar.
Sembolik makine dili derleyicileri DATA ve CODE segmentlerin uzunluklarını
içlerinde tanımlanan toplam veri ve kod miktarlarını hesaplayarak bulurlar.
Intel işlemcileri segment limitleri dışına yapılmak istenen geçersiz erişimleri 13
(0Dh) numaralı kesmeyi çağırarak sistem programcısına bildirirler. 13 nolu
kesmenin çağrılmasına yol açan durumlara “Genel Koruma Hatası (General
Protection Error)” denir. Bu gibi durumlarda işletim sistemi programın
yürütümünü durdurur.
Mikroişlemciler ve Mikrobilgisayarlar
52
Segmentin Başlangıcı
0
31
Segment Base (15-0)
Base
(31-24)
G
D
O
AVL
Segment Limit (15-0)
Limit
(19-16)
P
DPL
S
TYPE
A
Base
(23-16)
63
32
Segment betimleyicisi içerisindeki 32 bit, segmentin bellekteki başlangıcını
gösteren taban adresidir. Bu da limit de olduğu gibi ayrık bir şekildedir.
32 bit ile 4 GB’lık bellek bire bir adreslenebilmektedir.
Segmentin bellekte nereden başlayacağına işletim sistemi karar verir.
Taban adresi fiziksel olmayıp doğrusal bir adrestir.
Mikroişlemciler ve Mikrobilgisayarlar
53
D Biti
0
31
Segment Base (15-0)
Base
(31-24)
63
G
D
O
AVL
Segment Limit (15-0)
Limit
(19-16)
P
DPL
S
TYPE
A
Base
(23-16)
32
54
Kod ya da data segmentlerinin 16 ya da 32 bit olup olmadığını gösterir. Her iki
segment için 4 farklı durum söz konusudur.
D=0 olduğunda segment kaydedicileri (CS veya DS) 16 bitliktir. Bu durumda
makine komutları, 80286 komutları gibi ele alınmaktadır.
D=1 olduğunda segment kaydedicileri (CS veya DS) 32 bitliktir. Bu durumda
makine komutları, 80386, 80486 ve Pentium gibi ele alınmaktadır.
Mikroişlemciler ve Mikrobilgisayarlar
54
Erişim Hakları
0
31
Segment Base (15-0)
Base
(31-24)
63
G
D
O
AVL
Segment Limit (15-0)
Limit
(19-16)
P
DPL
47
Mikroişlemciler ve Mikrobilgisayarlar
S
TYPE
A
40
Base
(23-16)
32
55
P
DPL
S
TYPE
A
40
47
P (Present) : Eğer P=1 ise segment bellekte hazır bulunmaktadır. Diğer durumda
(P=0) ise segment bellekte değildir. Intel işlemcileri bir segmente eriştiğinde
bellekte olmadığını farkederse 11 nolu kesmeyi çağırır.
DPL bitleri segmentin önceliğini belirtir. Daha önce de belirtildiği 4 tane öncelik
derecesi mevcuttur. 0 dereceli öncelik en yüksek değerlikli önceliktir.
Bir data segmete ancak kendisine eşit ya da kendisinden daha yüksek öncelikli
programlar erişebilir. Yine benzer biçimde kod segment ancak kendisine eşit
öncelikli segmentleri çağırabilir.
Mikroişlemciler ve Mikrobilgisayarlar
56
P
DPL
S
TYPE
A
40
47
İşemci, betimleyicilerin hangi türde olduğuna (sisteme ilişkin veya değil) S, Type
ve A bitlerini dikkate alarak karar vermektedir.
S=0 ise betimleyici bir sisteme ilişkindir.
S=1 ise betimleyici sisteme ilişkin değildir.
S=0 olması durumunda, betimleyicinin alt grubu A biti de TYPE kısmına katılarak
tespit edilir. (Toplamda 4 bit olup 16 farklı tür ifade edilebilir.)
Mikroişlemciler ve Mikrobilgisayarlar
57
S=0 olması durumunda
TYPE
Sisteme İlişkin Betimleyici Türü
0
Ayrılmış (Reserved)
1
Mevcut 16 bit 80286 görev durum segment betimleyicisi
2
Yerel betimleyici tablo betimleyicisi (LDT)
3
Meşgul 16 bit 80286 görev durum segment betimleyicisi
4
16 bit 80286 çağırma kapısı betimleyicisi
5
Görev kapısı betimleyicisi
6
16 bit 80286 kesme kapısı betimleyicisi
7
16 bit 80286 tuzak kapısı betimleyicisi
8
Ayrılmış (Reserved)
9
Mevcut 32 bit x86 görev durum segment betimleyicisi
A
Ayrılmış (Reserved)
B
Meşgul 32 bit x86 görev durum segment betimleyicisi
C
32 bit x86 çağırma kapısı betimleyicisi
D
Ayrılmış (Reserved)
E
32 bit x86 kesme kapısı betimleyicisi
F
32 bit x86 tuzak kapısı betimleyicisi
Mikroişlemciler ve Mikrobilgisayarlar
58
S=1 olması durumunda segment sisteme ilişkin değildir. Bu durumda segment ya
kod veya data ve/veya stack segmenttir. A biti dahil edilmez.
P
DPL
S
TYPE
41
47
Type alanı da kendi içinde alt alanlara bölünebilir.
DPL
P
TYPE
S
41
47
E=0 ise
Data/Stack Segment
Betimleyici
E
ED
W
E
ED/C
W/R
E=1 ise
Kod Segment Betimleyici
E
C
Mikroişlemciler ve Mikrobilgisayarlar
Görüldüğü gibi E biti
betimleyicinin kod mu
yoksa data/stack
betimleyicisi mi
olduğunu gösterir.
R
59
Akış Şeması
S=0
S biti (44)
Sisteme
ilişkin olan
segment
betimleyicisi
S=1
Sisteme ilişkin
olmayan segment
betimleyicisi
E=0
E=1
E biti (43)
Data/Stack
segment
betimleyicisi
Mikroişlemciler ve Mikrobilgisayarlar
Kod segment
betimleyicisi
60