2. Sınıf 1. Dönem

Müfredatı hatırlayalım.

HIST200 History of Turkey (Tarih işte) : Sanırım Türk üniversitelerinde olması zorunlu tarih dersinin Bilkent ayağıdır, yalnız yabancı öğrencilere de zorunlu bu :P Bilkent farklı işler bunu, tarih araştırması falan yaptırır, birileriyle röportaj yaparsın, röportaj yapacağın kişi çok yaşlıysa proje bitene kadar ölmesin diye dua edersin vs. En sonunda da makale yazarsın. Geçiyorum.

HUM111 Cultures Civilizations and Ideas I (Kültürler, Medeniyetler ve Fikirler): Kısaca Humanities diye tabir edilen ve biraz insanlık öğrenin diye verilen bu derste medeniyet tarihi okutulur ve medeniyetten kasıt Batı medeniyetidir. Amerika'da okutuluyor biz de okutalım mantığıyla verilse de çok güzel bilgiler edinebilirsiniz bu dersten. Gılgamış destanıyla (semavi dinlerle alakalı çıkarımlar yapabilirsiniz bu destan) başlar, İlyada ile devam eder (güzel ahlaklı "iyi" ile yiğit, korkusuz "iyi" arasındaki farkı çatışmayı görürsünüz.) En güzeli ise Platon'un "Devlet"idir, Platon çürümüş demokrasinin yerine alternatif yönetim biçimi sunar. Hitabı iyi ve espirili bir hocayla keyifli geçer bu ders.

PHYS101 General Physics I (Kuvvet ve Hareket): Bildiğimiz lise fiziği. Sıkıcıdır. Tüm mühendislik ve temel bilim bölümleriyle beraber alırsınız.

CS223 Digital Design

0 ve 1'lerden bilgisayara evrimi anlatır. Nasıl evriliyor uzun uzun anlatalım.

Abstraction (Soyutlama)

Bu dersin en başında "Abstraction"  nedir ondan bahsedilir. Abstraction şudur, siz bir konuda uzman olursunuz ama uzman olduğunuz bazı alt kısımları bilmenize gerek yok. Örneğin mutfakta kek yapmakta anneninizi düşünün. Un, yumurta ve sütü karıştırıp fırınlıyıp kek yapıyor. Anneniz kek yapmayı "biliyor." Anneniz buğday toplamayı biliyor mu? Hayır. Un elemeyi? Hayır. Tavuk besliyor mu? Hayır. İnek sağıyor mu? Hayır. Demek ki anneniz kek yapmayı o kadar da bilmiyormuş. "Ama kek yapmak için bunları bilmeye gerek yok ki hazır alabilirsin." de diyebilirsin. Fakat ya bunları da bilseydi daha güzel kek yapabilirdi dersem?

Bu dersin başında soyutlama anlatılır ki aslında elektroniğin alanına giren bu derste bilgisayarcılar kendini elektronikçi sanıp elektronlarla transistörlerle kafayı yemesin, bir yazılımcı için gerekenleri bilsin, gerisini soyutlasın. Hayatımda sadece bir kere özel ders verdim onda da bunun dersini verdim, çocuk ıncık cıncık sorular sormaya başladığında mecbur kalıp "O kadarı önemli değil elektronikçilerin işi." diyordum. Çünkü öyle.

İkilik Tabanda İşlemler

Dersi anlatmadan önce bunları da hatırlatmakta fayda var, bu derste işlemler ikilik tabandadır. Yani 1 + 1 = 10. Ona göre okuyun :D

Bunu ve 2 tabanlı işlemleri derste de anlatırlar. Bir tane 1 veya 0'a bit denir. 1 byte sekiz tane bitten oluşur ve en küçük işlem biridir, bir bilgisayar bir byte'ın altında işlem yapamaz. 1 kilobyte 2^10 byte yani 1024 byte'dır ama kolaylık olsun diye 1000 byte denir. 1 megabyte 2^20 bytetır. Böyle gider bu. İndirme yaparken 8 megabit internetle 1024 mb/s'nin üzerine pek çıkamazsınız çünkü 8 megabit internet aslında 1 megabyte internettir. İnternet hızı eskiden bit olarak ölçüldüğü için hızlar hala megabit olarak söyleniyor, tabii bu da TTnet'in işine geliyor :P

