มีข้อเสียในการเริ่มต้นแอพพลิเคชั่นหลายตัวพร้อมกันหรือไม่?


1

โดยทั่วไปฉันสงสัยว่าหลักการเช่นเดียวกับแคชในท้องที่หรือไม่นั่นคือการเข้าถึงหน่วยความจำที่ต่อเนื่องกันเพราะปกติแล้วชิ้นส่วนใหญ่ของหน่วยความจำนั้นจะถูกโหลดเข้าสู่แคช

ในทางปฏิบัติสมมติว่าแอปพลิเคชันที่ไม่ต้องการการจัดสรรเพิ่มมากขึ้นเมื่อเริ่ม - ฉันสงสัยว่ามีประโยชน์ในการเริ่มแอปพลิเคชัน A และรอสักครู่แล้วเริ่มแอปพลิเคชัน B กับแอปพลิเคชัน A และ B พร้อมกัน สำหรับกรณีหลังฉันนึกภาพได้ว่า A กำลังขอหน่วยความจำบางส่วนแล้ว B จากนั้นก็ A อีกครั้งและต่อ ๆ ไป (แม้ว่าฉันไม่แน่ใจว่ามันจะเกิดขึ้นแบบนั้น แต่ในทางกลับกันระบบปฏิบัติการไม่สามารถรู้ล่วงหน้าได้ว่าหน่วยความจำจะเป็นเท่าใด จำเป็นดังนั้นจึงไม่ชอบมันสามารถจองก้อนใหญ่ไว้ล่วงหน้าได้)

มีข้อเสียคือการมีหน่วยความจำแอปพลิเคชันประกอบด้วยหลายชิ้นที่อยู่ห่างจากกันแล้วในทางทฤษฎีสิ่งที่สามารถทำได้ถ้าหน่วยความจำแอปพลิเคชันทั้งหมดได้รับการจัดสรรเป็นก้อนใหญ่?


การรันสองกระบวนการในเวลาเดียวกันจะทำให้แคชหายไปมากกว่า แต่จะได้รับประโยชน์จากการใช้งานการขนานที่ดีกว่า (แม้ในแกนเดียวขณะที่ดิสก์และซีพียูนั้นขนานกัน)
ctrl-alt-delor

สมมติฐานของคุณคืออะไร มันเป็นสิ่งที่เริ่มต้นพวกเขากันดีกว่าหรือว่าเริ่มต้นพวกเขาแยกกันจะดีกว่า
ctrl-alt-delor

@ Richard ฉันไม่ได้มีสมมติฐานจริงๆเพราะฉันไม่รู้เรื่องเกี่ยวกับเรื่องนี้มากพอ ความกล้าหาญของฉันบอกว่าการเริ่มต้นพวกเขาแยกกันจะดีกว่าเมื่อพวกเขาเริ่มขึ้น ฉันไม่สนใจเรื่องขนานในขณะที่เริ่มต้น
stijn

ระบบปฏิบัติการอะไร สถาปัตยกรรมอะไร
ctrl-alt-delor

ไม่เฉพาะลินุกซ์ / หน้าต่างคำตอบที่เฉพาะเจาะจงจะ ok
Stijn

คำตอบ:


1

มีข้อเสียคือการมีหน่วยความจำแอปพลิเคชันประกอบด้วยหลายชิ้นที่อยู่ห่างจากกันแล้วในทางทฤษฎีสิ่งที่สามารถทำได้ถ้าหน่วยความจำแอปพลิเคชันทั้งหมดได้รับการจัดสรรเป็นก้อนใหญ่?

คุณจะต้อง:

  • ดูว่าหน่วยความจำเสมือนและฟิสิคัลคืออะไรและวิธีการแม็พ

  • ดูว่าการแคชเสร็จสิ้นในเลเยอร์เสมือนหรือฟิสิคัลบนสถาปัตยกรรมของคุณ

  • ดูว่าระบบปฏิบัติการของคุณทำงานอย่างไร

