DEV Community

Vebende Akademi
Vebende Akademi

Posted on

Python Code'dan Makine Diline

Python Kodundan Makine Diline (0 ve 1'lere) Yolculuk

Bir yazılım geliştiricisinin yazdığı Python kodu ile işlemcinin çalıştırdığı makine kodu arasında oldukça uzun ve katmanlı bir süreç vardır. Bu süreci anlamak, sadece Python'u değil, modern bilgisayar mimarisini de anlamanızı sağlar.

Aşağıdaki örnek üzerinden ilerleyelim:

x = 10
y = 20
z = x + y
print(z)
Enter fullscreen mode Exit fullscreen mode

Bir geliştirici açısından son derece basit görünen bu kodun arkasında milyonlarca transistorun çalıştığı çok karmaşık bir mekanizma vardır.


1. Kaynak Kod (Source Code)

İlk aşama geliştiricinin yazdığı metindir.

x = 10
y = 20
z = x + y
print(z)
Enter fullscreen mode Exit fullscreen mode

Bu aşamada dosya aslında düz bir metindir.

Dosya içerisinde saklanan şeyler:

x
=
1
0
Enter fullscreen mode Exit fullscreen mode

gibi karakterlerdir.

Bilgisayar dosyayı şu şekilde saklar:

Karakter ASCII
x 120
= 61
1 49
0 48

Disk üzerinde bunlar binary olarak tutulur:

01111000
00111101
00110001
00110000
Enter fullscreen mode Exit fullscreen mode

Henüz burada Python çalışmamaktadır.

Sadece metin vardır.


2. Python Interpreter'ın Dosyayı Okuması

Python çalıştırıldığında:

python app.py
Enter fullscreen mode Exit fullscreen mode

önce dosyayı belleğe yükler.

RAM içerisinde artık:

x = 10
y = 20
z = x + y
Enter fullscreen mode Exit fullscreen mode

satırları bulunmaktadır.


3. Lexical Analysis (Tokenization)

Python yorumlayıcısı metni parçalamaya başlar.

Örneğin:

z = x + y
Enter fullscreen mode Exit fullscreen mode

şu tokenlara ayrılır:

IDENTIFIER(z)
ASSIGN(=)
IDENTIFIER(x)
PLUS(+)
IDENTIFIER(y)
Enter fullscreen mode Exit fullscreen mode

Bu aşamada Python:

"Bu karakterlerin anlamı nedir?"

sorusunu cevaplamaya çalışır.


4. Parsing

Tokenlar artık bir ağaca dönüştürülür.

Buna AST denir.

AST:

Assignment
 ├── Variable(z)
 └── Add
      ├── Variable(x)
      └── Variable(y)
Enter fullscreen mode Exit fullscreen mode

Artık Python:

z = x + y
Enter fullscreen mode Exit fullscreen mode

ifadesinin ne yapmak istediğini anlamıştır.


5. Bytecode Üretimi

Python doğrudan makine koduna çevrilmez.

Önce Bytecode oluşturulur.

CPython'da:

z = x + y
Enter fullscreen mode Exit fullscreen mode

yaklaşık olarak:

LOAD_NAME x
LOAD_NAME y
BINARY_ADD
STORE_NAME z
Enter fullscreen mode Exit fullscreen mode

haline gelir.


6. Bytecode Nedir?

Bytecode:

LOAD_NAME
LOAD_NAME
BINARY_ADD
STORE_NAME
Enter fullscreen mode Exit fullscreen mode

gibi işlem komutlarından oluşur.

Makine dili değildir.

Python Sanal Makinesi (PVM) için hazırlanmıştır.

Java'daki JVM mantığına benzer.


7. Python Virtual Machine (PVM)

PVM bytecode'u çalıştırmaya başlar.

Örneğin:

LOAD_NAME x
Enter fullscreen mode Exit fullscreen mode

geldiğinde:

x = 10
Enter fullscreen mode Exit fullscreen mode

değerini bulur.

Stack'e koyar.

STACK
-----
10
Enter fullscreen mode Exit fullscreen mode

Ardından:

LOAD_NAME y
Enter fullscreen mode Exit fullscreen mode

çalışır.

STACK
-----
20
10
Enter fullscreen mode Exit fullscreen mode

8. Toplama İşlemi

Şimdi:

BINARY_ADD
Enter fullscreen mode Exit fullscreen mode

çalışacaktır.

Stack'ten:

20
10
Enter fullscreen mode Exit fullscreen mode

çekilir.

Toplanır.

Sonuç:

30
Enter fullscreen mode Exit fullscreen mode

Stack'e geri yazılır.

STACK
-----
30
Enter fullscreen mode Exit fullscreen mode

9. İşlemcinin Anlayacağı Komutlar

Buraya kadar hala gerçek CPU komutları çalışmadı.

Şimdi Python Runtime içerisinde yazılmış C kodları çalışır.

Örneğin CPython içerisinde:

PyNumber_Add()
Enter fullscreen mode Exit fullscreen mode

çağrılır.

Bu fonksiyon derlenmiş C kodudur.

Artık işletim sistemi üzerinden gerçek işlemci komutlarına dönüşmeye başlar.


10. C Kodundan Assembly'ye

Örneğin:

int z = x + y;
Enter fullscreen mode Exit fullscreen mode

derlendiğinde:

MOV EAX, 10
MOV EBX, 20
ADD EAX, EBX
Enter fullscreen mode Exit fullscreen mode

oluşabilir.

Assembly artık işlemciye çok yakındır.


11. Assembly'den Makine Koduna

Assembler bunu binary'ye çevirir.

Örneğin:

ADD EAX, EBX
Enter fullscreen mode Exit fullscreen mode

x86 işlemcide:

00000001 11011000
Enter fullscreen mode Exit fullscreen mode

şeklinde temsil edilebilir.

Artık tamamen 0 ve 1'lerden oluşmaktadır.


12. CPU Komutu Alır

CPU sürekli şu döngüyü çalıştırır:

FETCH
DECODE
EXECUTE
Enter fullscreen mode Exit fullscreen mode

FETCH

Komut RAM'den alınır.

00000001 11011000
Enter fullscreen mode Exit fullscreen mode

DECODE

CPU komutun anlamını çözer.

ADD EAX, EBX
Enter fullscreen mode Exit fullscreen mode

EXECUTE

ALU devreleri toplama işlemini yapar.

10 + 20
Enter fullscreen mode Exit fullscreen mode

sonucu:

30
Enter fullscreen mode Exit fullscreen mode

olur.


13. Peki 0 ve 1 Gerçekte Nedir?

Çoğu kişinin düşündüğü gibi bilgisayar içinde:

0
1
0
1
Enter fullscreen mode Exit fullscreen mode

karakterleri dolaşmaz.

Gerçekte elektrik seviyeleri vardır.

Örneğin:

Voltaj Anlam
0V 0
5V 1

veya modern işlemcilerde:

Voltaj
0.8V
1.1V

gibi seviyeler kullanılır.


14. Transistor Seviyesi

İşlemcinin içinde milyarlarca transistor vardır.

Bir transistor:

Açık
Kapalı
Enter fullscreen mode Exit fullscreen mode

durumlarına sahiptir.

Bu da:

1
0
Enter fullscreen mode Exit fullscreen mode

olarak yorumlanır.

Örneğin:

AND Kapısı
Enter fullscreen mode Exit fullscreen mode
A B | Çıkış
-----------
0 0 | 0
0 1 | 0
1 0 | 0
1 1 | 1
Enter fullscreen mode Exit fullscreen mode

15. Toplama Devresi (Adder)

CPU içindeki toplama işlemi aslında mantık kapılarından oluşur.

Yarım Toplayıcı:

A ----\
       XOR ---- SUM
B ----/

A ----\
       AND ---- CARRY
B ----/
Enter fullscreen mode Exit fullscreen mode

Milyarlarca transistor birlikte çalışarak:

10 + 20
Enter fullscreen mode Exit fullscreen mode

hesabını gerçekleştirir.


16. Sonuç Ekrana Nasıl Geliyor?

print(z)
Enter fullscreen mode Exit fullscreen mode

çalışınca:

Python Runtime

İşletim Sistemi API

Konsol Driver

GPU / Ekran Kartı

Monitör

Piksel

Işık

şeklinde ilerler.

Sonunda monitörde:

30
Enter fullscreen mode Exit fullscreen mode

görürüz.


Katmanların Tamamı

Python Kodu
      ↓
Tokenizer
      ↓
Parser
      ↓
AST
      ↓
Bytecode
      ↓
Python Virtual Machine
      ↓
CPython (C Kodu)
      ↓
Assembly
      ↓
Machine Code
      ↓
CPU Instruction
      ↓
Logic Gates
      ↓
Transistors
      ↓
Elektrik Sinyalleri
      ↓
0 ve 1
Enter fullscreen mode Exit fullscreen mode

Aslında geliştiricinin yazdığı:

print("Merhaba Dünya")
Enter fullscreen mode Exit fullscreen mode

satırı, görünürde tek satır olsa da arka planda yüzlerce katman geçerek milyarlarca transistorun koordineli çalışmasıyla ekrana ulaşır. Modern bilgisayar biliminin en etkileyici taraflarından biri, insanların okuyabildiği yüksek seviyeli bir dilin sonunda elektrik akımlarına dönüşmesi ve tekrar anlamlı bilgi olarak kullanıcıya geri dönmesidir.

Top comments (0)