Zeka, somut ve soyut nesneler arasında ilişki kurma, düşünme, akıl yürütme ve sonuç çıkarma gibi  yetenekleri amaca yönelik olarak kullanabilmektir. Kişi zekâsı ile sebep ve sonuç arasında bir ilişki kurarak, bilinen bir şeyden bilinmeyenlerin ortaya çıkarılmasını sağlar. Yani eldeki verilerle çıkarımlarda bulunup, sonuca gitmektir.

Yapay Zeka, makinelerin (robot, bilgisayar, bazı elektronik aletler vs.) sorunlara karşı insanlar gibi çözümler getirebilmesine veya programlanmış bir bilgisayarın insan gibi algılama, düşünebilme ve karar veme yeteneğine sahip olmasıdır. Amaca yönelik olarak programlanan bu makineler, bir problem karşısında çözüm üreterek sonuca gidebilirler.

Genetik Algoritma ve Fuzzy Logic yapay zekada, problemlerin çözümü için kullanılan bir çok yöntemden sadece ikisidir.

Genetik Algoritma Nedir?

Evrensel süreç taklit edilerek, çözüm tekniği bulunmayan problemlere çözümler üretebilmektir. Genetik algoritmada probleme bir çok çözüm üretilir ve bu çözümler bir kümede tutulur. Kümede yer alan her bir elemana kromozom denir. Bu koromozomlar arasından, bizim istediğimiz kriterlere daha çok uyan ve çözüme daha yakın olan kromozom, desteklenerek veya çeşitli kriterlere göre diğer koromozomlarla çaprazlanıp, çoğaltılarak kümede daha da güçlü olması sağlanır. Bu şekilde, kümedeki güçlü bireyler sürekli desteklenerek sonuca gidilir.

Genetik Algoritma'da bir çok seçim yöntemi vardır. Rulet Tekeri Yöntemi ve Turnuva Metodu bunlardan sadece iki tanesidir.

Rulet Tekeri Yöntemi : İyi olan koromozomların, daha çok seçilme şansına sahip olmasını sağlayan bir genetik algoritma yöntemidir. Güçlü olan koromozomun seçilme ihtimalini arttırabilmek için, rulet tekeri üzerinde güçlü olana daha çok alan verilir. Bu şekilde güçlü olan ayakta kalması sağlanır. Algoritması yapılırken ise, 100 üzerinden her koromozoma yüzdelik bir pay verilir. koromozomlara yüzdelik paylar verilirken, güçlü olan kromozoma daha yüksek bir yüzdelik pay verilir. Sonrasında ise rastgele bir sayı seçilir ve bu seçilen sayı hangi yüzdelik payın içine düşerse, o koromozom seçilir. koromozom seçme işlemlerinden sonra çaprazlama ile çeşitliliği arttırma işlemleri yapılarak yeni küme oluşuturulur ve bu yeni küme içindeki elemanlar içinde aynı işlem uygulanır.

Rulet Tekeri (Roulette Wheel


Turnuva Metodu : Rastegele seçilen iki koromozomda güçlü olanın seçilmesi mantığıyla çalışan bir algoritmadır. Örneğin koromozom kümesinden rastgele 2 tane koromozom alınır. Bu iki koromozom kıyaslanır. Hangisi daha iyiyse o seçilir. Daha sonra tekrardan rastgele 2 tane koromozom alınır. Bu iki koromozom kıyaslanır. Hangisi daha iyiyse o seçilir. Ondan sonra bu seçtiğimiz 2 tane iyi olan kromozoma çaprazlama işlemi uygulanır.

(Çaprazlama, genetikteki Krosover olayıdır.)


Fuzzy Logic Nedir? (Bulanık Mantık)

Fuzzy Logic'in diğer adı bulanık mantıktır. Klasik mantıkta 0'lar ve 1'ler vardır. Bir şey ya 0'dır yada 1'dir. Bulanık mantıkta ise 0 ve 1 arasında bir çok değer vardır. Örneğin, klasik mantığa göre bir oda ya soğuk ya ılık ya da sıcaktır. Bulanık mantık ise bu değerler arasında yer alan ara değerleri de içinde barındırır. Örneğin soğuk ve ılık arasında az soğuk, biraz daha az soğuk, az ılık, daha da az ılık veya ılık ile sıcak arasında biraz daha fazla ılık, çok ılık, az sıcak, biraz daha az sıcak şeklinde bir çok değer alır.

Kısacası Fuzzy Logic (bulanık mantık), ara değerlerle işlemler yapmaktır. Ara değerlerle işlemler yaparak, problemlere çözümler getirilebiliyorsa, bu Fuzzy Logic'tir.

Fuzzy Logic'e en iyi örnek enerji tasarrufu üzerinden verilebilir. Örneğin buzdolabı ve klimalarda ortam sıcaklığına göre cihaz, motor hızını otomatik olarak ayarlanabilmektedir. Mesela ortamın soğuk olmasını 0 derece, ılık olmasını 25 derece ve sıcak olmasını 35 derece olarak değerlendirdiğimizi varsayalım. Ortam sıcaklığı bu değerler dışında herhangi bir ara değere sahip olsa bile, her ara değer için motorun çalışma hızının, birim saniyede yapacağı devir sayısının otomatik olarak ayarlanması sağlanabilir. Bu da enerjiden büyük oranda tasarruf sağlar. Böylece fazla enerji tüketimine bir çözüm getirilmiş olur.
Yazının devamını oku
İlkokul yıllarından beridir öğretilen Güneş sistemini şimdi ise kodlara dökeceğiz ve bunun sonucunda kendi tasalardığımız güneş sistemimizi elde etmiş olacağız. Aşağıdaki gif resimden de görüleceği üzere aslında güneş sisteminde birçok gezegen vardır ama biz OpenGL ile sadece Güneş, Dünya ve Ay'ın birbirlerine göre olan hareketlerini kodlayacağız.

Üstteki gif resme göre bizim ilgilenmemiz gereken kısım ortadaki Güneş, 3. dairede dönen Dünya ve dünyanın etrafında dönmekte olan Ay olacak.

Güneş sistemine göre,
* Güneş sabittir ve kendi etrafında soldan sağa döner.
* Dünya hem kendi etrafında hem de Güneş etrafında soldan sağa döner.
* Ay hem kendi etrafında hem de Dünya'nın etrafında soldan sağa döner.

Öncelikle GL Translatef ile bir sahne yaratmamız gerekecek. Bu sahnede ise Güneş olacak. Sahnemizi GL Translatef ile belirleyeceğiz.

gl.glTranslatef(0f, 0f, -300f);  //sahne

Burada 1. parametre X, 2. parametre Y ve 3. parametre Z eksenidir.  X ve Y eksenlerini sabit bıraktım. Z eksenini ise -300f olarak belirledim. -300f yapmam ile birlikte Güneş'in bize Z ekseninde 300f uzakta olmasını sağladık. Kodları kendiniz yazdığınız sırada bu değerle oynarsanız ne demek istediğimi daha iyi anlayabilirsiniz.

Sahnemizi belirledikten sonra bu sahnemize Güneş'i çizip, kendi ekseni etrafında dönmesini sağlayacağız.Güneş'i kendi ekseni etrafında döndürebilmek için, Güneş'i çizmeden önce dönme fonksiyonunu yazmamız gerekiyor. 

gl.glRotatef(aci, 0f, 1f, 0f); //Y ekseninde dönüş.
gl.glColor3f(1f, 0.2f, 0.0f); //Güneşin rengi

3 sayısal parametre arasından ortadakinin değerini 1 yapmam ile beraber artık Güneş'i kendi ekseni etrafında soldan sağa döndürmüş olduk. Baştaki açı ise display fonksiyonu dışında float olarak tanımlanan bir ifadedir. Anlatımın sonunda indirme kodları var. Onları incelediğiniz zaman demek istediğimi anlayacaksınız zaten.

Dönüşünü ve rengini belirledikten sonra sıra geldi Güneş'in kendisini oluşturmaya. GLUquadric kullanacağız.

GLUquadric gunes = glu.gluNewQuadric();
glu.gluSphere(gunes,30f,15,15);
glu.gluDeleteQuadric(gunes);

30f ifadesine kabaca boyut diyebiliriz ama aslında tam olarak öyle değil. 30f ifadesi, Güneş'in Z ekseni üzerinde bize olan uzaklığını ifade ediyor. Bu değeri büyüttükçe Güneş'in +Z eksenindeki konumunu arttırmış oluyoruz. Bu da bize, sanki Güneş'in boyutunu büyütmüşüz gibi gelebilir. 15 olan ifadeler ise Quadric şeklinin küre haline gelmesi sağlıyor. (bkn:quadric)

Güneşin oluşturulması ile ilgili tüm kodlar işte bunlardı. Şimdi ise Güneş'in üzerine siyah bir kare koyalım ki maksat döndüğü belli olsun.

    //güneşin üzerindeki siyah kare :
    gl.glColor3f(0.0f, 0.0f, 0.0f);
    gl.glBegin(GL_QUADS);
    gl.glVertex3f(1f,1f,30.001f);
    gl.glVertex3f(-1f,1f,30.001f);
    gl.glVertex3f(-1f,-1f,30.001f);
    gl.glVertex3f(1f,-1f,30.001f);
    gl.glEnd(); //Güneş'e ait kodların bittiğini belirttik.


Siyah karemizi de bu şekilde oluşturduk. Karenin 4 köşesinin de koordinatlarına dikkat ederseniz eğer, Z koordinatını hepsinde 30.001f olarak yazdım. Çünkü Güneş +Z ekseninde 30f koordinatındaydı. Biz de eğer karenin +Z eksenini 30.001f olarak ayarlarsak, kareyi güneşe yapışık gibi görebiliriz. Bu değer artarsa güneşten ayrılır. Bu değer azalırsa, kare Güneş'in içine girer ve gözükmez.

Güneş'i de yaptıktan sonra şimdi gelelim Dünya'yı yapmaya. Dünya için de benzer işlemleri uygulayacağız. Dünya için önce bir sahne yaratıp daha sonra yine aynı şekilde Dünya'yı bu sahnede oluşturup, döndereceğiz. Ama Dünya, Güneş gibi sadece kendi ekseni etrafında dönmüyor. Aynı zamanda Güneş etrafında da dönüyor. İşte bu yüzden Dünya'nın sahnesini Güneş etrafında döndürmeliyiz. Dünya'yı da kendi ekseninde döndürmeliyiz ki, Dünya hem kendi etrafında hem de Güneş etrafında dönüyormuş gibi gözüksün.

O zaman dünyanın sahnesini yazmadan önce, eksenin Güneş etrafında dönmesini sağlayacak Rotatef kodunu yazalım. Daha sonra sahneyi oluşturalım :

gl.glRotatef(aci, 0f, 1f, 0f); //Y ekseninde döndürme kodunu yazdık.
gl.glTranslatef(0f, 0f, -80f); //Dünya'nın sahnesini oluşturduk.

Sahneye ait kodları yazdık. Şimdi Dünya'ya ait kodları yazalım. Yani kendi etrafında döndürelim, renk verelim ve son olarak Dünya'nın kendisini yapalım.

gl.glColor3f(0f, 0f, 1f); //Dünya'nın rengi
gl.glRotatef(aci1, 0f, 1f, 0f); //Dünya'nın kendi etrafında dönüşü.

Renk ve kendi ekseni etrafında dönüş şeklini belirledik. Sıra geldi Dünya'nın kendisini oluşturmaya :

GLUquadric dunya = glu.gluNewQuadric();
glu.gluSphere(dunya,12f,15,15);
glu.gluDeleteQuadric(dunya);

Dünya işlemleri de bu kadardı. Güneş için yaptığımız siyah karenin kodlarının aynısı yazacağız şimdi. Tek fark ise, karenin 4 köşesinin de +Z eksenleri bu sefer 12.001f olacak. Çünkü, üstteki koddan da göreceğiniz üzere, Dünya'nın +Z ekseni üzerindeki koordinatını +12f olarak belirlemiştik Dünya'yı oluştururken.

    //dünyanın üzerindeki siyah kare :
    gl.glColor3f(0.0f, 0.0f, 0.0f);
    gl.glBegin(GL_QUADS);
    gl.glVertex3f(1f,1f,12.001f);
    gl.glVertex3f(-1f,1f,12.001f);
    gl.glVertex3f(-1f,-1f,12.001f);
    gl.glVertex3f(1f,-1f,12.001f);
    gl.glEnd(); //Dünya'ya ait kodların bittiğini belirttik.


Son olarak ise Ay'ı oluşturmak kaldı. Ay da Güneş ve Dünya'ya benzer şekilde oluşturulduğu için Ay için uzun uzun anlatım yapmadan direkt olarak kodları yazacağım.

//Ay'a ait kodlar :
gl.glRotatef(aci,0f, 1f, 0f); //Ay'ın sahnesini Dünya ekseni etrafında döndürmek için.
gl.glTranslatef(0f, 0f, -20f); //Ay'ın sahnesi
gl.glColor3f(1f, 1f, 1f); //Ay'ın rengi
gl.glRotatef(aci1,0f,1f,0f); //Ay'ın kendi ekseni (Y ekseni) etrafında dönmesi için
       
//Ay'ı oluşturan kodlar :
GLUquadric ay = glu.gluNewQuadric();
glu.gluSphere(ay,3f,15,15);
glu.gluDeleteQuadric(ay);

//Ay'ın üzerindeki siyah kare : 
gl.glColor3f(0.0f, 0.0f, 0.0f);
gl.glBegin(GL_QUADS);      
gl.glVertex3f(1f,1f,3.001f);      
gl.glVertex3f(-1f,1f,3.001f);  
gl.glVertex3f(-1f,-1f,3.001f);
gl.glVertex3f(1f,-1f,3.001f);
gl.glEnd(); //Ay'a ait kodların bittiğini belirttik.


Buraya tıklayarak Java programlama diline ait olan OpenGL taslağını indirebilirsiniz. Taslağı indirdikten sonra kodların arasında benim belirttiğim alana, burada anlattığım kodları sırasıyla eklemeniz gerekmektedir.

 Bakınız :


Taslaktaki kodların açıklamaları karşılarında yazıyor ama siz o kodları standart olarak alabilirsiniz. Ay ve Dünya'nın Güneş sistemindeki hareketlerine ait kodlar bu konuda anlattığım kısımlardır. Konu ile ilgili düşünceleriniz, konu altına yorum olarak bırakabilirsiniz. İyi çalışmalar.
Yazının devamını oku
Örnek : 24 bitlik bir bilgisayar 250 adet bellek referanslı buyruk içeriyor olsun.  Bu durumda bu bilgisayarın her bir register'i kaç bit veri içerir?

Register'leri anlattığım konu : Temel Bilgisayarın İç Yapısı ve İşleyişi [Bilgisayar Mimarisi]

Detaylı Çözüm :
Bilgisayarın 24 bitlik olması demek, bu bilgisayarın 24 bitlik buyruk register'lerine (IR) sahip olması anlamına gelmektedir. Ayrıca, bellekteki herbir satır da aynı zaman 24 bit veri tutuyor demektir. Yani belleğin her bir satırında 24 kutucuk var diyebiliriz. Her kutucuğa da bir bit geldiğini düşünürsek.

Sonrasın da ise 250 adet buyruk içeriyormuş dedik örneğimizde.

Buraya kadarlık kısmı zaten "Doğrudan Adresleme" örneğinde de anlatmıştım.
Bakınız :  Bilgisayar Mimarisi Örnek Sorular ve Çözüm [Doğrudan Adresleme]

Asıl fark buradan sonra başlıyor.  Bu sefer 24 bitlik register dediğimiz şey 3 parçaya bölünmüştür. Bir kısmında OPR bitleri saklanır, diğer kısmda adres bitleri ve doğrudan adreslemeden farklı olarak 1 bit de o verinin doğrudan mı dolaylı mı olduğu bilgisi saklanır.

O 1 bit;
0 ise doğrudan adresleme. (Önceki örnekte gösterme gereği bile duymadık.)
1 ise dolaylı adresleme olduğunu gösterir.

Soruda "250 adet bellek referanslı buyruk" demişiz. Bu da demek oluyor ki bu basit yapılı bilgisayarımız 250 çeşit farklı işlem yapabilir. Demin dediğim gibi toplama, çıkarma, çarpma, kopyalama, taşıma... vs. vs. vs. böyle 250 tane işlem yapılabiliyormuş.

Register'imiz 24 bitlikti soruya göre. Bu bilgisayar 250 tane işlem yapabiliyorsa o halde OPR biti dediğimiz kısım 8 bit olmalı. 8 bit ile kaç farklı kombinasyon yada kaç farklı işlem yapılabilir? Cevap = 256 farklı işlem! (Çünkü 2 üzeri 8'den 256 farklı kombinasyon çıkar.)


