Veritabanı işlemlerinde, veritabanı içerisinden herhangi bir veri çağrılacağı sırada, çağrılacak olan verinin sorunsız bir şekilde gelebilmesi için büyük harf ve küçük harf uyumu önemlidir. Bunun için PHP'de şu hazır fonksiyonlar geliştirilmiştir.

$string = "BLOGKAFEM harika bir blog"; //olduğunu varsayarsak;

lcfirst($string) - ifadenin ilk karakterini küçük harf yapar. (bLOGKAFEM harika bir blog)
strtolower($string) - büyük harfleri küçük harfe çevirir. (blogkafem harika bir blog)
strtoupper($string) - küçük harfleri büyük harfe çevirir. (BLOGKAFEM HARIKA BIR BLOG)
ucwords($string) -  her sözcüğünü ilk harfini büyük harf yapar. (Blogkafem Harika Bir Blog)

mb_convert_case($string, MB_CASE_TITLE, "UTF-8") - ikinci parametresine yazılan komuta göre fonksiyonun gerçekleştireceği işlem değişiklik gösterir. Örneğin burada ikinci parametrede, MB_CASE_TITLE yazılı olduğu için, mb_convert_case() fonksiyonu, ucwords() fonksiyonu ile aynı işlevi görecektir. Sonuç şöyle olacaktır : Blogkafem Harika Bir Blog

Bu fonksiyonlar bize büyük kolaylıklar sağlıyor ama Türkçe karakter problemi sebebiyle, tam olarak istediğimiz işlemleri gerçekleştiremeyebiliyoruz. Yukarıdaki fonksiyonlardan, üçüncü fonksiyonun örneğini incelerseniz eğer, ne demek istediğimi anlarsınız.

Normal şartlarda BLOGKAFEM harika bir blog ifadesi BLOGKAFEM HARİKA BİR BLOG olarak çevrilmesi gerekiyorken, büyütme veya küçültme işlemleri sırasında İngilizce karakterler baz alınarak şu şekilde bir dönüşüm yapılıyor BLOGKAFEM HARIKA BIR BLOG olarak çevriliyor.

Bunun çözümü için, büyütülmesi veya küçültülmesi gereken Tükçe karakterleri kendimiz elimizle belirtmemiz gerekecek.

strtoupper() fonksiyonu üzerinden örnek vererek açıklayacağım. Örneğin strtoupper() fonksiyonunu kullanarak bir kelimedeki yada bir cümledeki tüm harfleri büyük olarak yazmak istiyoruz.

Bunun için, strtoupper() fonksiyonunu kullanmak yerine,
mb_convert_case($string, MB_CASE_UPPER, "UTF-8") fonksiyonunu kullanmamız gerekecek ama bu fonksiyonu kullanmadan önce, Türkçe karakter problemini giderebilmek için, Türkçe karakterlerin doğru karşılıklarını bir dizi içerisinde belirtmemiz gerekecek.

Türkçe karakter probleminin çözümü için aşağıdaki örneği inceleyebilirsiniz :



Konuda belirtilen fonksiyonları kullanarak, Türkçe karakter sorunu için bir çok çözüm yolu bulunabilir ama bu çözüm yolu benim bildiğim en kısa çözüm yoluydu. Konu ile ilgili aklınıza takılan yerleri aşağıdaki yorum formuna yazarak bana iletebilirsiniz.
Yazının devamını oku
Windows'a Composer kurulumu ve Laravel projesi oluşturma adımlarının nasıl olacağını daha önceki yazıda resimli olarak göstermiştim.

Bakınız : Windows'a Composer ve Laravel Kurulumu

Composer'i kurma işlemi Windows'ta son derece basitti. Ubuntu'da ise durum biraz daha farklı. Ubuntu'ya Composer'in kurulumu terminal (uç birim) üzerinden gerçekleştirilecektşir.

CTRL + ALT + T tuş kombinasyonu ile terminal pencersini açın ve Composer'in bilgisayarınıza kurulumu için alttaki komutları sırasıyla çalıştırın : 
curl -k https://getcomposer.org/installer | php


Üstteki komutu çalıştırarak Composer kurulumu başarılı bir şekilde gerçekleştikten sonra şu komutu çalıştırın :
sudo mv composer.phar /usr/local/bin/composer


Laravel yükleyicisinin kurulumu aşağıdaki komutu komutu çalıştırın :
composer global require "laravel/installer=~1.1"


‪Laravel‬ kurucusunun uzantı olarak eklenebilmesi için kullanmanız gereken komut :
export PATH="~/.composer/vendor/bin:$PATH"


Laravel dosyalarının barınacağı klasöre okuma-yazma yetkisi vermek için şu komutu yazın :
sudo chmod -R 777 /var/www/html


