Commodore sayı 20, sayfa 23

Bu sayfadaki yazılar

Sayfanın metni

Sayfa 23

7. EXEC SİSTEMİ

Exec sistemi, AMIGA'da hayati önemi olan çok önemli altprogramlardan oluşmuş. Yaptığı işler, listeler ve veri kuyrukları (queue) yaratıp işlemek, yapılan işleri önceliklerine göre kontrol etmek ve yürürlüğe sokmak, interrupt'ları işlemek ve servis vermek, çevresel bilgi giriş/çıkışını düzenlemek ve diğer fonksiyonları yerine getirmektir. AMIGA'da list-node adı verilen veri yapısı çok önemli bir yer tutar. List-node, bulunduğu listedeki, kendinden önce ve sonraki node'lara pointer (göstergeç) içeren veri bloğudur. Exec'in içindeki birçok altprogramlar yardımıyla, kullanıcıyı zahmete sokmadan bu tip listeler oluşturmak, araya bir liste sokmak veya aradan bir liste çıkarmak mümkündür. (Burada sözü edilen programlama yöntemi sayesinde hafızada parça parça bulunan birçok bilgi parçasını, -bunlar veri veya program olabilir-, birbirleriyle birleştirmek veya aralarındaki ilişkiyi kesmek mümkün olmaktadır. Mesela, bir program çalışırken kullandığı bellek parçaları birbirlerinin hemen arkasından gelmeyebilir. Arada diğer programların verileri bulunabilir. Birkaç programın aynı anda çalıştığı zaman belleğin karmakarışık bir yapıya bürüneceği kesin! Fakat tüm programlar, EXEC sistemi sayesinde belleği kullanıp, onun gönderdiği parametrelere uyarlarsa hiçbir sorun çıkmıyor.) EXEC'in içindeki diğer bir grup altprogramlar da yapılacak işleri düzenlemenizi sağlıyor. Yapılan işler işin tipi ve önceliğine göre ayırt ediliyorlar ve bunlar yüksek öncelikliden alçak öncelikli olana doğru işleniyorlar. AMIGA'da birçok program veya işlem iş (task) olarak muamele görür. İşlerin önceliği için ayrılmış alan, -128 ile +127 arasında bir sayı içerir. Bu sayı işlerin işleneceği sırayı belirler. Aynı öncelikli işlemler, AMIGA'nın zaman dilimlerinden daha evvelden belirtilmiş bir bölümünü kullanarak işlenirler. O anda yapılan işlemden daha yüksek öncelikli bir işlem sıraya girerse hemen o anki işlem kesilir ve yüksek öncelikli olanı işleme konulur. Her işlemin durumu, register'leri ve bilgi yığını ayrı olduğu için, o işlem kaldığı yerden devam edebilir. Bunun sağladığı bir avantaj da, beraber yürüyen programların birbirini nasıl etkileyecekleri gibi bir sorunun bulunmayışı. Çünkü yürüyen her programın bütün ihtiyaçları öyle düzenli gideriliyor ki, tüm sistemde tek kendi çalışıyor zannediyor. (Burada da bir örnek verme gereksinimi duyuyorum; diyelim ki bir program kullanıcıdan herhangi bir uyarı bekliyor. Böyle bir durumda o program bir bakıma donuyor ve tüm fonksiyonları duruyor. Ta ki istediği bilgi ve uyarıları alana kadar. Sağlanan avantaj ise, bekleme durumları içeren programların bu durumlarda sistem zamanının hiçbir mikrosaniyesini(!) ziyan etmemeleri.)

8. SİSTEM BUS'INI PAYLAŞMA

Düşünün ki AMIGA aynı anda diski okuyor, dört kanallı müzik çalıyor, 16 renkli düşük çözünürlüklü grafik gösteriyor, üstünde de sekiz adet sprite, fakat gene de 68000'in hızında görünür bir düşme olmuyor. Tabii ki, böyle bir şeyin gerçekleşmesi ancak sistem bus'ının (taşıtının) çeşitli alt sistemler tarafından paylaşılmasıyla olur.

AMIGA'nın 68000 ana işlem ünitesi (herhalde artık ezberlediniz!) 7.15909 MHz hızında çalışıyor. Aynı anda, RAM bellek elemanları ise bunun iki katı hızda çalışıyor. 68000'in birçok işlemleri bus'ı kullanmak ve kendi içinde işlemler yapmak arasında gidip geliyor. Tabii bu arada bellek elemanları tüm hızda çalışıp diğer zamanlarda boş kalmakta. Bus'ın paylaşılmasında senkronizasyon olayı elektron tabancasının bir yatay çizgi çekme süresi (yaklaşık 64 mikrosaniye) içinde gerçekleşiyor. Bu süre her biri 280 nanosaniye uzunluğunda 226 hafıza erişimi içeriyor. COPPER, BLITTER ve 68000 çift sayılı darbeleri (0, 2, 4,..) kullanıyorlar. Tek sayılı darbelerin dördü dinamik RAM'leri refresh eden DMA kanalına, üçü disk DMA'sına, dördü ses DMA'sına (dört kanal ses için yeterli), onaltısı sprite DMA'sına (sekiz sprite'a yetiyor) ve sekseni ise ekranı çizen bit-plane DMA'sına (16 renkli düşük çözünürlüklü grafik için yeterli) kullanılıyor. Her çip'in kendi içindeki DMA devreleri kendi zamanı geldiğini anlayıp kimseyle karışmadan bus'ı kullanıyor. Çoğu zamanlar COPPER ve BLITTER aktif değildir ve 68000'in tam hızında çalışmasına izin verirler. Aslında 68000'in bazı emirleri bus'ı tek sayılı zamanlarda kullanmak isterler. (Her yerde olduğu gibi, 68000'in komutları arasında da uyumsuzlar var demek ki...) Böyle durumlarda; basit bir senkronizasyon olayıyla 68000'in boşluk bulana kadar beklemesi sağlanır. Yukarıda anlatılan paylaşım olayı bazı durumlarda değişebilir. Diyelim ki düşük çözümlemede dört bitplane'den fazlasını kullandınız veya yüksek çözümlemeli ekranda iki bitplane'den fazlasını kullandınız; böyle durumlarda ekranı çizen bit-plane DMA'sı 68000'in darbelerinden bir kısmını çalacaktır. Bundan başka gerek COPPER, gerekse BLITTER, 68000'den daha yüksek önceliğe sahiptirler. Bunlar, kendilerine gereken veriyi 68000'i beklemeden daha önce alırlar. Blitter çalıştığı anda şayet 68000 sıkışık durumda kalırsa bunu blitter'e bildirir ve birkaç darbe ödünç alır; daha sonra blitter kontrolü gene eline alır. Böylece blitter çalışırken bile 68000 birkaç darbe çalışabilme imkanına kavuşur. Gerektiğinde bu durum da ortadan kaldırılabilir. Blitter'in register'lerinden birinde yer alan blitter priority (öncelik) bitini yaktığımız anda blitter işi bitene kadar 68000'e hiçbir şans vermez. Aslında bu olay göründüğü kadar kötü değil; düşünün bir kere, şayet blitter olmasaydı, ve onun işini 68000 yapmak zorunda olsaydı, AMIGA'nın gücü gerek hız, gerekse verimlilik açısından oldukça düşecekti (onda bir gibi bir oranda).

Klavyeyle gezinmek için ← ve → tuşları.