OPR bitinin neden 8 olduğunu önceki örnekte detaylı bir şekilde anlattığım için burada tekrardan detayları ile anlatmayacağım.


Neden OPR bitine "8 bit olmalı? diyorsanız eğer, buraya tıklayarak önceki yazıyı inceleyiniz.


Sonuç olarak, OPR bitimiz = 8 bit imiş. Bu kombinasyon olayından onu anladık. Bilgisayarımız 24 bitlik bir bilgisayar olduğuna göre ve dolayısıyla registerlar de 24 bitlik olduğuna göre 24-8 = 16 bitlik bir alanımız kalıyor geriye. Bu 16 bitin 1 biti "dolaylı adresleme" olduğunu gösteren bittir. O halde IR register'in adres kısmına 15 bit kalacaktır. (1+ 15 + 8 = 24)

Yani şeklimiz şöyle olacaktır :



PC ve AR adres taşıyan registerlar oldukları için adres kısmını taşırlar. birinci şekilde adres kısmı 15 bit olduğu için;

PC = 15 bit
AR = 15 bit

diğer kalan tüm registerlar bu soruya göre 24 bit olacak.

IR = 24 bit
DR = 24 bit
TR = 24 bit

veri taşırlar.

Tüm cevap buydu. Anlamadığınız yerler olursa eğer, aşağı kısma yorum olarak yazabilirsiniz. Size elimden geldiğince yardımcı olmaya çalışırım.

Yukarıdaki örneği anladıysanız eğer, konuyu daha iyi pekiştirmek için aşağıdaki örneği de siz yapın.

Örnek :
20 bitlik bir bilgisayar 130 farklı buyruk çalıştırabiliyor. Bu durumda bellek şekli nasıl olur? AR, PC, IR, TR, DR registerlerinin her biri kaç bit olur? (dolaylı adresleme olacak.)

Bilgisayar Mimarisi Dersi Konu Anlatımlarının Tamamı İçin Buraya Tıklayınız!

Yazının devamını oku
Örnek : 24 bitlik bir bilgisayar 250 adet bellek referanslı buyruk içeriyor olsun.  Bu durumda bu bilgisayarın her bir register'i kaç bit veri içerir?

Register'leri anlattığım konu : Temel Bilgisayarın İç Yapısı ve İşleyişi [Bilgisayar Mimarisi]


Detaylı Çözüm :
Bilgisayarın 24 bitlik olması demek, bu bilgisayarın 24 bitlik buyruk register'lerine (IR) sahip olması anlamına gelmektedir. Ayrıca, bellekteki herbir satır da aynı zaman 24 bit veri tutuyor demektir. Yani belleğin her bir satırında 24 kutucuk var diyebiliriz. Her kutucuğa da bir bit geldiğini düşünürsek.

Sonrasın da ise 250 adet buyruk içeriyormuş dedik örneğimizde.

Önceki paragrafta 24 bitlik buyruk register'ı (IR) demiştim. Doğrudan adresleme olayında 24 bitlik register dediğimiz şey 2 parçaya bölünmüştür. Bir kısmında OPR bitleri saklanır. Diğer kısmında verinin adresi saklanır.

OPR bitleri dediğimiz yerde buyruklar saklanır. OPR biti işlem bitidir. Yani verimizi hangi işleme tabi tutacağımızın bilgisi orada saklıdır. Toplama, Çıkarma, Çarpma vs.

Soruda "250 adet bellek referanslı buyruk" demişiz. Bu da demek oluyor ki bu basit yapılı bilgisayarımız 250 çeşit farklı işlem yapabilir. Demin dediğim gibi toplama, çıkarma, çarpma, kopyalama, taşıma... vs. vs. vs. böyle 250 tane işlem yapılabiliyormuş.

Register'imiz 24 bitlikti soruya göre. Bu bilgisayar 250 tane işlem yapabiliyorsa o halde OPR biti dediğimiz kısım 8 bit olmalı. 8 bit ile kaç farklı kombinasyon yada kaç farklı işlem yapılabilir? Cevap = 256 farklı işlem! (Çünkü 2 üzeri 8'den 256 farklı kombinasyon çıkar.)

Neden OPR bitine "8 bit olmalı" dedim?? - Bu sorunun cevabını biraz daha detaylı yazayım.

Mesela OPR bitine 7 deseydik, 2 üzeri 7 = 128 edecekti. 7 bit ile 128 farklı kombinasyon yapılır. Yani bu bilgisayar 128 farklı sorun çözer. Oysaki bizim bilgisayarımız 250 adet bellek adreslemeli buyruk içeriyormuş. Yani 250 adet sorun çözebiliyormuş.

8 yaptık, çünkü (2 üzeri 8) = 256 ediyor. Yani bu bilgisayar 256 farklı sorun çözebilir. +6 fazla çıkıyor ama o önemli değil. 250'den +6 fazla. Ama fazla olması önemli değil. Fazla olsun ama az olmasın. Problem değil. Sonuçta 250 adet işlem içeriyor olmasıdır bizim için önemli olan. Soruda, bu bilgisayarın 250 adet bellek adreslemeli (referanslı) buyruk içerdiği söylenmiş.


Kombinasyon kısmını açacak olursam :

0 0 0 0 0 0 0 1 = Toplama
0 0 0 0 0 0 1 0 = Çıkarma
0 1 0 0 0 0 0 0 = Çarpma
0 0 1 0 0 0 0 0 = Bölme

..vs. şeklinde 256 farklı işlem bilgisi tutuluyor bilgisayarda. Herbiri 8 bit olacak şekilde.

Bu olayı daha basit şekliyle şöyle açıklayabilirim. Sayısal Tasarım yada Sayısal Elektronik dersi gördüyseniz eğer oradan mantık kurun. Eğer Flip-Flop 2 bitlik ise, bu 2 bit ile 4 farklı kombinasyon yapabiliyorduk.

(2 üzeri 2) = 4 farklı kombinasyon.
Bu 4 kombinasyon da şunlar olacaktır : 00, 01, 10 ve 11


Sonuç olarak, OPR bitimiz = 8 bit imiş. Bu kombinasyon olayından onu anladık. Bilgisayarımız 24 bitlik bir bilgisayar olduğuna göre ve dolayısıyla registerlar de 24 bitlik olduğuna göre....
O halde IR register'in adres kısmına 16 bit kalacaktır. (16 + 8 = 24)

