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