การฆ่ากระบวนการยังถือว่าไม่ดีสำหรับการจัดการหน่วยความจำหรือไม่?


18

ดังนั้นฉันมีการพูดคุยกับเจ้านายของฉันเล็กน้อยเกี่ยวกับการจัดการหน่วยความจำ

ฉันได้รับแจ้งว่าการฆ่ากระบวนการไม่อนุญาตให้ยกเลิกการจัดสรรหน่วยความจำ เป็นเช่นนั้นหรือไม่หรือเป็นปีที่ผ่านมา?

เรากำลังพูดถึงทั้ง Windows และ OS X ที่นี่


4
คำถามที่ถูกต้อง; โหวตให้เปิดใหม่ OP ขอข้อมูลเฉพาะเกี่ยวกับระบบปฏิบัติการ (2 ระบบในกรณีนี้) พฤติกรรมไม่ใช่การเก็งกำไรหรือการถกเถียง
JRobert

ว้าวไม่เคยคิดว่าคำถามนี้จะได้รับความสนใจอย่างรวดเร็ว .. :) แต่ใช่มันเป็นคำถามที่ "ใช่ / ไม่ใช่เพราะ .. "
เจฟฟ์

คำตอบ:


7

เป็นเวลานานแล้วที่ฉันได้เรียนรู้สิ่งนี้ แต่นี่จะไป

เมื่อระบบปฏิบัติการเปิดตัวกระบวนการมันจะกำหนดหน้าจากตารางหน่วยความจำเสมือน ระบบปฏิบัติการมีหน้าที่รับผิดชอบในการดูแลรักษาแผนที่จากตารางหน่วยความจำเสมือนไปยังหน่วยความจำจริงหรือไปยังพื้นที่สว็อปบนดิสก์ เมื่อกระบวนการถูกฆ่า OS ไม่เพียงหยุดให้ CPU ทำงาน รายการล้างข้อมูลไม่กี่รายการซึ่งหนึ่งในนั้นทำเครื่องหมายหน้าหน่วยความจำทั้งหมดว่าว่าง สิ่งนี้ทำให้แอปพลิเคชันอื่นสามารถนำกลับมาใช้ซ้ำได้ ระบบปฏิบัติการอาจล้างข้อมูลทรัพยากรที่กระบวนการนั้น ๆ ปิดไฟล์โดยอัตโนมัติการเชื่อมต่อเครือข่ายท่อไปสู่กระบวนการและอื่น ๆ กระบวนการนี้อยู่ภายใต้การควบคุมของระบบปฏิบัติการทั้งหมดและขั้นตอนเหล่านี้จะถูกนำมาใช้ไม่ว่ากระบวนการจะตายอย่างไร

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

เก็งกำไรสูง:

หาก. NET ทำงานเป็นเครื่องเสมือนที่มีแอพ. NET มากกว่าหนึ่งรายการบน VM เดียวกันดังนั้น. NET สามารถเก็บไว้ในหน่วยความจำที่ไม่ใช่ GCd จนกว่าจะรัน GC และ Windows จะคิดว่า. NET เป็น ใช้มากกว่าที่เป็นจริง (และถ้า MS ลื่นจริงๆ Windows ก็สามารถบอก. NET ถึง GC ในสถานการณ์ความทรงจำที่แน่นหนา แต่แทบจะไม่มีข้อแม้เลยเพราะนั่นคือพื้นที่ว่างในการแลกเปลี่ยนของดิสก์)

ถ้า. NET ทำงานในลักษณะนั้นระบบปฏิบัติการจะยังคงคิดว่ามันเป็นกระบวนการหนึ่งสำหรับวัตถุประสงค์ของระบบปฏิบัติการซึ่งรับผิดชอบในการตัดสินใจว่าจะเก็บอะไรและอะไรที่จะต้องทิ้งไปและมันก็ไม่ใช่ปัญหาของ Windows ที่จะบอกกระบวนการที่ต้องการ เพื่อเริ่มการจัดสรรคืนหน่วยความจำ ณ จุดนี้เป็นไปได้ที่ MS จะสร้าง API พิเศษเฉพาะสำหรับ. NET เพื่อให้กระบวนการ. NET มีลักษณะคล้ายกับกระบวนการของ Windows ยกเว้นว่าเป็นเช่นนั้นนั่นคือสาเหตุที่คนทั่วไปคิดว่าหน่วยความจำกระบวนการไม่ได้รับการจัดสรรคืน มันคือจริง ๆ ; เป็นเพียงว่าคุณกำลังดูกระบวนการที่ผิด