Yani şeklimiz şöyle olacaktır :


Soruda bilgisayarımız için 30 bitlik bir bilgisayar deseydi OPR biti yine 8 bit olacaktı. Çünkü soruda "bu bilgisayar 250 adet buyruk" içeriyor demiş. Ama adres biti bu sefer 22 olurdu. Şayet öyle bir şey olsaydı. 

Son olarak..
24 bitlik bilgisayar örneğimize göre herbir registerin kaç bit veri içerdiğini yazalım :

PC ve AR adres taşıyan registerlar oldukları, bellekteki 24 bitlik verinin sadece adres kısmını tutarlar. Şekilden de göreceğiniz üzere adres kısmı 16 bit olduğu için;

PC = 16 bit
AR = 16 bit

diğer kalan tüm registerlar bu soruya göre 24 bit olacak.

IR = 24 bit
DR = 24 bit
TR = 24 bit

veri taşırlar.

Tüm cevap buydu. Anlamadığınız yerler olursa eğer, aşağı kısma yorum olarak yazabilirsiniz. Size elimden geldiğince yardımcı olmaya çalışırım.

Yukarıdaki örneği anladıysanız eğer, konuyu daha iyi pekiştirmek için aşağıdaki örneği de siz yapın.

Örnek :
20 bitlik bir bilgisayar 130 farklı buyruk çalıştırabiliyor. Bu durumda bellek şekli nasıl olur? AR, PC, IR, TR, DR registerlerinin her biri kaç bit olur? (doğrudan adreslemeli olacak.)


Bu konu ile ilgili anlatacaklarım bu kadar. Peki ya soruda "dolaylı adresleme" deseydi ne yapacaktık? O konuya da başka bir başlık altında değineceğim.

Bilgisayar Mimarisi Dersi Konu Anlatımlarının Tamamı İçin Buraya Tıklayınız!



Yazının devamını oku
Önceki konularda BUN ve BSA buyruk tiplerini detaylı olarak anlattım.

BUN : Şartsız Dallanma
BSA : Dallan ve Geri Dönüş Değerini Sakla

O konuları iyi anladıysanız bu konuyu da anlarsınız diye düşünüyorum.

ISZ buyruğu da yine, önceki bellek adreslemeli buyruklar gibi T4 zamanında işlem yapmaya başlar. Çünkü önceki yazılarda da dediğim gibi ilk 3 adım standart olarak her buyruk işleme, işlemi öncesi gerçekleşmektedir demiştim.

T3 zamanına kadarki mikro işlemleri özet olarak hatırlayacak olursak :


Şekilde T2'ye kadar olan adımlar var. T3'te buyruk donanımsal denetim biriminde çözülüp, ne tür bir buyruk olduğuna karar veriliyordu. Mesela şuanda bellek adreslemeli buyruk konusunu işlediğimize göre T3 adımında bellek adreslemeli buyruk olduğu kararı verilmiştir deriz. T3'ten sonra ise ISZ buyruğu şu şekilde işleyecektir :


Açıklama : 
D6T4 : M nolu bellek gözündeki veriyi, DataRegister'e yükle.
D6T5 : Verinin değerini 1 arttır. (Veri bitler halindedir ve veri bit düzeyinde 1 arttırılıyor.)
D6T6 : Bit değeri arttırılan veriyi M nolu bellek gözüne yükle. Eğer DR =0 ise PC <= PC + 1 yaparak bu veriyi işlemeden bir sonraki veriye atla. Program sayacı olan SC'yi de yine sıfırla.


Bilgisayar Mimarisi Dersi Konu Anlatımlarının Tamamı İçin Buraya Tıklayınız!

Yazının devamını oku
Daha önceki konumuzda bir bellek adreslemeli buyruk çeşidi olan BUN buyruğunu anlatmıştım. O konuyu iyice anladıysanız eğer bu konuyu da rahatlıkla anlayabilirsiniz.

Önceki yazı : BUN : Şartsız Dallanma [Bellek Adreslemeli Buyruk]

BSA buyruğu da aynen BUN buyruğu gibidir aslında ama BSA buyruğunun tek farkı geri dönüş değeri saklaması ve önceki yapılan işlem nerede kaldıysa, oradan devam etmesidir.

BUN buyruğunda yazılım düzeyinde bir örnek verirken "void fonksiyon" üzerinden bir örnek vermiştim. BSA buyruğunda ise yine aynı örnekten yola çıkacağız fakat bu sefer bu fonksiyonumuzun "int" veya "double" tipinde dönüş değeri olan bir fonksiyon olduğunu varsayacağız.

100 satırlık bir kod yazdığınızı düşünün. Bilsayarınız, yazdığınız programı ilk satırdan derlemeye başladı. Siz ise 50. satırda bir "int" tipinde bir fonksiyon yazdığınızı düşünün. Bilgisayarınız adım adım 1. satırdan başlayarak programı derlemeye başladı ve siz 50. satırdaki "int" tipindeki fonksiyonunuzu 25. satırda çağırdığınız diyelim. Programınız satır satır derleme işlemi yaparken 25 satıra geldiğinde, 50. satırdaki fonksiyonu çalıştırmaya başlayacak. Fonksiyon çalışacak ve fonksiyonun tipi "int" olduğu için "return" ile fonksiyon 25. satıra geri dönüş değeri ile sonucu verip, 26. satırdan program çalışmaya devam edecetir. İşte donanım seviyesinde de buna benzer bir iş meydana gelmektedir. Bu sebeple de BSA buyruğunun Türkçe adı "Dallan ve Geri Dönüş Değerini Sakla"dır.

BSA buyruğu da yine, önceki bellek adreslemeli buyruklar gibi T4 zamanında işlem yapmaya başlar. Çünkü önceki yazılarda da dediğim gibi ilk 3 adım standart olarak her buyruk işleme, işlemi öncesi gerçekleşmektedir demiştim.

T3 zamanına kadarki mikro işlemleri özet olarak hatırlayacak olursak :
 

Şekilde T2'ye kadar olan adımlar var. T3'te buyruk donanımsal denetim biriminde çözülüp, ne tür bir buyruk olduğuna karar veriliyordu. Mesela şuanda bellek adreslemeli buyruk konusunu işlediğimize göre T3 adımında bellek adreslemeli buyruk olduğu kararı verilmiştir deriz. T3'ten sonra ise BSA buyruğu şu şekilde işleyecektir :



Açıklaması :
Bir sonraki buyruğun adresi PC’den alınır ve bellekte belirtilen adrese yazılır. Alt programın başlangıç adresi PC’ayazılır ve alt programın ilk adresi olarak çalışır. Adım adım yazacak olursak;
T4 zamanında; T4 zaman sinyali belleğe yazma işlemini başlatır. PC içeriği veri yoluna yazılır ve AR’ninINR girişi aktif hale gelir.
T5 zamanında; AR içeriği PC’ye yazılır ve SC sıfırlanır.

Ticari bilgisayarların çoğunda dönüş adresi ya bir işlemci registerındaya da belleğin yığınında saklanır. BSA buyruğunun tek bir zaman süreci içinde işlenmesi mümkün değildir.

Şimdi size biraz daha somut bir örnek vereyim. Aslında her şey bit seviyesinde gerçekleşiyor ama ben daha iyi anlamanız açısından 10'luk sayı sistemi üzerinden örnek vereceğim.

BUN buyruğunda verdiğim örneğin benzerini yazacağım ki iki işlem arasındaki farkı daha iyi görün.


Bu sefer 200 satırlık bir belleğimiz olduğunu varsayalım. PC = 19 olsun. Yani 19. satırdaki buyruğu çalıştır dedik bilgisayara. Daha sonra PC otomatik olarak T2 zaman diliminde
PC <= PC + 1 şeklinde bir sonraki bellek satırını gösteriyor demiştik. Sonuç olarak  
PC = 20 oluyor. Yani 20. (yirminci) satırdaki buyruğu çalıştırıyor. PC'ye müdahale edilmediği sürece son satıra kadar yani, 20. satıra kadar her satırdaki veri bu şekilde tek tek işlenir. "PC'ye müdahale edilmediği sürece" lafı ile kastettiğim şey ise, "BUN veya BSA buyrukları ile karşılaşmadığı sürece" demek istiyorum aslında.

Şimdi ise BSA dediğimiz buyruğu, 200 satırlık bellek örneğinden yola çıkarak açıklayayım. Diyelim ki PC register'i 20. (yirminci) satırın adresini gösteriyor. Yani PC = 20 olsun. Bu satırda ise BSA buyruğu ile karşılaştık. BSA ile karşılaştığımız sırada BSA adres registeri olan AR'de 135 değerini içeriyor olsun. Yani AR = 135 olsun. Yazının başlarında BSA buyruğu adres tutar demiştik. Bu sebeple T4 zamanında bu 135 olarak gösterilen adres gözünün içine 21 yazıyoruz. Biz 20. satırdayekn BSA ile karşılaştığımız için, BSA'nın gösterdiği 135 nolu bellek gözüne gidiyoruz. Oraya 21 değerini yazıyoruz. Daha sonrasında ise T5 anında 136. satırdan itibaren program çalışmaya devam ediyor. Taa ki... 135 adres satırını tutan BUN buyruğunu görene kadar.

135 nolu bellek satırını gösteren BUN buyruğu bizi 135 nolu satıra geri götürecektir. 135 nolu bellek gözünün içinde de BSA'nın yazdığı "21" değeri vardı. Oradaki 21 değeri de bizi kaldığımız yere geri götürerek işlemlerimizi yapmaya kaldığımız yerden devam ederiz. Çünkü örneğin başında da hatırlayacağınız üzere 20. (yirminci) satırda kalmıştık en son. Daha sonra BSA geldiği için 135'e gidip oradaki işlemlerimi yapmıştık. Nihayetinde işimiz bitince kaldığımız yere geri döndük. Bu sebeplde BSA buyruğuna "Dallan ve Geri Dönüş Değerini Sakla" denmektedir zaten. Dikkat ettiyseniz BUN sadece dallanıyor. Yani içinde ne var ise, hangi adresin değeri tutuluyor ise sadece oraya gitme işlemi yapıyor. O kadar.

Bu örneğin görselini aşağıdaki ekran görüntüsünden görebilirsiniz :



Not : Konu anlatımı bana aittir fakat konuyu daha iyi anlatabilmem açısından verdiğim örnekteki ekran görüntüsü, Mustafa Kemal Üniversitesi Bilgisayar Mühendisliği öğretmenlerimizden İpek Abasıkeleş hocamızın ders notundan alıntı yapılmıştır.

Bilgisayar Mimarisi Dersi Konu Anlatımlarının Tamamı İçin Buraya Tıklayınız!

Yazının devamını oku
Daha önceki yazımızda "Bellek Adreslemeli Buyruklar"a giriş yapmıştık. Bu yazıda ise bellek adreslemeli buyruklar konusuna devam edeceğiz. Eğer önceki konuyu incelemediyseniz, bu konuyu daha iyi anlayabilmek için önceki yazıyı okumanızda fayda vardır.

Önceki yazı : Bellek Adreslemeli Buyruklar

BUN buyruğu da bir bellek adreslemeli buyruktur. Tam olarak Türkçe'ye karşılığı "Şartsız Dallanma" anlamına gelmektedir. BUN buyruğunun önceki bellek adreslemeli buyruklardan farkı ise registerlar arası bilgi aktarımı yapmamaktadır. BUN buyruğu, programcıya buyrukların sırasını bozabilme yetkisi kazandırır. Buna programın dallanması veya atlaması adı da verilir. "Şartsız Dallanma" kelimesindeki "şartsız" ifadesi ise bu buyruğun geri dönüş değeri olmadığı anlamına gelmektedir.

