ทำไมระบบถึงไม่ตอบสนอง


12

ฉันเพิ่งดำเนินการdot(โปรแกรมสำหรับการวาดกราฟกำกับ) ด้วยไฟล์อินพุตที่มีขนาดใหญ่จนไม่สามารถแสดงผลได้ในระยะเวลาที่เหมาะสม

ทั้งระบบของฉันแข็ง ฉันแทบจะไม่สามารถทำให้มันเป็นคอนโซลข้อความด้วยCtrl+ Alt+ F1เพื่อฆ่าdotแต่มันใช้เวลาหลายนาที

ทำไมระบบอนุญาตบางอย่างเช่นนี้ ทำไมจึงให้โปรแกรมที่ไม่สำคัญเช่นdot99% ของระบบและใช้ 1% ที่เหลือสำหรับการตอบสนอง


สำเนาซ้ำที่เป็นไปได้ของดิสก์หนัก I / O unix.stackexchange.com/questions/5565/…และunix.stackexchange.com/questions/11/…
George M

คำตอบ:


15

นั่นคือวิธีที่ GNU / Linux และระบบมัลติทาสก์อื่น ๆ ทำงานร่วมกันโดยใช้โปรเซสเซอร์ร่วมกันระหว่างกระบวนการทำงานdotไม่มี 99% แต่ 100% ในช่วง 99% ของเวลา แต่ละกระบวนการควบคุมโปรเซสเซอร์ในช่วงระยะเวลาหนึ่ง

สิ่งนี้จัดการโดย schedulers (linux มีหลาย schedulers บางตัวใช้กลยุทธ์ปกติบางคนพยายามให้เวลากับอินเทอร์เฟซผู้ใช้มากขึ้นเรื่อย ๆ )

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

แม้ว่าdotเป็นเพียงการ 99% ของเวลา CPU มีโอกาสที่จะเปลี่ยนไป terminal ข้อความจะเกือบจะทันทีสิ่งที่เกิดขึ้นคือว่าเมล็ดมีการย้ายdotสิ่งที่ออกมาจากหน่วยความจำเพื่อที่จะสามารถนำXกลับมาอยู่ในหน่วยความจำเพื่อให้Xสามารถมองเห็นกุญแจ คุณเพียงแค่กดและย้ายไปที่เทอร์มินัลข้อความจากนั้นเคอร์เนลจะต้องย้ายXออกจากหน่วยความจำdotที่ยังคงทำงานอยู่และจากนั้นก็ย้ายdotออกเพื่อย้ายกระบวนการเทอร์มินัลข้อความ (อาจlogin? (ถ้าลักษณะนี้ยุ่งมันไม่ได้เป็นเพียงเพราะตัวอย่างจะยุ่ง - ในความเป็นจริงนี้ . ยุ่ง)

ตัวอย่างคือถ้าคุณลงชื่อเข้าใช้เทอร์มินัลข้อความคุณอาจจะสามารถกดปุ่มกดแบ็คสเปซและมันจะเกิดขึ้นแบบเรียลไทม์ แต่ถ้าคุณทำบางอย่างง่าย ๆ เหมือนกับการใช้เครื่องมือขนาดเล็กpsมันจะ "หยุด" "ชั่วขณะหนึ่งเพราะต้องโหลดหน่วยความจำให้ว่างps(และต้องรอคิว I / O ของดิสก์ซึ่งใช้อย่างมากในการย้ายข้อมูลไปยังและจากหน่วยความจำจนกว่าจะสามารถร้องขอpsจากระบบไฟล์ได้) .


อืมวิธีที่จะทำให้ผู้ใช้ได้รับประสบการณ์ที่ดีขึ้นคือการระบุโปรแกรมบางอย่างว่า " เหนียว " และป้องกันไม่ให้โปรแกรมเหล่านั้นถูกสลับสับเปลี่ยน
Christoph Wurm

Stickiness ไม่ได้ทำงานอย่างนั้นมาตั้งแต่ยุค 70 และความหมายดั้งเดิมของบิต 'เหนียว' อย่างไรก็ตามคุณสามารถล็อคโปรแกรม (ส่วนของ) ลงในหน่วยความจำได้เพื่อที่จะไม่สามารถสลับออกได้ หน่วยความจำหลักคือความหรูหราที่มีราคาแพงดังนั้นจึงไม่สามารถทำได้สำหรับทุกสิ่ง
Alexios

@ njsg ขอบคุณสำหรับคำอธิบายที่ดี คำถามติดตามผล: มีวิธีป้องกันการฟาดฟันไม่ได้หรือไม่? ฉันเข้าใจว่าการแลกเปลี่ยนทำให้การใช้หน่วยความจำมีประสิทธิภาพมากกว่าโดยรวม แต่ควรมีข้อ จำกัด IMHO กระบวนการที่จำเป็นเท่า X ไม่ควรถูกย้ายออกจากหน่วยความจำ มีวิธีการกำหนดค่าระบบเหมือนยูนิกซ์เช่นว่ากระบวนการที่สำคัญได้รับการคุ้มครองจากการถูกย้ายออก? บนเซิร์ฟเวอร์มันเป็นสิ่งที่แตกต่างกัน แต่บนเดสก์ท็อปฉันควรจะมีกระบวนการที่ต้องใช้หน่วยความจำที่จะพังมากกว่าที่จะให้เดสก์ท็อปหยุดพูดกับฉัน
A. Donda
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.