14 Haziran 2013 Cuma

Bellek Eniyileştirmesi ?

          Bu ödevde Windows ortamlarında yapılan ve bellek optimizasyonu sağladığı iddia edilen programlar hakkında bir yazı paylaşacağım. Aslında bu tarz programların Windows ortamındaki bellek için neler yaptığına bakacağız. Öncelikle şunu belirtmeliyim ki ; bellek yapısı şu şekildedir. Bellek hiyerarşik ve anabellek'ten önbellek'e kadar 2 seviye daha olan bir yapıdır. Yani bilgisayarda bir veriye ulaşmak için öncelikle önbellek dediğimiz yapıya bakarız ve burada aradığımız verinin olmasını isteriz :) bunun sebebi istediğimiz veriye hızlı bir şekilde ulaşıp bilgisayarda yapılacak işlemlerin azalmasını sağlamaktır. Yani aslında "tık" anında istenileni getirmektir. Bunun için adamlar bir sürü sistem denemiş ve en sonunda hiyerarşik yapıda karar kılmışlar. Bu sistemin oldukça fazla olumlu tarafı varken, felaket durumları da mevcuttur. Mesela aradığımız veriyi önbellekte bulamazsak 1.derece belleğe, orada da bulamazsak 2.derece belleğe bakarız. En kötü ihtimalle orada da yoksa anabellek yolları bizim için başlamış olur. Ki bu durumda bir kullanıcı için bekleme süresini arttırmaya sebeptir. Tabi bazı durumlarda gözle görülür bir süreç geçmese de biz (bilgisayar mühendisleri) biliyoruz ki zaman kaybıdır. Sırf bu sistemde daha verimli olacağını savunan programcılar bellek optimizasyonu adı altında bir takım programlar ve appletler çıkarmıştır. Bu programların bilgisayarımızda bulunan fazlalıkları yok ettiği ve bilgisayarımızı daha hızlı hale getirdiğini iddia etmektedirler. Ancak biraz araştırma (google :) ) yaptıktan sonra bu sisteminde optime etmediğini aksine daha da fazla yavaşlattığını görmüş oldum. 
          Bize verilen ödevde ki reklamda Ram-Booster adlı programın eniyileme yaptığını ve bilgisayarı uçurduğundan bahsetmektedir. Bu ve bunun gibi programlar sistemin içine bir böcek gibi yerleşmek ister. Windows da herhangi bir atak görmediği için bu yetkilendirme işine izin verir. Bu sistemde bulunan fazlalıkları silerken aynı zamanda sistemde kendi programı için yer açmaya ve doldurmaya devam eder. Bellek hiyerarşisinden dolayı öncelikle önbelleğe yerleşen bu program gittikçe hakimiyet kurmaya ve bilgisayarın öncelik işlerini engellemeye başlarlar. Yani artık önbellek tamamıyla bu programa ayrılır ve bilgisayar gereksiz şeylerden, uzantılardan vb. programlardan kurtulurken aslında bu sistemin kölesi olmaya başlarlar. Ben araştırmalarımda gördüğüm ve okuduğum bilgilerden ve denemelerden yola çıkarak bu programlarının eniyileme konusunda faydadan çok zarar verdiğine inanmaktayım. Bilgisayarı optime etmek için illa ki bir başka programa ihtiyacımız yok. Bu konu hakkında Windows kendi destek sitesinden yeterli açıklama yapmış ve uygulandığında bilgisayarın hızlanacağını anlatmıştır. Bilgisayarda kullanılan iCleaner, RamRUSH, Ram-Booster tarzı programlar sistemi yavaşlatır. Elbette bu programların da faydası mevcuttur. Mesela bilgisayarı anlık rahatlatma ve buna benzer hızlandırma işlemleri yaparlar. Gereksiz dosya ve uzantıları silerken bilgisayarın ram yiyen programlarını pasif hale getirirler. Ancak bu işlem için belirttiğim gibi daha fazla ram daha fazla ram isterler :) Bu yüzden ben konuda en iyilemenin bilinçli bir şekilde, mümkün olduğunca program kullanılmadan yapılması taraftarıyım.
          Bu konu hakkında sizlerle paylaştığım bilgiler tamamıyla kendi fikrimdir. Konu hakkında bilgiyi yaptığım araştırmalar sonucunda edindim. 

