“Von Neumann mimarisi” adından da anlaşılacağı üzere, ünlü amerikalı matematikçi ve bilgisayar bilimcisi John von Neumann’ın (1903-1957) bilgisayarın iç yapısına ve çalışma prensibine dair tasarladığı mimariye verilen addır. Günümüz teknolojisinin gelişim hızı göz önüne alındığında, ortaya çıkış tarihi açısından çok eskilere dayandığı söylenebilen (1946) bu mimari, şaşırtıcı bir biçimde hala günümüz bilgisayarlarının bir anlamda temelini oluşturmaktadır.

Tarihçesi

Mimari ilk defa, 2. Dünya Savaşı sırasında integral hesabı yapmak için üretilen ENIAC makinesinin kullanımı sırasında göze çarpan bir yavaşlıktan yola çıkılarak tasarlanmıştır. ENIAC her ne kadar güçlü bir makina olsa da, yapacağı işlemler için gerekli olan komutları fiziksel bir veri girişinden (üzerinde delikler bulunan uzun kağıtlardan) sağlıyordu. Bu da işlemlerin yavaş gerçekleşmesine neden oluyordu. Bu soruna çözüm bulmak isteyen J.v.Neumann, kendisinin hastalığı sebebiyle hiç yayınlayamadığı “First Draft of a Report on the EDVAC” (1945)adlı eserinde, komutların da bilgisayarın içinde saklanabileceği bir mimariyi tasarlamış ve bilim dünyasına sunmuştur. Mimariye Von Neumann’ın adının verilmesi bu yapının geliştirilmesine büyük katıkıları olan Arthur Burks, J.Presper Eckert, Hermann Goldstine, ve John Mauchly gibi diğer önemli bilimadamlarına haksızlık gibi görünse de kendisi bu mimariyi teoriden kağıda döktüğü ve dünyanın da haberdar olmasını sağladığı için bu ayrıcalığı haketmiştir.

Von Neumann mimarisi nelerden oluşur?

Genel olarak 4 parçadan oluşur. Birinci parça kontrol birimidir (günümüzde CPU). Bu birim bilginin işlenmesini sağlar. İkinci parça matematiksel ve mantıksal işlemleri yapan aritmetik-mantık birimidir(ALU). Diğer parçalar ise bilgi saklamaya yarayan hafıza bölümü (memory) ve bilgisayar ile insanların iletişimini sağlayan birimlerdir (I/O).

Bu mimariyi geçmişten bugüne taşıyan özellik nedir?

Eski bilgisayarları günümüz bilgisayarlarından ayıran belli başlı özelliklerden biri, hem aritmetik işlemleri yapmak hem de grafik çizmek gibi birçok özellikleri kullanıcıya sağlamak yerine, sadece tek bir işlemi yapmak için özel olarak tasarlanmış olmalarıdır. Mesela hesap makinesi, aritmetik işlem yapmasına rağmen bir kelime-işlemcinin bize sağladığı metin yazma ve düzeltme avantajını sağlayamaz. Bu tarz eski bilgisayarların tasarlandıkları amacın dışında başka işleri de yapmaları için bütün parçalarının baştan inşa edilmesi gerekiyordu. İşte bu soruna Von Neumann, bilgisayarın işlemcisini hafızadan ayırarak çözüm bulmuştur. Komutların da tıpkı işlenen veriler gibi bilgisayarın içinde tutularak ve işlemlerin çok daha hızlı bir biçimde yapılabileceğini göstermiştir. Von Neumann makinelerinde bilgi ile komutlar aynı yere, yani hafızaya konulduğundan bunlardan hangisinin bir veriye, hangisinin bir komuta ait bir gösterim olduğunu anlamak imkansızdır. Aslında sadece bizler değil, bilgisayar da bu gösterimin hangi tip bir bilgiye ait olduğunu anlayamaz. Ancak işlem anında, o bilginin kullanılma yerine göre komut mu, tamsayı mı, yoksa karakter mi olduğuna karar verilir ve bilgi ona göre işleme alınır. Ayrıca, makinelere başka bir işi yaptırmak için artık onların tümden tasarlanmasına ihtiyaç kalmamıştır çünkü sadece komut veren kısmını değiştirerek bambaşka bir işlem yapması sağlanabilmiştir. Bu sitemi kullanan bilgisayalara aynı zamanda saklı-yazılım bilgisayarları da denilmektedir (stored program computer). Saklı-yazılımda bilgisayardaki yazılım kolayca değişebildiği gibi bu yazılım çalışırken kendi üzerinde de değişiklik yapabilmektedir. İşlemci ise çalışma olarak bir defada bir işlem yapma prensibine dayanmaktadır. Bu sebeple herhangi bir işi tek hamlede değil de bunları ufak alt hamlelere bölerek bilgisayara yaptırılması tasarlanmıştır (sequential architecture - dizgisel mimari). Böylece günümüz bilgisayarlarının çalışma prensibinin temelleri atılmış ve Von Neumann mimarisi bugünlere ulaşabilmeyi başarmıştır.

Von Neumann mimarisi ne gibi sorunları beraberinde getirmiştir?

Esas olarak 2 büyük sorundan bahsedilebilir. Birincisi “crash” sorunudur. Bilgisayardaki yazılımların kendi kendini değiştirebilme özelliği olduğunu söylemiştik. Yanlış çalışan programlar kendi üzerlerinde yapmaları gereken değişiklikten farklı bir değişklik yaptıklarında, hem kendileri iş yapamaz hale gelebilirler hem de başka programlara yanıt veremediklerinden onların da çalışmasını durdurabilirler. Eğer çalışan program bilgisayarımızdaki işletim sistemimizin önemli bir kısmını oluşturan bir programsa, tüm bilgisayarın kilitlenmesine bile sebep olabilir. Bu duruma bilgisayar biliminde “crash” adı verilmektedir. “Crash” sorununun önüne geçmek için çeşitli algoritmalar üretilmiştir. Ayrıca işlemcinin içindeki “register”lar (birikeçler) de crash sorununu aşmada yardımcı olurlar.

