เหตุใดการเริ่มต้นแอปพลิเคชันใหม่ทำให้ระบบติดอ่าง


0

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

คำถามก็คือถ้ามีการคำนวณการแบ่งเวลาเสมอ (ซึ่งก็คือฉันเดา) ดังนั้นทำไมแอปหนึ่งสามารถทำให้ระบบปฏิบัติการทั้งหมดหยุดนิ่ง (หรือเครื่อง)

บอกว่าฉันกำลังเล่นแทร็กเสียงด้วยเครื่องเล่น VLC จากนั้นฉันก็เรียกใช้ NetBeans (IDE) จากนั้นเสียงจากเครื่องเล่น VLC ก็เริ่มพูดติดอ่าง (และมันจะดำเนินต่อไปจนกว่า NetBeans จะตอบสนองได้อย่างสมบูรณ์) แต่ผู้เล่น VLC ควรมีการแบ่งเวลาเหมือนเดิมใช่มั้ย หรือเป็นเพียงการจัดสรรชิ้นส่วนเวลาใหม่สำหรับซอฟต์แวร์ใหม่ที่ทำให้ชิ้นส่วนที่ต้องการลดลงสำหรับแอพที่กำลังทำงานอยู่?

คำตอบ:


2

เหตุใดการเริ่มต้นแอปพลิเคชันใหม่ทำให้ระบบติดอ่าง

จากนั้นเสียงจากเครื่องเล่น VLC ก็เริ่มพูดติดอ่าง

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

ดังนั้นแอปที่รันอยู่แต่ละแอปจะได้รับจำนวนเวลาที่แน่นอนจากซีพียูสำหรับการทำงาน (ขึ้นอยู่กับความต้องการ)

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

แต่สมมติว่ามีการใช้การจัดตารางเวลาแบบรอบเวลาในตัวอย่างของคุณ ผู้เล่น VLC ควรจะแบ่งเป็นO-เข้มข้น I /โปรแกรมเมื่อเทียบกับที่เข้มข้นของ CPU เป็นหลักเครื่องเล่น VLC ซ้ำแล้วซ้ำอีก

  • อ่านข้อมูล (จากไฟล์ดิสก์)
  • กำลังเขียนข้อมูล (ไปยังอุปกรณ์เสียง)

เครื่องเล่น VLC ไม่ได้ใช้การแบ่งเวลาสำหรับการคำนวณอย่างเข้มข้น แต่ส่วนใหญ่จะทำการอินพุตหรือเอาต์พุตและจะถูกหยุดจนกว่าการดำเนินการ I / O จะเสร็จสิ้น ทั้งนี้ขึ้นอยู่กับตัวกำหนดตารางเวลา OS ส่วนที่ไม่ได้ใช้ของช่วงเวลาอาจถูกเครดิตกลับไปที่กระบวนการสำหรับช่วงเวลาที่ยาวเป็นพิเศษในรอบถัดไปหรือกระบวนการสูญเสียหรือกระบวนการจะข้ามไปที่หัวคิวพร้อม ทันทีที่ I / O เสร็จสมบูรณ์ สิ่งที่เกิดขึ้นจะขึ้นอยู่กับการใช้งานตัวกำหนดตารางเวลาระบบปฏิบัติการ ตัวอย่างเช่นเคอร์เนล Linux สามารถสร้างขึ้นเพื่อใช้หนึ่งในหลาย schedulers แต่ละคนมีลักษณะ "ความยุติธรรม" ที่แตกต่างกันสำหรับกระบวนการที่แตกต่างกัน

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

น่าเสียดายที่ตัวกำหนดเวลามักจะมุ่งเน้นไปที่การจัดสรรทรัพยากร CPU และมีปัญหา (หรือหลีกเลี่ยงการจัดการ) ด้วยปัญหา I / O ที่คาดเดาไม่ได้ คุณสามารถลองใช้ดิสก์ไดรฟ์ที่เร็วกว่าและ / หรือค้นหาไฟล์เสียงในไดรฟ์ที่แตกต่างจากไดรฟ์โปรแกรม OS +

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

ระบบเครือข่ายตอบสนองต่อการจัดการทราฟฟิกที่มีความหน่วงต่ำและทราฟฟิกทั่วไปเนื่องจากต้องแก้ไขปัญหานี้สำหรับ VoIP สิ่งที่คล้ายกันเป็นสิ่งจำเป็นสำหรับระบบจัดเก็บข้อมูลจำนวนมาก


ขอบคุณสำหรับคำตอบ. intermixedสิ่งที่สิ่งที่คำถามของฉันคือทั้งหมดที่เกี่ยวกับ กระบวนการผสมสองอย่างเกิดขึ้นได้อย่างไร ไม่ควรมีปัญหาการซ้อนทับกัน VLC ไม่ควรมีการพูดติดอ่าง (แต่ก็เป็นเช่นนั้น) เพราะมันได้ดำเนินการแล้ว / ใช้เวลาที่กำหนดจากซีพียู (ซึ่งไม่ควรแบ่งปัน) แอพพลิเคชั่นอื่น ๆ สามารถใช้งานได้อย่างไร (สละเวลาของผู้เล่น VLC) ไม่ใช่ว่าเขาเป็นอย่างไร ทำไมซีพียูควรจัดลำดับความสำคัญในการเริ่มต้น NetBeans แทนที่จะเล่น VLC อย่างราบรื่น?
Quazi Irfan

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

@iamcreasy - ดูเหมือนว่าคุณจะคาดหวังว่าผู้เล่น VLC จะใช้ช่วงเวลาของมันถึงแม้ว่ามันจะรอการร้องขอ I / O ให้เสร็จสมบูรณ์ก็ตาม ที่สามารถทำได้ในบางสถานการณ์ แต่ที่ตรงกันข้ามกับแนวคิดมัลติทาสก์เช่นเมื่องานกำลังรอมันควรจะถูกระงับและงานอื่นได้รับการควบคุมของ CPU
ขี้เลื่อย

0

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

เมื่อระบบมีการรันสองแอปพลิเคชั่นโดยประมาณเป็นครั้งแรกสำหรับแต่ละทรัพยากรที่ทั้งสองต้องการใช้งานครึ่งหนึ่งของทรัพยากรที่มีอยู่จะพร้อมใช้งานสำหรับแต่ละแอปพลิเคชัน หากพวกเขาต้องการหน่วยความจำมากพวกเขาแต่ละคนจะได้ครึ่ง หากพวกเขาต้องการดิสก์ I / Os จำนวนมากพวกเขาจะได้ครึ่งหนึ่ง หากทั้งคู่ต้องการเวลา CPU มากพวกเขาแต่ละคนจะได้ครึ่งหนึ่ง มากหรือน้อย.

หากเป็นแอปพลิเคชั่นสามรายการพวกเขาจะไม่สามารถรับมากกว่า 1/3 ได้

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

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

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