ฉันไม่รู้เกี่ยวกับ. NET ที่จะบอกว่ามันใช้งานได้จริง Java VM ไม่แน่นอน

สิ้นสุดการเก็งกำไร

แก้ไข:ตราบเท่าที่การฆ่ากระบวนการไม่ดีสำหรับการจัดการหน่วยความจำที่เกี่ยวข้องนั้นต้องใช้หลายกระบวนการในการจัดสรรออกจากกลุ่มเดียวกัน (เช่นพวกเขาเป็นเหมือนกระทู้มากกว่ากระบวนการจริง) และหน่วยความจำที่จะไม่เป็นอิสระหลังจากกระบวนการคือ ถูกฆ่าตาย ที่เกือบจะต้องใช้ระบบมัลติทาสกิ้งแบบมีส่วนร่วมเพราะหน่วยความจำเสมือนและมัลติทาสกิ้งแบบ pre-emptive เป็นความรู้ของฉันซึ่งมักจะนำมาใช้ร่วมกัน (VM ทำให้มันแยกกระบวนการออกจากกัน การมีหน่วยความจำเสมือนทำให้ทำความสะอาดได้ไม่ยากหลังจากกระบวนการในระดับระบบปฏิบัติการ คุณเพียงแค่ย้ายหน้าทั้งหมดจากกลุ่มของกระบวนการไปยังกลุ่มอิสระ


คำตอบที่ยอดเยี่ยม; ยังคงโพสต์ของฉันเพราะคุณเป็นเพียงไม่กี่วินาทีข้างหน้า :)
Simon Richter

8

ไม่มีปัญหาในประสบการณ์ของฉันฆ่าไป

ตัวอย่างเช่นหากคุณมี RAM 4 GB ซึ่ง 3 GB ถูกใช้โดยเกมและคุณฆ่ากระบวนการเกมคุณสามารถเริ่มเกมใหม่ได้โดยไม่มีปัญหาและจะมี RAM 3 GB อีกครั้งในกระบวนการ


เห็นด้วยฟังถูกต้องว่าจะไม่สามารถ "ล้างข้อมูล" แต่ฉันไม่เคยเห็นว่าเป็นปัญหาตามที่ Sirex ระบุ ใน NT กระบวนการเหล่านี้ควรจะแยกกันอยู่ แต่ถึงแม้จะย้อนกลับไปใน win98 มันก็ไม่ได้เป็นปัญหา หากคุณสามารถฆ่ามันได้ส่วนใหญ่มันจะหายไป เหตุผลหนึ่งก็คือพยายามทำให้ระบบปิดหรือปิดระบบก่อนจากนั้นบังคับให้มันถูกฆ่าจริง ๆ เป็นโอกาสสุดท้ายที่ได้รับมัน
Psycogeek

8

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

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

มีรีซอร์สพิเศษที่รอดชีวิตจากกระบวนการที่สร้างขึ้นมาตัวอย่างเช่นเป็นไปได้ที่จะสร้างการจัดสรรหน่วยความจำแบบแบ่งใช้ที่กำหนดชื่อแบบถาวรซึ่งสามารถใช้ในการสื่อสารระหว่างกระบวนการ สิ่งเหล่านี้มักถูกใช้อย่างแม่นยำเพราะระบบปฏิบัติการไม่สามารถระบุได้ว่ายังจำเป็นหรือไม่

ในระบบปฏิบัติการอื่นบางครั้งก็ไม่มีกระบวนการแยกที่ชัดเจน ซึ่งทำให้ภาระการล้างข้อมูลบนแต่ละแอปพลิเคชัน

การบังคับให้ปิดกระบวนการจะเป็นการยุติกระบวนการโดยไม่ให้โอกาสใด ๆ ในการทำความสะอาด หากระบบปฏิบัติการมีรายการทรัพยากรทั้งหมดครบถ้วนสิ่งนี้จะไม่มีผลกระทบใด ๆ


5

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

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