0 ve pozitif tam sayı tutmak kolaydır, üç basamaklı bir sayınız varsa 2^3 = 8 yani 1'den 7'ye kadar sayıları tutabilirsiniz. Peki negatif tam sayıları tutarken ne yapacağız? Bir çözüm şu, ilk basamağı rezervetmek, ilk basamak 1'se negatif değilse pozitif diye okumak. Böylece 000-011 yani 0'dan 3'e kadar ve 100-111 yani -0'dan (???) -3'e kadar toplam 7 sayı tutabiliriz. -0 da bonus gelir. Tabii açgözlü amarigalılar "Ben o 0'ı da kullandırırım." der ve ortaya "Two's Complement Number" diye bir şey çıkar. Bir sayının negatifini bulmak için onun tüm bitlerini tersine çevirir sonra sayıya bir ekleriz.

Örneğin 10 tabanındaki 1 = 001. -1'i bulmak için önce bunu 110 yapar sonra çıkan sayıya 1 ekleriz 111 olur. Sonra bunu on tabanına çevirmek için ilk basamağı -'le çarparız gerisi normal. Yani -2^2 + 2^1 + 2^0 = -4 + 2 + 1 = -1 olur. Bu işlemi istediğimiz kadar basamakta sayıya uygulayabiliriz. Hepsinde de 111111111.....1 -1'e denk gelir.

Böylece -4'ten +3'e kadarki sayıları iki tabanında üç basamaklı sayıda gösteriyor olabildik.

Birinci yazıda gördüğümüz int elmaSayısı'nda int aslında 4 byte yani 4*8=32 basamaklıdır. 31 basamağı normal sayı için, ilk basamak negatif için (yukarıdaki metodla tabii). Yani intle gösterebileceğimiz maksimum sayılar -2^31...0....2^+31 -1 'dir.

Ondalık sayılar için de metot var da anlatması uzun şimdi, geçiyorum. (Virgülden sonra kaç basamak olduğunu belirliyorsunuz ona göre x*2^-1 + x*2^-2 diye gidiyor)

0 ve 1

Peki elektrik nasıl üretiyor bu 0 ve 1'leri. Çok basit: devre elemanına yüksek voltaj gelirse devre elemanı onu 1 diye okur, düşük gelirse 0 diye.
Elektrik sinyalleri devamlıdır, 4.8V, 3.7V, 0.9V, 1.2V diye gider, 1 ve 0 diye sinyal üretilmez. Fakat okuyan bunları "Ayrık" algılar ve 0 ile 1'lere çevirir. Buna dijital sinyal denir. Az önceki örnekte de devre elemanı 1 1 0 0 diye okur ve bilgisayara bu iletilir.

Peki ne yapacağız bu 1 1 0 0'larla. 1 ve 0'ları "Logic Gate" dediğimiz mantık kapılarına (diyorum işte İngilizce kullanmak daha iyi diye) sokup mantıklı bir şeyler elde edebiliriz. İki değişken var diyelim X ve Y. Bu durumda X'den 1 içeren dijital sinyal, Y'den 0 içeren dijital sinyal geldiği anda X AND Y'den 0 dijital sinyali yürür. (Mantık kapıları transistörlerle üretilir, bunun da nasıl oluşturulduğu anlatılır ama sonra bir daha kullanılmaz, soyutlanır.)



AND, NOT, OR (ve, değili, veya) diye sizin de bildiğiniz mantık kapıları yanı sıra XOR (gelen sinyallerin toplamı tek sayıysa doğru çift sayıysa yanlış, örneğin 1 XOR 0 = 1), XNOR, NAND gibi abidik gubidik kapılar mevcut.

