คำถามติดแท็ก memory-management

12
ทำไมคอมไพเลอร์ไม่ใส่ deallocations โดยอัตโนมัติ?
ในภาษาเช่น C โปรแกรมเมอร์คาดว่าจะแทรกการโทรฟรี ทำไมคอมไพเลอร์ไม่ทำสิ่งนี้โดยอัตโนมัติ มนุษย์ทำในเวลาที่เหมาะสม (ไม่สนใจข้อบกพร่อง) ดังนั้นจึงเป็นไปไม่ได้ แก้ไข: สำหรับการอ้างอิงในอนาคตนี่คือการสนทนาอื่นที่มีตัวอย่างที่น่าสนใจ

7
เหตุใดกระบวนทัศน์ของผู้ทำลายล้างวัตถุในภาษาที่รวบรวมขยะจึงหายไปอย่างแพร่หลาย?
กำลังมองหาข้อมูลเชิงลึกเกี่ยวกับการตัดสินใจเกี่ยวกับการออกแบบภาษาที่รวบรวมขยะ บางทีผู้เชี่ยวชาญด้านภาษาสามารถสอนฉัน ฉันมาจากพื้นหลัง C ++ ดังนั้นพื้นที่นี้ทำให้ฉันงุนงง ดูเหมือนว่าภาษาที่รวบรวมขยะสมัยใหม่เกือบทั้งหมดที่มีการสนับสนุนวัตถุ OOPy เช่น Ruby, Javascript / ES6 / ES7, Actionscript, Lua และอื่น ๆ จะไม่ใช้ destructor / finalize paradigm Python ดูเหมือนจะเป็นคนเดียวที่มีclass __del__()วิธีการ ทำไมนี้ มีข้อ จำกัด ด้านการทำงาน / ทางทฤษฎีในภาษาที่มีการรวบรวมขยะอัตโนมัติซึ่งป้องกันการใช้งานที่มีประสิทธิภาพของวิธีการ destructor / จบบนวัตถุ? ฉันพบว่าภาษาเหล่านี้ไม่ได้พิจารณาถึงความทรงจำเป็นอย่างยิ่งเพราะเป็นเพียงการจัดการทรัพยากร เกี่ยวกับซ็อกเก็ตตัวจัดการไฟล์สถานะแอปพลิเคชัน หากปราศจากความสามารถในการใช้ตรรกะที่กำหนดเองเพื่อล้างทรัพยากรที่ไม่ใช่หน่วยความจำและสถานะในการสรุปวัตถุฉันต้องทำให้แอปพลิเคชั่นของฉันมีmyObject.destroy()สไตล์การโทรที่กำหนดเองวางตรรกะการล้างข้อมูลนอก "คลาส" ของฉัน การประยุกต์ใช้กับการรั่วไหลของทรัพยากรเนื่องจากข้อผิดพลาดของมนุษย์มากกว่าจะถูกจัดการโดย gc โดยอัตโนมัติ การตัดสินใจออกแบบภาษาที่นำไปสู่ภาษาเหล่านี้ไม่มีวิธีใดในการดำเนินการตรรกะที่กำหนดเองในการกำจัดวัตถุคืออะไร? ฉันต้องจินตนาการว่ามีเหตุผลที่ดี ฉันต้องการเข้าใจการตัดสินใจทางเทคนิคและทางทฤษฎีที่ทำให้ภาษาเหล่านี้ไม่สนับสนุนการทำลายวัตถุ / การสรุป ปรับปรุง: …

3
อะไรคือความแตกต่างระหว่าง 'หน้า' ของหน่วยความจำและ 'กรอบ' ของหน่วยความจำ?
WPมีการอภิปรายที่เพียงพอเกี่ยวกับการเพจซึ่งฉันคิดว่าฉันเข้าใจ .. อย่างไรก็ตามฉันสับสนโดยการใช้คำว่าPage Frameซ้ำ ๆ ฉันคิดว่าเฟรมและหน้าเป็นสิ่งที่แตกต่าง มีคนช่วยอธิบายความแตกต่างได้ไหม

