Bilgisayar Mimarisine Giriş – I: Temel Kavramlar

0
351
views
Bilgisayar mimarisi, bilgisayardaki bileşenleri bir yapısını ve kullanıcıların ihtiyaçlarına göre cevap verebilmesi için bu bileşenlerin birbirleri ile etkileşimlerini inceler. Bu yazıda bilgisayar mimarisi ile ilgili temel kavramlar incelenecektir.

 

 

Layering

Yazılım ve donanım işlevlerinin farklı katmanlara ayrılarak çok katmanlı yapı oluşturulmasını, yani modüler bir yapının kurulmasını sağlar. Böylece bir katmandaki değişiklik diğer katmanı etkilemez. Örneğin,

  • Disk sürücüsünün IDE (Integrated Drive Electronics)’den SCSI (Small Computer System Interface)’e değiştirilmesi, diskte kayıtlı bir dosyanın okunmasını etkilemez.
  • Ağ iletişiminde kullanılan OSI standartı
  • İnternete iç ağa erişimde farklı firmalara ait güvenlik duvarlarının kullanılması
  • Kurumlarda güvenlik duvarı, IPS, içerik filtreleyici, antivirüs gibi koruma mekanizmalarının kullanılması

Genel olarak 4 adet güvenlik katmanından bahsedlebilir.

  • Donanım
  • Çekirdek (Kernel) ve aygıtlar
  • İşletim sistemi
  • Uygulamalar

 

Soyutlama (Abstraction)

Bilgisayar ortamındaki karmaşık işlemler, son kullanıcıya kolay bir arayüz üzerinden sağlanmalıdır. Örneğin,

  • Kullanıcı bilgisayardan bir MP3 dosyasına tıklar ve müziği dinler. Arka planda işletim sisteminde çalışan bir uygulamanın ses dosyasını nasıl işlediği ve ses kartı ile sesin hoparlöre verildiği gibi karmaşık işlemler kullanıcıya yansıtılmaz.
  • Oluşturulan bir GPO (Group Policy Object) ile yeni kurulan bir sunucunun sıkılaştırılması ve ayarlarının gerçekleştirilmesi de bir soyutlamadır.

 

Güvenlik Alanı (Security Domain)

Benzer güvenlik ihtiyaçları olan gruplar, listelerdir. Örneğin,

  • U.S. Department of Defense (DoD) tarafından önerilen 3 güvenlik seviyesi (Confidential, Secret ve Top Secret) vardır.
  • Bilgisayarlardaki çekirdeğin 2 modu (kullanıcı modu, kernel modu) vardır.

 

Açık Sistemler && Kapalı Sistemler (Open Systems and Closed Systems)

Sistemler anakart, BIOS, CPU, yazılım, standart, protokol, arayüz, donanım olabilir. Bir sistemin diğer sistemler ile olan iletişimine göre ikiye ayrılır.

  • Açık sistemler,farklı cihazlar veya arabirimler ile iletişim kurabilen (konuşabilen, bağlantı kurabilen, destekleyen) sistemlerdir. Açık sistemler, yayınlanmış spesifikasyonlara sahip standartlar, protokoller ve arayüzler üzerine inşa edilmiştir. Örneğin; ABD’deki AT&T ve T-Mobile cep telefonları uluslararası (genel / açık) GMS standartlarına uyar ve SIM (subscriber identity module) değiştirilerek diğer ağlar ile iletişim kurulabilir.
  • Kapalı sistemlerde ise (genellikle) yayınlanan/açıklanan bir tasarım, araç, güvenlik mimarisi,… yoktur. Bu sistemler genel (açık) standartlara uymazlar ve genellikle de tescillidir. Örneğin; Spirint telefonlar GSM teknolojisi değil de CDMA (Code Division Multiple Access) teknolojisini kullanır ve diğer cihazlar ile doğrudan kullanılamazlar. Kapalı sistemlerin (doğası gereği) çok da fazla yaygınlaşmaması sonucu olarak daha güvenilir olduğu söylenebilir.

Not: Açık && Kapalı Sistem kavramı ile Açık && Kapalı Kaynaklı Yazılım kavramı farklı konulardır.

 

Prosesler (Process)

Bellekte verisi ve komut seti yüklenen programlardır. Programlar bütününe de görev (task) adı verilir ve Heavy Weight Process (HWP) olarak da belirtilebilir.