หน่วยความจำกายภาพที่แยกส่วนสำคัญหรือไม่ เฉพาะในกรณีที่ผลลัพธ์เป็นแผนที่เสมือนจริงที่ซับซ้อนมากขึ้น (mmu ฯลฯ ) บล็อกเสมือนจริงที่ต่อเนื่องกันซึ่งมีอยู่จริงไม่ใช่วัตถุต่อเนื่องกันอาจส่งผลให้เกิดแผนที่การค้นหาที่ซับซ้อนมากขึ้น ลีนุกซ์มีขนาดหน้าต่าง ๆ ที่มันสามารถใช้ได้, มันจะพยายามใช้มันให้ใหญ่ที่สุดเท่าที่จะทำได้ (เพื่อให้ตรงกับ malloc ที่สุด) ในระบบของฉัน Debian jessie ที่มีเคอร์เนล 4.6.0-0 amd64 ฉันมีขนาดหน้า 4k (ใช้งาน 154964), 2M (ใช้งาน 3753) และ 1G (ใช้งาน 1)

หน่วยความจำเสมือนที่กระจัดกระจายมีความสำคัญหรือไม่ ฉันไม่สามารถเห็นได้ว่ามันทำเช่นนั้นหากกระบวนการร้องขอบล็อกหลายบล็อกที่มี malocs หลายรายการจากนั้นจะเห็นว่าเป็นบล็อกแยกแม้ว่าจะอยู่ติดกัน หนึ่ง maloc จะต้องต่อเนื่องในเสมือน ระบบรักษาความปลอดภัยอาจ แต่บล็อกป้องกันระหว่างแต่ละบล็อก maloced จึงป้องกันพวกเขาอยู่ติดกัน

บน Linux จำนวนมากจะถูกใช้ร่วมกันระหว่างกระบวนการ: หากไฟล์ปฏิบัติการเดียวกันพวกเขาจะแบ่งปันบล็อกที่อ่านได้อย่างเดียวทั้งหมดของไฟล์ปฏิบัติการ (ข้อความ data-ro ฯลฯ ) พวกเขาจะแชร์ข้อมูลเริ่มต้น (ข้อมูล) จนกระทั่งหนึ่งในนั้นเปลี่ยนหน้าจากนั้นหน้านี้จะถูกคัดลอก เช่นเดียวกันกับไลบรารีที่เชื่อมโยงแบบไดนามิกทั้งหมดดังนั้นพวกเขาจะแบ่งปันสิ่งเหล่านี้มากมาย นอกจากนี้ไฟล์บนดิสก์ยังเป็น swap สำหรับหน่วยความจำนี้ด้วยดังนั้นมันจะไม่รบกวนการอ่านข้อมูลจนกว่ามันจะต้องการ (โปรแกรมจะเริ่มทำงานโดยไม่มีการอ่านใด ๆ เลยซึ่งจะส่งผลให้พลาด ram และหน้า กำลังอ่านอยู่จากนั้นโปรแกรมจะทำงานจนกว่าจะมีการพลาดอื่น ๆ เป็นต้น) หากมีการขาดหน่วยความจำหน้าสามารถลดลงมันสามารถอ่านได้อีกครั้งหลัง (ไม่จำเป็นต้องสลับออก) สิ่งนี้อาจทำให้เกิดการอ่านดิสก์จำนวนมากเมื่อหน่วยความจำเหลือน้อยทำให้การเริ่มต้นทำงานช้าลง

(บางสถาปัตยกรรมแคชหน่วยความจำกายภาพ: นี่เป็นสิ่งที่ชัดเจนที่สุดหน่วยความจำเสมือนแคชอื่น ๆ : สิ่งนี้อาจส่งผลให้หน่วยความจำกายภาพเดียวกันถูกแคชสองครั้งนี่สิ้นเปลือง แต่ง่ายกว่าและเร็วกว่าบางสถาปัตยกรรมทำได้ทั้งแคชเสมือนที่ระดับ 1 ในกรณีที่จำเป็นต้องรวดเร็วแคชทางกายภาพในระดับอื่นที่จำเป็นต้องมีหน่วยความจำที่มีประสิทธิภาพ)


ดังนั้น tldr; เป็น bsically: ไม่ควรมีความสำคัญและมันยากที่จะคิดออกถ้ามันเป็นเพราะมีปัจจัยหลายอย่างที่เกี่ยวข้อง?
stijn
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.