4
ตัวรวบรวมขยะจะหลีกเลี่ยงการล้นสแต็กได้อย่างไร
ดังนั้นฉันจึงคิดว่าตัวรวบรวมขยะทำงานอย่างไรและฉันคิดว่าเป็นปัญหาที่น่าสนใจ อาจเป็นไปได้ที่นักสะสมขยะจะต้องเข้าไปสำรวจสิ่งก่อสร้างทั้งหมดด้วยวิธีเดียวกัน พวกเขาไม่สามารถรู้สภาพอากาศที่กำลังสำรวจรายการที่เชื่อมโยงหรือต้นไม้ที่สมดุลหรืออะไรก็ตาม พวกเขาไม่สามารถใช้หน่วยความจำมากเกินไปในการค้นหา วิธีหนึ่งที่เป็นไปได้และวิธีเดียวที่ฉันสามารถคิดให้สำรวจโครงสร้างทั้งหมดอาจเป็นเพียงเพื่อสำรวจโครงสร้างเหล่านั้นทั้งหมดในแบบที่คุณทำกับต้นไม้ไบนารี อย่างไรก็ตามเรื่องนี้จะให้สแต็คล้นในรายการที่เชื่อมโยงหรือแม้กระทั่งเพียงต้นไม้ไบนารีที่สมดุลต่ำ แต่ภาษาที่เก็บขยะทั้งหมดที่ฉันเคยใช้ดูเหมือนจะไม่มีปัญหาในการจัดการกับกรณีดังกล่าว ในหนังสือมังกรใช้คิว "Unscanned" แปลก ๆ โดยพื้นฐานแล้วแทนที่จะเข้าไปในโครงสร้างแบบวนซ้ำมันก็แค่เพิ่มสิ่งที่ต้องทำเครื่องหมายคิวมากเกินไปและจากนั้นสำหรับแต่ละสิ่งที่ไม่ได้ทำเครื่องหมายในตอนท้ายมันจะถูกลบ แต่คิวนี้จะไม่ใหญ่หรือไม่ ดังนั้นนักสะสมขยะจะสำรวจโครงสร้างโดยพลการอย่างไร? เทคนิคการสำรวจเส้นทางนี้จะหลีกเลี่ยงการล้นได้อย่างไร

7
คอมพิวเตอร์ที่ไม่มี RAM แต่มีดิสก์เท่ากับคอมพิวเตอร์ที่มี RAM หรือไม่
หน่วยความจำใช้สำหรับหลาย ๆ อย่างที่ฉันเข้าใจ มันทำหน้าที่เป็นดิสก์แคชและมีคำแนะนำโปรแกรมและสแต็คและกอง นี่คือการทดสอบความคิด ถ้าไม่มีใครสนใจความเร็วหรือเวลาที่คอมพิวเตอร์ใช้ในการทำกระทืบอะไรคือจำนวนหน่วยความจำขั้นต่ำสุดที่สามารถมีได้ถ้าสมมติว่ามีดิสก์ขนาดใหญ่มาก? เป็นไปได้ไหมที่จะใช้หน่วยความจำและมีเพียงดิสก์? ไม่จำเป็นต้องใช้การแคชดิสก์ ถ้าเราตั้งค่าพื้นที่สว็อปบนดิสก์สแต็กของโปรแกรมและฮีปก็ไม่จำเป็นต้องใช้หน่วยความจำ มีอะไรที่ต้องใช้หน่วยความจำที่จะนำเสนอ?

2
"การรวมหน่วยความจำ" คืออะไร?
ฉันรู้ว่าหน่วยประมวลผลกราฟิกมีบางสิ่งที่เรียกว่าการรวมหน่วยความจำ เมื่ออ่านมันฉันไม่ชัดเจนในหัวข้อ นี่เป็นวิธีใดที่เกี่ยวข้องกับ Memory Level Parallelism ฉันค้นหาใน Google แล้ว แต่ไม่สามารถรับคำตอบที่น่าพอใจ มันจะมีประโยชน์ถ้ามีคนให้คำอธิบายที่ครอบคลุมและเข้าใจง่ายกว่า

