SORU
22 EYLÜL 2008, PAZARTESİ


Vmalloc ve kmalloc arasındaki fark nedir?

Google'da etrafında ve çoğu insan hafıza bitişik fiziksel engeller almak için garanti konum olarak ** 0, kullanımını savunan buldum. Ancak, aynı zamanda kmalloc bitişik başarısız olabilir gibi görünüyorfizikselistediğiniz blok bulunabilir.
Bir ardışık bellek bloğuna sahip olmanın avantajları nelerdir? Özellikle, neden bir bitişik olması gerekirfizikselbir bellek bloğusistem çağrısı? Sadece vmalloc kullanamadım bir neden var mı?
Son olarak, eğer bir sistem çağrısı işlenmesi sırasında bellek ayırma olsaydım, GFP_ATOMIC belirtmek gerekir mi? Bir sistem atom bağlamında yürütülen diyorsun?

GFP_ATOMİC
Ayırma yüksek öncelikli ve gözüne hiç uyku girmedi. Bu bayrak. kesme işleyicileri kullanmak, alt ve diğer durumlarda, senin yarıları hiç uyuyamadım.

GFP_KERNEL Bu normal bir ayırma ve engelleyebilir. Bu kullanmak için bayrağı. güvenli uyku için zaman süreci bağlamında kodu.

CEVAP
22 EYLÜL 2008, PAZARTESİ


Sadece eğer sen arabellek fiziksel olarak ele bus (PCI gibi) DMA aygıtı tarafından erişilecek eğer fiziksel olarak bitişik bellek kullanma hakkında endişelenmenize gerek yok. Sorun birçok sistem çağrıları hiçbir şekilde bilmek ister tampon olacak sonunda iletilmesi için bir DMA aygıtı: bir kere geçiş arabellek için bir çekirdek alt sistemi, gerçekten kimse bilemez nereye gidecek. Eğer çekirdek için DMA arabellek kullanmaz bile . ben^>bugünbir gelecekteki gelişimi bunu yapabilir.

vmalloc neredeyse bitişik bir dizi içine tampon alanı eşleştirmek için olabilir çünkü sık sık kmalloc daha yavaş. kmalloc hiç değilse GFP_ATOMİC ile kmalloc engelleyebilirsiniz aradı ama yeniden,.

kmalloc sağlayabilir tampon boyutu sınırlıdır: 128 KByte*). Eğer gerçekten büyük bir tampon ihtiyacınız varsa, açılışta yüksek bellek ayırma gibi vmalloc veya başka bir mekanizma kullanmak zorunda.

*)Bu daha önce çekirdekleri gerçek oldu. Son çekirdekleri (2.6.33.2 bu test), tek bir kmalloc max boyutu 4 MB. (*. *4 oldukça) yazdım &;- kaiwan

GFP_ATOMİC geçmesine gerek yok bir sistem çağrısı kmalloc(), GFP_KERNEL kullanabilirsiniz. Uygulama kodu bir tuzak sayesinde çekirdek bağlamı girer, bir kesme. kesme işleyicisi değilsin:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Official Android Tips

    Official And

    23 EYLÜL 2009
  • Jon Reed

    Jon Reed

    14 AĞUSTOS 2006
  • MikeyMacintosh

    MikeyM

    28 Aralık 2009