Sbrk - Sbrk

brk ve sbrk temel hafıza yönetimi sistem çağrıları kullanılan Unix ve Unix benzeri için ayrılan bellek miktarını kontrol etmek için işletim sistemleri veri bölümü of süreç.[1] Bu işlevler tipik olarak daha yüksek seviyeli bir bellek yönetimi kitaplığı işlevinden çağrılır. Malloc. Orijinal Unix sisteminde, brk ve sbrk uygulamaların ek veri alanı elde edebilmesinin tek yolu buydu; sonraki sürümler, bunun aynı zamanda mmap telefon etmek.[2][3]

Açıklama

Brk ve sbrk çağrıları dinamik olarak değiştirmek Çağıran işlemin veri bölümü için ayrılan alan miktarı. Tahsis edilebilecek maksimum alanı belirleyen sürecin program kesintisi sıfırlanarak değişiklik yapılır. Program sonu, veri bölgesinin geçerli sonunun ötesindeki ilk konumun adresidir. Kırılma değeri arttıkça kullanılabilir alan miktarı artar. Kullanılabilir alan, kesinti azaltılmadığı ve daha sonra artırılmadığı sürece, aynı sayfaları belirtilmemiş bir şekilde yeniden kullanabileceğinden, sıfır değerine başlatılır. Kırılma değeri, otomatik olarak uygun bir boyuta yuvarlanabilir. hafıza yönetimi mimari.[4]

sbrk ve brk 1997 standartlarına göre bile miras olarak kabul edilir (Tek UNIX Belirtimi v2 veya POSIX.1-1998).[5] POSIX.1-2001'de kaldırıldılar.[6]

İşlev imzaları ve davranış

#Dahil etmek <unistd.h>int brk(geçersiz* end_data_segment);geçersiz *sbrk(intptr_t artış);

sbrk Olası bir negatif boyut ekleyerek program sonu değerini ayarlamak için kullanılırken brk kesme değerini bir işaretçinin değerine ayarlamak için kullanılır. Ayarlamak artış Program molasının mevcut değerini almak için parametresini sıfıra.

Başarılı bir şekilde tamamlandıktan sonra, brk altyordam 0 değerini döndürür ve sbrk alt yordam, program molasının önceki değerini döndürür (kullanılabilir alan artırılırsa, bu önceki değer de yeni alanın başlangıcına işaret eder). Herhangi bir alt rutin başarısız olursa, bir değeri −1 iade edilir ve errno küresel değişken hatayı gösterecek şekilde ayarlanmıştır.[5]

Her Unix benzeri sistem, kullanıcının veri bölümünü kontrol etmesi kavramını eğlendirmez. Mac OS X uygulanması sbrk bir öykünmedir ve maksimum 4 megabaytlık bir tahsisi vardır. İlk çağrıda, simüle edilmiş segmenti tutmak için tam olarak bu büyüklükte bir alan tahsis edilir. Bu sınıra ulaşıldığında, −1 döndürülür ve errno ayarlandı ENOMEM. brk her zaman hatalar.[7]

Hata kodları

Hata ENOMEM ayarlanır ve aşağıdakilerden biri veya daha fazlası doğruysa ayrılan alan değişmeden kalır:

  • İstenen değişiklik, sistem tarafından empoze edilen maksimum izin verilenden daha fazla alan ayırır.
  • İstenen değişiklik, mola değerini bir değere ayarlar büyük veya eşit ekli herhangi birinin başlangıç ​​adresi paylaşılan hafıza segment.

Ayrıca bakınız

Referanslar

  1. ^ "İşlem Belleği Kavramları". Özgür Yazılım Vakfı. Alındı 9 Ekim 2015.
  2. ^ "OpenBSD için yeni bir malloc (3)" (PDF). Alındı 13 Haziran 2018.
  3. ^ "POSIX Bellek Yönetimi". blog.pr4tt.com.
  4. ^ X / Open CAE Spesifikasyonu, Sistem Arayüzleri ve Başlıkları (PDF) (2 ed.). X / Open Company Ltd., Birleşik Krallık Eylül 1994. s. 64. Alındı 9 Ekim 2015.
  5. ^ a b "brk, sbrk - alan tahsisini değiştir (ESKİ)". Tek UNIX ® Spesifikasyonu, Sürüm 2. 1997. Alındı 30 Kasım 2019.
  6. ^ brk (2) – Linux Programcı Manuel - Sistem Çağrıları
  7. ^ https://opensource.apple.com/source/Libc/Libc-1272.250.1/emulated/brk.c.auto.html