Tüm kurulumlar başarılı bir şekilde gerçekleştikten sonra,
Bilgisayar -> var - > www -> html
uzantısını takip ederek, laravel projelerimizi barındıracağınız HTML klasörüne ulaşabilirsiniz.


Şimdi Laravel projesi oluşturma adımına geçelim. Composer'i kurduktan sonra Laravel projesinin oluşturulması da son derece basit bir hale geliyor. Windows için yazdığımız komutun aynısı burada da geçerli.

CTRL + ALT + T yaparak terminali tekrardan açın. Terminal üzerinden laravel projelerinizi barındıracağınız html klasörünün içine girin. Bunu yapmak için terminal üzerinde kullanmanız gereken komut şudur :
cd  /var/www/html

Sonrasında ise terminale composer create-project laravel/laravel blogkafem yazın. Enter'a tıklayın. (blogkafem yazılı olan yere istediğinizi yazabilirsiniz. bu isim proje klasörünüzün adı olacaktır. )



Enter'a tıkladıktan sonraki aşama biraz uzun sürebilir. Çünkü Laravel'in kurulumu gerçekleşecek. Kurulum bitene kadar pencereyi kapatmayın.

Bu komut sizin proje klasörünüzün içine (örneğin ben blogkafem yazdım) Laravel'in yepyeni bir kopyasını indirecek ve yükleyecektir.


Kurulum bitene kadar terminali kapatmayın. Kurulum bittikten sonrasında ise ben, tarayıcıma localhost/blogkafem/public yazdıktan sonra şöyle boş bir ekranla karşılaştım :


Yani herhangi bir hata ile karşılaşmadım. Eğer sizde de aynı ekran geldiyse kurulumu başarılı bir şekilde gerçekleştirmişsiniz demektir. Eğer sayfa açılmıyorsa, Xammp, Wamp, Bitnami vs. gibi uygulamalardan hangisi sizde yüklü ise, o program araclığıyla apache'nin açık olup olmadığını kontrol edebilirsiniz.
Yazının devamını oku
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
Composer'in kurulumu için https://getcomposer.org sitesine girerek download bölümüne girin. Burada "Windows Installer" başlığının hemen altından "Composer-Setup.exe"ye tıklayarak Composer'i bilgisayarınıza indirin.

Kurulum aşamasında alttaki ekranları next diyerek geçin.



Bundan sonraki aşamada php.exe dosyasının yolunun composer programına göstermeniz gerekiyor.

"Browse..." butonuna tıkladıktan sonra Yerel Disk C --> xampp --> php ---> php.exe yolunu izleyerek composer programına php.exe'nin yolunu gösterebilirsiniz.

Bakınız  :


Not : Bendeki xamp dosyasının adı ben xampp-php5.4 olarak belirlemiştim. Bende o yüzden dosya adı olarak xampp-php5.4 yazmaktadır. Sizin bilgisayarda büyük olasılıkla yalnızca xampp yazacaktır. Yani sizin dosya yolunuz büyük ihtimalle C:\xampp\php\php.exe şeklinde olacaktır.

Next yaptıktan sonraki aşamada install yapın.



Ardından next ve finish ile kurulumu bitirin. Şimdi ise Composer aracılığıyla Laravel'i kuralım. Yani ilk proje klasörümüzü oluşturacağız.

İlk projeyi oluşturmak için öncelikle, Windows tuşu + R tuş kombinasyonunu kullanın ve gelecek olan ufak pencereye cmd yazıp windows konsolunu açın.

Konsol ekranına,  cd C:\xampp\htdocs yazın ve enter tuşuna basın. Sonrasında ise
composer create-project laravel/laravel blogkafem yazın. Enter'a tıklayın. (blogkafem yazılı olan yere istediğinizi yazabilirsiniz. bu isim proje klasörünüzün adı olacaktır. )

Bakınız :

Enter'a tıkladıktan sonraki aşama biraz uzun sürebilir. Çünkü Laravel'in kurulumu gerçekleşecek. Kurulum bitene kadar pencereyi kapatmayın.

Bu komut sizin proje klasörünüzün içine (örneğin ben blogkafem yazdım) Laravel'in yepyeni bir kopyasını indirecek ve yükleyecektir.



Kurulum bittikten sonrasında ise ben, tarayıcıma localhost/blogkafem/public yazdıktan sonra şöyle bir ekranla karşılaştım :



Eğer sizde de aynı ekran geldiyse kurulumu başarılı bir şekilde gerçekleştirmişsiniz demektir. Eğer sayfa açılmıyorsa, Xammp, Wamp, Bitnami vs. gibi uygulamalardan hangisi sizde yüklü ise, o program araclığıyla apache'nin açık olup olmadığını kontrol edebilirsiniz.