Prosesler 5 farklı durumda (state) / modda olabilir.

  • Oluşma (New): Proses yeni oluşturulmuştur.
  • Hazır Bekleme (Ready): İlgili proses, emirlerini CPU’ya göndermek yani çalıştırılmak (işlenmek) için bekliyordur.
  • Çalışma (Running): İşlemci, ilgili prosesin emirlerini (instruction) ve verilerini (data) işliyordur.
  • Bloklanma (Blocked): İlgili proses bir girdi (kullanıcının klavyeden tuşa basması gibi) bekliyordur.
  • Sonlanma (Terminate): Proses sonlandırılmıştır.

Not: Ana prosesi sonlanmış olan çocuk prosese “Zombie Process” adı verilir.

 

Bir prosesin çalışması için 4 aşamadan geçmesi gerekir. Bu aşamalar aşağıdaki gibidir.

  • Almak (Fetch)
  • Algılamak (Decode)
  • Çalıştırmak (Execute)
  • Saklamak (Store / Write-back)

 

Eski işletim sistemlerinde (MS-DOS gibi) bir proses başka bir prosese müdahele edebilirken, güncel işletim sistemlerinde (Linux, Windows 10, OS X gibi) ise proses izolasyonu vardır. Proses izolasyonu için kullanılabilecek teknikler aşağıdaki gibi sıralanabilir.

  • Sanal Bellek (Virtual Memory): Donanımsal RAM ve uygulamalar arasında eşleşme sağlar.
  • Object Encapsulation
  • Time Multiplexing: Sistem kaynakları aynı anda farklı prosesler tarafından kullanılır.

 

İş parçacıkları (Thread) ve Kesmeler (Interrupt)

Bir proses, CPU’ya işlenmesi için bir şey gönderecekse, bir iş parçacığı (thread) oluşturur. Alt proses olarak da tanımlanan iş parçacıkları Light Weight Process (LWP) olarak da belirtilir.

Her iş parçacığının kendine ait sayacı, yığını (stack) ve yazmacı (register) vardır ve proses gibi birbirleri ile iletişim kurabilirler. Bu iletişim sırasında işlemciye bir takım asenkron sinyaller (kesmeinterrupt) gönderilir ve işlemciye mevcut görevini (task) yapması bırakmasını, mevcut durumu kaydetmesini ve yeni bir isteği işlemesi gerektiği belirtir. Kesme işlemi bittikten sonra da eski göreve kalındığı yerden devam edilir.

Kesme (Interrupt) adı verilen bu sinyaller ikiye ayrılır.

  • Maskelenebilir Kesmeler (Maskable): Başka bir proses tarafından engellenebilir.
  • Maskelenemeyen Kesmeler (Non Maskable): Başka bir proses tarafından engellenmemesi gereken kritik kesmelerdir.

 

Çoklu Programlama (Multiprogramming)

Tek işlemcili sistemlerde; bellek (RAM) üzerinde birden fazla programın yüklenmesi ve bir programın işlenmesi tamamlandıktan sonra diğerinin ele alınmasıdır. Böylece sistemdeki işlemci boş kalmayacağı için; işlemci (CPU) ve bellek (RAM) etkin şekilde kullanılmış olur. Bunun yanında işlemlerin (job) tamamlanması süresi vakit olabilir.

 

Çoklu İşleme (Multiprocessing)

Çok işlemcili sistemlerde; bir görevin (task) birden fazla işlemci ile çalıştırılabilme / tamamlanabilme yeteneğidir. Günümüzde bir çok bilgisayar çok işlemcilidir. İşlemler (job) çok çabuk biter ancak pahalı bir teknolojidir.

 

Çoklu İş Parçacığı (Multithreading)

Tek veya çok işlemcili sistemlerde; bir prosesin birden çok iş parçacığına (ThreadLight Weight Process) ayrılarak çalışabilmesidir.

 

Çoklu Görev (Multitasking)

Tek işlemcili sistemlerde; belirli bir zamanda birden çok görevin (TaskHeavy Weight Process) çalıştırılabilme / tamamlanabilme yeteneğidir. Eski veya basit işletim sistemlerinde (MS-DOS gibi) Multitasking desteklenmezken; güncel işletim sistemlerinin (Linux, Windows 10, OS X gibi) ise Multitasking desteği vardır.

 

