Veri sorunları

Vikipedi, özgür ansiklopedi
(Veri Sorunları sayfasından yönlendirildi)

Veri sorunları, bir önceki işlemde henüz tamamlanmayan bir veri kullanılmak istenirse oluşmaktadır. Tam başarımda çalıştırabilmek için, boru hattının ilk komut yürütülürken sonradan gelen 4 bağımsız komutu da çalıştırmaya başlaması gerekmektedir. Eğer bu 4 komutun, ilk komutun çıkışıyla alakası yoksa bu bağımlılık durumu ortadan kalkıncaya kadar boru hattının mantık kontrol birimi araya bir kesme ya da bekletme sokmalıdır. Yürütmeyi ilerletmek gibi teknikler, programı durdurmak gibi olası durumları önemli ölçüde azaltırlar. Boru hattı kullanılan sistem, kullanılmayan sisteme göre daha hızlı olmasına karşın, birçok program kodu normal işletim hızını değiştirmeye izin vermemektedir. İşlemin gerçekleştirilmesi için bir önceki işlem tamamlanmalı, bir sonraki işlem geciktirilmeli veya "yönlendirme" yapılmalıdır (Yönlendirme yükleme buyruklarında her zaman sorunu çözemeyebilir. Örneğin; yüklemeden sonra gelen bir buyruk, yükleme yapılan yazmacı okumak isterse burada sorun ortaya çıkar. Bu durumda sorunu çözmek için komutu durdurmamız/geciktirmemiz gerekir). Veri sorunu yükleme komutlarında da karşımıza çıkabilir. Eğer yükleme komutundan sonra gelen bir başka komut, yüklemenin yapılacağı yazmacı kullanmak isterse veri sorunu oluşur ve yüklemeden sonra gelen komutu durdurmamız gerekir. Bunun için de ayrı bir denetim birimi gerekir. Bunun dışında boru hattını, bir komutu sonraki aşamaya geçirmeyerek tıkayabiliriz (baloncuk ile).

Örnek[değiştir | kaynağı değiştir]

MOVE r1, r2
LW r3, (r1)
ADD r1, r1, 7
LW r5, (r1)

Yukarıda bulunan örnek ile "zaman içinde geriye doğru" bağımlılıkla, veri sorununu karşımıza çıkarmakta. Örnekte görüldüğü gibi; taşıma komutunda r1 yazmacına r2 yazmacındaki değer yazılıyor. Yükleme işleminde, r1 yazmacının adresindeki değerin r3 yazmacına yüklenmesi isteniyor. Ancak taşıma komutundaki işlem henüz gerçekleşmediği için yükleme işleminin geciktirilmesi gerekiyor. Toplama işleminde de r1 yazmacı kullanılıyor. Bu işlem de ancak r1 yazmacına taşıma komutundaki değer yazılınca başlayacaktır. Sonuncu yükleme komutunda, bir üstündeki toplama işleminde r1 yazmacına değer kaydedileceği için yine bir bağımlılık söz konusudur. Toplama işlemindeki değer kaydedilene kadar alt satırdaki yükleme komutu başlayamaz. Bu durumda ilk yöntem r1 yazmacına değerin yazılmasını beklemek (bir sonraki komutu geciktirerek), ikinci yöntem ise yönlendirme yaparak sorunu çözmektir. Aşağıda bulunan çizelgede bu komutların boru hattı yöntemi ile kaç çevrimde yapıldığı gösterilmiştir.