15 Haziran 2013 Cumartesi

RAM Optimizasyon Programları

     RAM optimizasyonu yapan programlar piyasada uzunca bir süredir mevcut. Ancak bu programları kullanmak hiçbir işe yaramamaktadır. Bunun sebeplerini inceleyelim.

     Optimizasyon programı üreticileri oluşturdukları programın RAM'i boşaltarak sistem yavaşlamasını ve takılmaları engellediğini vurgular. Optimizasyon programlarının yaptığı şey çalıştırıldıklarında RAM'de yüksek miktarda yer kaplamak ve sonrasında bu yeri boşaltmaktır. Kapladıkları bu yüksek miktarda yer sebebiyle RAM'deki diğer programlar dışarı atılır, yani pagefile'a yazılır. Görünüşte RAM'in boşaltılıyor olması güzel olsa da pratikte büyük bir performans kaybı yaşatır. Çünkü pagefile hard disk üzerindedir ve pagefile'a yazılan programlara ihtiyaç duyduğumuzda bu programlar tekrardan RAM'e yüklenmek zorundadır.

     Optimizasyon programlarının yaptığı belirtilen bir diğer iş de RAM'deki verileri birleştirmektir (defragmentation). Eğer RAM'lerin yapısında hard diskteki gibi hareketli parçalar olsaydı defrag yapılmaları bizim yararımıza olurdu. Ancak hareketli parçaları olmadığından defrag yapılmaları tamamen programcının uydurduğu bir bilgi olarak karşımızda durmaktadır.

     Windows şu anda oldukça iyi bir bellek yönetim politikasına sahiptir. Ek bir programa ihtiyaç duymadan sistemin belleği verimli bir şekilde kullanılmaktadır. Eğer sistemdeki RAM miktarı yetersiz geliyorsa veya sistemin yavaşlığı giderilmek isteniyorsa bunun çözümü sisteme daha çok RAM eklemektir. Bunun için DownloadMoreRAM sitesi ziyaret edilebilir.


Kaynaklar:

1 Haziran 2013 Cumartesi

Windows Process Scheduling


     Windows işletim sistemleri Windows NT'den beri Round-Robin ve Multilevel Feedback Queue zamanlama algoritmalarını birlikte kullanmaktadır.

     Round-Robin algoritması her işlemin uyanık kalmasını sağlamak için kullanılan, işlemlerin önceliklerinin olmadığı bir algoritmadır. Bu algoritmada işlemlere çalışmaları için belirli zaman aralıkları verilir (ör. 100 ms) ve bir işlem bu süreyi tamamlayınca diğer işleme geçilir. Her işlem bitene kadar bu döngü devam eder. 


     Round-Robin'in kullanım amacı multitasking'in efektif kullanılmasını sağlamaktır. Bu sayede her işlem çalışır durumda kalır ve işlemler arası geçiş yapmamız da kolaylaşır. Eğer bu algoritma kullanılmasaydı arkaplanda kalan işlemler ihtiyaç duyduğu kaynaklara ulaşamayacak ve tamamlanamayacaklardı.

     Multilevel Feedback Queue ise Round-Robin'in eksiklerini kapatmaktadır. Bu algoritmada 3 temel durum vardır:

1) Kısa işlemlere öncelik vermek,

2) Giriş-çıkış aygıtlarına bağlı işlemlere öncelik vermek,
3) İşlemleri işlemciye olan ihtiyaçlarına göre kategorilendirmek.

     FIFO mantığıyla çalışan bu algoritmada işlemler en üst seviyedeki kuyruğa girer, kendilerine öncelik verildiği zaman sıranın başına geçer ve işlemciye atanırlar. İşlem sona ererse kuyruktan çıkar, ama quantum zamanını kullandığı halde hala sona ermediyse beklemeye alınır ve bir alt seviyedeki kuyruğa alınır. Bu durum işlem bitene kadar veya işlem en alt kuyruğa inene kadar devam eder. En alt kuyrukta Round-Robin ile işlemlere sırayla zaman tanınır ve bitmeleri beklenir.

     Multilevel Feedback Queue işlemleri önem sırasına göre yerleştirerek işlemlerin daha efektif çalışıp bitmesini sağlar ve her işlemin işlemciyle aynı oranda çalışmasına olanak tanır.