Yazılım düzeyinde bir örnek verecek olursam. Bir program yazdığınızı düşünün. Bu programda fonksiyon kullandığınızı düşünün. Bilsayarınız, yazdığınız programı ilk satırdan derlemeye başladı. 100 satırlık bir kod yazdığınızı düşünün. Siz ise 50. satırda bir "void" tipinde bir fonksiyon yazdığınızı düşünün. Bilgisayarınız adım adım 1. satırdan başlayarak programo derlemeye başladı ve siz 50. satırdaki void tipindeki fonksiyonunuzu 25. satırda çağırdığınız diyelim. Programınız satır satır derleme işlemi yaparken 25 satıra geldiğinde, 25 ile 50. satır arasını atlayarak direkt olarak 50. satırdaki fonksiyonu çalıştırmaya başlayacak ve fonksiyon void olduğu için (geri dönüş değeri yok) 50. satırdan itibaren derleme işlemini devam ettirip 100. satırda derleme işlemini bitirecektir. İşte donanım seviyesinde de buna benzer bir iş meydana gelmektedir. Bu sebeple de BUN buyruğunun Türkçe adı "Şartsız Dallanma"dır.

BUN buyruğu da yine, önceki bellek adreslemeli buyruklar gibi T4 zamanında işlem yapmaya başlar. Çünkü önceki yazıda da dediğimiz gibi ilk 3 adım standart olarak her buyruk işleme işlemi öncesi gerçekleşmektedir demiştim.

T3 zamanına kadarki mikro işlemleri özet olarak hatırlayacak olursak :


Şekilde T2'ye kadar olan adımlar var. T3'te buyruk donanımsal denetim biriminde çözülüp, ne tür bir buyruk olduğuna karar veriliyordu. Mesela şuanda bellek adreslemeli buyruk konusunu işlediğimize göre T3 adımında bellek adreslemeli buyruk olduğu kararı verilmiştir deriz. T3'ten sonra ise BUN buyruğu şu şekilde işleyecektir :

BUN buyruğu tek bir mikroişlem ile gerçekleştirilir. Etkin adres ortak veri yolu ile PC’ye aktarılır ve SC’nin yine "0" yapılır. Şöyle ki;


Açıklaması : 
PC, bildiğiniz üzere adres tutar. Peki neyin adresini tutuyordu? PC, çalıştırılacak programın adresini tutuyordu. PC’ye adres aktarma işlemi yaparak, "git oradaki veriyi işle ve oradan itibaren buyrukları işlemeye devam et" demiş olduk bilgisayarımıza.

Şimdi size biraz daha somut bir örnek vereyim. Aslında her şey bit seviyesinde gerçekleşiyor ama ben daha iyi anlamanız açısından 10'luk sayı sistemi üzerinden örnek vereceğim.


Bazı karakterlerin editör tarafından desteklenmemesi sebebi ile örneği ekran görüntüsü şeklinde vermek zorunda kaldım.

BUN buyruğu ile ilgili anlatacaklarım bu kadar. Sonraki konumuzda ise yine bir bellek adreslemeli buyruk olan BSA buyruğunu anlatacağım. Bu konu ile ilgili tüm sorularınızı aşağıdaki kısma yorum olarak bırakabilirsiniz. Elimden geldiğince sizlere yardımcı olmaya çalışırım.

Bilgisayar Mimarisi Dersi Konu Anlatımlarının Tamamı İçin Buraya Tıklayınız!

Yazının devamını oku
Bu yazıda yazacaklarımı anlayabilmek için önceki yazılarım hakkında bilgi sahibi olmanız gerekmektedir.

Önceki yazılar :
Bilgisayarın İç Yapısı ve İşleyişi  [Bilgisayar Mimarisi]
Bilgisayarın İç Yapısı ve İşleyişinde OPR Biti [Bilgisayar Mimarisi]

OPR bitinden bahsettiğim konuda bir buyruğun bellek adreslemeli buyruk olup olmadığına bilgisayarın nasıl karar verdiğinden bahsetmiştim. OPR biti 111 olmadığı sürece gelen buyruğun kesinlikle her bellek adreslemeli buyruk olduğunu söylemiştim. Neden 3 bit olarak almıştık OPR bitini? Çünkü bilgisayarımızın 16 bitlik basit bir bilgisayardı demiştim. 3 bit  OPR biti içeren bir bilgisayar 7 farklı bellek adreslemeli buyruk içerir. Onları da şöyle sıralamıştık :

D0 işlemi veya buyruğu için bilgisayardaki OPR biti kodu = 000
D1 işlemi veya buyruğu için bilgisayardaki OPR biti kodu = 001
D2 işlemi veya buyruğu için bilgisayardaki OPR biti kodu = 010
D3 işlemi veya buyruğu için bilgisayardaki OPR biti kodu = 011
D4 işlemi veya buyruğu için bilgisayardaki OPR biti kodu = 100
D5 işlemi veya buyruğu için bilgisayardaki OPR biti kodu = 101
D6 işlemi veya buyruğu için bilgisayardaki OPR biti kodu = 110

Bu 7 işlemin hepsi bellek adreslemeli buyruk işlemidr. İşte bu konumuzda bu işlemlerin ne işlemleri olduğuna bakacağız.

D0 'a denk gelen OPR biti bilgisayarda = AND işlemi yapıyor.
D1 'e denk gelen OPR biti bilgisayarda = ADD işlemi yapıyor.
D2 'ye denk gelen OPR biti bilgisayarda = LDA işlemi yapıyor.
D3 'e denk gelen OPR biti bilgisayarda = STA işlemi yapıyor.
D4 'e denk gelen OPR biti bilgisayarda = BUN işlemi yapıyor.
D5 'e denk gelen OPR biti bilgisayarda = BSA işlemi yapıyor.
D6 'ya denk gelen OPR biti bilgisayarda = ISZ işlemi yapıyor.


Buyrukların İngilizce açılımları ise şu şekildedir :

AND = And memory word to AC
ADD = Add memory word to AC
LDA = Load AC from memory
STA = Store content of AC into memory
BUN = Branch unconditionally
BSA = Branch and save return address
ISZ = Increment and skip if zero


Tablo olarak gösterecek olursam :

Şimdi bu işlemlerin ne olduklarına bakalım. Şuradaki ilk yazımda T3'e kadar olan tüm adımları yazmıştım. Buradan itibaren ise mikro işlemlere dikkat ederseniz eğer hep T4'den başlatarak yazmaya  başlayacağız. Anlayacağınız üzere orada yaptığımız mikroişlemler standart mikroişlemlerdir. Burada yapılacak bir bir işlem ise devamı niteliğinde olup, T4 zamanından başlayacağına dikkat edin.

Konuya girmeden önce, önceki ilk 3 adımdaki mikroişlemleri hatırlayalım :


AND Buyruğu

AC'yi "VE"le anlamına geliyor. Akümülatör'de (AC) bulunan bitlerle, bellekten alınan veriyi "VE"leme işlemi yapar. Bunun için şu mikro işlemler yapılır :



Açıklaması :
T4 zamanında veri bellekten DR içine atılır.
T5 zamanın AC ile DR "VE"lenir ve sonuç AC'ye yazılır.
Son olarak, sonraki buyruk sürecine hazırlık olsun diye SC = 0 yapılır. Her buyruk işleminden sonra bu SC değeri sıfırlanır. Maksat bir sonraki buyruk T6'dan devam etmesin. Tekrardan T0'dan başlasın diye. SC sadece bir zaman sayacıdır. Kaçıncı zamanda bilgisayarın hangi işlemi yaptığını gösteriyor.


ADD Buyruğu

Bellekteki veri AC'ye eklenir. Başka bir deyişle AC’nindeğeri ile etkin adresten alınan bellek kelimesinin değeri toplanır. Gerçekte, bilgisayar arayüzünde farklı bir işlem yapıyorsunuzdur ama bilgisayarın alt katmanlarında, yaptığınız o işlemin bir parçası olarak bazı bitlerin toplamı gerekiyor olabilir. Bildiğimiz 3+2 şeklinde toplamdan bahsetmiyoruz!Verilerin bit düzeyinde toplamı yapılır. Örneğin; "11011101 + 11100110" gibi 8er bitlik verilerin toplamının yine 8 bit olması beklenirken 9 bit çıkarsa eğer, fazla olan bit eldedir. Bu şekilde, toplamın bir eldesi olma ihtimali olduğu için AC'nin çıkış eldesi E dediğimiz bölgeye aktarılır. Konunun en alt kısmına ekleyeceğim görselden o "E" dediğim kısmı görebilirsiniz.

Şimdi ise ADD buyruğunun bilgisayarda nasıl gerçekleştiğini gösteren mikro işlemlere bakalım :



Açıklaması :
T4 zamanında veri bellekten DR içine atılır.
T5 zamanın AC ile DR toplanır ve sonuç "AC"ye yazılır. SC adı verilen zaman "sayacı" sıfırlanır.


LDA Buyruğu

Bellektekiyi veri "AC"ye yükle anlamı taşır. Bellekten direkt olarak Akümülatör'e (AC) bir yol olmadığı içi veri önce DR dediğimiz DataRegister'e aktarılır. Daha sonra DataRegister'den AC'ye aktarılır.



T4 zamanında veri bellekten DR içine atılır.

Açıklaması :
T4 zamanında, M nolu bellek gözündeki veri DR içine atılır.
T5 zamanında, DR içindeki veri AC'yüklenir. SC adı verilen zaman "sayacı" yine sıfırlanır.


STA Buyruğu

Bu buyruk, "Akümülatör'de (AC) işlenen veriyi belleğe yaz" anlamı taşır. AC çıkışları veri yoluna, veri yolu da belleğin girişlerine bağlıdır. Yazının en altındaki şekilden de bunu görebilirsiniz. Bu sebeple tek mikro işlemle sadece T4 zamanında bu işlem gerçekleştirilebiliyor. Şu şekilde :



Açıklaması :
T4 zamanında, AC'deki veri M nolu bellek gözüne yazılır. SC yine sıfırlanır.

Yukarıdaki buyrukları incelerken, konuyu görsel olarak da pekiştirmeniz için aşağıdaki görseli de inceleyebilirsiniz.

16 bitlik 'register'lara ve 3 bitlik OPR bitine sahip bilgisayarımıza ait işlemcinin ilgili bölümü :



Şuana kadar yaptığım anlatımlarda hep 16 bitlik basit bir bilgisayarı göz önünde bulundurarak işlemler yaptığımızı söylemiştim. Yazının da başında dediğim bu 16 bitlik bilgisayarda toplamda 7 tane bellek adreslemeli buyruk var demiştim. Şuana kadar sizlere D0, D1, D2, D3'e karşılık gelen AND, ADD, LDA, STA buyruklarını anlattım.

Bundan sonrasında ise geriye 3 tane önemli buyruk kalıyor. Bu buyruklar BUN, BSA ve ISZ buyruklarıdır. Bir sonraki yazımda ise bu buyrukları tek tek ele alacağım.

Bilgisayar Mimarisi Dersi Konu Anlatımlarının Tamamı İçin Buraya Tıklayınız!

Yazının devamını oku
Buradaki yazımda T2 aşamasına kadar bir bilgisayarın iç yapısının işleyişini anlatmıştım. Şimdi ise, T2'den sonraki adımlardan birini işleyerek yolumuza devam edeceğiz.

Önceki yazı : Bilgisayar İç Yapısı ve İşleyişi [Bilgisayar Mimarisi]