1
หากพื้นที่ที่อยู่เสมือนสามารถมีขนาดใหญ่กว่าพื้นที่ที่อยู่ทางกายภาพการแมปที่อยู่จะถูกเก็บไว้ในหน่วยความจำอย่างไร
สมมติว่าเรากำลังทำงานกับระบบที่มี 40 บิตที่อยู่ทางกายภาพ พื้นที่แอดเดรสฟิสิคัลทั้งหมด (สมมติว่าหน่วยความจำไบต์สามารถกำหนดแอดเดรสได้) คือไบต์หรือ 1 TiB และถ้าที่อยู่เสมือนมีความยาว 48 บิตนั่นหมายความว่ามีที่อยู่เพิ่มเติมให้กับหน่วยความจำเสมือนมากกว่าที่อยู่ในหน่วยความจำกายภาพ2402402^{40} สิ่งนี้สมเหตุสมผลสำหรับฉันเพราะที่อยู่ "เกิน" สามารถอ้างถึงตำแหน่งที่ตั้งของฮาร์ดดิสก์ได้เช่นกัน อย่างไรก็ตามสิ่งที่ฉันไม่เข้าใจคือการแปลระหว่างที่อยู่เสมือนและที่อยู่จริงเกิดขึ้นได้อย่างไร ฉันคิดว่ามีการทำแผนที่จัดเก็บไว้ที่ไหนสักแห่งที่เชื่อมโยงสถานที่ VAS กับสถานที่ทางกายภาพ หากมีที่อยู่เสมือนมากกว่าที่ตั้งทางกายภาพการแมปเหล่านี้ทั้งหมดอาจถูกเก็บไว้ในหน่วยความจำได้อย่างไร อย่างน้อยคุณจะต้องมี 48 บิตในการจัดเก็บที่อยู่เสมือนแต่ละแห่งจากนั้นอีก 40 แห่งเพื่อจัดเก็บตำแหน่งทางกายภาพที่จะจับคู่ เห็นได้ชัดว่าคุณไม่สามารถจัดเก็บการแมป 1: 1 ของแต่ละที่อยู่เสมือนกับการจับคู่ทางกายภาพได้เนื่องจากการแมปทุกตำแหน่งจะใช้หน่วยความจำมากกว่าหน่วยความจำกายภาพ ฉันหายไปตรงนี้อะไรนะ?

1
หน่วยความจำบอลลูนในระบบปฏิบัติการ
ไฮเปอร์ไวเซอร์บางตัวเพิ่มประสิทธิภาพการใช้หน่วยความจำโดยใช้วิธีการที่เรียกว่า ballooning (อย่างน้อยนั่นคือสิ่งที่ KVM เรียก) วิธีนี้จะลดความซ้ำซ้อนของหน่วยความจำระหว่าง VM และตั้งค่าหน้าเว็บทั่วไปให้อ่านได้อย่างเดียว นี่เป็นสิ่งที่ตรงกันข้ามกับการเรียกแยก เป็นไปได้หรือไม่ที่จะนำไปใช้งานในระดับ OS สำหรับกระบวนการ (ส่วนใหญ่ฉันคิดถึงการทำสำเนาหน่วยความจำเมื่อเรียกดูด้วย Chromium ที่มีหลายแท็บบนไซต์เดียวกัน) มีการนำไปใช้แล้วหรือไม่

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

