1. Ayyıldız Tim forumu Hariç Hiç Bir şekilde Rütbeli Oldugunu İddaa edenlere inanmayınız..⠀ Ayyıldız Tim Adına Sizden Bilgi Belge TC Kimlik Vb Evrak İsteyenlere Asla Bilgilerinizi Vermeyiniz.

Bilgisayar Dili - Komutlar Nasıl Işlenir?

'Genel Programlama' forumunda note tarafından 16 Mayıs 2018 tarihinde açılan konu

  1. note Atıldı

    • Guest
    Katılım:
    20 Nisan 2017
    Mesaj:
    3,716
    Alınan Beğeniler:
    6,798

    Özel Mesaj
    Üst seviyede, yani C,Java,Python gibi dillerde yazdığımız programlar arkaplanda nasıl bir işlemden geçiyor? Yazılım kısmından donanım kısmına geçerken neler oluyor, arada dönüşüm yapan programlar nelerdir? Gibi konuları bu yazıda(veya yetmezse yazılarda) anlatmaya çalışacağım. Biraz da donanım öğrenelim. Fazla bilgi göz çıkarmaz değil mi?

    Öyleyse bazı konularda bilgi sahibi olduktan sonra yazımıza başlayalım. İlk olarak bir işlemcinin bir işlemi nasıl yaptığından bahsedelim. Bildiğimiz gibi yazdığımız programlar çalıştırıldığı zaman kaynak kodları Ana Hafıza'da yani RAM'de tutulur. Komutlar buradan okunur,işlemciye getirilir ve yürütülür. İşlemcinin takip ettiği adımlar şunlardır.

    # Fetch (Komutu Getirme) = İşlemci, yürüteceği komutu Ana Hafızadan getirir.

    # Decode (Komutu Çözme) = İşlemci, yürüteceği komutun ne iş yapacağını çözümler

    # Execute (Komutu yürütme) = İşlemci, komutu yürütür.

    Peki üst seviyede yazdığımız kodlar olduğu gibi mi RAM'e koyuluyor? Tabi ki hayır. Önce yazdığımız program compiler ile Assembly komutlarına dönüştürülür. Daha sonra Assembler ile bu kodlar obje koduna dönüştürülür. Obje kodları, henüz makine koduna dönüştürülmeden önceki son halidir. Burda Linker devreye girer ve gerekli kütüphanelere bağlayarak bir araya getirir. Artık makine dilinde çalıştırılabilir bir koddur. Loader ile bu kodlar RAM'e yüklenir, artık program işlemci tarafından çalıştırılabilir. Yani programın makine koduna doğru yolculuğu şu şekilde

    [​IMG]


    Bir bilgisayarla etkileşim kurmak için onun dilini bilmek gerekir. Bu dilin kelimelerine komut denir. Vr bu kelimelerin bütününe Komut Seti denir.

    Komut seti mimarisi, Donanım ve Yazılım arasında bir arayüzdür. Yani, tam donanım ve yazılımın ayrıldığı noktadır. Komut Seti Mimarisi, bir nevi donanımın kılavuzudur. Yani şöyle açıklayabiliriz. Komutları yazarken nasıl bir donanım ile karşı karşıya olduğumuzu, sınırlarımızı, komutların yapısını gibi bir çok kuralı belirtir aynı zamanda. Eğer bu tanımı daha düzgün bir şekilde yapabilecek olan varsa ve yazarsa çok sevinirim çünkü bunu daha düşük seviyede anlatamıyorum :D

    Yukarıda, işlemcinin önce Ana hafızaya erişip verileri getirdiğini, sonra da bunun üzerinde işlem yaptığını söylemiştik. Ancak sürekli olarak kullandığımız veriler için tekrar tekrar Ana Hafızaya gitmek zaman kaybına neden olur. O yüzden, tekrar tekrar kullanacağımız bir veriyi, işlemçi içinde bir register içine bir kere getirip, sonra gerektiğinde kullanmak gerekir. Register nedir? Basit bir şekilde içinde veri tutan bir kayıtçıdır. MIPS komut setinde 32 tane register vardır ve her biri 32 bittir. Bu register'lar işlemcinin içindedir. Dolayısıyla işlemci bunlara çok hızlı bir şekilde erişip işlem yapabilir.

    Evet, bu yazıda bu kadar yeterli sanırım. Bir sonraki yazıda ilk assembly programımızı yazarak MIPS32'ye giriş yapacağız. Sadece komutların arkaplanda işlenme mantığını anlatmaya çalışacağız. Yani fazla ilerlemeyeceğiz. Daha çok komutlar ile ilgileneceğiz. Eğer dikkatli okursanız, bir bilgisayarın komutları nasıl işlediğini öğrenebilirsiniz :)

    Yanlışlar varsa lütfen bildirin. Teşekkürler...
     
  2. dragov Guest

    • Guest
    Katılım:
    10 Ocak 2017
    Mesaj:
    568
    Alınan Beğeniler:
    1,348

    Özel Mesaj
    Klavyene sağlık :) forumda bu tür konuları görmek sevindirici. Her şeyi de Sn.Semtex den beklememek gerekiyor :)
     
    Vecihi_33, Alparslan5545 ve note bunu beğendi.
  3. note Atıldı

    • Guest
    Katılım:
    20 Nisan 2017
    Mesaj:
    3,716
    Alınan Beğeniler:
    6,798

    Özel Mesaj
    Teşekkür ederim. Yani biraz yükünü hafifletelim istedim :D Şaka bir yana, sizlerin de yorumu bizi motive ediyor, sağolun.
     
    dragov bunu beğendi.
    • Guest
    Katılım:
    28 Eylül 2016
    Mesaj:
    2,921
    Alınan Beğeniler:
    2,954

    Özel Mesaj
    Eline sağlık devrem Semtex
     
    note bunu beğendi.
    • Guest
    Katılım:
    28 Eylül 2016
    Mesaj:
    2,921
    Alınan Beğeniler:
    2,954

    Özel Mesaj
    semtex devreminde yorumunu merak ediyorum yazacaktım :)
     
    note bunu beğendi.
  4. note Atıldı

    • Guest
    Katılım:
    20 Nisan 2017
    Mesaj:
    3,716
    Alınan Beğeniler:
    6,798

    Özel Mesaj
    Teşekkür ederim :)
     
    dragov, marazyigit ve S7b3rgl1dy1t9r bunu beğendi.
    • Guest
    Katılım:
    30 Eylül 2016
    Mesaj:
    1,663
    Alınan Beğeniler:
    1,748

    Özel Mesaj
    Konunun devamını bekliyorum.sorum var
    Komut seti mimarisi ile kernel benzer şeyler mi?
     
    note bunu beğendi.
  5. note Atıldı

    • Guest
    Katılım:
    20 Nisan 2017
    Mesaj:
    3,716
    Alınan Beğeniler:
    6,798

    Özel Mesaj
    aslında hem evet hem Hayır. Tanım olarak baktığımızda ikiside donanım ve yazılım arasında bir arayüzdür. Ama birisi bu arayüzde bulunan bir yazılım iken, diğeri daha çok donanımdır. Kernel yani çekirdek, programlama dilleri ile yazılmıştır ve donanıma erişimi sağlar. MIPS ise donanımın yapı şekliyle de alakalıdır. Komutların yorumlanması ve çalıştırılması sırasında meydana gelen olaylarda MIPS ile alakalıdır.

    Kernel donanıma dokunmaz onu yönetir, MIPS ise kendine özgü donanım yapısı olabilen bir kurallar bütünüdür.

    Biraz karışık oldu biliyorum ama, ileride donanımsal olarak komutları incelediğimizde anlayabiliriz. yani öyle olur umarım
     
    AY_akfrt_15, Alparslan5545 ve dragov bunu beğendi.
  6. ERVAH-I-EZEL Guest

    • Guest
    Katılım:
    30 Ocak 2017
    Mesaj:
    1,333
    Alınan Beğeniler:
    4,839

    Özel Mesaj
    Açıklayıcı bir yazı olmuş ama izninle birkaç sorum olacak.

    Obje Kodu Linkerler aracılığı ile belli kütüphanelerle bağlanıp makine diline getiriliyor demişsin. Bu kütüphanelerin saklanıyor olduğu bir bellek ya da başka bir yer olması gerekiyor o şekilde Linkerler de işlevlerini yerine getirebilirler şeklinde bir düşünce oluştu, yanılıyor muyum?

    Bir de MIPS registerlerinin hepsi 32 bittir demişsin, benim bu bit kavramının donanımsal olarak anlamı hakkında pek bir bilgim yok.
    Benim bildiğim 8 bit = 1 byte tekabül eder. Örneğin "AyyıldızTim" yazısı 11 adet 1 byte ile oluşan karakterlerden 8.11=88 bit değerine denk olur. Atıyorum T harfinin de "10011011" şeklinde bir karşılığı vardır ve bu şekilde çalışma prensipleri uzuyor ama senin bahsettiğin işlemcideki bit kavramı daha farklı bir kavram ya da ben algılayamadım..

    Komut Seti Mimarisi tanımın gayet anlaşılır olmuş bence, zaten biraz donanım hakkında bilgisi olanın illeki kulak aşinalığı vardır diye düşünüyorum. Konu için teşekkürler , hayırlı kandiller, iyi geceler. :)
     
    AY_akfrt_15 ve note bunu beğendi.
  7. note Atıldı

    • Guest
    Katılım:
    20 Nisan 2017
    Mesaj:
    3,716
    Alınan Beğeniler:
    6,798

    Özel Mesaj
    Evet, şu yazıyı okuyup bir fikir sahibi olabilirsin Linker hakkında.

    https://www.elektrikport.com/makale-detay/c-derleyicisi-ve-calisma-prensibi/16474#ad-image-0

    32 bit kısmına gelirsek, bu işin arkaplanı biraz karışıktır. Çünkü bir String hafızada olduğu gibi tutulmaz. Yani "Ayyıldız Tim" örneği vermişsin evet ama, bundan çok daha büyük olursa ne olur? Tabi ki veriyi parçalara bölecektir. Mesela C'de bir String, char dizisi olarak saklanır hafızada.

    Kod:
    void test(){
        char mesaj[] = "hello world";
        printf("%s",mesaj);
        printf("%c",mesaj[0]);
    }
    
    şu mesaj değişkeninin sonunda, biz görmesek de, bir "\0" vardır. Yani String'in bittiğini ifade eder. Hafızadan veri okunurken \0 olduğu yere kadar okunur.

    Kısaca, "Ayyıldız Tim" olduğu gibi register içine koyulmaz. Hatta register içinde değil RAM içinde tutulur, eğer işlemci işini bununla görecekse register üzerine getirilir.

    Teşekkür ederim, sana da hayırlı kandiller :)
     
  8. note Atıldı

    • Guest
    Katılım:
    20 Nisan 2017
    Mesaj:
    3,716
    Alınan Beğeniler:
    6,798

    Özel Mesaj
    Bir ekleme yapmak gerekirse, verilerin şu şekilde tutulduğunu düşünebilirsin

    Kod:
    1- A
    2- y
    3- y
    4- ı
    5- l
    6- d
    7- ı
    8- z
    9-
    10- T
    11- i
    12- m
    
    Her bir karakter(char) ardışık olarak hafızada tutulur. Böylece bu karakterleri biraraya getirince string'i elde etmiş oluruz
     
    • Guest
    Katılım:
    30 Eylül 2016
    Mesaj:
    1,663
    Alınan Beğeniler:
    1,748

    Özel Mesaj
    Bazı kaynaklarda stringe karakter dizisi der
    https://belgeler.yazbel.com/python-istihza/input.html#str
    Burda öyle bahsedilmiş mesela :)
     
    ERVAH-I-EZEL ve note bunu beğendi.
    • Guest
    Katılım:
    28 Eylül 2016
    Mesaj:
    2,921
    Alınan Beğeniler:
    2,954

    Özel Mesaj
    devrem tekrar yazmak istiyorum programlamada örnek aldığım kişilerdensin tekrar tekrar tebrik ederim.
     
    ERVAH-I-EZEL ve note bunu beğendi.
  9. note Atıldı

    • Guest
    Katılım:
    20 Nisan 2017
    Mesaj:
    3,716
    Alınan Beğeniler:
    6,798

    Özel Mesaj
    Aynen öyle :)

    Teşekkür ederim, umarım faydasını görürsün :)
     
    • Guest
    Katılım:
    28 Eylül 2016
    Mesaj:
    2,921
    Alınan Beğeniler:
    2,954

    Özel Mesaj
    fazlasıyla :)
     
    ERVAH-I-EZEL ve note bunu beğendi.
  10. dragov Guest

    • Guest
    Katılım:
    10 Ocak 2017
    Mesaj:
    568
    Alınan Beğeniler:
    1,348

    Özel Mesaj
    Bu cümleyi daha iyi anlayabilmek için gerçek hayattan şöyle bir örnek verebilirim;
    1. Bir pc oyunu düşünün. Hard disk üzerinde 40 GB yer kaplıyor olsun.
    2. Bu oyuna girerken 5 sn beklendiğini varsayalım (bu sürede oyun için gerekli olan exe ve dll dosyaları RAM üzerine geçiriliyor).
    3. Beklemenin sonunda ana menü açılacak, win+D veya alt+tab gibi kısayollar sorunsuzca çalışır. Fakat O 5 sn lik bekleme anında bilgisayar çok ağır işleyecektir.
    4. Bunun nedeni hard disk in yazma işlemi gerçekleştiriyor olmasıdır.
    Register dediğimiz hafıza bölgesi kesinlikle kalıcı depolama olarak kullanılamaz. Yalnızca işlem gerektiren durumlarda byte byte komutlar işlenir, ardından RAM üzerine yüklenir bu veriler.
    Adım 2 de RAM üzerine aktarma esnasında da donanımlarla iletişime geçerken de "Register" devreye girer.
    #Mesela bunlardan birisi olan user32.dll yüklenirken klavyenin sürücüsüne ilgili elekriksel komut, işlemci tarafından gönderilir.
     
  11. note Atıldı

    • Guest
    Katılım:
    20 Nisan 2017
    Mesaj:
    3,716
    Alınan Beğeniler:
    6,798

    Özel Mesaj
    Eline sağlık, birşey sormak istiyorum. İşlemci klavyeye komutu elektriksel olarak gönderir demişsin. Tam olarak nasıl çalışır? Yani benim bildiğim, bir komut işlemciye getirilir, sonra da işlemci bunu çözer ve komutun istediğine göre işlem yapar. Komut, klavyeye sinyal göndermek üzere yazılmışsa, register'ın buradaki görevi nedir?
     
    AY_akfrt_15, ERVAH-I-EZEL ve dragov bunu beğendi.
  12. dragov Guest

    • Guest
    Katılım:
    10 Ocak 2017
    Mesaj:
    568
    Alınan Beğeniler:
    1,348

    Özel Mesaj
    İşlemci derken orada bir genelleme yaptım aslında. Basit bir özet geçip hatırlama yapalım; işlemci ve diğer donanımlar donanım doğrudan iletişime geçmez. Kullanıcı ile donanım arasındaki iletişimi işletim sistemininin sağladığını biliyoruz. Örnekten gidelim yine;
    Bir exe dosyasına tıkladığımız anda onlarca dll kütüphanesine çağrı yapacaktır. Bunu OS sayesinde yapıyor. Bunlar RAM üzerine geçiriliyor. RAM üzerinde satır satır bulunan bilgiler teker teker "register" kontrolüne giriyor. User32.dll örneğini vermiştik. İlgili komut dizinine geldiğinde, klavye-mouse gibi Giriş/Çıkış aygıtıyla iletişime geçmesi gerektiğini anlıyor. CPU registeri, elektriksel sinyali doğrudan bunlara göndermiyor. Klavye sürücüsüne ait denetleyiciye (keyboard controller) gönderecektir. Denetleyici ise kendisine gelen bu sinyali, donanım üzerine uygulayacaktır (buradaki elektriksel kısmın detayını ben de tam bilmiyorum). Oyun açılırken geçiş animasyonu ekranını geçmek için Enter'a bastığımızda böyle bir süreç işleyecektir.

    Kullanıcı etkileşimi > Kütüphane Çağrısı > Belleğe yükleme > Bellekte Verileri Okuma > Denetleyicilerle İletişim > Donanıma Erişim

    Şeklinde özetleyebilirim. Umarım da eksik bir bilgilendirme yapmıyorumdur.
     
  13. note Atıldı

    • Guest
    Katılım:
    20 Nisan 2017
    Mesaj:
    3,716
    Alınan Beğeniler:
    6,798

    Özel Mesaj
    Aynen öyle. İşlemci diyince ben de bunun nasıl olduğunu merak etmiştim. Teşekkür ederim düzeltme için :)
     
    Frankiee, ERVAH-I-EZEL ve dragov bunu beğendi.
  14. dragov Guest

    • Guest
    Katılım:
    10 Ocak 2017
    Mesaj:
    568
    Alınan Beğeniler:
    1,348

    Özel Mesaj
    Hızlı düşünürken yanlış yazmışım cümleyi. "İşlemci ve diğer donanımlar birbiriyle doğrudan iletişime geçmez" olacak.

    CPU Register tam olarak burada rol alıyor yâni
     
    Frankiee, ERVAH-I-EZEL ve note bunu beğendi.

Bu Sayfayı Paylaş