Faydalı olabilecek linkler için : 

1 Haziran 2013 Cumartesi

Windows Process Scheduling ?

          Merhaba arkadaşlar, sizlere Windows Process Scheluding hakkında bilgi vermeden önce bazı kavramlar neymiş kendi çapımda açıklamak istiyorum.
Scheluding nedir ? Tam anlamıyla zamanlama demektir. Ama bilgisayar bilimleri dilinde ise en basit anlatımda, bekleyen process (işlem)lerden hangisinin çalışacağına karar veren mekanizmadır. Tabi bu mekanizmanın işlemesini belirlemek için çeşitli algoritmalar mevcuttur. Bu kavramlara ek olarak preemptive ve non-preemptive kavramlarına bir açıklık getirmem gerekiyor. Preemptive algoritmalara kesintili algoritmalar, non-preemptive algoritmalara ise kesintisiz algoritmalar denir. Bu algoritmalar, saat kesmelerini nasıl kullandıklarına göre belirlenir. Preemptive algoritmada; bir süreç çalışması için seçilir. Kendi kodunda bulunan bir I/O isteği ile bloklanıncaya kadar ya da kendi isteği ile işlemciden çıkıncaya kadar çalışır.
Non-preemptive algoritmada ise; bir  süreç seçilir ve sabit, belirli bir maksimum süreye kadar çalıştırılır. Bu süre bittiğinde, süreç hala işlemcide çalışıyorsa askıya alınır ve zamanlayıcı (scheduler) başka bir süreci çalışması için seçer.
          Bu algoritmaların ise belirli amaçları vardır. Mesela algoritmalar tüm sistemlerde adil olmalı, belirlenen politikaya uymalı ve sistemi dengede tutmalıdır. Üretilen iş maksimum, dönüş süresi minimum ve işlemci kullanımı eşit ve yüksek olmalıdır. İsteklere hızlı cevap vermeli ve orantılı olmalıdır. Yani, kullanıcının beklediği cevabı vermelidir. Veri kaybından kaçınmalı ve nitelik bozulmamalıdır. Bu yüzden sistemlerde scheluding algoritmaları önemli yer almaktadır. Bu algoritmalar şöyle sıralanabilir :
1)First come first served: (İlk gelene ilk servis) Günlük hayatımızda herhangi bir mekana gittiğimizde yapılan müşteri sıralamasına benzer. Her gelen müşteri sipariş önceliğinde sonrakinden önce hakka sahip olur. Bu sistem kesintisiz ve en kolay zamanlama algoritmasıdır. İlk gelen süreç ilk hizmeti alır. Bu algoritmada süreçler istek sıralarına göre işlemcide çalışırlar. Basitçe hazır durumdaki süreçleri tutan bir kuyruk(queue) vardır. Kuyruktaki süreçler sırayla çalıştırılırlar. Çalışan süreç bloklanınca bekler. Bloklanmış süreç tekrar hazır durumuna geçtiğinde yeni bir süreç gibi davranılarak kuyruğun sonuna  eklenir. Mesela işlemci tasarımında papatya zinciri örnek olabilir.
2)Shortest Job First (En Kısa Süreli İş İlk): Kesintisiz (non-preemptive) çalışan algoritmadır. Süreçlerin toplam çalışma sürelerinin belirli olduğu düşünülür. Zamanlayıcı, kuyrukta bulunan süreçlerden en kısa sürede tamamlanacak olan süreci seçer.
3)Shortest Remaining Time Next(Çalışma süresi en az kalanı çalıştırma): En kısa süreli iş algoritmasının, bir kesintili uyarlamasıdır. Kalan çalışma süresi en az olan seçilir. Yeni bir iş geldiğinde, mevcut işin kalan süresi ile yeni sürecin kalan süresi karşılaştırılır; küçük olan tercih edilir.
4)Round-Robin Scheduling (Dönüşümlü Zamanlama): 
Her sürece, çalışabileceği maksimum süre atanır. Sürece verilen bu zaman aralığına quantum denilir. Eğer süreç, quantumunun sonunda hala çalışıyorsa askıya
alınır ve başka bir sürece geçilir. Sürecin quantumu bitmeden süreç bloklanırsa ya da çalışması sonlanırsa başka bir sürece geçilir. Bir listede çalışabilir süreçler tutulur. Süreç quantumunu
tükettiğinde listenin sonuna eklenir.
5)Priority Scheduling (Öncelik Zamanlama): Dönüşümlü zamanlama algoritması dolaylı olarak tüm süreçlerin eşit öncelikli olduğunu farzeder. Süreçler üzerindeki dış etkilerle süreçlerin farklı önceliklerde olması gerekir. Bu durumda öncelik zamanlama algoritması kullanılır. Her sürece bir öncelik(priority) değeri atanır ve çalışabilir süreçlerden yüksek öncelikli olanların çalışmasına izin verilir.

