Bir
komutun işlenmesi kabaca 4 aşamadan oluşur , birincisi komutun bellekten
okunması (Fetch) ikincisi komutun çözümlenmesi , (Decode) yani hangi komutun ne
anlama geldiğinin anlaşılması , üçüncüsü komutun işletilmesi (Execute) ve son
olarakta sonucun geri yazılmasıdır(Retire). 8086 Mikroişlemcisin de işlenen
komutlar bu sırayı takip eder , önce komut okunur , ne olduğuna bakılır , gerekli
registerler ayarlanır , işlenen işletim ünitesine sokulur ve sonuç alınır. Her
komutun işletim süresi bellidir , bazı komutlar 1 saat darbesinde tamamlanırken
bazı komutların tamamlanması için onlarca hatta yüzlerce saat darbesi gereklidir. Mikroişlemci dünyası işhattı(Pipelining) kavramıyla tanışınca tüm hesaplar alt üst oldu.
Henry
ford model t arabalarının üretimini artırmak için ışhattı(assembly line) kavramını
ortaya çıkarmıştı , buna göre arabanın üretimi sırasında yapılması gereken tüm
işlemler bir bant üzerinde sadece tek bir işle görevlendirilmiş işçilerin
çalışmasıyla gerçekleşiyor , bandın başından sonuna gidene kadar araba
tamamlanıyordu. mikroişlemcilerde de bir komutun işlenişi çeşitli safhalardan
oluştuğuna göre aynı taktiğin işlememesi içinde bir sebep yok. Arka arkaya
gelen 10 komut düşünelim k1,k2,k3......k10 olsun. İşhattı (pipeline )olmayan
bir sistemde bir k komutunun işlenmemesi için de n adet saat darbesi
gereksin,basit bir çarpmayla bu tür bir sistemde bu tür bir komutun işhatsız
bir işlemcide işlenmesi için gereken süre 10*n olacaktır. İyi düzenlenmiş bir işhatlı
sistemde de teorik olarak aynı
komutun ışlenmesi için geçen süre 2n+10 saat darbesi olacaktır. Birinci komut işhattının
ikinci aşamasına geldiği zaman ikinci komut işhattının birinci aşamasına
girer, ıkinci işletilip iş hattından çıktığı zamansa n numaralı komut iş hattına girmiş olur. Son komutun işhattından çıkması da n saat darbesi süre alacağından
2n+10(komut sayısı) sonucu elde edilmiş olur. Eğer yeterince fazla komut
işletilecekse x sayıda komutun işletilmesi sadece x saat darbesinde hallediliş
olur. yani sanki tüm komutlar 1 saat darbesinde işletiliyormuş gibi davranır.
Bu muhteşem bir fikirdi pentium işlemcilerinde 6 kademeli , pentium pro da da
13 kademeli bir işhattını intel işlemcilerine yerleştirdi. İntel pentium pro ve
sonraki işlemcilerinin fpu’su (kayan noktalı sayıları işleyen ünite ) iş
hatlıdır ve normalde çok uzun sürecek olan virgüllü sayıların çarpma ve toplama
gibi işlemlerinin işleniş hızı çok artırılmıştır. amd k6 serisi işlemciler
kayan noktalı işlemleri hızla gerçekleştirse de işhatlı olmadığından kayan noktalı işlemlerde pentium 2-3 serisi işlemcilerden
geri kalmaktadır. amd athlonıse pentium’lara göre daha gelişmiş bir fpu ış
hattı yapısına sahiptir.
Ancak işhatlarının işletimi
her zaman bu kadar mükemmel yürümüyor. hatta bazen işhattı kullanımının yan
etkileri bile olabilir. Gerçek bir programda çoğu zaman birbirine benzeyen
komutlar yukarıda anlatıldığı gibi arka arkaya gelmez. Şu durumu düşünelim gene
10 komutumuz olsun ancak 6. komut 2. komutun sonucunu kendisi için kullanmak istiyorsa
işletim (execution) aşamasına girmeden önce 2. komutun tamamlanıp sonucunun
ortaya çıkmasını beklemek zorundadır. bu bekleme durumuna pipelinestall adı
verilir. Tüm program işletimi bu sırada beklemeye alınır ve performans düşer.
İkinci ve daha kötü bir
durum ise şartlı dallanma komutlarının işhattına girmesiyle ortaya çıkar.
şartlı dallanma komutları iş hattına girdikten sonra eğer işhattına alınan
komutlardan farklı bir yere dallanıyorsa dallanma komutundan sonra işhattına
alınmış bütün komutların işhattından boşaltılması ve dallanılan yerdeki
komutların alınmaya başlaması gerekir. Bu duruma pipeline flush adı verilir ve
2n kadar zamanın boşa harcanmasına sebep olur.
Pentium 2 deki gibi derin
bir işhattının sürekli olarak beklemeye uğraması performansa ağır bir darbe
indirebilir. İntel 902’larin ortasında çıkardığı pentium pro işlemcisinde bu
tür bir sorunla karşılaşmıştı. Pentium pro 32 bitlik komutlar için optimize edilmişti ve işhattıda
buna göre ayarlanmıştı bu yüzden çok gelişmiş mimarisine karşın 16 bitlik
uygulamalarda selefi pentium işlemcisinin gerisinde kalmıştı.
Özet olarak 3 çeşit
olumsuzluk mevcuttur,bunlar;
-Yapısal olumsuzluklar:donanım eşzamanlı yürütme
yaparken tüm olasılıkları kombine edemez ve böylelikle çakışmalar meydana
gelebilir.
-Veri olumsuzlukları:Üst üste işlenen veriler
eğer bir önceki komutun sonucuna göre işlenecekse çeşitli olumsuzluklar meydana
gelebilir.
-Kontrol olumsuzlukları:PC den PC ye
donanım değişeceğinden dolayı herhangi bir değişiklik meydana gelmesi durumunda
işleyiş(pipeline) olumsuz etkilenir.