Gerçekte aynı anda tek bir iş (job / task) yapılıyorken, son kullanıcı aynı zaman diliminde birden fazla iş (yazı yazarken, web tarayıcıdan müzik dinleyebilme) yapılıyormuş gibi algılar. Bu da işlemcinin yüksek hızlı olmasından ve işletim sisteminin birden çok görevi kabul etmeye imkan sağlamasından kaynaklanır.

 

Pipelining

İşlemciler, saniyedeki saat çevrimine göre değerlendirilir. Örneğin 2.4 GHz Pentium 4 bir işlemci, saniyede 2.4 milyar saat çevrimi (darbesi) gerçekleştirir. Bir saat çevriminde 4 işlem gerçekleşir.

Pipelining ile aynı anda bu 4 aşamadan farklı olanı gerçekleştirilebilir. Örneğin T1 anında Fetch aşaması gerçekleştirilen X prosesinin T2 anında Decode aşamasına geçilir ve bu anda (T2) Y prosesinin Fetch aşaması gerçekleştirilebilir. Aşağıdaki resimde 4 renkteki proses, 8 saat darbesinde sonlanmaktadır.

 

Ayrıntılı bilgi için kaynaklardaki Allaboutcircuits bağlantısı incelenebilir.

 

Sanal Bellek (Virtual Memory)

RAM’in (birinci bellek) yetersiz kaldığı (hemen işletilmeyecek olan) durumda sabit disk (ikinci bellek) içerisindeki bir dosyaya kullanılmasıdır. Çizim veya oyun gibi uygulamaların kullanılması gibi durumlarda RAM (hızlı) ve disk (yavaş) arasında sayfa (page) takas işlemleri MMU (Memory Management Unit) donanımı ile gerçekleşir.

 

Sanal bellek Windows’ta (“page file“) varsayılan olarak C:\pagefile.sys, Linux’ta (“swap“) kullanıcının belirlediği bir konumda bulunur. RAM’in sanal bellek alanına gidiş sayısına “paging” adı verilir.

 

Ring Modeli

İşlemcinin çekirdek (kernel) ve kullanıcı modundaki proseslerin birbirine etkileşimini yönetmek için kullandığı modeldir. Intelx86 mimarisinde 4 halkalı bir yapı vardır. Bu halkalar aşağıdaki gibidir.

  • Ring 0: Çekirdek (Kernel – En güvenilir katman)
  • Ring 1: Çekirdek ile
  • Ring 2: Aygıt sürücüleri (Device Drivers)
  • Ring 3: Kullanıcı uygulamaları (En az güvenilir katman)

 

Prosesler bu katmanlar arasında sistem çağrıları (system calls) ile iletişim kurarlar ancak çoğu modern işletim sistemlerinde bu yapı çok yavaş olacağı için sadece Ring 0 ve Ring 3 kullanılır. Örneğin son kullanıcı bir dosyayı kaydetmek istediğinde kullanıcı modunda (Ring 3) çalışan bir proses, doğrudan çekirdek moduna (Ring 0) bir sistem çağrısı gerçekleştirir. Son kullanıcının arka plandaki bu yapıdan bilgisinin olmasına gerek olmadığı için Soyutlama (Abstraction) sağlanmış olur.

 

Reference Monitor (Abstract Machine)

Kullanıcıların/Öznelerin (subject) nesneler (object) üzerindeki erişimlerini kontrol edebilme kabiliyetidir. Örneğin, bir kullanıcı (user) prosesinin, çekirdek (kernel) prosesine erişememesi kernel seviyesinde kontrol edilir.

 

3 temel kuralı vardır

  • Müdahaleye Dayanıklılık (Tamper-proof): Özne, kuralları değiştirememelidir. Örneğin; bir kullanıcı kendi kendine erişim verememlidir.
  • Invoked: İlk aşamada öznenin nesne üzerindeki tüm erişimleri yasaklı olmalıdır. Gerektikçe izin verilir.
  • Doğrulanabilir (Verifiable): Erişim kontrolleri test edilebilir olmalıdır. Test işlemi karmaşık olmamalıdır.

Not: Bir öznenin bir nesneye erişimi o nesnenin sahibi tarafından belirlenir.

 

İşlemci Mimarileri

Hesaplama hızı, hassaslık ve programlama kolaylığı sağlamak için farklı işlemciler tasarlanmıştır. Bir programın işlenme süresi (Tp); komut sayısı (S), bir komutun çalıştığı ortalama aşama sayısı (A) ve bir aşamanın çalışma süresi (Ta) değerleri ile doğru orantılıdır (çarpımıdır).