Eğer Ubuntu kullanıcısıysanız, 
Bakınız : Ubuntu'ya Composer ve Laravel Kurulumu
Yazının devamını oku
PHP'de Regex yani Türkçe ifade edecek olursam "Düzenli İfadeler" konusuna göre PHP'de şifre kontrolü yapmak oldukça basit. Genel olarak bakıldığında düzenli ifadeler konusunun anlaşılması yeni başlayanlar için biraz karmaşık olabilir.

PHP'deki düzenli ifadeler (regex) konusunu daha iyi kavrayabilmeniz açısından sizlere www.phpliveregex.com sitesine benzer siteler üzerinden regex ifadeleri ile ilgili  pratik yapmanızı tavsiye ederim.


Şifre kontrolü, bir siteye kayıt olan kullanıcıların kişisel hesaplarının güvenliği açısından günümüzde büyük siteler tarafından çokça tercih edilen bir yöntemdir. En basitinden bir örnek vermem gerekirse, outlook.com üzerinden hesap açarken kendi kafanıza göre bir şifre belirleyemiyorsunuz. Kayıt olurken belirlediğiniz şifrenin, sistemin belirlediği şifre kurallarına uygun oluncaya kadar kayıt işleminiz tamamlanmıyor. Bu da kişisel olarak kullanıcıların güvenliği için oldukça önemli bir kontroldür aslında.

Bir üyelik sistemi tasarladık ve tasarladığımız bu üyelik sisteminde kullanıcının, kendi şifresini belirlerken şu şartlara uygun bir şifre girmesini isteyelim :

1) Şifre en az 8 karakter olmalı
2) Şifrede en az 1 tane büyük harf bulunmalı

Bu şartlara uyulmadığı takdirde sistem üyelik işlemini gerçekleştirmesin ve şifrenin uygun formatta olmadığına dair kullanıcıya uyarı mesajı verilsin.

Belirlediğimiz formata uygun bir şifrenin kontrolünü ise regex denilen düzenli ifadeler ile sağlayacağız. Bu yazıda elbette ki komple bir üyelik sistemini yapmayacağım. Sadece kayıt formuna şifre girildiği zaman, girilen bu şifrenin kontrolünün nasıl yapıldğını göstereceğim.





$kontrol = "/\S*((?=\S{8,})(?=\S*[A-Z]))\S*/"; 
kodunun açıklaması :


 \S{8,} ifadesine göre şifrenin en az 8 karkaterli olması gerektiğini belirttik. Virgülden sonra ise bir sınırlama koymadık. Yani en 8 karakter şartını sağladığı sürece, kullanıcı şifreyi istediği uzunlukta belirleyebilir.

(?=\S*[A-Z]) ifadesine göre şifre mutlaka bir büyük harf içersin istiyoruz. İşin mantığı ise şudur, karakter olarak klavyeden ne gelirse gelsin hiç önemli değil. Önemli olan yazılan şifre içinde en azından 1 tane büyük harf olmasıdır.

\S ifadesi boşluk dışındaki herhangi bir karakteri bulur. (Boşlukları görmezden gelir.)
\s ifadesi boşluk (space) bulur.
* (yıldız) ifadesi bir karakterin birden çok kez tekrar edebiliceğini belirtiyor.

Normal şartlarda, yakalamak istediklerimiz parantez için yazılır. fakat istediğimiz şifrede "NE GELİRSE GELSİN HİÇ ÖNEMLİ DEĞİL AMA BU İFADE MUTLAKA OLSUN!" diyebileceğimiz karakterler de olabilir. Bu tür ifadeler için soru işareti kullanılır. Örneğin; (?= ... ) gibi.

Bu konuyla ilgili benim anlatacaklarım bu kadar. Şifre kontrolü ile ilgili Blogkafem dışında kapsamlı bir anlatım yapan bir site ile karşılaşmadığım için bunun da anlatımını ben yapayım dedim. Umarım PHP'ye yeni başlayan arkadaşlara faydalı olur. Öneri, istek, görüş ve düşüncelerinizi aşağıdaki yorum formuna yazabilirsiniz. Hepinize hatasız ve tıkır tıkır çalışan kodlamalar dilerim. :)

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
Sürekli olarak daha da güçlü bir hale getirilen internet programlama dili olan PHP dili, PHP 5.x sürümlerinin çıkması ile beraber bazı yenilikleri de beraberinde getirdi. Bu yeniliklerden biri de MySql'den MySqli'ye olan geçiş.


PHP 5.X versiyonları eski kütüphane ve fonksiyonların çoğunu desteklese bile mysql_query() gibi geçerliliğini yitiren bazı fonksiyonlar da mevcut. Bir hosting firmasına yüklediğim PHP dosyalarımda mysql_query() fonksiyonu bulunan sayfaların hepsinin hata vermesi sonucunda bu durumun farkına varmış bulunmaktayım. Aldığım hatada da zaten artık mysql_query()'in geçerliliğinin olmadığını ve mysqli_query()'e geçiş yapmam gerektiği yazıyordu.