25 Mayıs 2013 Cumartesi

Ödev 2


1) İşletim sistemleri aynı olduğu için sistem çağrıları aynıdır. Eğer xeyes'ın dosya bağımlılıkları varsa sunucudan ev bilgisayarına kopyalandığı zaman çalışmayacaktır. Bağımlı dosyaların da kurulması gerekmektedir.

2) Videoyu tam ekran yaparak daha kolay izleyebilirsiniz.

Unable to display content. Adobe Flash is required.


3) Resmi üzerine tıklayarak büyütebilirsiniz.





Öncelikle ekrana "Hello, world!" basan C kodunu gedit'te yazdım ve bu dosyayı "hello.c" olarak kaydettim. Sonrasında "gcc -Wall hello.c -o hello" komutuyla bu kodu "hello" adındaki çalıştırılabilir dosyaya dönüştürdüm. Burdaki "-Wall" compiler'ın uyarılarını açmaktadır, böylece bir sorun oluştuğunda bize bildirilebilir. "-o"yu kullanarak da "hello.c"yi "hello" isminde bir çalıştırılabilir dosyaya dönüştürdüm. Şimdi strace çıktılarını inceleyelim:

strace -ttT ./hello   - gcc ile yarattığım "hello" programını strace ile tarattım. Buradaki "tt" eki her bir adımın zaman damgasını mikrosaniyesine kadar ekrana basmakta, "T" eki de her sistem çağrısının ne kadar zaman harcadığını satır sonunda ekrana basmaktadır.

execve   - Program çalıştırılır ve çalıştırılan programın adı ekrana yazılır.

brk   - Programın çalışacağı data segment'in sonunu gösterir. Eğer 0 değerini döndürürse program için bellekte yeterli yer ayrılmış demektir.

mmap   - Programın belirlenen miktardaki byte'ını belleğe yükler.

access   - Bir dosyanın erişime açık olup olmadığını belirler.

open   - Sanal bir terminal'da bir program başlatır.

fstat   - Dosya hakkında bilgi verir.

close   - Bir file descriptor'ı kapatır. Böylece o tanımlayıcı başka bir yerde kullanılabilir.

read   - Buffer'ın içine belirlenmiş büyüklükteki byte'ı file descriptor'dan okur.

mprotect   - Belleğin belli bir bölümünün koruma ayarını değiştirir.

arch_prctl   - Mimariye özgü thread durumlarını ayarlar.

munmap   - Bellekten dosyaları veya aygıtları çıkartır.

write   - Buffer'dan alınan belirli miktardaki byte'ı bir file descriptor'a yazar.

exit_group   - Bir işlemdeki bütün thread'leri durdurur.

22 Mayıs 2013 Çarşamba