MUX diye bir kapı vardır örneğin, 3 tane değişken girer, bir tanesi hangi değişkenin çıkacağını söyler.

Decoder vardır, iki değişken girer, dört değişken çıkarır. 00 girerse 0000, 01 0010, 10 0100, 11 1000 anlaşıldı herhalde.

Bu son iki kapı da and ve orların birleşimidir aslında.

Sınavlarda da bunları çizersiniz evet. Tablo falan yaparsınız.

Karışık Mantık Soruları

Derste lisede gördüğünüz karışık mantık problemleri verilir ve sadeleştirmeniz istenir. Bunun için sonradan "Karnaugh Map" diye bir teknik öğretirler. Mülakatlar dışında bir önemi olmadığı için geçiyorum.

Finite State Machine (Sonlu-durum Makineler)

Sonlu durumu olan makinelerdir, Allah'ım zekâ fışkırıyor benden.

Yukarıdaki mantık kapılarını kullanarak makine yaparsınız özetle. Mantığı şudur: bir makinemiz var bunun durumları var. Mutlu, kızgın, azgın vs. Değişkenlerimiz var. Bu değişkenlerin değerine göre başka durumlara geçiş yapabilir, bir durumda beklerken veya tam geçiş yaparken de "output" basar. Anlaşılmadı, resimli anlatalım.


Bir oyun geliştirme sitesinden aldığım yapay zekanın makinesi bu şekilde.

Çizen adam başlangıcı koymamış ama hadi diyelim başlangıç durumu "Wander" olsun yani yapay zeka "Kendince Takıl" modunda. Sonra yapay zekaya yön verecek değişken "Player is near" yani "Oyuncu yakınında" değerini alıyor ve makine "Saldırı" moduna geçiyor, yapay zeka saldırıyor.

Bunu oluşturmak için "Durumların" tek tek mantık formüllerini yazıyoruz. Durumlar eşitliğin sol tarafında da sağ tarafında da olabiliyor.

Oyuncu değişkeni tanımlayalım, player is near olunca 1, player is out of sight (oyuncu etrafta değil) olursa 0 olsun.

Makinenin durumları da

Wander = 00
Attack = 01

(öbürlerini anlatmayacağım)

Durum1 = birler basamağındaki sayı.

(öbürlerini anlatacak olsam bir de Durum2 tanımlamam gerekirdi çünkü iki basamak var)

Durum1 0'sa Durum Wander olur, 1'se Attack olur.

Yukarıdaki şekilde Durum Wander'ı gösterirken input "Player is Near" gelirse Durum Attack'a dönüşüyor.

Yani Durum1 0 (WANDER) ve OYUNCU 1 (PLAYER IS NEAR) ise Durum1 1'e çevrilmeli.
Durum1 1 (ATTACK) ama OYUNCU 0 (PLAYER IS OUT OF SIGHT) ise Durum1 0'a çevrilmeli.

2 değişkenimiz var yani aslında 2*2 = 4 durumumuz var.

WANDER ve PLAYER IS OUT OF SIGHT olur ne olacak? Bunu yazmamışlar ama ne olacağı belli, WANDER olmaya devam edecek. (yapay zekanın havayı yumruklamasını istemiyorsanız tabii)

ATTACK ve PLAYER IS NEAR olursa ne olacak? Yapay zekanın İrlandalı boksçu gibi otele girip dinlenip sonra dövmeye devam etmesini istemiyorsanız bu da ATTACK kalmalı.

Mantık tablosu yapalım lisedeki gibi.


Eski Durum1
Oyuncu
Son Durum1
0
0
0
0
1
1
1
0
0
1
1
1

Bu durumda Durum1 ve Oyuncuyu AND kapısına sokup Durum1'e eşitlersek doğru sonucu alıyoruz ama Durum1 0 Oyuncu 1 olunca da Durum1 oluyor.

Yani formül

Durum1 = (Durum1 AND Oyuncu) OR (NOT Durum1 AND Oyuncu) oldu.

