มัลติทาสกิ้งทำงานอย่างไร


15

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

ในทางทฤษฎีระบบปฏิบัติการจัดการเวลาตาม CPU สำหรับช่วงเวลาเล็ก ๆ กับโปรแกรมต่างๆที่ทำงานอยู่ แต่มันยังไม่ชัดเจนว่ามันใช้งานได้จริงอย่างไร

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

โดยพื้นฐานแล้วฉันสามารถจินตนาการได้สองวิธีในการทำให้งานนี้ แต่ดูเหมือนจะไม่เหมาะสมจริงๆ:

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

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

ดังนั้นดูเหมือนว่ากลไกทั้งสองจะทำงานได้ไม่ดีนัก มัลติทาสกิ้งมีประสิทธิภาพอย่างไร


แม้ว่าการเดาของคุณจะไม่ถูกต้อง แต่ปัญหาที่คุณชี้ให้เห็นก็คือใช่: "ฉันสามารถทำการคำนวณแบบยาวซึ่งไม่เกี่ยวข้องกับการโทรของระบบและแขวนทุกอย่างในขณะนี้"
jhocking

คำค้นหา:interrupt
SK-logic

ใช่ แต่ใครเป็นผู้เปิดตัวอินเตอร์รัปต์? หากรหัสของฉันกำลังทำงานระบบปฏิบัติการจะไม่สามารถดำเนินการตามINTคำสั่งได้ บางสิ่งบางอย่างยังคงลึกลับสำหรับฉัน
Andrea

@Andrea นาฬิกา harware กำลังเรียกใช้การขัดจังหวะ เรียบง่ายเหมือนที่ en.wikipedia.org/wiki/Scheduling_%28computing%29
SK-logic

ตกลงตอนนี้ฉันเห็นแล้ว ดังนั้นถ้าฉันเข้าใจอย่างถูกต้องมันเป็นคุณสมบัติที่อิงกับฮาร์ดแวร์ไม่ใช่สิ่งเดียวที่สามารถนำไปใช้ในระบบปฏิบัติการ
Andrea

คำตอบ:


21

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

นี่คือ (สำหรับ CPU ที่ทันสมัย) เวอร์ชันที่ง่ายมากของสิ่งที่เกิดขึ้น แต่อธิบายหลักการ นอกเหนือจากการควบคุมการขัดจังหวะระบบปฏิบัติการเหล่านี้แล้วยังมีการขัดจังหวะที่เกิดจากเหตุการณ์ภายนอก (เมาส์แป้นพิมพ์พอร์ตอนุกรมพอร์ตเครือข่าย ฯลฯ ) ซึ่งเป็นกระบวนการที่มีอินเตอร์รัปต์แยกต่างหากซึ่งมักจะเชื่อมต่อกับตัวจัดการเหตุการณ์

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


5

มันแตกต่างกันไปตามระบบ

ในระบบมัลติทาสกิ้งที่ไม่ได้รับอนุญาต (เช่น Oberon ดั้งเดิมหรือ Apple Macintosh ดั้งเดิม) ระบบปฏิบัติการจะทำการ "สำรวจ" ทุกงานเป็นระยะเพื่อให้พวกเขามีโอกาสทำงานได้ งานที่คาดว่าจะเล่นด้วยกันอย่างสวยงาม หากพวกเขามีงานเล็กน้อยที่ต้องทำพวกเขาทำและกลับสู่ระบบปฏิบัติการ หากงานชิ้นหนึ่งมีก้อนชิ้นใหญ่ให้ทำก็คาดว่าจะแบ่งเป็นชิ้นเล็ก ๆ และทำงานชิ้นเล็กชิ้นน้อยทุกครั้งที่มีการสำรวจ

การขัดจังหวะของฮาร์ดแวร์ (การทำให้ DMA ของดิสก์ไดร์ฟเสร็จสิ้น, การขัดจังหวะพอร์ตอนุกรม, อะไรที่มีอยู่) ทำให้เกิดการขัดจังหวะการทำงานตามปกติ รูทีนการอินเตอร์รัปต์เหล่านี้อาจแจ้งเตือนงานที่ต้องทำเมื่องานต่อไปทำงาน

ในระบบมัลติทาสกิ้งที่ไม่ได้รับอนุญาตการเกิดขึ้นหรือไม่เกิดขึ้นของการขัดจังหวะจะไม่ส่งผลกระทบต่องานใดที่กำลังทำงานหลังจากรูทีนการอินเตอร์รัปต์เสร็จสิ้น

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

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


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

@Andrea: การยกเว้นร่วมกันและส่วนที่สำคัญคือทั้งหมดที่เกี่ยวกับการไม่สูญเสียโปรเซสเซอร์ในช่วงเวลาที่สำคัญ หากกระบวนการของคุณมีสิ่งที่ถูกล็อคและคุณสูญเสียตัวประมวลผลสิ่งนั้นจะยังคงล็อคอยู่จนกว่าคุณจะได้หน่วยประมวลผลอีก สิ่งนี้อาจทำให้เกิดปัญหา
John R. Strohm

@Andrea คุณจะได้รับการควบคุมของหน่วยประมวลผลอีกครั้งและกระบวนการอื่น ๆ อาจเล่นกับหน่วยความจำที่คุณกำลังจะใช้
user253751

4

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

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