8086 ilk x86 işlemciydi - o zamana kadar Intel 4004, 8008, 8080 ve 8085 modellerini piyasaya sürmüştü.Bu 16-bit işlemci, harici bir 20-bit adres yolu aracılığıyla 1 MB bellekle çalışabilir. IBM tarafından seçilen saat hızı (4.77 MHz) oldukça düşüktü ve işlemci kariyerinin sonunda 10 MHz'de çalışıyordu.

İlk PC'ler, yalnızca 8 bitlik bir harici veri yoluna sahip olan 8088 işlemcinin bir türevini kullandı. İlginç bir şekilde, Amerikan mekiklerindeki kontrol sistemleri 8086 işlemci kullanıyor ve Intel artık bunları üretmediği için NASA 2002'de eBay aracılığıyla işlemci satın almak zorunda kaldı.

Intel 8086
kod adı Yok
Yayın tarihi 1979
Mimari 16 bit
veri yolu 16 bit
Adres veri yolu 20 bit
Maks. Hafıza 1 MB
L1 önbellek Değil
L2 önbellek Değil
saat frekansı 4.77-10MHz
FSB Eşit CPU frekansı
FPU 8087
SIMD Değil
İşlem teknolojisi 3000 nm
transistör sayısı 29 000
Enerji tüketimi Yok
Voltaj 5V
kristal alan 16 mm²
priz 40 iğne


1982'de piyasaya sürülen 80286, aynı saat hızında 8086'dan 3,6 kat daha hızlıydı. 16 MB'a kadar bellek işleyebilir, ancak 286 hala 16 bitlik bir işlemciydi. izin veren bir bellek yönetim birimine (MMU) sahip ilk x86 işlemciydi. sanal bellek. 8086 gibi, işlemci bir kayan nokta birimi (FPU) içermiyordu, ancak bir x87 yardımcı işlemci yongası (80287) kullanabilirdi. Intel, 80286'yı maksimum 12,5 MHz saat hızında piyasaya sürdü, ancak rakipler 25 MHz'e ulaşmayı başardı.

Intel 80286
kod adı Yok
Yayın tarihi 1982
Mimari 16 bit
veri yolu 16 bit
Adres veri yolu 24 bit
Maks. Hafıza 16 MB
L1 önbellek Değil
L2 önbellek Değil
saat frekansı 6-12 MHz
FSB CPU frekansına eşit
FPU 80287
SIMD Değil
İşlem teknolojisi 1500 nm
transistör sayısı 134 000
Enerji tüketimi Yok
Voltaj 5V
kristal alan 49 mm²
priz 68 iğne

386: 32-bit ve önbellekli


Intel 80836, 32 bit mimariye sahip ilk x86 işlemciydi. Bu işlemcinin çeşitli sürümleri piyasaya sürüldü. En ünlü ikisi, 16 bit veri yolu kullanan 386 SX (Tek kelimeli eXternal) ve 32 bit veri yolu kullanan 386 DX (Çift kelimeli eXternal). İki versiyon daha not edilebilir: SL, önbellek destekli (harici) ilk x86 işlemci ve uzay programında kullanılan 386EX (örneğin, Hubble teleskopu bu işlemciyi kullanır).

Intel 80386DX
kod adı P3
Yayın tarihi 1985
Mimari 32 bit
veri yolu 32 bit
Adres veri yolu 32 bit
Maks. Hafıza 4096 MB
L1 önbellek 0 kb (bazen bir kontrolör vardır)
L2 önbellek Değil
saat frekansı 16-33 MHz
FSB CPU frekansına eşit
FPU 80387
SIMD Değil
İşlem teknolojisi 1500-1000 nm
transistör sayısı 275 000
Enerji tüketimi 2W @ 33MHz
Voltaj 5V
kristal alan 42 mm² @ 1 µm
priz 132 kişi

486 işlemci, tüm neslin bilgisayarıyla tanışmanın başlangıcı olduğundan, birçokları için bir dönüm noktası haline geldi. Aslında, ünlü 486 DX2/66 uzun zamandır oyuncular için minimum yapılandırma olarak kabul edildi. 1989'da piyasaya sürülen bu işlemci, çip üzerinde FPU, veri önbelleği gibi bir dizi heyecan verici yeni özelliğe sahipti ve ilk kez bir çarpan getirdi. x87 yardımcı işlemcisi, 486 DX (SX değil) hattına yerleştirilmiştir. İşlemciye 8 KB'lık bir L1 önbellek entegre edildi (önce yazma / yeniden yazma, ardından biraz daha yüksek performansla geri yazma / geri yazma ile). Anakarta bir L2 önbellek eklemek mümkündü (veri yolu frekansında çalıştı).

İkinci nesil 486 işlemciler bir CPU çarpanı aldı, çünkü işlemci FSB'den daha hızlıydı, DX2 (2x çarpanı) ve DX4 (3x çarpanı) sürümleri ortaya çıktı. Başka bir anekdot: 486SX için FPU olarak satılan "487SX" aslında tam teşekküllü bir 486DX işlemciydi ve orijinal CPU'nun bağlantısını kesip yerini aldı.

Intel 80486DX
kod adı P4, P24, P24C
Yayın tarihi 1989
Mimari 32 bit
veri yolu 32 bit
Adres veri yolu 32 bit
Maks. Hafıza 4096 MB
L1 önbellek 8 kb
L2 önbellek Üzerinde anakart(FSB frekansında)
saat frekansı 16-100 MHz
FSB 16-50 MHz
FPU bir kristal üzerinde
SIMD Değil
İşlem teknolojisi 1000-800 nm
transistör sayısı 1 185 000
Enerji tüketimi Yok
Voltaj 5V - 3.3V
kristal alan 81 - 67 mm²
priz 168 kişi

DX4, 16 kB önbelleğe ve daha fazla transistöre sahipti - 1,6 milyon.600 nm işlem kullanılarak üretilen ve 76 mm² kalıp alanına sahip bu işlemci, orijinal 486'dan (3,3 V'ta) daha az güç tüketiyordu.


1993 yılında tanıtılan Pentium, birçok nedenden dolayı ilgi çekiciydi. Intel, yalnızca sayılar üzerinde ticari marka oluşturamadığı için, akılda kalıcı bir isim lehine geleneksel model numaralarını terk eden ilk x86 işlemciydi. Ek olarak, işlemci hatasıyla ünlü oldu. Birinci nesil Pentium'da, bazı bölme işlemleri yanlış bir sonuçla sonuçlandı. Intel işlemciyi değiştirdi, ancak şirket çok zarar gördü. Çok nadiren kendini gösteren hata, IT basınında gerçek bir sansasyon yarattı.

Pentium, ilki CPU çarpansız, ikincisi çarpanlı (ünlü Pentium 166 dahil) ve sonuncusu MMX adlı bir x86 SIMD komut seti ile üç farklı satırda satıldı. Pentium MMX, L1 önbellek boyutunu ve diğer küçük iyileştirmeleri artırdı. Pentium, Intel'in iki talimatı paralel olarak yürütebilen ilk x86 işlemcisiydi. Bu işlemciler için L2 önbelleği anakartta bulunuyordu (FSB frekansında çalıştı).

Intel Pentium (MMX)
kod adı P5, P54
Yayın tarihi 1993 1997
Mimari 32 bit 32 bit
veri yolu 64 bit 64 bit
Adres veri yolu 32 bit 32 bit
Maks. Hafıza 4096 MB 4096 MB
L1 önbellek 8 + 8 kb 16 + 16 kb
L2 önbellek Anakart (FSB frekansında)
saat frekansı 60-200 MHz 133-300 MHz
FSB 50-66 MHz 60-66 MHz
FPU bir kristal üzerinde bir kristal üzerinde
SIMD Değil MMX
İşlem teknolojisi 800-600-350 nm 350 nm
transistör sayısı 3.1-3.3 milyon 4.5 milyon
Enerji tüketimi 8-16W 4-17W
Voltaj 5 - 3.3V 2.8V
kristal alan 294-163-90 mm² 141 mm²
priz Soket 4, 5 veya 7 Soket 7

Pentium hatası hakkında size biraz açıklama yapmama izin verin: FPU'daki bazı hesaplamalar hatalı bir sonuca yol açtı. Hata nadirdi - farklı kaynaklar ne kadar nadir olduğuna dair farklı tahminler verse de - ve Intel arızalı işlemcileri ücretsiz olarak değiştirdi. Aşağıda bir Pentium hatası örneği verilmiştir.

4195835.0 / 3145727.0 = 1.333820449136241002 (doğru sonuç)