Burada Aynştaylığımızı konuşturup "İyi de eski durum ne olursa olsun Oyuncu 1 olunca Durum1 1, Oyuncu 0 olursa Durum1 0 oluyor." diyoruz.

Dolayısıyla durum formülümüz aslında:

Durum1 = Oyuncu oluyor.

Find Aid ve Evade'i kullansaydım daha eğlenceli bir formül bulabilirdim belki, böyle sıkıcı oldu :(

Bunu mantık kapısı çizerek falan yapabiliriz ama daha fazla uzatmaya gerek yok hiç.

Basit İşlemler

Bu and ve orlar birleşir bildiğimiz toplama işlemi yapmaya başlar. Örneğin buna Full Adder denir.


Burada A ve B toplayacağınız basamaktaki rakamlar, C komşudan gelen birlik, basamağa yazacağımız yeni sayı, Cout ise komşuya gidecek elde var bilmemne.

S = A XOR B XOR C. Hepsi 1 olursa 1 + 1 + 1 = 3 = 11. S'ye 1 yazarız ama elde var biri de doğru hesaplamamız gerekir.

Cout yani elde formülü ise (A AND B) OR (B AND C) OR (A AND C) olup yorumu çok basit, eğer herhangi iki 1 ise kesinlikle elde var deriz ve Cout'a 1 yazarız.

Diğer Basit İşlemler

Çarpma, bölme, çıkarma vs. hepsinin bir karşılığı bulunur. Bunların karşılıklarını öğrendikten belli bir süre sonra kutu çizim üzerine + koyup onları da soyutlamaya başlarsınız. Sonra ALU diye bir şeyle karşılaşırsınız (Arithmetic Logic Unit) bu ALU'da basit işlemlerin hepsi bulunur.



Bu ALU'da 8 tane işlem var, yani o işlemleri yapabilecek bir sürü mantık kapısı var içinde full adder dahil. Hangi işlemin yapılacağını OPCODE belirliyor. Sonra iki tane değişkeni sokup cevabı alıyorsunuz.

İşlemci

Çeşitli hafıza birimlerimiz var, uzun uzun yapısını anlatmaya gerek yok. Buna bir değişken veriyorsunuz, o değişkenden adresi okuyup değeri dönüyor. Tam nasıl çalıştığını "Computer Organization" dersini anlatırken söyleyeceğim.

Şimdi bir de hangi işlemi yapacağınızı söyleyen ve yine 0 ve 1'lerden oluşan "Programlama ifadeleri" miz var, bunu Control Unit dediğimiz şey okuyor ve ALU'ya ona göre OPCODE'u yolluyor, hafızanın neresinden (hangi adresten) çekileceğini de o belirliyor.

I/O yani Input / Output cihazları için arayüz var. Geçen yazıda "Interface"den bahsettiğim ya aynı o mantık. Control Unitimiz monitor.masmaviOl() fonksiyonunu çağırıyor, monitör olarak taktığımız şey her neyse Monitor interface'ini kullandığı için otomatikman masmaviOl() fonksiyonu tanıyıp kendi içinde çağırıyor ve ekranınız bir anda mavi ekran veriyor!

Tebrikler! Artık işlemcinin ne olduğunu biliyorsunuz! ALU, Memory, (ram ve harddisk değil) I/O Arayüzü ve Control Unit işlemciyi oluşturur!



Dersin haftalık labları olur ve bu lablarda yukarıda anlattığım şeyleri Verilog dilinde kodlarsınız. (Elektronikçiler aynı dersi alır ve VHDL dilinde kodlar.) Başlarda yaptıklarınızı simüle edersiniz, sonra FPGA adını verdiğimiz programlanabilir cihaza yazarsınız, isterseniz cihazın işlemcisini kendiniz kodlayabilirsiniz, şarkı besteleyip bölümünüzdeki kızlara (varsa tabii) serenad yapabilirsiniz. Şu tip karmaşık işlerle uğraşırsınız yani:


İlk sene sürekli "dokundurulan" Algoritmaları anlatacağım dördüncü yazıda görüşmek üzere.