mmap
ดีมากถ้าคุณมีกระบวนการหลายอย่างในการเข้าถึงข้อมูลในแบบอ่านอย่างเดียวจากไฟล์เดียวกันซึ่งเป็นเรื่องปกติในระบบเซิร์ฟเวอร์ที่ฉันเขียน mmap
อนุญาตให้กระบวนการเหล่านั้นแบ่งปันเพจหน่วยความจำกายภาพเดียวกันโดยบันทึกหน่วยความจำจำนวนมาก
mmap
ยังช่วยให้ระบบปฏิบัติการเพิ่มประสิทธิภาพการดำเนินการเพจ ตัวอย่างเช่นพิจารณาสองโปรแกรม โปรแกรมA
ที่อ่าน1MB
ไฟล์เป็นบัฟเฟอร์ที่สร้างด้วยmalloc
และโปรแกรม B ซึ่งmmaps
ไฟล์ 1MB ไปยังหน่วยความจำ หากระบบปฏิบัติการต้องสลับส่วนหนึ่งของA
หน่วยความจำของออกมันจะต้องเขียนเนื้อหาของบัฟเฟอร์เพื่อสลับก่อนจึงจะสามารถนำหน่วยความจำกลับมาใช้ใหม่ได้ ในB
กรณีที่ไม่มีการแก้ไขใด ๆ s mmap
'd หน้าสามารถนำกลับมาทันทีเพราะระบบปฏิบัติการรู้วิธีที่จะเรียกคืนได้จากไฟล์ที่มีอยู่ที่พวกเขาmmap
'd จาก (ระบบปฏิบัติการสามารถตรวจสอบว่าหน้าใดที่ไม่ได้แก้ไขโดยเริ่มต้นทำเครื่องหมายmmap
หน้า d ที่เขียนได้เป็นอ่านอย่างเดียวและจับข้อบกพร่อง segคล้ายกับกลยุทธ์Copy on Write )
mmap
ยังเป็นประโยชน์สำหรับการสื่อสารระหว่างกระบวนการ คุณสามารถmmap
ไฟล์เป็นอ่าน / เขียนในกระบวนการที่ต้องสื่อสารและจากนั้นใช้การซิงโครไนซ์แบบดั้งเดิมในmmap'd
ภูมิภาค (นี่คือสิ่งที่MAP_HASSEMAPHORE
ธงมีไว้สำหรับ)
สถานที่หนึ่งที่mmap
น่าอึดอัดใจคือถ้าคุณต้องการทำงานกับไฟล์ที่มีขนาดใหญ่มากบนเครื่อง 32 บิต นี่คือเนื่องจากmmap
ต้องค้นหาบล็อกที่อยู่ติดกันในพื้นที่ที่อยู่ของกระบวนการของคุณที่มีขนาดใหญ่พอที่จะพอดีกับช่วงทั้งหมดของไฟล์ที่ถูกแมป สิ่งนี้อาจกลายเป็นปัญหาได้หากพื้นที่ที่อยู่ของคุณมีการแยกส่วนซึ่งคุณอาจมีพื้นที่ว่าง 2 GB ที่ว่าง แต่ไม่มีช่วงใดช่วงหนึ่งที่เหมาะสมกับการแมปไฟล์ 1 GB ในกรณีนี้คุณอาจต้องแมปไฟล์เป็นชิ้นเล็กกว่าที่คุณต้องการเพื่อให้พอดี
ความอึดอัดใจที่อาจเกิดขึ้นได้อีกอย่างหนึ่งที่mmap
ใช้แทนการอ่าน / เขียนคือคุณต้องเริ่มต้นการแมปของคุณเมื่อออฟเซ็ตขนาดหน้ากระดาษ ถ้าคุณเพียงต้องการที่จะได้รับข้อมูลบางส่วนที่ชดเชยX
คุณจะต้อง fixup mmap
ที่ชดเชยเพื่อให้มันเข้ากันได้กับ
และสุดท้ายการอ่าน / เขียนเป็นวิธีเดียวที่คุณสามารถทำงานกับไฟล์บางประเภท mmap
ไม่สามารถนำมาใช้ในสิ่งที่ต้องการท่อและttys