1
สลับการจัดการพื้นที่ระหว่างการสลับหน้าตามความต้องการอย่างแท้จริง
ต่อไปนี้เป็นข้อสงสัยว่าฉันเจอเมื่อทำการมอบหมาย OS ภายในบ้าน - แต่ดูเหมือนว่าจะใช้แนวคิดมากกว่าคำถามการเข้ารหัสที่ตรงไปตรงมาดังนั้น IMHO ฉันจึงไม่คิดว่าแท็กการบ้านนั้นเหมาะสมกับเรื่องนี้ ในแบบแผนความต้องการการเพจที่บริสุทธิ์สำหรับกระบวนการหลาย ๆ กระบวนการที่ทำงานในเวลาเดียวกันกำหนดจำนวนหน่วยความจำ RAM และ Swap คงที่สิ่งที่เกิดขึ้นใน 2 กรณีต่อไปนี้คือการสลับพื้นที่ swap เมื่อ กระบวนการพบข้อบกพร่องของหน้าและไม่มีเฟรมว่างใน RAM ดังนั้นจึงต้องใช้หนึ่งในหน้าของกลุ่มของ Kernel Frames ของกระบวนการที่จะถูกเขียนออกมาเพื่อสลับ (สำหรับความเรียบง่ายฉันไม่ได้พิจารณาการคัดลอก กรณีที่เขียนบน) โดยชัดแจ้งว่าเฟรมนี้จะเขียนที่ใดในพื้นที่สเปซและโครงสร้างข้อมูลใดที่จำเป็นต้องได้รับการอัพเดต เมื่อกระบวนการจำเป็นต้อง page-in หน้าใดหน้าหนึ่งมันจะดูในหน่วยความจำ Swap และจะรู้ได้อย่างไรว่าหน้านั้นมีอยู่ใน Swap เลย? อย่างที่คุณสามารถจินตนาการได้ว่าฉันมีปัญหาในการจัดการพื้นที่สว็อประหว่างวิธีการจัดการความต้องการที่บริสุทธิ์และโครงสร้างข้อมูลใดที่จำเป็น มันจะดีถ้าคุณสามารถอ้างถึงลิงก์ใด ๆ ในคำตอบของคุณ (ฉันค้นหาใน "แนวคิดระบบปฏิบัติการ - รุ่นที่ 8 โดย Silberschatz ฉันไม่พบคำตอบที่ชัดเจนสำหรับคำถามของฉัน)

3
"แผนที่" หมายถึงอะไร
ฉันพบคำศัพท์หลายครั้งในสื่อการเรียนรู้ CS ต่าง ๆ : L2 CS162 (UC Berkeley): I / O ที่แมปหน่วยความจำ L4 CS162 (UC Berkeley): ไฟล์ที่แม็พหน่วยความจำ L24 CS61 (UC Berkeley): “ หน่วยความจำแมป I / O”: การควบคุมอุปกรณ์ / ข้อมูลลงทะเบียนแมปกับพื้นที่ที่อยู่ของ CPU แม้หลังจาก googling "map" ฉันก็ได้รับบทความ Map_ (สูงกว่า order_function)แต่มันก็ไม่ชัดเจนสำหรับฉัน ยิ่งกว่านั้นพยายามเข้าใจความหมายในบริบทของbitmapการอ่านบทความ Wikipedia : อาเรย์บิตคือการแมปจากบางโดเมน (เกือบตลอดช่วงของจำนวนเต็ม) ไปยังค่าในชุด {0, 1} ฉันไม่แน่ใจ แต่ในบริบทข้างต้นมันฟังดูเกี่ยวกับการแปลงข้อมูล หลังจากอ่านหนังสือ CS …

1
การเขียนระบบปฏิบัติการมัลติทาสก์สำหรับโปรเซสเซอร์ที่ไม่มี MMU
ฉันคิดถึงการเขียนระบบปฏิบัติการอดิเรกสำหรับโปรเซสเซอร์ ARM บางตัว มีคอมพิวเตอร์บอร์ดเดี่ยวยอดนิยมหลายตัวที่มี ARM MPU ดังนั้นฉันแค่อยากจะซื้อหนึ่งในนั้น (เลือกหนึ่งที่มีเอกสารเปิดมากกว่า) ฉันรู้สึกประหลาดใจเมื่อพบว่าแม้บอร์ดที่มีหน่วยความจำเพียงพอจริง ๆ ก็ไม่มี MPUs ที่มีหน่วยความจำจัดการ เนื่องจากฉันทำงานกับโปรเซสเซอร์ i386 + มาตลอดและไม่เคยทำสิ่งอื่นใด (ยกเว้น Microchip PIC บางตัว) ตอนนี้ฉันสับสนและไม่แน่ใจว่าใครสามารถเขียนระบบปฏิบัติการที่ใช้งานได้ซึ่งฟังก์ชั่นจะไม่ถูก จำกัด เมื่อเปรียบเทียบกับระบบปฏิบัติการที่เขียน สำหรับ MPU กับ MMU ฉันสามารถคิดถึงวิธีแก้ปัญหาเล็กน้อยสำหรับ "การแทนที่" หรือ "การจำลอง" MMU และฉันมีคำถามสองสามข้อ: บนโปรเซสเซอร์ Intel ในโหมด 16 และ 32 บิตมีวิธีการใช้เซกเมนต์และตัวเลือกเซกเมนต์เพื่อใช้บล็อกหน่วยความจำที่แตกต่างกันตามงานที่แตกต่างกัน นั่นหมายความว่าฉันสามารถเปลี่ยนพื้นที่หน่วยความจำได้โดยการเปลี่ยนเนื้อหาของเซกเมนต์รีจิสเตอร์เมื่อทำการสลับงานเมื่อใช้ x86 มีแนวคิดทั่วไปสำหรับการแบ่งส่วนหน่วยความจำที่สามารถใช้กับสถาปัตยกรรม ARM ได้หรือไม่? โดยการโหลดไฟล์ออบเจกต์ที่เชื่อมโยงแทนการปฏิบัติการฉันสามารถใช้การเปลี่ยนตำแหน่ง (การแก้ไข) หรือวางโค้ดอิสระเพื่อชี้ตำแหน่งงานบนชิ้นส่วนของหน่วยความจำในลักษณะเดียวกับที่ฉันทำแผนที่หน่วยความจำโดยใช้โครงสร้างเพจจิ้ง สิ่งนี้จะมีประสิทธิภาพเพียงพอหรือไม่ …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.