İlk işletim sistemi veya ilk kod yazma programı nasıl yapıldı?

Bilgisayarların temeli, milyonlarca transistör içeren işlemcilere dayanır. İşlemci ise, temelinde basit matematik yani dört işlem yapan bir birimdir.

Günümüzde işlemcilerin büyük bir çoğunluğu ikili sisteme göre çalışır. İkili sistemde işlemcilerin iletişim için kullandığı alfabe 0 ve 1'lerden oluşur. Her 0 ve 1, bir Bit'i temsil eder.

İşlemcinin yaptığı dört işlemde temelinde bu Bit'leri elden geçirmektir. Her işlemcinin bir mimarisi ve her mimarinin bir komut seti vardır. Komut seti, LEGO'lardan çıkan yapım kılavuzları gibi düşünebiliriz, Bİt'ler de LEGO parçaları. Yani işlemcideki komut setleri, işlemcinin Bit'leri nasıl elden geçireceğini ve bizlerin, input olarak Bit'leri nasıl işlemciye vermemiz gerektiğini belirler. Mesela bunun için güzel bir örnek sunabilirim:


Ancak 0 ve 1'ler ile çalışmak çok çok zordur. Bu nedenle Bit gruplarını, 0 ve 1'ler yerine Latin alfabesi ile temsil etmeleri için, Assembly denen bir dil geliştirilmiştir. Esasında işlemcinin komut seti de direkt olarak Assembly ile alakalıdır.

Assembly Low level bir dildir, yani Bit'lere çok kolay çevrilebilir. İşlemciler tarafından herhangi bir compiler ya da benzeri derleyici/emülatör gerekmeden anlaşılabilir. Yani işlemciye girdiğin bir Assembly komutunu direkt olarak Bit karşılığıyla da girebilirsin.

Ancak Assembly'nin de zorlukları vardı. Assembly işlemciye özgüdür, taşınabilir değildir. Yani X işlemcide yazdığın Assembly kodunu Y işlemcisinde çalıştırmak için düzenlemen gerekir. Bunun yanından, Low level olmasının getirdiği kısıtlamalar nedeniyle, kompleks programlar yazmak çok zordur. Bugün programlamada alıştığımız if, else, while, for gibi operatörler yoktur mesela.

Assembly de yetmeyince, onun da üzerinde diller geliştirilmeye başlandı. Ve böylece işletim sistemleri de doğmuş oldu. Assembly'nin üstündeki diller High Level olarak adlandırılır. Zira işlemci tarafından direkt olarak çözülemezler, compiler dediğimiz, kodu (genellikle) Assembly diline çeviren ara yardımcılara ihtiyaçları vardır. Bu konuyla da alakalı güzel bir yazı yazmıştım:


İşletim sistemi dediğin şey temelde bu işlemleri kolaylaştırmaktır. Mesela Windows'ta tek tıkla bir dosyayı kopyalayabilirsin. Bunu bir programlama arayüzüyle yapmaya kalksan, uzun uzun satırlar yazman gerekir.

Teorik olarak Assembly bir işletim sistemi değildir ama ilk bilgisayarlar uzun süre Assembly kullanarak programlanmıştır. Sonrasında bu programlama işini evrensel hale getirmek ve hemen hemen her bilgisayarda aynı kurallar çerçevesinde çalışmasını sağlamak için, işletim sistemleri doğmuştur.
 
Bilgisayarların temeli, milyonlarca transistör içeren işlemcilere dayanır. İşlemci ise, temelinde basit matematik yani dört işlem yapan bir birimdir.

Günümüzde işlemcilerin büyük birçoğunluğu ikili sisteme göre çalışır. İkili sistemde işlemcilerin iletişim için kullandığı alfabe 0 ve 1'lerden oluşur. Her 0 ve 1, bir Bit'i temsil eder.

İşlemcinin yaptığı dört işlemde temelinde bu Bit'leri elden geçirmektir. Her işlemcinin bir mimarisi ve her mimarinin bir komut seti vardır. Komut seti, Lego'lardan çıkan yapım kılavuzları gibi düşünebiliriz, Bit'ler de lego parçaları. Yani işlemcideki komut setleri, işlemcinin Bit'leri nasıl elden geçireceğini ve bizlerin, input olarak Bit'leri nasıl işlemciye vermemiz gerektiğini belirler. Mesela bunun için güzel bir örnek sunabilirim:


Ancak 0 ve 1'ler ile çalışmak çok çok zordur. Bu nedenle Bit gruplarını, 0 ve 1'ler yerine latin alfabesi ile temsil etmeleri için, Assembly denen bir dil geliştirilmiştir. Esasında işlemcinin komut seti de direkt olarak Assembly ile alakalıdır.

Assembly Low Level bir dildir, yani Bit'lere çok kolay çevrilebilir. İşlemciler tarafından herhangi bir compiler ya da benzeri derleyici/emülatör gerekmeden anlaşılabilir. Yani işlemciye girdiğin bir Assembly komutunu direkt olarak Bit karşılığıyla da girebilirsin.

Ancak Assembly'nin de zorlukları vardı. Assembly işlemciye özgüdür, taşınabilir değildir. Yani X işlemcide yazdığın Assembly kodunu y işlemcisinde çalıştırmak için düzenlemen gerekir. Bunun yanından, Low Level olmasının getirdiği kısıtlamalar nedeniyle, kompleks programlar yazmak çok zordur. Bugün programlamada alıştığımız if, else, while, for gibi operatörler yoktur mesela.

Assembly'de yetmeyince, onun da üzerinde diller geliştirilmeye başlandı. Ve böylece işletim sistemleri de doğmuş oldu. Assembly'nin üstündeki diller High Level olarak adlandırılır. Zira işlemci tarafından direkt olarak çözülemezler, compiler dediğimiz, kodu (genellikle) Assembly diline çeviren ara yardımcılara ihtiyaçları vardır. Bu konuyla da alakalı güzel bir yazı yazmıştım:


İşletim sistemi dediğin şey temelde bu işlemleri kolaylaştırmaktır. Mesela Windows'ta tek tıkla bir dosyayı kopyalayabilirsin. Bunu bir programlama arayüzüyle yapmaya kalksan, uzun uzun satırlar yazman gerekir.

Teorik olarak Assembly bir işletim sistemi değildir ama ilk bilgisayarlar uzun süre Assembly kullanarak programlanmıştır. Sonrasında bu programlama işini evrensel hale getirmek ve hemen hemen her bilgisayarda aynı kurallar çerçevesinde çalışmasını sağlamak için, işletim sistemleri doğmuştur.

Peki bu kodları parçalara nasıl öğrettiler?
 
Peki bu kodları parçalara nasıl öğrettiler?

Kodları parçalara öğretmediler. Parçalara nasıl öğreteceksin ki?

Komut seti diye bir şeyden bahsettim. Komut seti, işlemcinin içindeki transistörlere girdi olarak X verildiğinde çıktı olarak ne verdiğini belirten dökümanlardır.

İşlemcileri devasa bir matematik formülleri yığını olarak düşünün. 2X + 5 -3Y formülünde X'e 3, Y'ye de 2 verirsen, çıktı 5 olur. İşlemci de böyle çalışır işte.

Logic Gate denen bir mantık vardır. Transistörler belirli bir dizilimle beraber bu yapıları oluştururlar. Bu yapılar, girdi olarak verilen Bİt'ler e göre belirli çıktılar verir:

 

Yeni konular

Geri
Yukarı