7
อะไรคือความแตกต่างระหว่าง vmalloc และ kmalloc?
ฉันได้ไปรอบ ๆ และพบว่าคนส่วนใหญ่สนับสนุนการใช้kmallocเนื่องจากคุณรับประกันได้ว่าจะได้รับบล็อกหน่วยความจำทางกายภาพที่ต่อเนื่องกัน อย่างไรก็ตามดูเหมือนว่าจะkmallocล้มเหลวหากไม่พบบล็อกทางกายภาพที่อยู่ติดกันที่คุณต้องการ ข้อดีของการมีบล็อกหน่วยความจำที่ต่อเนื่องกันคืออะไร? โดยเฉพาะทำไมฉันจะต้องมีความต่อเนื่องกันทางกายภาพบล็อกของหน่วยความจำในการเรียกระบบ ? มีเหตุผลใดบ้างที่ฉันใช้vmallocไม่ได้? สุดท้ายถ้าฉันจะจัดสรรหน่วยความจำระหว่างการจัดการการเรียกระบบฉันควรระบุGFP_ATOMICหรือไม่? การเรียกระบบดำเนินการในบริบทอะตอมหรือไม่? GFP_ATOMIC การจัดสรรมีความสำคัญสูงและไม่ได้นอนหลับ นี่คือแฟล็กที่จะใช้ในตัวจัดการขัดจังหวะครึ่งล่างและสถานการณ์อื่น ๆ ที่คุณนอนไม่หลับ GFP_KERNEL นี่เป็นการจัดสรรตามปกติและอาจปิดกั้น นี่คือแฟล็กที่จะใช้ในโค้ดบริบทกระบวนการเมื่อเข้าสู่โหมดสลีปได้อย่างปลอดภัย
114
c
linux-kernel
kmalloc
vmalloc