T2 aşamasında IR denetim biriminde çözülüyordu. Denetim biriminden çıkan işlemlere göre, kullanıcının yaptığı işlemleri bilgisayar artık anlayabiliyor. Bilgisayarımızın arayüzünde yaptığımız bir çok işlem, bilgisayarda 3 temel kategoriye ayrılmıştır :

1) Bellek adreslemeli işlemler (Kopyalama, toplama vs.)
2) Register adreslemeli işlemler
3) Giriş / Çıkış adreslemeli işlemler (Klavyeden yazı yazma, bilgisayardaki bir metni yazıcı ile A4 kağıdına yazdırma, bilgisayar usb takıp yapılan işlemler vs.)

Yani aslında denetim birimi dediğimiz yerde bellekteki verinin, bu yukarıdaki 3 işlemden hangisi olduğuna karar veriliyor. Peki denetim birimi buna nasıl karar veriyor? Tabii ki de OPR biti ile. Peki OPR biti nedir?



OPR biti, işlem bitidir. Üstte sıraladığım 3 işlemden hangi işlemin yapılacağına karar veren bittir.
OPR biti sabit bir değere sahip değildir. Bu örneğimizde 3'tür. Çünkü, önceki konuda da bilgisayarımızın 16 bit olduğunu söylemiştik. 16 bit bilgisayarımızda 12 bir adres 3 bit OPR + 1 diğer bitti.

OPR biti işlem bitidir. Yukarıdaki 3 işlemden hangi işlemin yapılacağını bilgisayara söyleyen bittir.OPR biti 3 bit olduğu için 2 üzeri 3'ten 8 farklı kombinasyona sahip olabilir. Örneğin;
 
D0 işlemi için = 000
D1 işlemi için = 001
D2işlemi için = 010
D3 işlemi için = 011
D4 işlemi için = 100
D5 işlemi için =  101
D6 işlemi için = 110
D7 işlemi için =  111

8 farklı kombinasyon demek, bu bilgisayar 8 farklı işlem yapabiliyor anlamına gelmektedir. Mesela D0 işlemi toplama işlemi olsun. Ben bilgisayardaki hesap makinesinde 3+2 yaptığım zaman OPR biti 000 olacaktır. Bu sadece basit bir örnekti. Aslında bu 3 bitlik verilerin her biri bir işlemdir. Ben D0, D1, D2 ...vs. şeklinde adlandırdım sadece.

Buyruk registerindeki (IR) OPR bitini, D0 ile D6 arası olan tüm işlemlerden herhangi birine ait kodu içeriyorsa, bu işlemi bilgisayarımız Bellek Adreslemeli işlem olarak bilir. (D0 ve D6 da dahil) Yani, biz bilgisayarımızın arayüzünde bir işlem yapacağımız zaman, bu işlem bilgisayarın içinde D0 ve D6  aralığındaki işlemlerden herhangi birine denk geliyorsa, aslında yaptığımız işlem bellek adreslemeli  işlemdir. Eğer işlemimiz bellek adreslemeli bir işlem ise, bir sonraki aşamada bilgisayarımız, üstteki şekilde A harfi ile gösterdiğim tek bite bakacaktır.

A = 0 ise; doğrudan bir bellek adresleme işlemi yapılacaktır.
A = 1 ise; dolaylı bir bellek adresleme işlemi yapılacaktır.

Şayet.... OPR bitinin tüm bitleri 111 ise yani yapılan işlem D7 işlemi ise o halde, kullanıcının yapmak istediği işlem ya Register adreslemeli bir işlemdir yada giriş/çıkış adreslemeli bir işlemdir. Hangi işlem olduğuna ise yine A biti karar verecektir.

A = 0 ise; register adreslemeli işlemdir.
A = 1 ise; giriş/çıkış adreslemeli işlem olduğunu bilgisayar anlamaktadır ve işlemlerini de ona göre yapmaktadır.

Bir sonraki konuda bellek adreslemeli işlemlerin neler olduğuna ve nasıl yapıldıklarına bakacağız. Şimdilik anlatacaklarım bu kadar. Konu ile ilgili tüm aklınıza takılanlar aşağı kısam yorum olarak bırakabilirsiniz. Bilgisayar Mimarisi, Bilsayar Mühendisliği dersleri arasından anlaşılması güç ve dolayısıyla zor olan derslerden biridir. Umarım bu anlatımlarım, ihtiyacı olan arkadaşlara faydalı olur.

Bilgisayar Mimarisi Dersi Konu Anlatımlarının Tamamı İçin Buraya Tıklayınız!

Yazının devamını oku
Temel bir bilgisayar en kaba hali ile bellek, işlemci, giriş/çıkış birimleri olmak üzere 3 temel yapı ile tanımlanabilir. Yani bir bilgisayar bu 3 yapının birbiri ile iletişimi ile tüm işlemlerimizi gerçekleştirmektedir. Duruma bu şekilde bakınca her şey basit fakat; bilgisayarın derinliklerine doğru ilerledikçe her şey daha da karmaşık bir hâl alabiliyor. Zaten bilgisayar mühendisliğinin ağır derslerinden biridir bence. Çünkü her şeyi soyut olarak hayal etmek zorunda kalıyorsunuz.

Ben bu yazıda bilgisayarın beyni olan işlemcide gerçekleşen işlemleri daha somut bir şekilde anlatacağım. İşlemci dediğimiz şey bizim i5, i7 dediğimiz bilgisayarın beyni olarak adlandırdığımız yerdir. Tüm işlemler bunun içerisinde gerçekeşir. Bunun içerisinde ALU, Register'lar ve Önbellek vardır.

ALU : Aritmetik ve Logic işlemlerin yapıldığı yer.
Registerler : İşlenecek olan verilere ait bilgilerin saklandığı yer.
Önbellek : Bellekteki verinin daha çabuk işlenmesini sağlayan, işlemci içindeki küçük bellek.

Ben temel bilgisayarın işleyişini bu şekilde anlatırsam muhtemelen her şey havada kalacaktır. Çünkü bu ifadeleri göremediğimiz için sizin için her şey soyut kalacaktır.

Bir masaüstü bilgisayarın kasasını düşünün. Bu kasanın büyük bir imparatorluk olduğunu varsayalım. ALU dediğimiz yer ise verilerin işlendiği yer. Bilgisayarın en önemli yeri. Yani bu imparatorluğun padişahı.

Registerlar ise, padişahın etrafında pervane olan yardımcıları olsun. Toplamda 8 adet register vardır. Padişahın 8 adet yardımcısı gibi düşünebilirsiniz. Veziri, habercisi vs. gibi düşünebilirsiniz. Bilgisayarımızdaki 8 adet register'imizin adları PC, AR, DR, IR, TR, AC, INPR, OUTR 'dir. Bir veri geldiği zaman ise, bu registerler sürekli olarak kendi aralarında birbirlerine ilete ilete bu veriyi ALU'ya yani gönderirler. (Padişahın yardımcılarının, padişaha haber uçurması gibi düşünülebilir.)

Registerleri yazarken uzun adları ile beraber ezberlerseniz daha kolay akılda kalıcı olur. Çünkü kısaltma yaparken, ingilizce olarak yazılan register adlarının sadece baş harfleri alınmış. Örneğin; program = program, adress = adres, data = veri vs. gibisinden.

Program Counter [PC] => İşlenecek olan verinin yerini gösterir.
Adress Register [AR]  => Verinin adresinin tutulduğu yer.
Data Register [DR] => Verinin kendisinin tutulduğu yer.
Instruction Register [IR] => Buyrukların adreslerinin tutulduğu yer.
Temporary Register [TR] => Bilgi geçici olarak saklanmak istendiğinde kullanılan yer.
ACumulator Register [AC] => Genel işlemlerin yapıldığı yer.
INPut Register [INPR] => Bilgisayara veri girişi yapıldığunda, bu verinin tutulduğu register.
OUTput Register [OUTR] => Bilgisayar veri çıkışı yapacağı zaman, bu verinin tutulduğu yer.


INPR ve OUTR kısmına kesmeler konusunda daha detaylı bir şekilde değineceğim. Bu iki register oralarda kullanılıyor.

Bu register'ların boyutları bilgisayardan bilgisayar göre değişiklik gösteriyor. Yani, boyutları her bilgayarda aynı değildir. İşte bilgisayarlardaki 32 bit ve 64 bit mantığı da aslında buradan geliyor. Register uzunluğuna göre o bilgisayar 64 bittir yada 32 bittir diyebiliyoruz. Gerçek hayatta sıkça karşılaşılan bu bilgiyi de bu sayede öğrenmiş oldunuz. :)

Örneğin bizim 16 bitlik mimariye göre tasarlanmış bir bilgisayarımız olsun. Böyle bir bilgisayarda register boyutları şu şekilde olacaktır.

PC : 12 bit (0-11)(0'dan başlayarak 11'e kadar toplam 12 bit.)
AR : 12 bit (0-11)
DR : 16 bit (0-15)(0'dan başlayarak 15'e kadar toplam 16 bit.)
IR :  16 bit (0-15)
TR : 16 bit (0-15)

INPR : 8 bit (0-7)(0'dan başlayarak 7'ye kadar toplam 8 bit)
OUTR : 8 bit (0-7)(0'dan başlayarak 7'ye kadar toplam 8 bit)

Şimdi bilgisayarın işleyişini anlatacağım. Bunu anlatırken, yine 16 bitlik bir bilgisayarı baz alarak anlatacağım. O sebeple konunu geri kalanında üstteki verileri dikkate alarak konuyu okumaya devam edin.

Bilgisayarda Veriler Nasıl İşleniyor?

Tanıtım kısmından sonra verilerin nasıl işlendiğine bakalım. Burayı da yine somutlaştırarak anlatacağım. Dediğim gibi ALU padişahtır. Tahtında oturur ve her şeyi registerlar yapar. Bizim bilgisayarda yapacağımız tüm işlemlerin bilgisi ise bellekte tutulur. Mesela RAM'de veya önbellekte tutulur. Biz buna kısaca bellek diyelim.

Tüm işlemler dedim. Bunu biraz daha somutlaştıralım. Örneğin dosya kopyalama, dosya silme, program çalıştırma, internete bağlanmak için Google Chrome'u çalıştırma işlemi yapacağımız zaman bile bu bilgi işlenmek üzere belleğe yerleşir. Ama 0 ve 1'ler halinde yerleşir. Google Chrome'a tıkladık diyelim. Chrome'un çalışması için gerekli tüm veriler 0 ve 1'ler halinde belleğe yerleşir. Yani belleği bir hastanenin bekleme salonu gibi düşünün. İşlem bekleyen tüm veriler oradadır. PC adlı register ise, bekleyen bu işlemlerden hangisinin çalıştırılacağını gösterir.

Özetle :
Aynı anda Media Player, Chrome, PhotoShop'a tıkladık. Bunların çalışmasını sağlayan tüm veriler belleğe yerleşti. PC en baştan itibaren belleği tarayarak ilk önce hangisine tıkladıysanız, ondan başlayarak işlenecek olan programı seçer. Yani kısacası PC, hangi programı gösterdiyse ilk önce o program çalışmaya başlayacaktır. Belleğin en başında Media Player var ise, PC register'i Media Player'e ait verileri göstererek işlemciye der ki : "Bu verileri işleyin!".

PC registeri, verileri işlenecek olan programın RAM'deki yerini işlemciye göstermek için, programa ait adres bilgisini tutar. Nasıl ki siz eve pizza siparişi vereceğiniz zaman, pizzacıya evinizin adresini söylüyorsanız PC registeri de aynı işlemi yapıyor. İşlemciye diyor ki "Belleğin X nolu adresindeki Media Player programını çalıştır."