Şimdilik sizlerle paylaşacağım bilgiler bu kadardır. Herkese okuduğu için teşekkür ederim.

25 Mayıs 2013 Cumartesi

Bil 461 Ödev 2

Öncelikle soru 1 den başlamak istiyorum :
1)IBM Power 7 işlemcili bir sunucu üzerinde RHEL 6 çalışıyor. Buradaki xeyes uygulamasını kendi PC'imde sanal ortamda çalışan RHEL 6 sunucuya atsam çalışır mı ?

Bu soruya şöyle bir cevap verilebilir.Her işlemci kendi mimarisini oluştururken kendine özgü buyruk kümesi mimarisi uygular. Bu durumda her buyruk kümesinin her mimaride çalışması mümkün değildir. Uyumluluk sorunu yaşanacağından kendi Pc'imizde çalışması mümkün değildir. Uygulama çalışması için kendi bilgisayarımıza göre derlememiz lazım . Ancak sanal ortamda çalışması mümkündür. Sonuçta kendi bilgsayarımız için başka işletim sistemi kullanıyoruz. 
-------------------------------------------------------------------------------------------------------
Soru 2 için ise 
Notepad++’i linux ortamında nasıl çalıştırabilirim. Çalıştırarak gösteriniz. Oluşturduğunuz yapının çalışma mantığınız açıklayınız. Notepad++ çalıştırabilmek için yaptıklarınızı video ile çekip youtube veya blog sitenize yüklemelisiniz. Lütfen yaptıklarınızı seslendirin, yani yaparken anlatın. Jing aracını en çok 5 dk uzunluğunda bu tip çalışmalar için kullanabilirsiniz.

Bu soruyu aşağıdaki video linki ile cevapladım . 

Linux Notepad++ video linki


-------------------------------------------------------------------------------------------------------

Soru 3 için ise
«merhaba dunya» yazan bir uygulamayı C’de yazıp derleyelim. strace  komutunu kullanarak yapılan sistem çağrılarını görüp yorumlayalım !

Öncelikle gedit aplikasyonundan istenilen C kodunu yazıyoruz ve terminalden gereken komutları koşturuyoruz.

Strace komutunu terminalde koşturduğumuzda karşımıza çıkan ise :

strace ./deneme --->



İstenilen uygulama çalıştığında API de karşımıza çıkanlar :

execve, brk , access , exit_group , mprotect , read , close , fstat , open , mmap , write , munmap ve arch_prctl . 

Burada mmap : adresde yeni bir yer açar. 
fstat : dosya hakkında bilgi verir.
open : dosyayı açar . 
Bu şekilde tüm bunların birer anlamları vardır. 

22 Mayıs 2013 Çarşamba