mysqli_query() Nasıl Kullanılır?

Normal şartlar altında eğer siz de mysql_query fonksiyonu içerisine bir veritabanı sorgusu yazacağınız zaman;



tarzında bir kullanım yapıyorsanız, msyqli ile beraber artık bunu şu şekilde yazmanız;



aldığınız hataların çözülmesinde sizlere yardımcı olacaktır.

$baglanti olarak belirttiğim şey ise, veritabanı bağlantısını sağlayan mysql_connect fonksiyonundan aldığım bilgileri içeren bir değişkendir. Yani şudur :

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

Daha önceden hiç aklımda yokken bir anlık bir karar ile arkadaşım Ece için hazırladığım bu içeriği, hazırladıktan sonra blogda paylaşmaya karar verdim. Umarım internette bu konuyu arayan birçok kişiye de faydalı olur.

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
C# programlama dili, Windows işletim sistemine sahip platformlar için masaüstü programlar ve çeşitli uygulamalar yapmaya yarayan bir programlama dili olduğunu belki birçoğunuz biliyorsunuzdur. Daha önceki yazımda C# ile CocaCola ve Pepsi Şifresi Üreten Program'ın yapımını göstermiştim. Bu yazımda ise, yapacağımız bir masaüstü programı ile otomatik olarak Google üzerinden arama yapmanın nasıl olacağını göreceğim.

Belki size daha başka projelerinizde yol gösterici olur diye sadece mantığının nasıl olduğunu görmek açısından C# ile Google arama motoru yapımını size çok basit bir şekilde göstereceğim. İnternette bunun nasıl olacağını anlatan birkaç site mevcut fakat o sitelerde yazılan kodlar artık geçerliliğini yitirmişler.

Biliyorsunuz ki Google artık eski Google değil, arama yapmak için birkaç harf girişi yapmaya başladığınız andan itibaren sonuçlar görüntülenmeye başlıyor. Google'ın bu yeniliği sebebiyle ise masaüstü Google arama programı yapmak için daha önceden kullanılan kodlar artık çalışmamaktadırlar ve HTML ELEMENT mantığıyla yazıldıklarından daha çok kod yazmak zorunda kalabiliyoruz. Anlatacağım yöntemde kodların çok az olmasına şaşıracaksınız. Üstelik bu yöntemi düşünürken HtmlElement'lerden değil, sadece stringlerden faydalandım. HtmlElement ile de bir çözüm üretilebilirdi elbette ama dediğim gibi kodlar daha da uzayacaktı.

HtmlElement olmadan Google'da C# ile Google arama motoru yapımı nasıl olur diye düşünürken aklıma son derece güzel bir yöntem geldi. Göstereceğim yöntemi bizzat denedim ve çalışıyor. Bu sebeple başlığa da "güncel" yazdım. Bu yöntem ile beraber aramaları direkt olarak link üzerinden yapacağımız için, çok sağlam bit yöntem olduğunu söyleyebilirim.

Google'da birkaç tane arama yaptım ve hepsinin linklerini tek tek inceledim ve bunun sonucunda bazı elemeler yaparak sade bir linke ulaştım. Eğer Google Chrome veya Mozilla Firefox kullanıyorsanız bu basit linke ulaşmanız zor olabilir ama Internet Explorer'de arama yapmayı denerseniz eğer, Google aramalarda kullanılan anahtar linkin şu olduğunu göreceksiniz : https://www.google.com/search?q=Aranacakİfade

Linki tarayıcınıza yapıştırın ve koyu siyah renk ile yazdığım "Aranacakİfade" kısmını silip oraya aramak istediğiniz kelimeyi girin. Google ile sağlıklı bir şekilde arama yaptığınızı göreceksiniz.

Birkaç örnek;
https://www.google.com/search?q=blogkafem
https://www.google.com/search?q=aliarslan10
https://www.google.com/search?q=blogkafemi seviyoruz
https://www.google.com/search?q=blogkafem.net

İşin mantığını anladıysanız eğer, şimdi ise kodlama aşamasına geçelim. Kodlama aşamasında bize lazım olacak şeyler;
  • 1 tane webBrowser
  • 1 tane textbox
  • 1 tane buton
 Tasarımımız yaklaşık olarak şu şekilde olacak yani;



 Google'da Ara Butonu İçine Yazılacak Olan Kodlar :

Bunun dışında hiçbir kod yok arkadaşlar. Gördüğünüz gibi, diğer sitelerdeki yöntemlere göre oldukça  basit!

Ayrıca Form1() içine;
webBrowser1.ScriptErrorsSuppressed = true;

kodunu eklerseniz, programınız ile Google dışı sitelerde gezerken olası hataları da önlemiş olursunuz.

Programın videosu;

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