PC'nin görevini artık anladık. İşlenme sırası gelen programın adresini, işlemciye söyleme görevini yapıyor. PC işlemciye adres bilgisini verdi tamam ama; işlemcideki hangi register bu adres bilgisini tutacak?

İşlemcideki adres bilgisini AR registeri tutacaktır. Yine pizzacı örneğinden yola çıkacak olursak.... Siz telefonla pizzacıyı arayıp eve pizza siparişi verirken, aynı zamanda ev adresinizi belirttiğiniz için aslında bir PC olmuş oluyorsunuz. Sizin adres bilginizi not eden pizzacıdaki sekreter ise, AR registeri oluyor. (AR : adress register)

Şu aşamadan sonra bu adres bilgisi IR registerine atanacaktır. 16 bitlik bilgisayarı baz alarak anlatım yapacağım demiştim. Üstteki verilere göre 16 bitlik bir bilgisayarda PC = 12 bit adres bilgisi tutar ve AR = 12 bitlik adres bilgisi tutar demiştik. Aynı zamanda da IR için 16 bitlik veri tutar demiştik. Biz AR bilgisini, IR'ye aktaracağımız zaman 16 bitin 12 biti adres bilgisi ile dolacaktır. Peki geriye kalan 4 bitlik kısımda neler saklanacak?

Gördüğünüz gibi kalan 4 bitlik yerde = 3 bit OPR biti var ve +1 bit ile beraber toplamda 4 bitimiz var. Tek başına 1 bit yazdığım yer, buyruk tipinin ne olduğunu belirliyor. O konuya daha sonra değineceğim.

Buraya kadarlık olan kısmı mikro işlemler ile gösterelim : 

Birinci saat çevriminde yani;
T0 zamanında bellekte işlenmeyi bekleyen programlardan birinin verisinin adresini PC şu şekilde AR'ye gösterecektir : AR <= PC

T1 zamanında M bellek gözündeki adres bilgisi IR'ye atanıyor.
IR <= M[AR] ve aynı zamanda, (yine T1 zamanında) PC değeri 1 arttırılıyor.
PC <= PC + 1 şeklinde.

PC <= PC + 1 ifadesinin mantığı :
Konunun ortalarında önce Media Player'i çalıştırmak için tıkladık daha sonra Chrome'a tıkladık demiştim. PC ilk önce Media Player'in çalışması için onun bellekteki yerini gösterdi. Sonrasında ise Chrome'un yerini göstersin istedik ki media player çalıştıktan sonra chrome'da açılsın diye düşünebilirsiniz.

T2 zamanında ise, IR'deki bilgiler artık Denetim Merkezinde çözülecektir. Çünkü ALU hiçbir şey bilmiyordur. Siz kendisine media player'i çalıştırın demek üzere media playere tıkladınız diyelim veya herhangi bir arkadaşınıza facebooktan mesaj göndermek için klavyeden bir şeyler yazdınız veya herhangi bir toplama işlemi yaptınız yada dosya kopyalama işlemi yaptınız diyelim... Bilgisayar, bizim yaptığımız bu işlemleri anlamazlar. Biz kopyalama işlemi yapıyoruzdur ama bir sürü kod yığını gidiyor belleğe. CPU bu kod yığının ne olduğunu bilmiyor. Denetim merkezi dediğimiz yer işte bu kodları IR ' registerinden alarak bilgisayara "abicim, ben bu kodları çözdüm. bu kullanıcı kopyalama işlemi yapıyor." diyor bilgisayara. Yani aslında bizim bilgisayarımızda yaptığımız işlemleri, bilgisayarın beynine tercüme ediyor. Denetim biriminin şekli de şöyledir :

Denetim biriminden çıkan işlemlere göre, kullanıcının yaptığı işlemleri bilgisayar artık anlayabiliyor. Bilgisayarımızın arayüzünde yaptığımız bir çok işlem, bilgisayarda 3 temel kategoriye ayrılmıştır :

1) Bellek adreslemeli işlemler (Kopyalama, toplama vs.)
2) Register adreslemeli işlemler
3) Giriş / Çıkış adreslemeli işlemler (Klavyeden yazı yazma, bilgisayardaki bir metni yazıcı ile A4 kağıdına yazdırma vs.)

Özetle :
T0, T1, T2 işlemleri standarttır.

T0 zamanında; AR <= PC

T1 zamanında;
IR <= M[AR]
PC <= PC + 1

T2 zamanında; denetim biriminde IR içindeki buyruklar çözülüyor.

T2'den sonraki işlemler artık farklılık göstermeye başlayacaktır. Çünkü denetim biriminden çıkan veriler üstte de sıraladığım gibi 3'e ayrılıyor. Herbirinde de bu veriler farklı işlemlere tabi tutuluyorlar. T2'den sonraki adımı "Bilgisayarın İşleyişinde OPR Biti" başlığı altında yazdım.

Yazının devamı :  Bilgisayarın İşleyişinde OPR Biti [Bilgisayar Mimarisi - İşlem Kararı]

Bilgisayar Mimarisi Dersi Konu Anlatımlarının Tamamı İçin Buraya Tıklayınız!

Yazının devamını oku
Karmaşık durumdaki DFA'ların minimumu hale getirilmesi durumuna, DFA sadeleştirilme denmektedir. Aşağıdaki karmaşık durumlu DFA'dan yola çıkarak bunun en sade halini elde etmeye çalışacağız.


Yukarıdaki ekran görüntüsünü baz alarak sadeleştirme işlemini 2 adımda yapacağız. 

1. adım'da erişilemez durumları ortadan kaldıracağız. Ben erişilemez durumları, aşağıdaki ekran görüntüsünden de görüleceği üzere numaralandırdım.



Peki erişilemez durumlara nasıl karar verdik? Onu da şöyle anlıyoruz.
İlk önce hiç "ok işareti" gelmeyen durumları DFA'dan kaldırıyoruz.
Yani önce, 1,3 ve 5 durumlarını DFA'dan kaldırıyoruz. Bu kaldırma işleminden sonra DFA'yı tekrar inceliyoruz. 1,3 ve 5'i kaldırma işleminden sonra 2 ve 4'e de artık ok gelmediğini görüyoruz. O halde artık 2 ve 4 durumları da erişilemez durum olmuştur. Onları da kaldırıyoruz.

Yani şeklimiz artık şöyle olmuştur :

Erişilemez durumları ortadan kaldırdıktan sonra, üstteki ekran görüntüsünde de görüleceği üzere otomat 2 farklı guruba ayrılmış. Guruplara ayırma işlemi aynı zamanda DFA sadeleştirme işleminin 2. adımı olmuş oluyor.

Guruplama işlemini yaparken ise "kabul edilebilir durumlar" ve "kabul edilemez" durumlar olmak üzere ayırma işlemini yapıyoruz. Ben "kabul edilebilir" durumların olduğu guruba "Gurup 1" diyorum. "Kabul edilemez" durumların olduğu guruba da "Gurup 2" diyorum.




Bir durumun hem "a"sı veya "b"si farklı bir guruba gidiyorsa eğer, bu durum için farklı bir gurup yaparız. Diğer durumlar ise aynı gurupta kalırlar. Bu dediğim şey sorudan soruya değişir. Kimi sorularda her iki harfin farklı guruba gitmesi ile farklı bir gurup yapmak gerekir. Fakat bizim bu örneğimize göre sadece "b" harfinin farklı bir guruba gitmesi, ayrı bir gurup yapmak için yeterli olacaktır. Resimdeki örneği  incelediğimiz zaman zaten, iki gurup arası bağlantı "b" geçişleri ile olmaktadır. Şimdi ise tek tek hangi durum hangi guruba gitmiş inceleyelim. Bu incelemeyi "Gurup 2" üzerinden yapacağız. Yani, "kabul edilemez" durumların olduğu gurubu inceleyip, sadeleştirme işlemini de orada yapacağız.

Durumları inceleyelim.

2 numaralı duru için :
a harfi gelince 6'ya gitmiş. Yani Gurup 2'de kalmaya devam ediyoruz.
b harfi gelince 5'e gitmiş. Yine Gurup 2'de kalıyoruz.

3 numaralı durum için :
a harfi gelince 2'ye gitmiş. Yani Gurup 2'de kalıyoruz.
b harfi gelince 5 numaralı duruma gidiyoruz.  Yine Gurup 2'de kalıyoruz.

5 numaralı durum için :
a harfi gelince 2'ye gidiyor. Gurup 2'de kalıyoruz.
b harfi gelince 4 nolu duruma gidiyor. Yani Gurup 1'e gidiyoruz.

6 numaralı durum için :
a harfi gelince 3'e gitmiş. Yani Gurup 2'de kalıyoruz.
b harfi gelince 5 nolu duruma gidiyor. Gurup 2'de kalıyoruz.

7 numaralı durum için :
a harfi gelince 6'ya gitmiş. Yani Gurup 2'de kalıyoruz.
b harfi gelince 5'e gidiyoruz. Gurup 2'de kalmaya devam ediyoruz.

Durumları inceledik. Peki ayırma işlemini nasıl yapacağız?
Bir önceki paragrafta da dediğim gibi bu örneğimize göre, "b" iki gurup arası geçiş harfi olduğu için 2. grubu bölmek için "b" harfine bakacağız. Yani 2. grup da kendi içinde 2 parçaya bölüneceği zaman "b" kriterine göre şu şekilde bölünecektir :
  • 1) b ile ilk gruba gidenler
  • 2) b ile kendi içinde kalanlar
Bu bilgiyi baz alırsak eğer, o halde yaptığımız durum incelemelerine göre "5" farklı bir gurup olacaktır. 2, 3, 6, 7 durumları ise ayrı bir gurup olacaktır.

Şu şekilde : 



"5" in olduğu guruba da "Gurup 3" diyelim. Üstteki ekran görüntüsünde yine "Gurup 2" incelenir. Daha fazla bölnüp bölünmediğine yani sadeleştirilip, sadeleştirilmediğine bakılır. Bu soruda "Gurup 2" daha da fazla sadeleştirilemediği için, DFA'nın en sade hali üstteki resimdir diyebiliriz. Son olarak ise aynı gurupta olanları aynı durum içine yazacağız ve işlemimizi sonlandıracağız. Yani DFA'mızın sadeleştirilmiş son hali şöyle olacaktır :



Konu ile ilgili aklınıza takılan yerler olursa eğer, aşağıdaki yorum formuna yazarak bana bildirebilirsiniz. İyi çalışmalar.

Yazının devamını oku
Gerek günlük hayatta olsun gerekse de internet ortamında olsun, iletişimin olduğu her yerde belli bir protokol vardır. Yani belli kurallar veya belli standartlar vardır. Kısaca protokoller, iletişimi yöneten veya yönlendiren bir takım kurallardır, diyebiliriz.

Örneğin, uzun süredir konuşmadığınız bir arkadaşınızla yol üzerinde karşılaştınız. İletişim kurmaya başlayacağınız andan itibaren, bitime kadar her şey belli bir şablon (protokol veya standartlaşmış şeyler) içerisinde gerçekleşir. Şöyle ki;

1 - Önce selamlaşırsınız.
2 - Hal hatır sorarsınız.
3 - İletişim devam eder, havadan sudan konuşursunuz.
4 - Kendine iyi bak, daha sonra görüşürüz gibisinden konuşmalar geçer ve vedalaşırsınız.