En çok kullanılan 2 mimari vardır. Bu mimarilerin kendine göre avantajları ve dezavantajları vardır.

  • CISC (Complex Instruction Set Computer): Bir programı işlemek için komut sayısını (S) azaltarak programın işlenme süresinin (Tp) düşürülmesi hedeflenir. Bu mimarideki işlemcilerde komut adedi (ve karmaşıklığı) fazla ve komut uzunluklarının farklı olması sebebi ile karmaşık işlemleri programlamak zorlaşır, derleme hızı yavaşlar ve donanım karmaşıklaşır (pahalılaşır). Intel 80×86, Pentium ve Motorola 68030,… CISC mimarisi ile tasarlanmıştır.
  • RISC (Reduced Instruction Set Computer): Aynı işlemi yapmak için daha fazla komut kullanılan (S artarken, A ve Ta azalır) mimaridir. Bu mimarideki işlemcilerde komut adedi azdır ve donanım bakımından basittir (ucuzlar). İşletim sistemlerine ve derleyicilere daha çok iş düşmektedir. PIC, 80×86, IBM 801, MIPS ailesi, SPRAS ailesi, POWER PC ailesi, Motorola 88000 ailesi, ARM,… RISC mimarisi ile tasarlanmıştır.

 

TPM (Trusted Platform Module)

Donanım seviyesinde güvenliği (özellikle kriptografik işlemler) arttırmak için kullanılan ve bazı kriptografik işlemlere imkan tanıyan çiptir. Ayrıntılı bilgi için kaynaklardaki Siberportal (Bitlocker) bağlantısı incelenebilir.

 

Bellek Koruma Özellikleri

İşletim sistemi üzerinde çalıştırılacak olan her proses, çalışma sırasında bellek üzerinde kendine ait bir alana (segment) ihtiyaç duymaktadır. Proses için ayrılan bu bellek alanı ise işletim sistemi tarafında farklı amaçlar için kullanılmak üzere bölümlere ayrılmıştır.

 

Kullanıcılardan alınan girdiler için doğrulama yapılmaması veya kullanılan uygulamanın yazıldığı programlama dilinin zafiyetlerinin olması durumunda bellek taşması (Buffer Overflow) ortaya çıkabilir. Belleğe hükmedebilmek için yüklenen uygulamanın çalışmasına müdahale etmek gerekir. Bu zafiyetlere maruz kalmamak için aşağıdaki gibi bir takım koruma mekanizmaları geliştirilmiştir.

  • DEP (Data Execution Prevention): DEP güvenlik mekanizması; bellekte (hafızada) herhangi bir alanın hem yazılabilir hem de çalıştırılabilir olmasını önler. Bunun anlamı saldırgan olarak kod akışı ele geçirilse dahi shellcode yüklenebilecek stack, heap benzeri alanlar “Not Executable” olduğundan dolayı program oraya yönlendirilemeyecektir. Bu sayede bellek taşması ve benzeri saldırılar engellenmiş olacaktır.
  • ASLR (Address Space Location Randomization): ASLR güvenlik mekanizması; bir uygulamanın her çalıştırılışınca bellekte farklı bir alana yüklenmesini sağlar. Böylece istismar kodunun yükleneceği alanın tespit edilmesi zorlaştırılır.

 

Kaynaklar:

https://www.amazon.com/CISSP-Study-Guide-Eric-Conrad/dp/0128024372

https://tr.wikipedia.org/wiki/Bilgisayar_mimarisi

Exploitationdan Önce – 1: Bellek Hakkında


https://www.allaboutcircuits.com/technical-articles/why-how-pipelining-in-fpga/
https://simple.wikipedia.org/wiki/Instruction_pipelining
https://www.javatpoint.com/multiprogramming-vs-multiprocessing-vs-multitasking-vs-multithreading

CISC ve RISC Mimarileri Nedir?


https://assemblylearningtutorial.blogspot.com/2016/10/cisc-ve-risc-mimarileri.html

RISC ve CISC Mimari Karşılaştırılması


https://www.elprocus.com/difference-between-risc-and-cisc-architecture/
https://www.siberportal.org/blue-team/securing-windows-operating-system/bitlocker-technology-on-windows-environment/

 

 

 

 

CEVAP VER

Yorumunuzu giriniz
İsminizi giriniz

This site uses Akismet to reduce spam. Learn how your comment data is processed.