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
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:
Bir URI, URL ve URN arasındaki fark ne...
Aramak ve uygulamak arasındaki fark ne...
@Staticmethod ve @Python classmethod a...
Match_parent ve fill_parent arasındaki...
Varchar ve nvarchar arasındaki fark ne...