İşte şu sıraladığım 4 maddeden oluşan şablon, sizin ve iletişim halinde olduğunuz arkadaşınız arasında, iletişimi yönlendiren bir protokoldür diyebiliriz. Standartlaşmış bir kalıptır ve uzun süredir konuşmadığınız bir arkadaşınızla yol üzerinde karşılaşırsanız eğer, genellikle bu şablona göre hareket ederek iletişiminizi gerçekleştirirsiniz. Yani kısacası, iletişiminiz bu sıraladığım protokoller dahilinde gerçekleşir. Bu sıraladığım protokoller kişiden kişiye, ülkeden ülkeye hatta ortamdan ortama göre de değişse de genel olarak iletişimi sağlayan protokoller günlük hayatımızda bu şekilde işler. Bu sebeple bir iletişimin gerçekleşmesi için belli bir protokol yoktur. İletişimi sağlamak için çok farklı protokoller olabilir.


Bilgisayar ağları arasındaki protokoller de işte aynen böyledirler. İletişimin gerçekleşmesi için bir şablona sahiptirler. Çünkü bilgisayarların ağ üzerinden iletişim kurabilmeleri için günlük hayattakine benzer bir takım protokollere (şablona) sahip olmaları gerekir. Yine günlük hayattaki gibi tek bir protokol yoktur. Bilgisayar ağları için farklı, internet ağları için farklı, bluetooth ağları için farklı protokoller vardır. Cihazlar arası iletişim için bilgisayarların mutlaka bir protokol üzerinde anlaşması gerekmektedir.

Bilgisayarlar arası iletişim için oluşturulacak protokolde 3 temel madde vardır. Bunlar :
1 - Ne göndereceğim?
2 - Nasıl göndereceğim?
3 - Ne zaman göndereceğim?

Bir protokolün anahtar elemanları tam olarak şu şekildedir :
1 - Sentaks (Söz Dizimi)
Ne göndereceğim kısmında gönderilecek olan verinin bir söz dizimine (sentaks) sahip olması gerekir. Gönderilecek olan verinin yapısı ve formatı belirlenmelidir. Mesela, ilk 8 bit - gönderici adresi, ikinci 8 bit – alıcı adresi, kalan bitler – gönderilecek mesaj şeklinde bir yöntem, gönderilecek verinin söz dizim için bir örnek olabilir.

2 - Semantik (Anlambilim)
Verinin nasıl yollanacağını belirleme işidir. Bunun için ise yollanacak olan verinin adres yorumunun yapılması gerekmektedir. Adres yorumunu yaparken ise, "Alınacak yol?" ve "Varış Noktası?" bilinmelidir.

3 - Timing (Zamanlama)
İletişimin sağlıklı olarak gerçekleşebilmesi için, gönderilecek bilginin "Ne zaman?" ve "Hangi hız?" ile gönderileceğinin belirlenmesi de oldukça önemlidir. Mesela göndericinin 100 Mbps ile veriyi göndermesi ve alıcının buna karşılık olarak 1 Mbps ile veriyi alması tutarsızlıklara sebep olabilir. Zamanlamadaki tutarsızlıklar sağlıklı bir iletişimin gerçekleşmesini engeller ve veri kayıpları yaşanabilir.

Şuana kadar yaptığım tanımlamalar ve anlatımlar size son derece soyut ve garip gelebilir ama çoğunuzun da bildiği gibi iletişimi sağlayan GSM, GPRS, TCP/IP, HTTP veya ISDN protokollerinin temeli de bu anlatılanlara dayanmaktadır.

Ayrıca konu içerisinde genel olarak bilgisayarlar üzerinden örnek verdim. Konuda daha çok bilgisayar ağlarının iletişimine değindim ama  ağ iletişimi sadece bilgisayar arası değildir elbette. Günümüzde internet ağının yayınlaşması ile gerek bilgisayarlar, gerekse de telefonlar olsun tüm teknolojik cihazlar birbirleri ile "yine belli bir protokol" dahilinde iletişim halindedirler.
Yazının devamını oku
Teknoloji sektörü şu sıralar patlama yaşıyor. Eğer son bir kaç yıl içinde bir bilgisayar ya da akıllı telefon kullandıysanız bunu muthemelen farketmişsinizdir.

Sonuç olarak kodlama becerilerine yüksek ihtiyaç duyuluyor. Bu da bir şirkette programlama işleriyle ilgilenen kişilerin ödemelerinin, ortalama işlerden daha yüksek ödeme aldığını gösteriyor. Hatta teknoloji dünyasının ötesinde bir programlama dili en az bir yaşam öyküsü kadar etkileyici bir durum yaratır.

Proglamlama dilleri istihdam sektörüne göre değişiklik gösterirler.

Finansal ve kurumsal sistemler, karmaşık işlemleri gerçekleştiren ve son derece organize olan Java ve C# gibi dillere ihtiyaç duyar. Medya ve tasarım ile ilgilenenler web sayfalarını daha dinamik, çok yönlü, fonksiyonel ve az koda ihtiyaç duymalarından dolayı Ruby, PHP, JavaScript ve Objective-C gibi dillere gereksinim duyarlar.

Bizde size bu yazımızda öğrenmeniz gereken 10 proglama dilini anlatacağız.

1) Java







Java 1990'larda Sun Microsystems tarafından geliştirilen bir sınıf tabanlı nesne yönelimli proglamlama dilidir. En çok talep gören proglama dili olan Java, kurumsal yazılım, web-tabanlı içerik, oyunlar ve mobil uygulamaların yanı sıra Android işletim sistemi için de kullanılır. Java birden çok platform üzerinde çalışır. Örnek vermek gerekirse Mac OS X üzerine yazılmış bir program aynı zamanda Windows üzerindede çalıştırılabilir.


2) C Dili 

1970'lerin başında geliştirilen genel amaçlı, zorunlu programlama dilidir. C en eski ve en yaygın olarak kullanılan bir dildir. C dili C#, Java, JavaScript ve Pyton gibi diğer popüler dillerin yapı taşlarını oluşturmuştur. C dili çoğunlukla işletim sistemleri ve gömülü uygulamaları gerçekleştirmek için kullanılır. Çünkü diğer diller için temel oluşturur. Diğer dilleri öğrenmeden önce ilk olarak C ya da C++ öğrenilmesi tavsiye edilir.


3) C++ 







C++ ilk başlarda C dilini geliştirmek için tasarlanmış, nesne yönelimli ve orta düzey bir programlama dilidir. Firefox, Winamp ve Adobe gibi bir çok büyük yazılım C++  tarafından geliştirilmişt. C++ sistem yazılımlarını, uygulama yazılımlarını, yüksek performans veren sunucuları ve video oyunlarını geliştirmek için de kullanılır.


4) C# 







NET girişiminin bir parçası olarak Microsoft tarafından geliştirilen çoklu paradigma dilidir. "C-Sharp" olarak telafuz edilir. C ve C++ ilkelerini birleştiren C#, Microsoft ve Windows platformları için yazılım geliştirmek için kullanılan genel amaçlı bir dildir.


5) Objective-C 

Objective-C, Apple şirketine ait tüm cihazların işletim sistemlerinde kullanılan nesne yönelimli, genel amaçlı programlama dilidir. API'nın yanı sıra Apple'ın OS X ve iOS işletim sistemlerine güç veren Objective-C dili, iPhone telefonlar için uygulama oluşturmak içinde kullanılır.



6) PHP 







PHP (Hypertext Processor), dinamik web siteleri ve uygulama geliştirmek için tasarlanmış sunucu tarafından komut dosyası alan ücretsiz bir programlama dilidir. Bu doğrudan harici bir dosya olabileceği gibi HTML belgesi içinede gömülmüş olabilmesi, PHP dilini web geliştiricileri için popüler hale gelmesini sağlamıştır. PHP dili Facebok, Digg ve Wordpress başta olmak üzere 200 milyondan fazla siteye hayat verir.


7) Python

Python web siteleri ve mobil uygulamalar için tasarlanmış yüksek seviyeli bir dildir. Okunabilirliği ve kompakt sözdizimi anlaşılabilir olduğundan yeni başlayanlar için oldukça kolay bir dil olarak kabul edilir. Yani geliştiriciler bir kavramı yazarken diğer dillerde olduğundan daha az kod kullanır. NASA, Google ve Yahoo tarafından kullanılır.


8) Ruby







Web siteleri yaratmak ve mobil uygulama geliştirmek için tasarlanmış olan Ruby programlama dili,  dinamik ve nesne yönelimli olmakla birlikte, basit ve yazması kolay olan bir programlama dilidir. Python gibi Ruby de yeni başlayanlar için önerilen kullanıcı dostu bir dildir.


9) JavaScript

JavaScript bir istemcidir. Netscape tarafından geliştirilmiş C'nin söz diziminden türeyen sunucu yönelimli betik bir dildir. Birden çok web tarayıcısı üzerinde kullanılabilir. İnteraktif veya animasyonlu web işlevlerini geliştirmek için gerekli olan dildir. Ayrıca oyun geliştirme ve masaüstü uygulamalarında da kullanılmaktadır. JavaScript sözleri Google'ın Chrome uzantıları, Apple'ın Safari uzantıları, Adobe Acrobat ve Reader içine gömülüdür.


10) SQL








SQL ilişkisel veritabanı yönetim sistemleri ve verileri yönetmek için tasarlanmış özel amaçlı bir dildir. Çoğunlukla "Query"(Sorgu) fonksiyonu veritabanlarındaki bilgileri aramak için kullanılır. SQL Amerikan Ulusal Standartlar Enstitüsü(ANSI) ve Uluslararası Standardizasyon Örgütü(ISO) tarafından 1980'lerde standardize edilmiştir.

Mashable
Yazının çevirisi BLOGKAFEM.NET için, Ahmet Umut Şerefoğlu tarafından yapılmıştır. 