İkinci sorun ise “bottleneck” yani Türkçe anlamıyla “darboğaz” sorunudur. İlk defa John Backus(1977) tarafından dile getirilen bu sorun daha genel ve daha büyük bir sorun olup, birçok kez denenmesine rağmen hala tam anlamıyla çözülememiştir. Yapısı gereği işlemci işleyeceği bilgileri hafızadan teker teker çağırmaktadır ve onları işleme koymaktadır. Yani herhangi bir anda bilgisayardaki işlemcimiz tek bir işle uğraşmaktadır. Hafıza ile işlemcinin iletişimi ise sistem yolu/ön yüz yolu (address and data bus) tarafından sağlanmaktadır. Ancak son 25 yılda işlemcilerin hızı bir yılda ortalama %55 oranında gelişirken, hafızanın yıllık hız artış oranı %10’larda kalmışır. Bu sebepten hafızanın çalışma hızı işlemcinin çalışma hızı arasındaki fark artmıştır. İşlemcinin bilgileri işleme ve hafızadan yeni bilgiler talep etme hızı, hafızanın bilgi gönderebilme hızından çok daha yüksek olduğundan, bilgi işleme hızı (CPU nun hızından bağımsız olarak) büyük oranda düşmektedir. Bu soruna Von Neumann makinelerindeki “bottleneck” sorunu denmektedir. Bir anlamda işlemcinin hafıza duvarına çarpması gibidir. Her ne kadar Von Neumann’ın “bottleneck” sorunu aşılamamış olsa da şu anda kullanılan bilgisayarlar için durum o kadar da kötü değildir. Başlıca birkaç çözümden söz etmek gerekirse:

  • Gerek işlemcinin gerekse aritmetik-mantık ünitesinin içindeki küçük hafıza kutucukları (register) bilginin buralarda kısa süreliğine saklanmasına ve işlenmesine olanak sağlar. Böylece her seferinde hafızadan, yapılmakta olan bir ara işlemin sonucu istenmez; aksine çok daha hızlı bir biçimde, kontrol ünitesinin içinden alınarak tüm işlem halledilir.
  • Bilgisayar ile bellek arasındaki “ön bellek” (cache momory), sıklıkla kullanılan bilgileri kendi içinde tutar ve bu bilgileri işlemciye ana bellekten almak yerine çok daha hızlı bir yoldan, kendi hafızasından gönderir. Böylece bilgisayarın verimi büyük oranda artmış olur.
  • İşlemcilerin tek seferde tek işlem yapma özelliği değişmese de bilgisayarın içinde birçok işlemci bir arada kullanılarak bir anda birden fazla işlem yapmak mümkündür. Şu anda “bottleneck” sorununa en etkili çözüm olarak düşünülebilr. Birbirinden bağımsız olarak çalışan işler ayrı ayrı işlemcilere paylaştırılarak, işlem yapma hızı bir anda 2-3 katına çıkartılabilmektedir. Günümüzde çok rastlanılan çift çekirdekli bilgisayarlar bu düşüncenin bir ürünüdür.

Von Neumann mimarisinden hiç uzaklaşamadık mı?

Tam olarak olmasa da bu mimariden bir miktar uzaklaşan yaklaşımlar geliştirebildik. Öncelikle, Von Neumann mimarisinde komutlar bilginin ne tür bir bilgi olduğuna karar verir ve ona göre işlem yapar. Yani her farklı tür için farklı bir işlem tanımlanmıştır. Örneğin; tamsayılar için ayrı bir toplama, ondalıklı sayılar için ayrı bir toplama tanımlanmıştır. Ancak günümüz bilgisayarlarında bilginin türü bilginin ikilik sistemdeki gösteriminde saklanmıştır. Bilgisayar bilgiyi işlerken ne tip bir işlem yapacağına bu bilgi sayesinde karar verir. Örneğin; tamsayılarda ilk bit 1 ise negatif tamsayıyı, 0 ise pozitif tamsayıyı gösterir. Buna “typed storage” adı verilir. İkinci olarak; Von Neumann mimarisinde uzun işlemler ayrı ayrı parçalara bölünerek komutlar dizisi halinde bilgisayara verilir ve yaptırılır. Günümüzde ise fonksiyonlar bir işin çok küçük parçalara bölünerek değil de anlamlı ve göreceli olarak daha büyük parçalara bölünerek yapılmasını sağlar. Fonksiyonel yaklaşım LISP dilleriyle başlamıştır. Son olarak ise, bu mimaride, kodlanan programların komutları sırayla ve tek tek uygulanır. Ancak şu anda kullanılan yüksek seviyeli programlama dilleri bize program akışını değiştirme şansını vermiştir. Bu özellikler bize az da olsa Von Neumann makinasının özelliklerinden uzaklaşabildiğimizi göstermektedir.

Görüldüğü üzere Von Neumann mimarisi bilgisayar dünyasında çok önemli bir yere sahiptir ve kullanmakta olduğumuz bilgisayarların temel çalışma prensibini oluşturmaktadır. Bugüne kadar bu mimaride karşılaşılan sorunları aşamamış olmamıza rağmen çok hızlı gelişen ve değişen teknoloji sayesinde, gelecekte bu tip sorunları halledebilecek ve çok daha hızlı işlem yapıp veri işleyebilen, güçlü makinelere sahip olabileceğiz.

Kaynaklar: