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

8
ตัวแปรถูกจัดเก็บในและดึงข้อมูลจากสแต็กของโปรแกรมอย่างไร
ขออภัยล่วงหน้าสำหรับความไร้เดียงสาของคำถามนี้ ฉันเป็นศิลปินอายุ 50 ปีที่พยายามเข้าใจคอมพิวเตอร์อย่างถูกต้องเป็นครั้งแรก ดังนั้นที่นี่ไป ฉันพยายามเข้าใจว่าประเภทข้อมูลและตัวแปรได้รับการจัดการโดยคอมไพเลอร์อย่างไร (โดยทั่วไปฉันรู้ว่ามันมีจำนวนมาก) ฉันขาดอะไรบางอย่างในการทำความเข้าใจเกี่ยวกับความสัมพันธ์ระหว่างหน่วยเก็บข้อมูลใน "สแต็ก" และประเภทค่าและที่เก็บข้อมูลใน "กอง" และประเภทอ้างอิง (เครื่องหมายคำพูดมีความหมายว่าฉันเข้าใจว่าเงื่อนไขเหล่านี้เป็นนามธรรม ในบริบทที่เรียบง่ายเช่นเดียวกับที่ฉันวางกรอบคำถามนี้) อย่างไรก็ตามแนวคิดง่าย ๆ ของฉันคือประเภทเช่น Booleans และจำนวนเต็มไปที่ "สแต็ค" เพราะพวกเขาสามารถเพราะพวกเขาเป็นที่รู้จักหน่วยงานในแง่ของพื้นที่จัดเก็บและขอบเขตการควบคุมได้อย่างง่ายดายตาม แต่สิ่งที่ฉันไม่ได้รับก็คือแอปพลิเคชันอ่านแล้วว่าตัวแปรในสแต็กถ้าฉันประกาศและกำหนดxเป็นจำนวนเต็มพูดx = 3และที่เก็บถูกสงวนไว้ในสแต็คจากนั้นค่าของ3มันจะถูกเก็บไว้ที่นั่น ฟังก์ชั่นเดียวกันฉันประกาศและกำหนดyเป็นพูด4แล้วจากนั้นฉันก็ใช้xในการแสดงออกอื่น (พูดz = 5 + x) โปรแกรมสามารถอ่านได้อย่างไรxเพื่อประเมินzเมื่อมันอยู่ด้านล่างyบนกอง? ฉันขาดอะไรบางอย่างชัดเจน มันเป็นที่ตั้งบนสแต็คเป็นเพียงเกี่ยวกับอายุการใช้งาน / ขอบเขตของตัวแปรและว่าสแต็คทั้งหมดสามารถเข้าถึงโปรแกรมได้ตลอดเวลา? ถ้าเป็นเช่นนั้นนั่นหมายความว่ามีบางดัชนีอื่น ๆ ที่เก็บที่อยู่ของตัวแปรในสแต็กเพื่อให้สามารถดึงค่าได้หรือไม่? แต่ฉันคิดว่าจุดทั้งหมดของสแต็คคือค่านั้นถูกเก็บไว้ในที่เดียวกับที่อยู่ตัวแปรหรือไม่ ในใจที่อ่อนแอของฉันดูเหมือนว่าหากมีดัชนีอื่นนี้เราก็กำลังพูดถึงบางสิ่งบางอย่างที่มากกว่ากอง ฉันสับสนอย่างชัดเจนและฉันแค่หวังว่าจะมีคำตอบง่ายๆสำหรับคำถามง่าย ๆ ของฉัน ขอบคุณที่อ่านมาไกลขนาดนี้

3
การจัดการหน่วยความจำที่ชาญฉลาดด้วยการดำเนินการเวลาคงที่?
ลองพิจารณาเซ็กเมนต์หน่วยความจำ (ขนาดที่สามารถเพิ่มหรือลดขนาดเช่นไฟล์เมื่อจำเป็น) ซึ่งคุณสามารถดำเนินการจัดสรรหน่วยความจำขั้นพื้นฐานที่เกี่ยวข้องกับการบล็อกขนาดคงที่สองแบบ: จัดสรรหนึ่งบล็อก การปลดบล็อกที่จัดสรรก่อนหน้านี้ซึ่งไม่ได้ใช้อีกต่อไป นอกจากนี้ตามข้อกำหนดระบบการจัดการหน่วยความจำไม่ได้รับอนุญาตให้ย้ายไปรอบ ๆ บล็อกที่จัดสรรในปัจจุบัน: ดัชนี / ที่อยู่ของพวกเขาจะต้องไม่เปลี่ยนแปลง อัลกอริทึมการจัดการหน่วยความจำที่ไร้เดียงสาที่สุดจะเพิ่มตัวนับทั่วโลก (ด้วยค่าเริ่มต้น 0) และใช้ค่าใหม่เป็นที่อยู่สำหรับการจัดสรรครั้งต่อไป อย่างไรก็ตามสิ่งนี้จะไม่อนุญาตให้ย่อส่วนเมื่อเหลือเพียงไม่กี่บล็อกที่ถูกจัดสรร แนวทางที่ดีกว่า: รักษาตัวนับ แต่เก็บรักษารายการบล็อกที่ถูกจัดสรรคืน (ซึ่งสามารถทำได้ในเวลาคงที่) และใช้เป็นแหล่งสำหรับการจัดสรรใหม่ตราบเท่าที่ยังไม่ว่างเปล่า อะไรต่อไป มีบางสิ่งที่ฉลาดที่สามารถทำได้ยังคงมีข้อ จำกัด ของการจัดสรรเวลาคงที่และการจัดสรรคืนซึ่งจะทำให้เซ็กเมนต์หน่วยความจำสั้นที่สุดเท่าที่จะทำได้? (เป้าหมายสามารถติดตามบล็อกที่ไม่ได้รับการจัดสรรในปัจจุบันด้วยที่อยู่ที่เล็กที่สุด แต่ดูเหมือนจะไม่สามารถทำได้ในเวลาที่แน่นอน…)

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

2
มีใครสามารถอธิบายแผนภาพนี้เกี่ยวกับการจัดสรร Slab ได้หรือไม่?
ฉันพยายามเข้าใจว่า Slab Allocation ทำงานอย่างไรและเหตุใดจึงแตกต่างหรือดีกว่าการจัดเพจทั่วไป ฉันพบแผนภาพนี้ซึ่งฉันเชื่อว่าจะมีประโยชน์หากมีคำอธิบายเพิ่มเติม บางคำถาม: รายการ 3KB และ 7KB หมายถึงอะไร พวกเขาจะต้องเกี่ยวข้องอย่างใด? ทำไมพวกเขาถึงทำแบบนั้น? ในคอลัมน์แคชกล่องสีเทาหรือกล่องสีขาว / สีน้ำเงินภายในกล่องสีเทาหรือไม่ กล่องสีเทาเป็นแพ็คเกจของแคชหรือไม่ แผ่นพื้นเป็นเพียงกล่องสีน้ำเงินหรือเป็น "แผ่นที่อยู่ติดกันทางกายภาพ" ทั้งหมดหรือไม่ ฉันขอขอบคุณความช่วยเหลือ ขอบคุณ!
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.