Sanallaştırma ve Çekirdek Tabanlı Sanal Makina (Kernel Based Virtual Machine)


     Okumakta olduğunuz yazıda sanallaştırmadan bahsedeceğim ve Kernel Based Virtual Machine (KVM) başlıklı makaleden öğrendiğim bilgilerin üzerinde duracağım.

     Günümüzde enerji tüketimini azaltmak için kurumlarda birden çok bilgisayar çalıştırılması yerine aynı makinada birden çok işletim sistemi çalıştırılması daha tercih edilebilir bir durumdur. Normalde minimum kullanılan sistem kaynakları sanallaştırma yoluyla birden çok işletim sistemine ve farklı işlemlere hizmet verir duruma gelmekte ve verimliliği artmaktadır. Son günlerde tanıtımı yapılan Xbox One oyun konsolunda Xbox işletim sistemi, Windows çekirdeği tabanlı işletim sistemi ve hypervisor katmanı olarak 3 işletim sistemi bulunmaktadır. Bu sayede Metro uygulamaları Xbox'a port edilip çalıştırılabilmektedir, örneğin oyun oynanırken Skype üzerinden görüşme yapılabilir.

     Sanal makinalarla ilk defa 2 yıl önce çalıştım. O zamanlar sadece ders amacıyla kullandığım bir yapıydı ve derinlemesine anlamaya çalışmamıştım. Sanallaştırmanın benim için avantajı istediğim bir işletim sistemini birkaç küçük ayarla zahmetsizce çalıştırabilmesiydi. Fakat bunun yanında gözlemlediğim kadarıyla bir de dezavantaj geliyordu; sanallaştırma katmanındaki işletim sistemi tam performansla çalışamıyordu. KVM hakkında okuduğum bu yazıdan sonra sanallaştırmanın nasıl çalıştığıyla ilgili daha çok fikir sahibi oldum ve sanal makina performansının sanallaştırma tekniğinin gelişimiyle artışa geçtiğini gördüm.

     Günümüzde x86 mimarisinde Ring yapısından dolayı sanallaştırma ortamını kontrol eden hypervisor donanımın hemen üzerindeki ayrıcalıklı katman olan Ring 0'a konulmakta ve konuk işletim sistemi de sıradan bir uygulamaymış gibi daha az ayrıcalıkların tanındığı Ring 3'te tutulmaktadır. Fakat donanımdan Ring 3'e kadar olan yolda işlemcinin ve sanallaştırılan katmanın iletişimi bozulmaya uğramakta ve konuk işletim sistemi asıl işletim gibi davranmaya çalışabilmekteydi. Dolayısıyla tasarımcılar donanımdan sanal makinalara erişim için sürekli yeni yöntemler denediler ve stabil bir yol bulmaya çalıştılar. Sanallaştırma üzerine yapılan çalışmalar son birkaç yılda oldukça verimli bir durumda olunduğunu göstermektedir. Özellikle Ocak 2007'den itibaren Linux çekirdeğine dahil edilen Çekirdek Tabanlı Sanallaştırma (ÇTS) tekniği oldukça kullanışlıdır.

     ÇTS yöntemiyle hypervisor donanımın üzerinde yabancı bir madde gibi durmayıp işletim sistemi çekirdeğine entegre halde çalışarak bir Linux işlemi gibi davranmaktadır ve sistemle çok daha uyumlu bir yapıdadır. ÇTS'de sanal makinalar ilk zamanlardaki gibi donanımı emüle etmek yerine Linux çekirdeği üzerinden gerçek donanımla iletişim kurabilmektedir. Linux'un açık kaynaklı olması ve donanım üreticilerinin de ÇTS'ye el atmasıyla beraber donanım desteği oldukça yükselmiştir. Linux hangi donanımla çalışıyorsa hypervisor da o donanımla uyum içinde çalışmaktadır. ÇTS hem Linux'un güvenli yapısından yararlanıp hem de donanım konusunda uyumlu bir tablo çizerek sanallaştırmayı denemek veya sanallaştırılmış sistemini terfi ettirmek isteyenler için en kullanışlı yöntem olarak karşımızda durmaktadır.

     Sanallaştırmanın son 10 yılda katettiği yolu oldukça etkileyici buldum. İlk başlarda kurumların ve devletin kullandığı bu sistemin normal bir bilgisayar kullanıcısına kadar inmesi herkesin bu teknolojiyle tanışıp kendi işinde kullanmasını sağladı. Ayrıca şirketlerin efektif çalışma ortamları hazırlarken sanal makinaları kullanması boşta duran işlem gücünü verimliliğe dönüştürmek adına çok başarılı bir adım olmuştur. ÇTS'nin şu an sadece Linux platformunda olması bana biraz dezavantaj gibi geliyor. Önümüzdeki yıllarda Linux dışındaki işletim sistemlerine de entegre edilirse daha çok kullanıcıya hitap edeceğini düşünüyorum.