4195835.0 / 3145727.0 = 1.333739068902037589 (arızalı Pentium'da yanlış sonuç)


1995 yılında piyasaya sürülen Pentium Pro, Fiziksel Adres Uzantısı (PAE), yani 64 GB'a izin veren 36 bitlik bir adres alanına geçiş sayesinde 4 GB'den fazla belleği işleyebilen ilk x86 işlemci oldu. Adreslenecek RAM. İlginç bir şekilde, bu işlemci P6 mimarisine sahip ilk işlemciydi (prensipte Core 2 mimarisi bir dereceye kadar ondan miras alındı) ve ayrıca anakartta değil işlemcide L2 önbelleğini içeren ilk x86 CPU oldu. Esasen, 256 kB'den 1 Mb'ye kadar olan önbellek, CPU'nun yanında, aynı pakette bulunuyordu, ancak aynı kalıpta değil ve CPU ile aynı frekansta çalışıyordu.

İşlemcinin bazı performans sorunları vardı. 32 bit uygulamalarla iyi çalıştı, ancak çok daha yavaş olduğu ortaya çıktı. yazılım, 16 bit kodla yazılmıştır (Windows 95'in bazı bölümleri gibi). Nedeni basitti: 16 bitlik kayıtlara erişim, Pentium Pro'nun sıra dışı mimarisinin avantajlarını ortadan kaldıran 32 bitlik kayıtların yönetilmesinde sorunlara neden oldu.

Intel Pentium Pro
kod adı P6
Yayın tarihi 1995
Mimari 32 bit
veri yolu 64 bit
Adres veri yolu 36 bit
Maks. Hafıza 64 GB
L1 önbellek 8 + 8 kb
L2 önbellek Harici, 256-1024 KB (CPU frekansında)
saat frekansı 150-200 MHz
FSB 60-66 MHz
FPU yerleşik
SIMD Yok
İşlem teknolojisi 600-350 nm
transistör sayısı 5.500.000 + nakit
Enerji tüketimi 29-47 K
Voltaj 3,3 V
kristal alan 306-196 mm² + önbellek
priz Soket 8

Önbellekli kalıp alanı 202 mm² (500 nm'de 256 kB), 242 mm 2 (350 nm'de 512 kB) veya 484 mm2 (350 nm'de 1 MB) idi. Önbellekteki transistör sayısı 15.5 milyon (256 KB), 31 milyon (512 KB) veya 62 milyon (1 MB) idi.


1997'de piyasaya sürülen Pentium II işlemci, Pentium Pro'nun toplu pazar için bir uyarlamasıydı. Pentium Pro'ya çok benziyordu, ancak önbellek farklıydı. Önbelleği işlemciyle aynı frekansta kullanmak yerine (ki bu pahalıydı), 512K L2 önbellek yarı frekansında çalıştı. Ek olarak, Pentium II, işlemci ve L2 önbelleğini içeren bir kartuş lehine klasik soketi terk etti ve artık anakart veya işlemci ambalajı yerine kartuşta muhafaza edildi.

Pentium Pro'ya kıyasla yeni özellikler arasında MMX (SIMD) desteği ve L1 önbelleğinin iki katı boyutu yer alıyor. İlk Pentium III (Katmai), Pentium II'ye çok benziyordu. 1999'da piyasaya sürüldü, SSE (SIMD) yönergeleri için destek ekledi, ancak bunun dışında aynıydı.

Intel Pentium II ve III
kod adı Klamath (Pentium II 0,35 µm), Deschutes (Pentium II 0,25 µm), Katmai (Pentium III)
Yayın tarihi 1997, 1998, 1999
Mimari 32 bit
veri yolu 64 bit
Adres veri yolu 36 bit (P III'te 32 bit)
Maks. Hafıza 64 GB (P III'te 4 GB)
L1 önbellek 16 + 16 kb
L2 önbellek Harici, 512 KB (1/2 CPU frekansı)
saat frekansı 233-300 MHz (Klamath), 300-450 MHz (Deschutes), 450-600 MHz (Klamath)
FSB 66-100-133MHz
FPU yerleşik
SIMD MMX (SSE)
İşlem teknolojisi 350 nm (Klamath), 250 nm (Deschutes, Katmai)
transistör sayısı 7.500.000 + önbellek (Pentium II), 9.500.000 + önbellek (Pentium III)
Enerji tüketimi 25-35W
Voltaj 2,8 V (0,35 µm), 2 V (0,25 µm)
kristal alan 204 mm² (0,35 µm), 131 mm2 (0,25 µm), 128 mm2 (PIII) + önbellek
priz 1. Bölme

Pentium II ve III, 512 KB L2 önbellek (31 milyon transistör) ile donatıldı. Ancak Pentium II işlemcinin bir varyasyonu, çip üzerinde 256 KB L2 önbelleğe sahipti, Pentium II Mobile Dixon. 180 nm'lik bir işlem kullandı ve masaüstü sürümlerinden önemli ölçüde daha hızlıydı.


90'ların sonlarında Intel, iki tanınmış işlemci markası piyasaya sürdü: Celeron ve Xeon. İlki "bütçe" pazarına, sonuncusu ise sunuculara ve iş istasyonlarına yönelikti. İlk Celeron (Covington), ikinci seviye önbelleği olmayan bir Pentium II idi ve zayıf performans, Pentium II Xeon ise tam tersine büyük bir önbellekle donatılmıştı. Her iki marka da hala var: Giriş seviyesi pazar için Celeron (tipik olarak azaltılmış önbellek boyutu ve daha yavaş FSB ile) ve sunucular için Xeon (hızlı FSB ile, bazen daha büyük önbellek ve daha yüksek saat hızlarıyla).

Intel, Mendocino modelindeki Celeron'a hızla 128KB L2 önbellek ekledi. Celeron 300A, mükemmel hız aşırtma yetenekleriyle tanınıyordu ve o sırada oldukça fazla olmak üzere, stok üzerinde %50 veya daha fazla saat hızı kazanımı sağlıyordu.

Intel Celeron ve Intel Xeon
kod adı Covington, Mendocino Ejderha
Yayın tarihi 1998 1998
Mimari 32 bit 32 bit
veri yolu 64 bit 64 bit
Adres veri yolu 32 bit 36 bit
Maks. Hafıza 4 CİGABAYT 64 GB
L1 önbellek 16 + 16 kb 16 + 16 kb
L2 önbellek 0 KB/128 KB (gömülü, CPU hızında) Harici, 512 - 2408 KB (CPU frekansında)
saat frekansı 266-300MHz/300-533MHz 400-450 MHz
FSB 66 MHz 100 MHz
FPU yerleşik yerleşik
SIMD MMX MMX
İşlem teknolojisi 250 nm 250 nm
transistör sayısı 7 500 000/19 000 000 7.500.000 + nakit
Enerji tüketimi 16-28W 30-46W
Voltaj 2 V 2 V
kristal alan 131 mm²/154 mm2 131 mm² + önbellek
priz Slot1/Soket 370 PPGA yuva 2

Pentium II gibi, Xeon işlemcinin de işlemci kartuşunun içinde harici bir L2 önbelleği vardı. Kapasitesi 512 kB ile 2 Mb arasında, transistör sayısı ise 31 ile 124 milyon arasında değişiyordu.

Pentium III, 1 GHz'e ulaştı



Büyütmek için resmin üzerine tıklayın.

Pentium III Coppermine, 1 GHz'e ulaşan ilk x86 seri üretim işlemciydi; 1.13 GHz versiyonu bile piyasaya sürüldü, ancak kararlılık sorunları nedeniyle piyasadan hızla ayrıldı. Yeni bir versiyon Pentium III, geliştirilmiş bir L2 önbelleğine sahipti - şimdi kalıba "yerleşti". İlk modeldeki 512 KB harici önbellekten daha hızlıydı ve o sırada tarama deneyiminizi hızlandıracak bir özellik olarak lanse edildi. İşlemci üç versiyonda daha piyasaya sürüldü: sunucu (Xeon), giriş seviyesi (Celeron) ve mobil (SpeedStep teknolojisinin ilk versiyonuyla).

Intel Pentium III
kod adı Bakır madeni
Yayın tarihi 1999
Mimari 32 bit
veri yolu 64 bit
Adres veri yolu 32 bit
Maks. Hafıza 4 CİGABAYT
L1 önbellek 16 + 16 kb
L2 önbellek Dahili, 256 KB (CPU frekansında)
saat frekansı 500-1133 MHz
FSB 100-133 MHz
FPU yerleşik
SIMD MMX (SSE)
İşlem teknolojisi 180 nm
transistör sayısı 28,1 milyon
Enerji tüketimi 25-35W
Voltaj 1.6V, 1.8V
kristal alan 106 mm²
priz Yuva 1-Soket 370 FCPGA

2002'de, daha büyük bir L2 önbellek (512 kB) ve 130 nm işlem teknolojisi ile Tualatin'in biraz geliştirilmiş bir versiyonu ortaya çıktı. Sunucularda (PIII-S) ve mobil cihazlarda konumlandırıldı ve tüketici düzeyindeki bilgisayarlarda nadiren görüldü.

Pentium 4: çok gürültü, az anlam


Büyütmek için resmin üzerine tıklayın.

Kasım 2000'de Intel, daha yüksek bir saat hızına (en az 1400 MHz) sahipti, ancak saat başına performans açısından rakip CPU'lardan önemli ölçüde daha düşük olan yeni Pentium 4 işlemcisini duyurdu. AMD Athlon(ve hatta Pentium III'ün) eşit frekanslarda daha hızlı olduğu ortaya çıktı. Sorunları daha da karmaşık hale getirmek için Intel, Rambus RDRAM belleğine (o sırada CPU FSB gereksinimlerini karşılayan tek bellek standardı) geçmeyi denedi, ancak başarısız oldu. Çok pahalı ve sıcak olan Pentium 4, birçok değişiklik ve iyileştirmeden sonra hala birkaç yıl içinde rekabetçi bir seviyeye ulaşmayı başardı (L3 önbellek ve Hyper-Threading gibi teknolojilerin eklenmesinin küçük bir kısmı sayesinde).

Intel Pentium 4 32 bit
kod adı Willamette Kuzey Ormanı Prescott
Yayın tarihi 2000 2001 2004
Mimari 32 bit 32 bit 32 bit
veri yolu 64 bit 64 bit 64 bit
Adres veri yolu 32 bit 32 bit 32 bit
Maks. Hafıza 4 CİGABAYT 4 CİGABAYT 4 CİGABAYT
L1 önbellek 8 kB + 12 Kµops 8 kB + 12 Kµops 16 kB + 12 Kµops
L2 önbellek 256 kb 512 kb 1024 kb
saat frekansı 1.3-2GHz 1.8-3.4GHz 2.4-3.8GHz
FSB 400MHz QDR 400, 533, 800 MHz QDR 533, 800 MHz QDR
SIMD MMX, SSE, SSE2 MMX, SSE, SSE2 MMX, SSE, SSE2, SSE3
SMT/SMP Değil Hiper iş parçacığı (bazı sürümler) Hiper İş Parçacığı
İşlem teknolojisi 180 nm 130 nm 90 nm
transistör sayısı 42 milyon 55 milyon 125 milyon
Enerji tüketimi 66-100W 54-137W 94-151W
Voltaj 1,7 V 1.55V 1.25-1.5V
kristal alan 217 mm² 146 mm² 112 mm²
priz Soket 423/Soket 478 Soket 478 Soket 478/LGA775

Pentium 4 çıktı mobil versiyonlar(değişken çarpanlı), Celeron sürümleri (daha küçük L2 önbellekli) ve Xeon sürümleri (L3 önbellekli). Hyper-threading ve L3 önbellek, ilk olarak sunucularda ortaya çıkan ve daha sonra ana işlemcilere uyarlanan iki teknolojiydi (ancak L3 önbelleği yalnızca pahalı EE hattında mevcuttu).

Dörtlü Veri Hızı (QDR) teknolojisinin kullanılması nedeniyle nominal (fiziksel) frekansın etkin frekansının dört katı olan FSB frekansından da bahsetmeliyiz: 400 MHz veriyolu aslında 100 MHz'de, 533 MHz veriyolu ise 100 MHz'de çalışır. 133 MHz vb. Son olarak, Pentium 4'ün 64-bit sürümleri 2005 yılında ortaya çıktı, ancak bunları daha sonra konuşacağız.

Pentium M: dizüstü bilgisayarlar daha güçlü hale geldi


Büyütmek için resmin üzerine tıklayın.

2003'te dizüstü bilgisayar pazarı muazzam bir hızla büyümeye başladı, ancak Intel yalnızca iki işlemci sunabildi: eskiyen Pentium III Tualatin ve güç tüketimi onu mobil alan için uygun olmayan Pentium 4. Ancak kurtuluş İsrail geliştirme ekibinden geldi: Banias (veya Pentium M). P6 mimarisine dayanan (Pentium Pro ile aynı) bu işlemci, düşük güç tüketimi ile yüksek performans sağladı. Daha az güç tüketirken Pentium 4'ten bile daha iyi performans gösterdi. Bu işlemci 2003 yılında Centrino platformu için kullanıldı ve bunu 2004 yılında daha da hızlı Dothan modeli izledi. Pentium M ile iyi bir performans sergiliyor mobil dünya, ve Stealey (A100) işlemci hala Dothan mimarisini kullanıyor (daha düşük frekanslar ve TDP ile).

Intel Pentium M
kod adı banya dotan
Yayın tarihi 2003 2004
Mimari 32 bit 32 bit
veri yolu 64 bit 64 bit
Adres veri yolu 32 bit 32 bit
Maks. Hafıza 4 CİGABAYT 4 CİGABAYT
L1 önbellek 32 + 32 kb 32 + 32 kb
L2 önbellek 1024 kb 2048 kb
saat frekansı 0.9-1.7GHz 1-2.13 GHz
FSB 400MHz QDR 400, 533 MHz QDR
SIMD MMX, SSE, SSE2 MMX, SSE, SSE2
SMT/SMP Değil Değil
İşlem teknolojisi 130 nm 90 nm
transistör sayısı 77 milyon 140 milyon
Enerji tüketimi 9-30W 6-35W
Voltaj 0.9-1.5V 0.9-1.4V
kristal alan 82 mm² 87 mm²
priz Soket 479 Soket 479

Pentium 4'te olduğu gibi, FSB fiziksel frekansın (QDR) dört katında çalışır. Soket 479 işlemci soketi 478 pim kullanır, ancak bunlar Pentium 4 Soket 478'den farklı olacak şekilde (adaptörler mevcut olmasına rağmen) farklı şekilde düzenlenmiştir.

Pentium 4 64 bit ve bir çekirdek daha alıyor



Büyütmek için resmin üzerine tıklayın.

2005'te Intel Pentium 4'ü iki kez geliştirdi.Önce Prescott-2M ve ardından Smithfield geldi. İlki Prescott tasarımına dayanan 64-bit bir işlemci olurken, ikincisi ilk çift çekirdekli işlemci oldu. Aslında, çok benzerler ve diğer Pentium 4 CPU'larla benzer sorunları var: saat başına çalıştırılabilir komutların (IPC) düşük sayısı ve yüksek ısı dağılımı nedeniyle saat hızlarını artırmanın zorluğu. Core 2 Duo beklentisiyle şirketin pazardaki zor konumunu bir şekilde telafi etmek için tasarlanan bu iki işlemci, nadiren övüldü. Pentium D işlemcinin (Smithfield'ın ticari adı) iki çekirdeği olmasına rağmen, bunlar tek bir pakette iki Prescott kristaliydi.

Intel Pentium 4
kod adı Prescott-2M Smithfield
Yayın tarihi 2005 2005
Mimari 64 bit 64 bit
veri yolu 64 bit 64 bit
Adres veri yolu 64 (gerçekten 36) bit 64 (gerçekten 36) bit
Maks. Hafıza 64 GB 64 GB
L1 önbellek 16 kB + 12 Kµops 2 x 16 kB + 12 Kµops
L2 önbellek 2048 kb 2 x 1024 KB
saat frekansı 3-3.6 GHz 2.8-3.2GHz
FSB 800MHz QDR 800MHz QDR
SIMD MMX, SSE, SSE2, SSE3 MMX, SSE, SSE2, SSE3
SMT/SMP Hiper İş Parçacığı İki çekirdek (bazı modellerde Hyper-Threading)
İşlem teknolojisi 90 nm 90 nm
transistör sayısı 169 milyon 230 milyon
TDP 84-115W 95-130W
Voltaj 1,2 V 1,2 V
kristal alan 135 mm² 206 mm²
priz LGA775 LGA775

Ana akım Pentium 4 işlemcilerin PAE'yi (36-bit'e karşı 32-bit bellek işlemi sağlar) desteklememesine ve 4 GB RAM ile sınırlı olmasına rağmen, bu modellerin bu eşiği aşabileceğini belirtmek ilginçtir. Pratikte, adres yolu hala 36 bit (Xeon'un 40 biti) ile sınırlıydı, ancak PAE (4 GB sayfa yönetimi) teknolojisi geçmişte kaldı - 64 bit programlar mevcut tüm belleği kullanabilir.

Intel'in Sanal Çoklu İşlem Teknolojisi (SMT) olan Hyper-Threading, bazı modellerde de mevcuttu (Xeon ve Extreme Edition). Son olarak, 65 nm serisi (9x0 serisi) Pentium 4 daha sonra ortaya çıktı, ancak önemli bir iyileştirme içermiyordu.

İlk mobil çift çekirdekli işlemci



Büyütmek için resmin üzerine tıklayın.

2006'da Intel duyurdu çekirdek işlemci ikili. Bu ilk çift çekirdekli dizüstü bilgisayar işlemcisi harika bir performans sağladı - Pentium 4'ten çok daha iyi. Aynı zamanda ilk "gerçek" x86 çift çekirdekli işlemci olduğunu da kanıtladı. Örneğin önbellek paylaşıldı (Pentium D daha çok bir pakette iki yongayı birleştirmek gibiydi). İşlemci, yeni Centrino Duo platformunun bir parçası oldu ve çok başarılı oldu. Tek dezavantajı, Pentium 4'e benzer bir 32-bit işlemci olarak kalmasıdır.

Intel Çekirdek İkilisi
kod adı Yona
Yayın tarihi 2006
Mimari 32 bit
veri yolu 64 bit
Adres veri yolu 32 bit
Maks. Hafıza 4 CİGABAYT
L1 önbellek 32 + 32 kb
L2 önbellek toplam 2048 kb
saat frekansı 1.06-2.33GHz
FSB 667 MHz
SIMD MMX, SSE, SSE2, SSE3
SMT/SMP iki çekirdek
İşlem teknolojisi 65 nm
transistör sayısı 151 milyon
TDP 9-31W
Voltaj 0.9-1.3V
kristal alan 91 mm²
priz Soket 479

Core Solo'nun tek çekirdekli versiyonu ve 667 MHz'e karşı 533 MHz QDR veri yolu (133 MHz) kullanan daha düşük güç varyantları da mevcuttu. Bu işlemci, mobil sektör için tasarlanmış bir işlemci için bir ilk olan sunucularda da (kod adı Sossaman) kullanıldı. İşlemcinin aslında Core 2 Duo ile tanıtılan Core mimarisini kullanmadığını ve dizüstü bilgisayarlarda Core 2 Duo (Merom) varyantı tarafından hızla değiştirildiğini unutmayın. Ayrıca Yonah'ın Soket 479'u diğer Pentium M işlemcilerin Soket 479'undan farklıdır.

Modern Lider: Core 2 Duo


Büyütmek için resmin üzerine tıklayın.

2006'da Intel, hızla en çok satan haline gelen bir işlemciyi tanıttı: Core 2 Duo. Geliştirilmesi sırasında Pentium M'nin deneyimi büyük ölçüde çekildi, ancak işlemci yeni Core mimarisini kullanıyor. Ondan önce Intel iki işlemci serisi yayınladı: masaüstü bilgisayarlar için Pentium 4, dizüstü bilgisayarlar için Pentium M ve sunucular için her iki hat. Ama şimdi, aksine, Intel'in tüm hatlar için tek bir mikromimarisi var. 64-bit Core 2 Duo, masaüstü bilgisayarlar, dizüstü bilgisayarlar ve sunucular için aşağıdan yukarıya tüm segmentlerde mevcuttur.

Mimarinin, farklı sayıda çekirdek (birden dörde, yani Solo'dan Dörtlü'ye), önbellek (512 KB'den 12 MB'ye kadar) ve FSB hızına (400'den 1600 MHz'e) sahip yapılandırmalarla sonuçlanan birçok sürümü vardır. QDR). Resim orijinal Core 2 Duo modelini göstermektedir, ancak daha hızlı versiyonları da (45nm) vardır.

Intel Core 2 Duo
kod adı conroe
Yayın tarihi 2006
Mimari 64 bit
veri yolu 64 bit
Adres veri yolu 64 (gerçekten 36) bit
Maks. Hafıza 64 GB
L1 önbellek 32 + 32 kb
L2 önbellek toplam 2048 kb
saat frekansı 1.8-3GHz
FSB 800-1066-1333MHz
SIMD MMX, SSE, SSE2, SSE3, SSSE3
SMT/SMP iki çekirdek
İşlem teknolojisi 65 nm
transistör sayısı 291 milyon
TDP 65W
Voltaj 1,5 V
kristal alan 143 mm²
priz LGA 775

Mobil sürümler (Merom) temelde aynıdır (ancak daha yavaş bir FSB ile o kadar hızlı değildir), Extreme Edition çeşitleri daha hızlıdır. Core 2 Duo, tek bir pakette iki çift çekirdekli Conroe kalıbı kullanan dört çekirdekli bir modelde de mevcuttur. Core 2 Duo'nun (Penryn) 45nm versiyonu daha fazla önbelleğe ve daha az ısıya sahip ancak temeller ilk modelle aynı kalıyor.

Gelecek: Nehalem, Atom, vb.



Büyütmek için resmin üzerine tıklayın.

Tahmin edebileceğiniz gibi, bu sadece bir serideki ilk makale. Bunu AMD işlemciler hakkında ikinci bir makale takip edecek ( AMD grafik kartları ATI). Ama tarih Intel işlemciler x86 Core 2 Duo ile bitmiyor, gelecekte daha fazla model geliyor. Nehalem ve Atom da x86 işlemcilerdir. Ve bir şey bize, Intel'in Larrabee adlı grafik pazarına yaklaşan girişinin de birden fazla x86 çekirdeği üzerine kurulduğunu söylüyor.

x86 veya x64: Bu ne anlama geliyor?

Elbette bu atamaların çoğu bir çıkmaza yol açıyor ve bugün bundan çıkacağız.

Aslında x86, x64- sadece bit cinsinden ölçülen işletim sisteminin bit derinliğinin bir tanımı (sırasıyla 32 ve 64 bit). Bu arada, 16 bit de var - ancak sadece bu bit derinliğini anlayan işlemcilerle tanışmak zaten oldukça zor. Bunun için 10 yıl geriye gitmeniz gerekiyor. Her durumda, onları “tanıtın” x86 veya x64 sistemler çalışmayacaktır.

Hepsi ne için?

Bütün bunlar, PC'nizin işlemcisinin ilgileneceği sayıların bit derinliğini belirlemenizi sağlar. Ve bu nedenle altında x86 veya x64 sistemlerin kendi program, sürücü ve benzer sürümleri vardır.

Daha yüksek bir bit derinliği (x64), diğer şeylerin yanı sıra, hesaplamaların doğruluğunu önemli ölçüde iyileştirmeye olanak tanır. Ancak ortalama bir kullanıcının böyle bir ihtiyacı yoktur ve 64 bitlik bir sistem kullanması gereken tek nokta şudur: rasgele erişim belleği bilgisayarda 4 gigabayttan fazla.

Gerçek şu ki, 32 bit sistemler 4 gigabayttan fazla RAM "görmez".

Yani sonunda: x86 veya x64?

4 Gb veya daha az RAM'iniz varsa 32 bit (x86) bir sistem sizin için yeterli olacaktır. Aksi takdirde, x64 kullanın.

Bir zamanlar programların açıklamasında x86 veya x64'ü gördüğümde kafam çok karıştı ve neden 64-bit için x64 belirtilirse, 32-bit için x86 ve x32 değil de anlayamadım. İkincisi çok daha tanıdık ve mantıklı olmalı ve x86 hatırlanamayacak bir şey değil, bu rakam mantığa meydan okuyor: matematiksel olarak 86 64'ten fazladır, ama gerçekte yarısı kadar olduğu ortaya çıkıyor. "x86 x64 x32" sayılarından bu şekilde bir bilmece bile yapabilirsiniz. Ama aslında...

x86, x32'ye ve ayrıca x64'e eşittir

Tüm bu karışıklık ile aslında her şey basitleşiyor ve her zaman olduğu gibi hata, bir sürü x86 ve x64'ü birlikte yazan yazarlardan geliyor. Hemen hemen herkesin bu şekilde yazmasına rağmen, bu kesinlikle yanlış.

Gerçek şu ki, x86 bir mikroişlemci mimarisi ve otuz iki bit ve altmış dört bit programlara uygulanabilen bir donanım platformudur. x86 adı, ilk intel i8086 işlemcisinin adından ve 86'nın her zaman sona atfedildiği bir dizi sonraki işlemcinin adından türetilmiştir.Bir süre sonra, yeni işlemcilerin dijital tanımları isimlerle değiştirilmeye başlandı, bu nedenle halk Pentium ve Celeron'u öğrendi, ancak x86 platformu bu güne kadar değişmedi.

İki değer ve üç atama? x86, x32 ve x64 - nasıl doğru yazılır?

Ve eğer x86 işlemcinin mimarisiyse, x32 ve x64 bit derinliğidir - adres alanı ve işlemcinin bir saat döngüsünde işleyebileceği bilgi miktarı.

Program uyumluluğu hakkında yazdıklarında, x86 bit derinliğini belirterek, 32 bitlik bir platformu ima ettiğinde, bu yanlıştır ve yalnızca yanıltıcıdır. x86_32bit veya x86_64bit belirtmek doğrudur. Sezgisel x32 veya kısaca x64.

Yani özetleyebiliriz: şimdi x86 eski moda şekilde gösteriliyor (Microsoft bile bununla günah işliyor), bu platform tekilken ve henüz kimse 64-bit bilmiyordu. x64 platformu ortaya çıkınca olduğu gibi belirtmeye başladılar ve eski 32 bit platform çoğu durumda x86 olarak kaldı. Ve şimdi özü anlamayanlar için alakalı, hatalı ve kafa karıştırıcı değil. Ve şimdi anladın. :)

x32 veya x64? Ne seçeceksin? Daha iyi ne var?

Çok sık soru ortaya çıkıyor, x32 veya x64 işletim sistemini seçmeli miyim? Yani, otuz iki bit mi yoksa altmış dört bit mi?
Bu retorik, teorik ve tartışmalı bir sorudur. Açıkçası x64 daha iyidir, ancak her zaman değil ve Windows kullanıyorsanız değil. Hayır, herhangi bir Windows x64, Windows x32'den biraz daha hızlı çalışır, ancak yalnızca 64 bit sistem için tüm programlara ve tüm sürücülere sahipseniz. Çoğu zaman, bilgisayar modernse, genellikle bileşenler için tüm sistem sürücülerine sahiptir. Ancak sorun programlarda ve özellikle video ve ses kodeklerinde yatmaktadır. Elbette bir şey olmayacak. Ve eğer x64 sisteminde otuz iki bit program çalışabiliyorsa, bunun için sürücüler ve kodekler de x64'e ihtiyaç duyar. Yıllar geçtikçe bu sorun ortadan kalkıyor, ancak şimdiye kadar tamamen ortadan kaldırılmadı. X32 sistemlerinde böyle bir sorun yoktur ve ev için böyle bir seçim yapmak daha iyidir.
not 2010'dan önce, 32-bit veya 64-bit işletim sistemi seçme konusunda gerçekten bir ikilem vardı. Nedenleri yukarıdaki paragrafta açıklanmıştır. O zamandan bu yana beş yıl geçti ve bu sorun artık gözlemlenmiyor. Tabii 32-bit lehine bazı özel önemli sebepler olmadıkça, hiç düşünmeden 64-bit kurmak daha iyidir.

Günümüzde en popüler iki işlemci mimarisi vardır. Bu, 80'lerde geliştirilen ve şu anda kullanılan x86'dır. kişisel bilgisayarlar ve ARM - işlemcileri daha küçük ve daha ekonomik hale getirmenizi sağlayan daha modern. Çoğu mobil cihazda veya tablette kullanılır.

Her iki mimarinin de artıları ve eksileri ile uygulama alanları vardır, ancak ortak özellikleri de vardır. Birçok uzman, ARM'nin geleceğin olduğunu söylüyor, ancak yine de x86'nın sahip olmadığı bazı dezavantajları var. Bugünkü yazımızda kol mimarisinin x86'dan nasıl farklı olduğuna bakacağız. ARM veya x86 arasındaki temel farkları göz önünde bulundurun ve hangisinin daha iyi olduğunu belirlemeye çalışın.

İşlemci, ister akıllı telefon ister bilgisayar olsun, herhangi bir bilgi işlem cihazının ana bileşenidir. Performansı, cihazın ne kadar hızlı çalışacağını ve pille ne kadar çalışabileceğini belirler. Basit bir ifadeyle, işlemci mimarisi, programların derlenmesinde kullanılabilen ve belirli işlemci transistör kombinasyonları kullanılarak donanım düzeyinde uygulanabilen bir dizi talimattır. Programların donanımla etkileşime girmesine izin veren ve verilerin belleğe nasıl aktarılacağını ve bellekten nasıl okunacağını belirleyen onlardır.

Üzerinde şu anİki tür mimari vardır: CISC (Karmaşık Komut Seti Hesaplama) ve RISC (Azaltılmış Komut Seti Hesaplama). Birincisi, tüm durumlar için talimatların işlemcide uygulanacağını varsayar, ikincisi, RISC, geliştiricilerin, işlem için minimum düzeyde gerekli olan bir dizi komutla bir işlemci oluşturma görevini belirler. RISC komutları daha küçük ve daha basittir.

x86 mimarisi

x86 işlemci mimarisi 1978'de geliştirildi ve ilk olarak Intel işlemcilerde ortaya çıktı ve CISC tipine ait. Adını bu mimariye sahip ilk işlemci olan Intel 8086 modelinden almıştır. Zamanla, daha iyi bir alternatifin olmaması nedeniyle AMD gibi diğer işlemci üreticileri bu mimariyi desteklemeye başlamıştır. Artık bunun için standart masaüstü bilgisayarlar, dizüstü bilgisayarlar, netbook'lar, sunucular ve diğer benzer cihazlar. Ancak bazen tabletlerde x86 işlemciler de kullanılır, bu oldukça yaygın bir uygulamadır.

İlk Intel 8086 işlemcinin bit derinliği 16 bitti, ardından 2000'de 32 bit mimari işlemci piyasaya sürüldü ve daha sonra 64 bit mimari ortaya çıktı. Ayrı bir makalede ayrıntılı olarak tartıştık. Bu süre zarfında mimari çok gelişti, işlemcinin performansını büyük ölçüde artırabilecek yeni komut setleri ve uzantılar eklendi.

x86'da birkaç tane var önemli eksiklikler. İlk olarak, bu, uzun bir gelişim tarihi nedeniyle ortaya çıkan ekiplerin karmaşıklığı, kafa karışıklığıdır. İkincisi, bu tür işlemciler çok fazla güç tüketir ve bu nedenle çok fazla ısı üretir. x86 mühendisleri başlangıçta maksimum performans elde etme yolunu seçti ve hız kaynak gerektiriyor. arm x86 arasındaki farklara bakmadan önce ARM mimarisinden bahsedelim.

ARM mimarisi

Bu mimari biraz sonra x86 için tanıtıldı - 1985'te. İngiltere'de tanınmış bir şirket olan Acorn tarafından geliştirildi, daha sonra bu mimariye Arcon Risk Machine adı verildi ve RISC tipine aitti, ancak daha sonra geliştirilmiş versiyonu, şimdi ARM olarak bilinen Advanced RISC Machine piyasaya sürüldü.

Bu mimariyi geliştirirken mühendisler, x86'nın tüm eksikliklerini ortadan kaldırmayı ve tamamen yeni ve en verimli bir mimari yaratmayı kendilerine hedef olarak belirlediler. ARM yongaları minimum güç tüketimi ve düşük bir fiyat aldı, ancak x86'ya kıyasla düşük performansa sahipti, bu nedenle başlangıçta kişisel bilgisayarlarda fazla popülerlik kazanmadılar.

x86'dan farklı olarak, geliştiriciler başlangıçta asgari maliyetler kaynaklarda, daha az işlemci talimatına, daha az transistöre sahipler, ancak buna göre daha az Ek özellikler. Ancak son yıllarda ARM işlemcilerin performansı arttı. Bu ve düşük güç tüketimi göz önüne alındığında, çok yaygın olarak kullanılmaya başlandılar. mobil cihazlar tabletler ve akıllı telefonlar gibi.

ARM ve x86 arasındaki farklar

Ve şimdi bu mimarilerin gelişim tarihine ve temel farklılıklarına baktık, hangisinin daha iyi olduğunu belirlemek ve farklarının ne olduğunu daha doğru anlamak için ARM ve x86'nın çeşitli özelliklerine göre ayrıntılı bir karşılaştırmasını yapalım. dır-dir.

Üretme

x86 ve kol üretimi farklıdır. x86 işlemciler yalnızca Intel ve AMD olmak üzere iki şirket tarafından üretilir. Başlangıçta bu bir şirketti, ancak bu tamamen farklı bir hikaye. Yalnızca bu şirketler bu tür işlemcileri serbest bırakma hakkına sahiptir, bu da altyapı geliştirme yönünü yalnızca onların yöneteceği anlamına gelir.

ARM çok farklı çalışır. ARM geliştiren şirket hiçbir şey yayınlamıyor. Sadece bu mimarinin işlemcilerini geliştirmek için izin veriyorlar ve üreticiler zaten ihtiyaç duydukları her şeyi yapabilirler, örneğin ihtiyaç duydukları modüllerle belirli çipleri serbest bırakabilirler.

Talimat sayısı

Kol ve x86 mimarileri arasındaki temel farklar bunlardır. x86 işlemciler daha güçlü ve üretken olarak hızla gelişti. Geliştiriciler çok sayıda işlemci talimatı eklediler ve burada sadece temel bir set değil, aynı zamanda vazgeçilebilecek birçok komut var. Başlangıçta bu, diskteki programların kapladığı bellek miktarını azaltmak için yapıldı. Ayrıca birçok koruma ve sanallaştırma seçeneği, optimizasyonlar ve çok daha fazlası geliştirilmiştir. Bütün bunlar ek transistörler ve enerji gerektirir.

ARM daha basittir. Burada çok daha az işlemci talimatı vardır, yalnızca işletim sistemi tarafından ihtiyaç duyulan ve gerçekte kullanılanlar. x86'yı karşılaştırırsak, hepsinin sadece %30'u olası talimatlar. Programları elle yazmaya karar verirseniz öğrenmeleri daha kolaydır ve uygulamak için daha az transistör gerektirirler.

Güç tüketimi

Bir önceki paragraftan başka bir sonuç çıkıyor. Kartta ne kadar fazla transistör varsa, alanı ve güç tüketimi o kadar büyük olur ve bunun tersi de geçerlidir.

x86 işlemciler, ARM'den çok daha fazla güç tüketir. Ancak güç tüketimi, transistörün boyutundan da etkilenir. Örneğin, bir Intel i7 işlemci 47 watt tüketir ve akıllı telefonlar için herhangi bir ARM işlemci 3 watt'tan fazla tüketmez. Önceleri tek eleman boyutu 80 nm olan kartlar üretilirken, Intel bunu 22 nm'ye indirdi ve bu yıl bilim adamları 1 nanometre eleman boyutunda bir kart oluşturabildiler. Bu, performanstan ödün vermeden güç tüketimini büyük ölçüde azaltacaktır.

Son yıllarda x86 işlemcilerin güç tüketimi büyük ölçüde azaldı, örneğin yeni Intel Haswell işlemciler pille daha uzun süre dayanabiliyor. Şimdi fark kolu ile x86 arasındaki fark yavaş yavaş siliniyor.

Isı dağılımı

Transistör sayısı başka bir parametreyi etkiler - bu ısı üretimidir. Modern cihazlar, enerjinin tamamını etkin eyleme dönüştüremez, bir kısmı ısı olarak dağılır. Kartların verimliliği aynı, yani daha az transistör ve boyutları ne kadar küçükse işlemci o kadar az ısı üretecek. Artık ARM ya da x86 daha az ısı üretecek diye bir sorun yok.

işlemci performansı

ARM maksimum performans için tasarlanmamıştır, x86'nın başarılı olduğu yer burasıdır. Bu kısmen daha az sayıda transistörden kaynaklanmaktadır. Ancak son zamanlarda, ARM işlemcilerin performansı artıyor ve dizüstü bilgisayarlarda veya sunucularda zaten tam olarak kullanılabilirler.

sonuçlar

Bu yazıda, ARM'nin x86'dan nasıl farklı olduğuna baktık. Farklar oldukça ciddi. Ancak son zamanlarda, her iki mimari arasındaki çizgi bulanıklaştı. ARM işlemciler daha üretken ve daha hızlı hale geliyor ve x86, kartın yapısal elemanının boyutunun küçülmesi nedeniyle daha az güç tüketmeye ve daha az ısı üretmeye başlıyor. ARM işlemcileri sunucularda ve dizüstü bilgisayarlarda ve x86 işlemcileri tabletlerde ve akıllı telefonlarda zaten bulabilirsiniz.

Ve bu x86 ve ARM hakkında ne düşünüyorsunuz? Sizce geleceğin teknolojisi nedir? Yorumlara yazın! Bu arada, .

ARM mimarisinin gelişimi ile ilgili videonun sonunda:

x86-64, AMD tarafından geliştirilen ve programların 64 bit modunda çalışmasına izin veren x86 mimarisinin 64 bitlik bir uzantısıdır.

Öykü

Orijinal spesifikasyon 2000 yılında AMD tarafından geliştirildi. Mimariyi uygulayan ilk işlemci AMD K8'di (2003'te piyasaya sürüldü).

O yıllarda (90'ların sonu ve 2000'lerin başı), HP ve Intel 64-bit IA-64 (Intel Itanium) mimarisini geliştirdi. Ancak VLIW (çok uzun talimat kelimesi) ilkesine dayalı olarak kökten farklıydı ve 32-bit x86 mimarisiyle uyumlu değildi. Daha önce yazılmış çok sayıda yazılımın IA-64'te çalışmaması nedeniyle, bu mimari popülerlik kazanamadı. 2001'in sonunda, IA-64 için IA-64 için Windows XP 64-bit'in özel bir sürümü piyasaya sürüldü.

x86 mimarisi 1978 yılına kadar uzanıyor, 16 bit olarak başladı ve 1985'te 32 bit oldu. Mimaride geriye dönük uyumluluk için çok sayıda koltuk değneği bulunur. 32-bit bilgi işlemle birlikte öleceği tahmin ediliyordu. Ancak, x86-64'ün gelişi ona yeni bir hayat verdi.

adlandırma

Bu teknolojinin isimlerinde bazen karışıklığa yol açan çeşitli varyasyonlar vardır.

  • x86-64- ilk versiyon. AMD ilk ön spesifikasyonu bu isim altında yayınladı.
  • x64- işletim sürümlerinin resmi adı Windows sistemleri, Microsoft ve Oracle tarafından bir mimari adı olarak da kullanılır.
  • AMD64- İlk Clawhammer ve Sledgehammer işlemcilerin piyasaya sürülmesinden sonra, mimari adına AMD geliştiricisinin adı ortaya çıktı. Artık AMD uygulaması için resmi.
  • EM64T- Intel uygulamasının ilk resmi adı. Genişletilmiş Bellek 64 Teknolojisi anlamına gelir.
  • Intel 64 Intel mimarisinin şu anki resmi adıdır.

Bazen AMD'den bahsetmek, kullanıcıları işletim sisteminin yerel sürümlerinin dağıtımlarını kullanmayı reddettikleri ölçüde yanıltır ve AMD sürümünün Intel işlemcilerinde çalışmayacağını öne sürer. Aslında, yazılım dağıtıcıları AMD64 adını sadece AMD'nin bu teknolojinin geliştirilmesinde öncü olduğu için kullanırlar.

Kullanıcılar genellikle x86-64 mimarisini IA-64 ile karıştırır. Bu tür hatalardan kaçınmak için Intel 64 ve IA-64'ün tamamen farklı, uyumsuz mikroişlemci mimarileri olduğu unutulmamalıdır. 2017'de herhangi bir yerde IA-64 (Itanium) mimarili bir işlemci bulmanız pek olası değil.

yaygınlık

süper bilgisayarlar

TOP-500 süper bilgisayarlar listesinde, x86-64 mimarisi, daha önce popüler olan RISC mimarilerinin ve 32-bit sürümlerin yerini aldı. Intel, Itanium'unu tanıtmaya çalıştı (2004'te ulaşılan maksimum pay), ancak başarılı olamadı.

Veri merkezleri

x86 yongaları kullanan sunucular hala yüzde 90'dan fazla pazar payına sahip. http://www.common.org/servers/x86-servers-data-center/

Tüm Google veri merkezleri artık iyi bilinen x86 mimarisine sahip Intel işlemcileri kullanıyor. Ancak Google, alternatif çözümler kullanmayı planlıyor. https://habrahabr.ru/company/ibm/blog/282820/

2017'de, vakaların ezici çoğunluğunda büyük miktarda bilgiyi işlemeye yönelik algoritmalar, x86-64 mimarisinde yürütülür, bu yüzden AISOBOI'nin MA kursunda dikkate alıyoruz.

Kayıtlar

x86-64 mimarisinde şunlar bulunur:

  • 16 64-bit genel amaçlı tamsayı kaydı (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 - R15);
  • 8 80-bit kayan nokta kaydı (ST0 - ST7);
  • 8 64-bit MMX kaydı (MM0 - MM7, ST0 - ST7 kayıtları ile alanı paylaş);
  • 16 128 bit SSE kaydı (XMM0 - XMM15);
  • 64 bit RIP işaretçisi ve 64 bit RFLAGS bayrak kaydı.

64 bitlik kayıtlardaki işlemler (toplama, çıkarma vb.), 32 bitlik kayıtlardaki işlemlerle aynı süreyi alır.

Şaşırtıcı görünebilir, ancak kayıtların 32 bitlik alt yarısındaki işlemler, üst 32 biti sıfırlar. Örneğin,

hareket eax, ebx

rax içindeki yüksek bitleri otomatik olarak sıfırlayacaktır.

Bu optimizasyon için yapılır. Bu, işlemcinin bağımlılık zincirlerini kırmasına izin verir (düşük bitlerle işlemlere devam etmek için yüksek bitlerin sayılmasını beklemeye gerek yoktur, çünkü yüksek bitlere neredeyse kesinlikle kimsenin ihtiyacı olmayacaktır).

Modern işlemci çok karmaşıktır. Mimari kılavuzunda açıklanan işlemci modeli, modern çekirdeğin gerçek mekanizmasını doğru bir şekilde tanımlamaz. Özellikle işlemci kayıtları kavramı doğru değildir, "donanımda" eax veya rax kaydı diye bir şey yoktur. İşlemci kayıtları kavramı sanallaştırılmıştır. Bu teknolojinin adı kayıt yeniden adlandırma(kayıt yeniden adlandırma). Talimat kod çözücü, büyük bir kayıt bankasından bir kayıt tahsis eder. Komut tamamlandığında, bu dinamik olarak tahsis edilmiş kaydın değeri, rax diyelim, değeri şu anda tutan her kayda geri yazılır. Bunun verimli bir şekilde çalışmasını sağlamak ve aynı anda birden fazla talimatı yürütmek için, işlemlerin birbirine bağlı olmaması çok önemlidir. Bir kaydın değerinin diğer talimatlara bağlı olması kötüdür.

Talimatlar

x86-64 türünde CISC(karmaşık komut seti hesaplama). Neredeyse tek modern CISC mimarisidir. Diğer popüler mimariler prensip üzerine inşa edilmiştir. RISC(indirgenmiş komut seti bilgisayarı).

Aynı zamanda, modern x86 işlemciler, CISC uyumlu olmalarına rağmen, RISC çekirdekli işlemcilerdir ve resmi olarak hibrit olarak kabul edilirler. Bu tür hibrit CISC işlemcilerinde, CISC talimatları bir dizi dahili RISC talimatına dönüştürülürken, bir x86 talimatı birkaç RISC talimatı üretebilir ve bir süperskalar boru hattında aynı anda birkaç talimat yürütülür. Küçük talimatları aynı anda takip etmek kolaydır.

Talimatlar, pratikte 1 ila 15 bayt arasında değişen uzunluktaki bir bayt dizisi olarak kodlanır.

Elenen Fırsatlar

x86-64, x86'ya kıyasla bazı eski yönergeleri kaldırdı. Bunlar BCD aritmetiği ve aam (çarpma için ASCII ayarı) gibi komutlardır. Bununla birlikte, eski talimatların çoğu kaldı.

modlar

Bu mimarinin işlemcileri iki çalışma modunu destekler: Uzun mod ("uzun" mod) ve Eski mod ("devralınan", 32-bit x86 ile uyumluluk modu).

uzun mod

"Uzun" mod - x86-64 işlemciler için "yerel". Bu mod, mimarinin sağladığı tüm ek avantajlardan yararlanmayı mümkün kılar. Bu mod 64 bit işletim sistemi gerektirir.

Bu mod, 64 bit programları çalıştırmanıza izin verir; ayrıca (geriye dönük uyumluluk için) 32-bit uygulamalar gibi 32-bit kodun yürütülmesi için destek sağlanır, ancak 32-bit programlar 64-bit sistem kitaplıklarını kullanamayacak ve bunun tersi de geçerlidir. Bu sorunla başa çıkmak için, çoğu 64-bit işletim sistemi, gerekli olan iki set sağlar. sistem dosyaları: biri yerel 64 bit uygulamalar için, diğeri 32 bit programlar için.

eski mod

Bu "eski" mod, işlemcinin x86 işlemciler için tasarlanmış yönergeleri yürütmesine olanak tanır ve 32 bit kod ve işletim sistemleriyle tam uyumluluk sağlar. Bu modda, işlemci tam olarak Athlon veya Pentium III gibi bir x86 işlemci gibi davranır ve x86-64 mimarisi tarafından sağlanan ek özellikler (ekstra kayıtlar gibi) kullanılamaz. Bu modda, 64 bit programlar ve işletim sistemiçalışmayacak.

Bu mod, alt modları içerir:

  • gerçek mod
  • Korumalı mod
  • Sanal 8086 modu

MS-DOS'ta gerçek mod kullanıldı, bilgisayar başlatıldığında gerçek modda BIOS kodu uygulandı. Korumalı mod, modern çoklu görev işletim sistemlerinin 32 bit sürümlerinde kullanılır. Sanal 8086 modu - esas olarak sözde oluşturmak için tasarlanmış korumalı bir alt mod. "sanal DOS makineleri". 32 bitten ise Windows sürümleri 16 bitlik bir DOS uygulaması çalıştırıyorsanız, bu işlemci modunu kullanan NTVDM öykünücüsü çalışıyordur. Başka bir öykünücü olan DOSBox, bu V86 modunu kullanmaz, ancak tam öykünme yapar.

Modlar arasında geçiş yapma

Yeniden başlatmadan uzun moddan gerçek veya sanal 8086 moduna geçemezsiniz. Bu nedenle NTVDM, Windows'un 64 bit sürümlerinde çalışmaz ve 16 bit programları çalıştıramazsınız.

En son x86-64 işlemci, gerçek modu tam olarak destekler. Önyükleme BIOS üzerinden gerçekleştirilirse, önyükleyici kodu (sektör #0'dan) gerçek modda yürütülür. Ancak, BIOS yerine UEFI kullanılıyorsa, Uzun moda geçiş daha da erken gerçekleşir ve gerçek modda hiçbir kod yürütülmez. Modern bir bilgisayarın hemen 64 bit uzun modda çalışmaya başladığını varsayabiliriz.

Bellekte adres çevirisi

Basitçe söylemek gerekirse, işlemci veri yolu aracılığıyla belleğe erişir. Veri yolunda değiş tokuş edilen bellek adresleri fiziksel adreslerdir, yani sıfırdan kullanılabilir belleğin üst sınırına kadar olan ham sayılardır. fiziksel hafıza(örneğin, takılı 8 GB RAM'iniz varsa 2 33'e kadar). Daha önce, işlemci ve bellek yongaları arasında bir kuzey köprüsü bulunuyordu, ancak Intel uygulamasında Sandy Bridge'den başlayarak işlemci kalıbına entegre edilmiştir.

Fiziksel adresler belirli ve nihaidir - çeviri yok, çağrı yok, ayrıcalık kontrolü yok. Onları otobüse koydun ve hepsi bu. Ancak programlar, belleğe erişilmeden önce fiziksel adreslere çevrilmesi gereken mantıksal bellek adreslerini kullanır. Kavramsal olarak, çeviri şöyle görünür:

Bu fiziksel bir diyagram değil, yalnızca adres çeviri sürecinin bir açıklamasıdır.

Çeviri, CPU bir bellek adresine atıfta bulunan bir talimatı yürüttüğünde başlar. İlk adım, bu mantıksal adresi doğrusal bir adrese çevirmektir. Ancak, programda doğrudan doğrusal adresleri kullanmak yerine bunu neden yapıyorsunuz? Bu evrimin sonucudur. x86 segmentasyonunun anlamını gerçekten anlamak için 1978'e geri dönmemiz gerekiyor.

Gerçek modda bellek segmentasyonu

16-bit 8086 işlemci, 16-bit kayıtlar kullanıyordu ve sadece 216 bayt belleğe doğrudan hitap edebiliyordu. Mühendisler, kayıtların bit derinliğini genişletmeden büyük miktarda bellekle nasıl çalışacaklarını anladılar.

Belirli bir 16 bitlik adresin hangi 64 kilobaytlık bellek parçasına ait olduğunu belirtmesi beklenen segment kayıtları icat edildi.

Çözüm mantıklı görünüyor: önce bir segment kaydı kuruyorsunuz, esasen "yani, X adresinden başlayan bir bellek parçasıyla çalışmak istiyorum" diyorsunuz; o zaman 16 bitlik adres zaten o yığın içinde bir ofset olarak kullanılıyor.

Toplamda, önce dört adet 16 bitlik segment kaydı sağlandı, ardından iki tane daha eklendi:

  • CS=Kod Segmenti
  • DS = Veri Segmenti
  • ES = Hedef Segmenti
  • SS = Yığın Segmenti

Bir bellek hücresinin doğrusal adresini hesaplamak için işlemci, bölümün başlangıcının fiziksel adresini hesaplar - sanal adresin bölüm kısmını 16 ile çarpar (veya eşdeğer olarak, onu 4 bit sola kaydırır) ve daha sonra elde edilen sayıyı segmentin başlangıcından itibaren bir kayma ile ekler. Böylece, segmentler kısmen çakıştı ve toplamda yaklaşık 1 MB fiziksel bellek adreslenebildi. Soru, segment kaydının değerini neden hemen 65536 ile çarpmıyorsunuz, çünkü o zaman 4 GB belleği adreslemek mümkün olurdu. O zaman gerekli değildi ve sadece çipin maliyetini arttırdı.

Gerçek modda, bellek koruması ve erişim hakları yoktur.

Programlar küçüktü, bu nedenle yığınları ve kodları tamamen 64 KB'ye sığdı, hiçbir sorun yoktu. O eski zamanların C dilinde, normal bir işaretçi 16 bit idi ve varsayılan olarak bir segmente göre işaret edildi, ancak bir segment kaydının değerini içeren uzak işaretçiler de vardı.

#Dahil etmek int main() ( char far * p = (char far * ) 0x55550005 ; char far * q = (char far * ) 0x53332225 ; * p = 80 ; (* p) ++; printf ("%d" ,* q ) ; 0 döndür ; )

Burada her iki işaretçi de aynı fiziksel adresi 0x55555 gösterir.

Korumalı mod

32-bit korumalı mod da bölümlere ayrılmış bir bellek modeli kullanır, ancak farklı bir ilkeye göre düzenlenir: bölümlerin konumu, RAM'de bulunan özel yapılar (tanımlayıcı tablolar) tarafından tanımlanır.

Bellek bölümleri de aynı bölüm kayıtları tarafından seçilir. Segment kayıt değeri (segment seçici) artık ham bir adres değil, bunun yerine şuna benzer bir yapıdır:

İki tür tanımlayıcı tablo vardır: global (GDT) ve yerel (LDT). Genel tablo, işletim sisteminin bölümlerini ve her bir çekirdeğin kendine ait olan paylaşılan veri yapılarını tanımlar. Her belirli görev (süreç) için yerel bir tablo tanımlanabilir. TI biti GDT için 0 ve LDT için 1'dir. İndeks, segment tanımlayıcı tablosundaki tanımlayıcının numarasını belirtir. RPL alanı, Talep Edilen Ayrıcalık Düzeyi anlamına gelir.

Tablonun kendisi yalnızca 8 baytlık girişler (segment tanımlayıcıları) içeren bir dizidir, burada her giriş bir segmenti tanımlar ve şöyle görünür:

Segmentin temel adresine ek olarak, tanımlayıcılar, segmentin boyutunu (daha kesin olarak, maksimum kullanılabilir ofset) ve belleği korumak ve çeşitli segmentler için segmente erişim haklarını belirlemek için kullanılan çeşitli segment özelliklerini içerir. yazılım modülleri. Temel adres, segmentin başlangıcını belirten 32 bitlik doğrusal bir adrestir ve sınır, segmentin ne kadar büyük olduğunu belirtir. Temel adresi mantıksal bellek adresine eklemek, doğrusal bir adres verir (artık 16 ile çarpma işlemi yapılmaz). DPL (Tanımlayıcı Ayrıcalık Düzeyi) - tanımlayıcı ayrıcalık düzeyi; segmente erişimi kontrol eden 0 (en ayrıcalıklı, çekirdek modu) ile 3 (en az ayrıcalıklı, kullanıcı modu) arasında bir sayıdır.

CPU 32 bit moddayken, kayıtlar ve talimatlar yine de tüm doğrusal adres alanını adresleyebilir. Öyleyse neden temel adresi sıfıra ayarlayıp mantıksal adreslerin doğrusal adreslerle eşleşmesine izin vermiyorsunuz? Intel buna "düz model" diyor ve modern x86 çekirdeklerinin yaptığı da tam olarak bu. Bu, segmentasyonu devre dışı bırakmakla eşdeğerdir.

Uzun mod

x86-64 mimarisinde, uzun (64 bit) modda segmentasyon kullanılmaz. Dört segment kaydı (CS, SS, DS ve ES) için temel adres 0'a zorlanır. FS ve GS segment kayıtları hala sıfır olmayan bir temel adrese sahip olabilir. Bu, işletim sisteminin bunları hizmet amacıyla kullanmasına izin verir.

Örneğin, Microsoft Windows x86-64'te, istisna işleme, iş parçacığı yerel değişkenleri ve diğer iş parçacığı başına bilgiler hakkında bilgiler içeren iş parçacığı başına küçük bir yapı olan İş Parçacığı Ortam Bloğuna işaret etmek için GS kullanır. Benzer şekilde, Linux çekirdeği, CPU başına verileri depolamak için GS segmentini kullanır.

Alıştırma: kayıtları görüntüleme

(Gdb) bilgi kayıt R13 0x7fffffffde60 140.737.488.346.720 R14 0x0 0 R9 0x7ffff7dea700 140.737.351.952.128 r10 0x7fffffffdc10 140.737.488.346.128 r11 0x7ffff7a32e50 140.737.348.054.608 r12 0x400440 4.195.392 0x40052d 4.195.629 rbx 0x0 0 rcx 0x0 0 rdx 0x7fffffffde78 140.737.488.346.744 RSI 0x7fffffffde68 140.737.488.346.728 rdi 0x1 1 RBP 0x7fffffffdd80 0x7fffffffdd80 RSP 0x7fffffffdd80 0x7fffffffdd80 R8 0x7ffff7dd4e80 140,737,351,863,936 RgX r15 0x0 0 kopya 0x400531 0x400531 bayraklar 0x246 [ PF ZF IF ] cs 0x33 51 ss 0x2b 43 ds 0x0 0 es 0x0 0 fs 0x0 0 gs 0x0 0

Koruma Halkaları

Uygulamaların Intel x86 bilgisayarlarda sınırlı izinlere sahip olduğunu ve yalnızca işletim sistemi kodunun belirli görevleri gerçekleştirebileceğini muhtemelen sezgisel olarak biliyorsunuzdur. Nasıl çalışır? x86 ayrıcalık seviyeleri, işletim sistemi ve CPU'nun kullanıcı modu programlarının yeteneklerini kısıtlama mekanizmasıdır. 0'dan (en ayrıcalıklı) 3'e (en az ayrıcalıklı) kadar dört ayrıcalık düzeyi ve üç temel kaynak vardır: bellek, G/Ç bağlantı noktaları ve belirli makine yönergelerini yürütme yeteneği. Herhangi bir zamanda, x86 işlemcisi, hangi kodun yapıp yapamayacağını belirleyen belirli bir ayrıcalık düzeyinde çalışır. Bu ayrıcalık seviyeleri genellikle koruma halkaları olarak tanımlanır ve en içteki halka en yüksek ayrıcalıklara karşılık gelir. Çoğu modern x86 çekirdeği yalnızca Ring 0 ve Ring 3'ü kullanır.

sanal adres alanı

Sanal adresler 64 bit genişliğinde olmasına rağmen, mevcut uygulamalar (ve tasarım aşamasında olan tüm yongalar), 264 baytlık (16 eksabayt) sanal adres alanının tamamının kullanılmasına izin vermemektedir. Bu, 32 bit makinelerde sanal adres alanının yaklaşık dört milyar katı olacaktır. Öngörülebilir gelecekte, çoğu işletim sistemi ve uygulaması bu kadar büyük bir adres alanına ihtiyaç duymayacak, bu nedenle bu kadar geniş sanal adreslerin uygulanması, gerçek bir fayda sağlamadan adres çevirisinin karmaşıklığını ve maliyetini artıracaktır. Bu nedenle AMD, mimarinin ilk uygulamalarında, adres çevirisi sırasında sanal adresin yalnızca 48 bitinin gerçekten kullanılacağına karar verdi.

Ek olarak, AMD belirtimi, herhangi bir sanal adresin üst 16 bitinin, 48'den 63'e kadar olan bitlerin, bit 47'nin kopyaları (işaret uzatma ilkesine göre) olmasını gerektirir. Bu gereksinim karşılanmazsa, işlemci bir istisna atar. Bu kurala uyan adreslere "kanonik form" denir. Kurallı adresler, 256 terabayta kadar kullanılabilir sanal adres alanı ekler. Bu, 32 bit makinelerin 4 GB sanal adres alanından hala 65536 kat daha fazladır.

Bu kural, gerektiğinde gerçek 64 bit adreslemeye ölçeklenebilirlik sağlar. Çoğu işletim sistemi (Windows NT ailesi ve GNU/Linux dahil) adres alanının üst yarısını (çekirdek alanı) alır ve alt yarısını (kullanıcı alanı) uygulama kodu, kullanıcı modu yığını, yığın ve diğer veri alanları için tutar. . "Kanonik adres" tasarımı, her AMD64 uyumlu uygulamanın esasen iki bellek yarısına sahip olmasını sağlar: daha fazla sanal adres biti kullanılabilir hale geldikçe alt yarısı "büyür" ve bunun tersine, üst yarısı adres alanının üstünde ve aşağı büyür.

Windows'un ilk x64 sürümleri 256 TB'nin tamamını bile kullanmıyordu; sadece 8 TB kullanıcı alanı ve 8 TB çekirdek alanı ile sınırlıydılar. 48 bitlik adres alanının tamamı, Ekim 2013'te piyasaya sürülen Windows 8.1'de desteklendi.

Sayfa tablosu yapısı

32 bit x86 sistemleri tarafından kullanılan iki seviyeli sayfa tablosu sistemi yerine, uzun modlu sistemler dört seviyeli sayfa tablosu kullanır.

Olası sayfa boyutları:

  • 4 KB (2 12 bayt) - en sık kullanılan (x86 ile aynı)
  • 2 MB (2 21 bayt)
  • 1 GB (2 30 bayt)

48 bit alanın tamamı için tam bir 4K sayfa eşleme hiyerarşisi, 512 GB RAM'den biraz daha fazla yer kaplar (256 TB sanal alanın yaklaşık %0,195'i).

Alıştırma: Ne kadar sürede düşecek?

Bu kodun standarda göre yanlış olduğu, Tanımsız Davranış içerdiği ve eğer öyleyse, derleyici her şeyi yapabilir, örneğin hiç çökmez. Ama yine de, x86-64'te çalıştırırsanız, belirli bir anda çöküyor...

#Dahil etmek #Dahil etmek charbuf[ 1 ] ; #define PAGE_SIZE 4096 int main() ( char * ptr = buf; for (;; ) ( int offset = (intptr_t ) ptr % PAGE_SIZE; printf ("%p: offset = %d") \n", ptr, ofset) ; *ptr = "a" ; // Segmentasyon hatası bekleniyor!++ ptr; ) 0 döndür ; )

Yığın organizasyonu ve işlev çağrıları

x86-64'te, x86'ya kıyasla, genel amaçlı kayıtların sayısı gözle görülür şekilde arttı (iki kat), bu iyi haber. Bu nedenle, işlevlere argümanları iletmek için daha fazla kayıt kullanılabilirken, bellekte daha az yığın kullanılır ve böylece işlev çağrısı hızlandırılır.

x86'da yığın

Yığın aşağı büyür. Yığının üst kısmı aslında en düşük adrese sahiptir.

Özel kayıt rsp (Yığın İşaretçisi) kullanılır.

Talimat

itme rax

eşdeğerdir

Alt rsp, 8 mov , rax

Talimat

eşdeğerdir

Mov rax, rsp ekle, 8

Linux'ta çağrı kuralı

Linux ve diğer işletim sistemleri, System V AMD64 ABI kuralını kullanır.

Basit olması için kendimizi tamsayı argümanları ve işaretçilerle sınırlayacağız.

İlk altı argüman kayıtlardan geçirilir:

Bu yeterli değilse, yedinci argüman yığından geçmiştir.

Bir işlev rbx, rbp ve r12–r15 kayıtlarını kullanmak isterse, çıkmadan önce bunları sıfırlamalıdır.

64 bite kadar dönüş değeri rax'ta, 128 bite kadar - rax ve rdx'de saklanır.

yığın çerçevesi

Böyle bir işlev için

uzun myfunc(uzun a, uzun b, uzun c, uzun d, uzun e, uzun f, uzun g, uzun h) ( uzun xx = a * b * c * d * e * f * g * h; uzun yy = a + b + c + d + e + f + g + h; uzun zz = utilfunc(xx, yy, xx % yy) ; dönüş zz + 20 ; )

yığın şöyle görünecek:

Kırmızı bölge (kırmızı bölge)

Rsp ile gösterilen konumun dışındaki 128 baytlık alan ayrılmış olarak kabul edilir ve sinyal veya kesme işleyicileri tarafından değiştirilmemelidir. İşlevler, işlev çağrıları için gerekli olmayan geçici veriler için bu alanı kullanabilir. Özellikle, yaprak işlevleri (başka hiçbir işlevin çağrılmadığı), yürütmenin başında ve sonunda yığın işaretçisini rsp değiştirmek yerine, bu bölgeyi yığın çerçevesinin tamamı için kullanabilir.

Bu bir optimizasyon. Rsp'yi azaltmak ve arttırmak zaten iki talimattır, bunlardan kaçınılabilir.

Örneğin:

uzun utilfunc(uzun a, uzun b, uzun c) ( uzun xx = a + 2 ; uzun yy = b + 3 ; uzun zz = c + 4 ; uzun toplam = xx + yy + zz; dönüş xx * yy * zz + toplam; )

Temel Çerçeve İşaretçisini Kaydetme

rbp işaretçisi (ve x86'daki öncülü ebp), işlev yürütme sırasında yığın çerçevesinin en üstüne sabit bir 'pin' olan, manuel programlama ve hata ayıklama için çok kullanışlıdır. Ancak, bir süre önce, derleyici tarafından oluşturulan kodun gerçekten rbp'ye ihtiyacı olmadığı fark edildi (derleyici, rsp'den ofsetleri kolayca takip edebilir).

Bu nedenle bazı derleyiciler agresif optimizasyonlarda temel işaretçiyi atlamaya başladılar, böylece işlev giriş ve sonsözünü kısalttı ve genel amaçlar için ekstra bir kayıt sağladı.

gcc, x86 varsayılan temel işaretçisini korur, ancak -fomit-frame-pointer derleme bayrağıyla optimizasyona izin verir.

Her neyse, AMD64 ABI'nin sunduğu başka bir "yeni şey", temel işaretçiyi açıkça isteğe bağlı hale getiriyor. gcc bu öneriyi izler ve optimizasyonlarla derlerken varsayılan olarak x64 çerçeve işaretçisini atlar. -fno-omit-frame-pointer bayrağını belirterek kaydetme seçeneği sunar.

Windows'ta çağrı kuralı

Yaşasın, artık cdecl/stdcall/fastcall/thiscall/register/safecall yok, yalnızca bir çağrı kuralı kaldı! Ama hayır, Microsot vektör çağrısını geliştirdi...

İlk dört argüman kayıtlardan geçirilir: rcx, rdx, r8, r9.

rbx, rbp, rdi, rsi, rsp, r12, r13, r14 ve r15 kayıtları fonksiyon tarafından sıfırlanmalıdır.

Alıştırma: sayıların toplamı 3: c3 geri

sistem çağrıları

Sistem çağrısı yürütme mekanizmaları

C fonksiyonları

open() , write() , getpid() gibi herhangi bir sistem fonksiyonunu C kodundan çağırdığınızda, aslında sistemin kendisini doğrudan aramasını sağlamıyorsunuz. Aynen böyle, kullanıcı modundan (ring 3) çekirdek modunda (ring 0) işlevi çağırarak çalışmaz. Standart kitaplığın içinde uygulanan olağan işlevler çağrılır ve zaten içeride şu veya bu yöntemle bir sistem çağrısı yaparlar:

  • yazılım kesme yoluyla,
  • sistem çağrısı talimatı aracılığıyla,
  • sysenter talimatı aracılığıyla.

Yazılım kesintisi

Kesintiler, işlemciye, geçerli kodun yürütülmesini kesmenin (bu nedenle bunlara kesinti denir) ve işleyicide belirtilenleri acilen yapması gerektiğine dair bir sinyal gibidir.

Bir kesme, işlemci tarafından yürütülen geçerli kodda bir kesinti gerektiren yüksek öncelikli bir olayın meydana geldiğini işlemciye bildirir. İşlemci, mevcut etkinliğini askıya alarak, durumunu kaydederek ve olaya yanıt veren ve ona hizmet eden bir kesme işleyicisi (veya kesme işleyicisi) adı verilen bir işlevi yürüterek yanıt verir, ardından denetimi kesilen koda geri döndürür.

Bir yazılım kesintisi, bir programın özel bir talimat kullanarak uygulayabileceği eşzamanlı bir kesintidir.

x86 işlemcilerde, eşzamanlı bir kesmeyi açıkça çağırmak için, argümanı kesme numarası (0'dan 255'e kadar) olan bir int komutu vardır. Korumalı ve uzun modda düzenli programlar kesintilere hizmet edemez, bu işlev yalnızca sistem kodunda (işletim sistemi) kullanılabilir.

Linux'ta, sistem çağrılarını yürütmek için kesme numarası 0x80 kullanılır. Kesinti işleyicisi 0x80, Linux çekirdeğidir. Program, kesmeyi yürütmeden önce, yürütülecek sistem çağrısının numarasını eax kaydına yerleştirir. Kontrol 0 halkasına geçtiğinde, çekirdek bu sayıyı okur ve istenen işlevi çağırır.

Bu yöntem 32 bit sistemlerde yaygın olarak kullanıldı, 64 bit sistemlerde eski olarak kabul edilir ve kullanılmaz, ancak bir takım kısıtlamalara rağmen (örneğin, siz 64 bit işaretçiyi parametre olarak geçiremez).

  • Sistem çağrı numarasını eax'a girin.
  • Argümanları ebx , ecx , edx , esi , edi , ebp kayıtlarına koyun.
  • int 0x80 talimatını çağırın.
  • eax'tan sonucu alın.

Birleştiricide mygetpid()'in (geçerli sürecin PID'sini alma) örnek bir uygulaması (20 sayısı getpid sistem çağrısı için kullanılır):

Intel_syntax ön ek yok. globl mygetpid .text mygetpid: mov eax , 20 int 0x80 ret

sistem çağrısı talimatı

Bu, 64-bit Linux'ta kullanılan daha modern bir yöntemdir ve daha hızlıdır.

  • Sistem çağrı numarası rax'a yerleştirilir.
  • Argümanlar rdi , rsi , rdx , r10 , r8 ve r9'a yazılır.
  • Ardından sistem çağrısı çağrılır.
  • Rax'ta sonuç.

Montajcıda mygetpid() (geçerli sürecin PID'sini alma) uygulamasının bir örneği (tablodaki getpid sistem çağrısı için 39 sayısı kullanılır):

Intel_syntax ön ek yok. globl mygetpid .text mygetpid: mov rax , 39 sistem çağrısı ret

Sistem Çağrı İzleme

Linux'ta, strace kullanıcı modu aracı, belirli bir programın yaptığı sistem çağrılarını izlemenizi sağlar.