Yazının devamını oku
Her prosese, merkezi işlem biriminde (cpu'da) işlem görmesi için belli bir süre verilir. Bu süreye quantum süresi denir. Quantum süresi içerisinde proses, merkezi işlem birimini (cpu) kullanır. Bu süre içerisinde işi bitmez ise tekrar sıraya geçer, işi biterse ise o proses sonlanır.

Her bir proses belli bir süre işlem görüp eğer işi bitmemiş ise, tekrar sıraya girer demiştik. İşte bu sebepten dolayı Round-Robin sıralaması kesintili bir sıralamadır. Çünkü bir proses işi bitene kadar işlemciyi (cpu) kullanmıyor. Belli bir süre kullanıp işlemi kesintiye uğruyor, daha sonrasında tekrar işlemciye geliyor ve işi bitene kadar bu döngü devam ediyor.


Round-Robin sıralamasının anlaşılması açısından basit bir örnek yapalım :

P1, P2, P3 adında 3 proses olsun. Bu proseslerden;

P1 prosesinin işini bitirebilmesi için CPU'yu 3 milisaniye kullanması gerektiğini varsayalım.
P2 prosesinin işini bitirebilmesi için CPU'yu 4 milisaniye kullanması gerektiğini varsayalım.
P3 prosesinin işini bitirebilmesi için CPU'yu 2 milisaniye kullanması gerektiğini varsayalım.

Quantum zaman dilimi : 1 milisaniye olsun. Bu değeri ben kendim belirledim.Yani her bir proses işlemcide 1 milisaniye işlem görecek demektir.

Bu konuyu daha iyi anlatabilmem adına, verceğim örnek için işlem görme öncelikleri önemsiz olsun. Önce P1, sonra P2'nin, sonra P3'ün sırada beklediğini düşünelim.

Evet, işlemlerimize başlıyoruz.

1. Adım :
P1 CPU'ya geldi. Quantum 1 olduğu için, 1 milisaniye işlem gördü. Geriye 2 milisaniyesi kaldığı için tekrar sıraya geçer. Daha sonra sırada bekleyen P2 CPU'ya gelir. Quantum 1 olduğu için, 1 milisaniye işlem görür ve 3 milisaniyesi kaldığı için tekrar sıraya geçer. Sonrasında ise P3 CPU'ya gelir. Quantum 1 olduğu için, 1 milisaniye işlem görür ve 1 milisaniyesi daha kaldığı için tekrar sıraya geçer.

İşlerini bitirebilmeleri için kalan işlem görme süreleri :
P1 için 2 milisaniye.
P2 için 3 milisaniye.
P3 için 1 milisaniye.


2. Adım :
Sıra tekrar P1 CPU'ya geldi. 1 milisaniye işlem gördü. Geriye 1 milisaniyesi daha kaldığı için tekrar sıraya geçer. Daha sonra sırada bekleyen P2 CPU'ya gelir. 1 milisaniye işlem görür ve 2 milisaniyesi kaldığı için tekrar sıraya geçer. Sonrasında ise P3 CPU'ya gelir. 1 milisaniye işlem görür ve 0 milisaniyesi kalır. Bu da demek oluyor ki P3 prosesi işini bitirmiştir. Çünkü görmesi gereken 2 milisaniyelik işlemi görmüştür artık.

İşlerini bitirebilmeleri için kalan işlem görme süreleri :
P1 için 1 milisaniye.
P2 için 2 milisaniye.
P3 için 0 milisaniye. İşini bitirmiştir. Sonlanır.


3. Adım
P1 CPU'ya geldi. Quantum 1 olduğu için, 1 milisaniye işlem gördü. Geriye 0 milisaniyesi kaldığı için işi bitmiştir artık ve sonlanır. Daha sonra sırada bekleyen P2 CPU'ya gelir. Quantum 1 olduğu için, 1 milisaniye işlem görür ve 2 milisaniyesi kaldığı için tekrar sıraya geçer. P3 bir önceki adımda sonlanmıştı diye işlem görmez. Bu adımda P1 prosesi de sonlandığı için, bir sonraki adımda P2 prosesi işlem görüp, sonlanacaktır.

İşlerini bitirebilmeleri için kalan işlem görme süreleri :
P1 için 0 milisaniye. İşini bitirmiştir. Sonlanır.
P2 için 1 milisaniye.
P3 bir önceki adımda sonlanmıştı.

4. Adım
P1 CPU'ya geldi. Quantum 1 olduğu için, 1 milisaniye işlem gördü. Geriye 0 milisaniyesi kaldığı için işi bitmiştir artık ve sonlanır.

Tüm prosesler böylece işlerini bitirmiş olurlar.

Quantum 1 milisaniye olduğu için her adımda, her bir prosesin işlem görme süresini 1 azalttık çünkü; mantık olarak herbiri 1er saniye işlem görüp tekrar sıraya geçiyorlar. Taa ki işleri bitene kadar. Quantım 2 olsaydı eğer, herbiri 2 şer milisaniye işlem göreceğinden, işlem görme sürelerini de 2şer 2şer azaltacaktık.


Round Robin Sıralamasının Dezavantajı
Kesintili bir sıralama olmasından dolayı kısa süre içerisinde merkezi işlem birimi sürekli olarak farklı bir prosesi işliyor. Bu da her defasında bağlam değiştirme yapması anlamına geliyor. Daha önceki yazılarımda da belirttiği gibi, işlemcinin çok fazla bağlam değiştirme yapması olayı işletim sistemi için zaman açısından maliyetlidir.


Son olarak ufak bir.... NOT : Ben konuda örnek daha kolay anlaşılsın diye Quantum sayısına 1 milisaniye dedim. Oysaki gerçek şartlarda bir bilgisayar, 1 milisaniyede milyonlarca proses işlemi gerçekleştirebilir. Yani işletim sistemlerinde belirlenen o quantum sayısı 1 milisaniyeden çok çok daha küçük bir değerdir aslında.

Konuyla ilgili aklınıza takılan yerleri, görüşlerinizi veya düşüncelerinizi aşağıdaki yorum formu aracılığıyla bana iletebilirsiniz. Aklınıza takılan yerler var ise, size elimden geldiğince yardımcı olmaya çalışırım.
Yazının devamını oku
FIFO'nun açılımı Firt İn First Out ifadesidir. Türkçe'de ise bu ifade "İlk Giren İlk Çıkar" anlamına gelmektedir. FIFO sıralaması, bilgisayarımızın merkezi işlem birimi olan CPU'da işlem görmek isteyen proseslerden, bekleme kuyruğuna ilk önce gelen prosesin öncelikli olarak işlem görmesi mantığına göre çalışır.

FIFO sıralaması kesintisiz bir sıralamadır. Yani CPU'ya gelen bir prosesin işi bitmeden başka bir proses işlem göremez anlamına gelmektedir.


FIFO sıralamasını bir bankanın kuyruğuna benzetebilirsiniz. Kuyruğa ilk önce gelen müşteri, işlem görür ve işi bitene kadar da kuyruktan ayrılmaz. İlk gelenin işi bitip gittikten sonrasında ise, bir sonraki bekleyene sıra gelir. FIFO sıralaması da aynen bu mantıkla çalışan bir sıralamadır.

FIFO Sıralamasının Dezavantajı
Her prosesin işlem göreceği süre farklıdır. Bu sebeple prosesler arası boş ve gereksiz beklemeler çok olur.

Örneğin en öndeki A prosesinin işini bitirmesi için 10 saniye işlem görmesi gerektiğini düşünüelim. Oysaki arkadaki B prosesi 1 saniye işlem görse işini bitirecektir ama; FIFO mantığına göre ilk önce A prosesi işlem görmesi gerektiği için, B prosesi boş yere 10 saniye bekleyecektir. Bu işletim sisteminin hızlı çalışma prensibi açısından olumsuz bir durum oluşturur. Bu sebeple işletim sistemlerinde FIFO yöntemi tek başına tercih edilmez ve diğer yöntemler ile beraber kullanılır. Örneğin, farklı bir öncelik gerekçesi gerektiren bir yötemde, aynı önceliğe sahip proseslerin kendi aralarında sıralanması için kullanılabilir.

Yazının devamını oku
Daha önceki yazılarda bir prosesi ancak başka bir proses yaratabilir dedik ve bir prosesin fork() çağrısıyla başka bir prosesi yaratması sonucu bir program için birden çok proses paralel olarak çalışabilir dedik fakat; proses oluşturmak işletim sistemi için bazı sebeplerden dolayı çok maliyetli bir iştir. Bu sebeple bir programın birden çok işlem yapması gerekiyorsa eğer birden fazla proses üretmesi yerine Thread yani iplik kullanımının işletim sistemi açısından daha avantajlı olduğunu söylemiştik. Buraya kadar yazdığım ve belirttiğim herşeyin sebeplerini öğrenecez bu yazıda.

Bir program çalışırken ana prosesin yeni bir proses yaratması yerine bir iplik yaratması neden daha avantajlı. İplikler de prosesler gibi çalışırlar fakat hafif proseslerdir dedik. İplikler de prosesler gibi çalışıyorlarsa iplikler ile prosesler arasında farklar nelerdir? Bunlara değineceğiz.

İpliklerin Özellikleri ve Proses'ten Farkları

  • Thread'ler, proses içinde bulunurlar ve aynı adres uzayını paylaşırlar. Bir proses içerisinde birden fazla iş yürütebilirler.
  • İplikler prosesler gibi birbirlerinden bağımsız değildirler. Kendi aralarında kaynakları ve bazı verileri birbirleriyle paylaşırlar. 

Bakınız :

Yani kısacası; 
İşler birbirinden tamamen bağımsız ise : PROSES
İşler birbirine bağlı ve birlikte yürütülüyorsa : THREAD (İplik)  diyebiliriz.


İpliklerin Prosesler İle Olan Ortak Özellikleri:

  • Paralel çalışabilirleri etkileşebilirler ve haberleşebilirler.
  • Dış dünya ile haberleşebilirler.
  • Ardışıl işlemler yapılabilir.
  • İplikler de prosesler gibi bağlam(durum) değiştirebilirler. Hazır, Askıda, Çalışıyor durumlarda olabilirler.


İpliklerin Proseslere Göre Avantajları

  • Tek bir proses bile birden fazla işlem yapabilir. Böylece işlemcide daha az bağlam değiştirme olayı gerçekleşir. Sırada olan daha az proses olur ve bilgisayar işlemleri daha çabuk gerçekleştirebilir. Her işlemde proses kontrol bloğu yeniden güncellenmez. İşletim sistemi işlemleri gerçekleştirirken zaman kaybı yaşamaz.
  • Çok işlemcili sistemlerde faydalıdır. İpliklerin bazıları işlemciye yönelik işlemler yaparken bazıları giriş -çıkış işlemleri yapıyorsa yapılan iş için daha iyi performans elde edilir.
  • Proseslerin kaynakları vardır. İşletim sisteminde yer işgal ederler. Ne kadar çok proses olursa RAM'de o kadar çok yer işgal edilir. İpliklerin ise kaynakları yoktur. Mevcut prosesin sahip olduğu kaynağı kullanılar. Fazladan yer işgal etmezler. Yaratılmaları ve yok edilmeleri proseslere göre daha kolaydır.

Daha önceki yazımda şunu demiştim;
Bir programı birden çok prosesin çalıştırmasının avantajları ve dezavantajları vardır. Avantajı; bir programın çalışması için birden çok proses çalıştığı için o program kısa sürede işleme girebilir. Yani bir binayı birden çok işçinin inşa etmesi gibi fakat; bunun şöyle bir dezavantajı var. Ne kadar çok proses olursa, bilgisayarın RAM'inde o kadar yer işgal edilecektir ve CPU bir program için birden fazla proses işleyeceği için bu bilgisayarı daha çok yoracaktır. Kısacası bellek tahsisi, bağlam değiştirme veya anahtarlanma işlemleri sırasında yüklenmeleri işletim sistemi açısından daha maliyetli olur.

İplik denen olay işte tam da burada devreye giriyor. Yani tam olarak demek istediğim şey şudur. İşletim sisteminde bir iş için 3 ayrı prosesin çalışması yerine, tek bir prosesin çalışıp içinde 3 iplik bulundurması ile aynı işlemler  gerçekleştirilebilir. Proses işlemlerini işletim sistemleri CPU'da işlerken, yukarıda da saydığımız bazı sebeplerden dolayı (bağlam değiştirme olayı vs. ) maliyetli olması sebebiyle, işletim sisteminde bir iş yaparken çok fazla proses kullanmak yerine daha az proses ve daha çok iplik kullanmak, daha çok tercih edilir.

Özetle, aynı örnek üzeriden konuşacak olursam. Tek proses ve bu proses içinde 3 iplik barındırarak çalışan bir program, 3 farklı proses ile çalışan programa göre, işletim sistemi açısından çoğu zaman avantajlıdır. Bu sebeple bir işlem için çok fazla proses kullanmak yerine, tek proses kullanıp ve tek prosesin içinde iş bölümü yapacak olan birden çok iplik yaratıp kullanmak daha mantıklıdır.
Yazının devamını oku

İstatistikler

BLOGKAFEM.NET

© Copyright 2008-2018
Sitedeki yazıların her hakkı BLOGKAFEM.NET sitesine aittir.
Kopyalanması halinde lütfen kaynak gösteriniz.
DMCA.com Protection Status
Anasayfa | Hakkımda | Bizden Haberler | Reklam | İletişim