İşletim sistemi hafıza yönetimi?

Başlatan mir_as82, 08 Nisan 2016, 17:06:01

mir_as82

İşletim sistemleri her prosese ve uygulamaya ayrı ayrı heap alanları mı tahsis eder?Mesela A programını C'de yazdık ve linuxta derledik ve çalıştırdık. Bu durumda işletim sistemi bizim programımıza ne kadar alan ayırır? Sonra gittik ikinci B programını çalıştırdık. Bunlara ayrılan heap alanları ayrı ayrı mıdır? Yoksa ikiside ortak havuzdan mı kullanır?
Yani işletim sistemi proseslere veya uygulamalara yer tahsis ederken hangi kritere göre yer tahsis eder?
Code segmentin başlangıç adreslerine kendinin kullanması için bazı kodlar mı ekler?

tunayk

Hocam farklı işletim sistemlerinde hafıza yönetimi de farklı olabiliyor.  Windows tarafında, 98'den sonraki versiyonlarda "Protected Mode" kullanılmaya başlandıktan sonra artık uygulamalar sanal olarak tüm hafıza kendisininmiş ve sadece kendisi varmış mantığıyla çalışıyor. Yani doğrudan gerçek Ram da tüm bölgelerine erişemiyorsunuz.  Dolayısıyla uygulamalar aynı ram bölgesine ulaşamıyorlar dolayısıyla doğrudan veri alışverişi yapamıyorlar.  Bunun için Named Pipe, TCP/IP, Clipboard, takas dosyası vb. metodlar kullanmak gerekiyor.

Eski işletim sistemlerinde böyle bir özellik olmadığından sistem gerçek ram'i tüm uygulamalarla birlikte ortak kullanıyor. Bir uygulama da sakatlık olursa veya yanlış yere bişey yazarsa sistem tümden çakılıyor.

Linux tarafında pek bilgim yok. Bişey diyemeyecğim

mir_as82

#2
Teşekkür ederim hocam. Zaman ayırıp yazmışsınız. Çok faydalı oldu.

mesaj birleştirme:: 09 Nisan 2016, 12:32:48

Hocam program başlarken çalıştırılacak programın ihtiyacı olan stack tespit edilebilir, fakat heap alanı kestirilemez. Bunun için işletim sistemi her prosese en başta sabit alanda heap miktarı ayırıp daha sonra onu genişletiyor mu? Yani başlangıç adreslerini istedik, ama heap alanının boyutu kestirilemez ki program çalışırken. Bunu nasıl hallediyor işletim sistemi?