KVM- Çekirdek Tabanlı Sanal Makine

          Bil 461 İşletim Sistemleri kapsamında hocamızın bizlere okumamızda faydası olacağı ve bununla birlikte bir ödev şeklinde sunduğu KVM(Kernel-based Virtual Machine) adlı makale hakkında izlenimlerimi ve etkilerini bu yazıda paylaşacağım.
          Bu makale Red Hat tarafından yayınlanmış ve sanallaştırmanın tarihçesinden kullanımına, türlerine, yapısına ve önemine kadar tüm konuları ele almıştır.
          Konunun tarihçesine baktığımda; acaba neden bu kadar önemli ve ekonomik açıdan değerli bir sistem olduğunu anlamaya çalıştım. Daha doğrusu sanallaştırma nedir ne değildir onun hakkında yepyeni bilgiler edindim. Nedir bu sanallaştırma olayı arkadaş? Bu soruyu kendime sorduğumda aldığım cevap "TeamViewer" gibisinden bir şey mi acaba dedim :) Sonra biraz daha araştırma yaptıktan sonra çok yanlış bir düşüncede olduğumun farkına vardım. Sanallaştırma dediğimiz olayın aslında "bilgisayar içinde işletim sistemi kurmaca" olduğunu anladım. Yani bilimsel olarak; bir bilgisayar ortamında başka işletim sistemlerini kurabildiğimiz, kurduğumuz işletim sisteminde sanki o bilgisayardaymışız gibi işlemler yapabildiğimiz bir uygulama platformudur.
          Peki neden sanallaştırıyoruz ? Git sistemin olduğu yere orada işini hallet gel ? Tabi zamanında bu iş böyle devam ediyormuş. Herkes benim gibi düşünse giden herkesin maliyeti, işçi maliyeti, sistem maliyeti vb. türden maliyetlerden şirketler iflas bayrağını çekerdi. Ancak bu işin ekonomik boyutu insana hizmetten daha önce geldiği için sistem tamamiyle değiştirilip, oraya buraya gitmeden halledilebilir sisteme dönüşmüş. 
          Derste hocamızın bizlere gösterdiği VmWare adında bir program sayesinde Windows işletim sistemi içine Centos gibi işletim sistemleri kurup, bu işin eğlenceli kısmı da olduğunu farketmiş oldum. Daha öncelerde bu konu hakkında hiçbir girişimim olmadığı için yeni bilgi bana beraberinde eğlenceli bir ortam sağlamış oldu. İşin en ilginci de aynı bilgisayar içinde iki işletim sistemine de erişebilme olayıydı. 
          Okuduğum makalede işletim sistemlerininde katmanlardan oluştuğu ve bu katmanların her birinin yetki farklarının olduğunu öğrendim. Linux'un en alt katmana izin vermemesinden dolayı KVM ortaya çıkarılması da işin ilginç kısmıydı. Yani Hypervisor denilen diğer işletim sistemlerinin çalıştırılması işlevine sahip olan işletim sistemi türü geliştirilmiş.
          Sanallaştırma teknikleri dört farklı durum olarak tanıtılmış. Binary translation, paravirtualization, hardware assisted virtualization ve mükemmel KVM :) İnsanların KVM sistemi üzerine bu kadar yoğun bir şekilde gitmesini anlayabiliyorum. Öncelikle Linux tabanlı olması ve açık kaynak kodlu olması insanları büyük meblağlar ödemekten kurtarıyor. Ama şunu da düşünmüyor değilim "Acaba destek mükemmel mi ?". Windows kadar kapsamlı "Supporting Center" olabileceğine inansam da bunun oldukça uzun zaman alacağı kanaatindeyim. 
          Son olarak da bu sistemle büyük şirketlere maddi açıdan ne kadar büyük kazanç sağlandığından bahsetmek istiyorum. Şimdi düşünelim büyük bir şirkette sunucu maliyeti ne kadardır ve bu sunucu sayısı binlerce olursa şirketin ekonomik açıdan kazanımı ne duruma gelir ? Ama bu şirket sanallaştırma konusunda yatırımlarını yaparsa, kullandığı sunucu sistemlerinin sayısını binlerden yüzlere, ellilere kadar düşürebilir. Bu durum bir patron için nasıl bir duygudur anlatamam size :) Maliyet sıfıra yakın ama işler tıkırında :) Ben sanallaştırma taraftarıyım bundan sonra :) bu makale bana az masraf çok iş yapabilme sistemini yeterince anlattı.