Uzun Süre Açık Kalan Bilgisayarlarda RAM Neden Dolar? Nedir Bu RAM?

Şu anda konuyu okuyanlar (Üyeler: 1, Ziyaretçi & Botlar: 0)


Görkem Say

Адидже
Yönetici
Super Moderator
Katılım
22 Nis 2017
Mesajlar
13,973
Puanları
113
Konum
Laurelindórinan
Herkese merhabalar. Bu konuda uzun süre açık kalan bilgisayarlarımızda bellek miktarının neden dolduğunu ve neden yeniden başlatmanın bir çözüm olduğunu anlatacağım.

Şimdi olaya gelirsek RAM'in tam adı "Random Access Memory" dir. Neden böyle derseniz bilgisayarda biz bir program, oyun veya bellek isteyen herhangi bir işlem yaptığımızda bellekten bir yer istenir ve bu yer kesinlikle belirli değildir. İşletim sistemi arkada kendine göre bazı komplike optimizasyonlar yaparak programa istediği yeri rastgele olmak üzere verir. Bu tabi ki pazardan gardaş bize 2 kilo elma sar demek gibi olmuyor. Sistem, programa bellekten belli bir blok alan ayırır. Her blok parçalardan oluşur ve her parçanın bir adresi vardır bu sayede bloğun ve parçanın içindeki veriye erişilebilir. Yani biz belleği Dünya, bloğu bir site, parçaları da sitenin içindeki evler olarak düşünebiliriz ki doğal olarak her evin kendine özel bir kapısı yani adresi vardır. Kısaca temel mantık bu şekilde.

69408

Program veya kullanıcı o bellek içerisindeki kayıtlı olan bir şeye erişmek istediğinde aynı kargocuların kapımıza gelip zili çaldığı gibi(RAM tarafında geldik bulamadık olayı yok :D) sistemde belleğin içindeki adresi buluyor ve içerideki bilgiye erişiyor. İşte RAM kapasitesi bu yüzden önemli. Ne kadar çok belleğiniz olursa o kadar çok alanınız olur ve aynı anda o kadar çok programa yer verebilirsiniz. MHz ve CL değerleri de bu bilgiye ulaşmadaki hızdır ama bellek DDR2 ile bile olsa gayet hızlıdır çünkü belleğin temel mantığı hıza dayalıdır zaten. Bilgisayar aleminde bir kural vardır bir yerden kazanç varsa bir yerden kayıp vardır. Belleklerde hızdan kazanç varken alandan kayıp var, mekanik disklerde alandan kazanç varken hızdan kayıp var olay bu. Her iki durumda da kazançlı olan bir donanım varsa o da çok pahalıdır alın size yine bir kayıp :)

Bilgisayarda her şey 1 ve 0 rakamlarından oluşur. Derleyiciler bizim kodlarımızı makine diline çevirir ve bu sayede bilgisayara kod anlamında istediğimizi yaptırabiliriz ama bilgisayar ne yaparsa yapsın bunları 1 ve 0 olarak yapar. Örnek olarak 1000 ikili tabanda 8 rakamına tekabül eder. Biz 8 rakamını veririz sonra bilgisayar bunu çevirir temel olarak. İşte bu çevirmeleri kolaylaştırmak için 10-11-12-14-15 sayıları sırasıyla A-B-C-D-E olarak kodlanır bilgisayar tarafında. RAM içindeki adreslere baktığımız zamanda bu tarz rakam ve sayılardan oluşan bir kod görürüz.

69409

RAM dolması ise tam bu noktada olur. Diline bağlı değişmekle beraber bir kod yazılırken ortaya bazı garbage dediğimiz çöpler ortaya çıkar. Bazı dil ve derleyeciler bu çöpleri kendi temizlerken bazıları temizleyemez. Misal C dilinde bir işlem yaparken gittiniz ve bellekten bir alan istediniz. Sonra bellekteki size verilen alanı boşaltmadan programı veya kodu kapadınız. İşte size verilen o alan çöp oldu çünkü siz o alanın adresini kaybettiniz ve oraya ulaşmanız bir daha mümkün değil. Bu yüzdende RAM boşuna dolmuş ve şişmiş oldu. Dediğim gibi bu dile ve derleyiciye göre değişiyor o yüzden her programda bu sıkıntıyı yaşamazsınız ama bilgisayar çok uzun süre açık kaldığında bellekteki şişme büyük ihtimal bundan kaynaklıdır. Hani derler ya bilgisayarı arada bir yeniden başlatın kendine gelsin diye temel mantığı buradan gelmektedir. Düzgün bir kod yazmada bu önemli bir olaydır çünkü 20-30 satırlık çok basit bir kodla bile belleğin şişip programın hata vermesini sağlamak mümkün. Temiz kod yazmak istiyorsanız bu tarz optimizasyonlara dikkat etmeniz lazım. Bilgisayar oyunlarındaki temel optimizasyon mantığı da buradan geliyor diyebiliriz. Donanımla yazılım ne kadar uyumlu çalışıyorsa o kadar stabil performans alırsınız. Tabi arada birçok karışık olayda oluyor ama anlaşılması kolay olsun diye derine inmeyeceğim. Okuduğunuz için çok teşekkür ederim. Eğer bu tarz çalışma prensibini merak ettiğiniz donanımlar varsa belirtin onları da anlatmaya çalışırım :)
 

Ben Kenobi

Dekan
Katılım
6 Kas 2011
Mesajlar
7,362
Puanları
113
Bu aslında uygulama ile birlikte Windows'un da sorunu.
Linux'te çalıştığım bir şirkette 10 yıl boyunca yeniden başlatılmamış bir server biliyorum ve bu sürede RAM'de şişme, sistem çökmesi vs gibi bir durum oluşmamış.
Yani aslında içerisinde sızıntı olan bir uygulamayı belli süre sonra yeniden başlattığımızda düzelmesi gerekir ama Windows'un bizzat kendisinde de bellek sızıntısı olduğundan düzelmiyor, bu bağlamda 10 yıl boyunca yeniden başlatılmamış bir makine Windows'ta mümkün değil.

Ek bilgi: Java, C# gibi bellek yönetimli dillerde bu sıkıntı olmaz lakin bu otomatik yönetim bize performansın düşmesi olarak geri döner, bu bağlamda misal bilgisayar oyunları bu dillerde yazılmaz, nadiren yazılan olursa da performansı düşük olur veya performansı düşürmemek için genel kalitesi düşük olur, C++ 11 ile gelen ve 14, 17, 20 ile her seferinde bir adım daha geliştirilen Smart Pointer sistemi ise hem bellek yönetimini otomatikleştiriyor hem de performansa etkisini %0.1 gibi gözle görülemeyecek seviyelerde tutuyor yani virtual event fonksiyonları kullanmak ile aynı maliyette.
 
Üst
stat counter