ความสัมพันธ์ระหว่างการเรียกของระบบการส่งข้อความและการขัดจังหวะคืออะไร?


14

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

บางคำพูดจากบทความและอื่น ๆ :

  1. มีสองวิธีที่เป็นไปได้สำหรับระบบปฏิบัติการที่จะได้รับการควบคุมของหน่วยประมวลผลในระหว่างการดำเนินการของโปรแกรมเพื่อให้ระบบปฏิบัติการที่จะทำการจัดสรรหรือการจัดสรร:

    1. กระบวนการออกสายระบบ (บางครั้งเรียกว่าซอฟต์แวร์ขัดจังหวะ); ตัวอย่างเช่นคำขอ I / O เกิดขึ้นเพื่อขอให้เข้าถึงไฟล์บนฮาร์ดดิสก์
    2. การขัดจังหวะของฮาร์ดแวร์เกิดขึ้น ตัวอย่างเช่นมีการกดแป้นบนแป้นพิมพ์หรือตัวจับเวลาหมด (ใช้ในมัลติทาสก์แบบ pre-emptive)
  2. มีสองเทคนิคที่โปรแกรมดำเนินการในโหมดผู้ใช้สามารถร้องขอบริการของเคอร์เนลได้:

    * System call
    * Message passing
    
  3. อินเทอร์รัปต์เป็นสัญญาณอะซิงโครนัสที่ระบุถึงความต้องการความสนใจหรือเหตุการณ์ซิงโครนัสในซอฟต์แวร์ที่ระบุถึงความต้องการการเปลี่ยนแปลงในการดำเนินการ

    ฮาร์ดแวร์ขัดจังหวะทำให้โปรเซสเซอร์บันทึกสถานะของการดำเนินการและเริ่มต้นการดำเนินการของตัวจัดการขัดจังหวะ การขัดจังหวะของซอฟต์แวร์มักจะนำมาใช้เป็นคำแนะนำในชุดคำสั่งซึ่งทำให้การสลับบริบทเป็นตัวจัดการขัดจังหวะคล้ายกับการขัดจังหวะฮาร์ดแวร์


2
คำถามที่ดีมาก!
Stéphane Gimenez

คำตอบ:


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

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

    ทีนี้สมมติว่าในขณะที่กระบวนการทั้งสองกำลังดำเนินการอยู่คุณกดปุ่มรีเซ็ต (เด็กเลว) CPU จะหยุดสิ่งที่กำลังทำอยู่และรีบูทระบบทันที ขอแสดงความยินดี: คุณสร้างการขัดจังหวะ

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

    ดังนั้น 1 อธิบายสองวิธีที่แตกต่างกันในการรับความสนใจจาก CPU

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

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

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

    ดังนั้น 2 กล่าวถึงวิธีที่แตกต่างกันสองวิธีในการสลับจากผู้ใช้เป็นโหมดเคอร์เนล

  3. ในการแก้ไขวิธีที่พบได้บ่อยที่สุดในการสร้างซอฟต์แวร์ขัดจังหวะหรือที่รู้จักในชื่อ Trap คือการดำเนินการเรียกใช้ระบบ การขัดจังหวะในทางกลับกันจะเกิดขึ้นจากฮาร์ดแวร์อย่างหมดจด

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

    ดังนั้น 3 อธิบายสิ่งที่ต้องทำหลังจากเรียกใช้กับดักหรือการขัดจังหวะและมีความคล้ายคลึงกันทั้งสองกรณีอย่างไร


1
ขอบคุณ! (1) ใน 1 คุณหมายถึงสองวิธีในการรับความสนใจจาก CPU คือซอฟต์แวร์ขัดจังหวะ (โปรแกรมที่มีตัวอย่างการเรียกของระบบ) และฮาร์ดแวร์ขัดจังหวะ (ตัวอย่างคีย์รีเซ็ต) หรือไม่ (2) ใน 2 คุณหมายถึงว่าการเรียกของระบบและการส่งข้อความเป็นซอฟต์แวร์ขัดจังหวะสองวิธีหรือไม่ (3) ถูกต้องหรือไม่ว่าจุดประสงค์ของการขัดจังหวะของซอฟต์แวร์นั้นมีไว้เพื่อให้กระบวนการร้องขอบริการเคอร์เนลและทรัพยากรและจุดประสงค์ของการขัดจังหวะด้วยฮาร์ดแวร์ไม่ได้หรือไม่ ถ้าใช่วัตถุประสงค์ของการขัดจังหวะฮาร์ดแวร์คืออะไร?
ทิม

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

1
ขอบคุณ! เกี่ยวกับ (3) คุณหมายถึงอะไรในความรู้สึกใช่ไหม? วัตถุประสงค์ทั่วไปของการขัดจังหวะด้วยฮาร์ดแวร์และการขัดจังหวะของซอฟต์แวร์คืออะไร
ทิม

1
การรีเซ็ตระบบไม่ใช่การขัดจังหวะ มันไม่ได้บันทึกสถานะที่จะดำเนินการต่อหลังจาก
psusi

1
@faif reset และ NMI (Non Maskable Interrupt) เป็นสองพินที่แตกต่างกันบน CPU หลังทำให้เกิดการขัดจังหวะซึ่งหมายถึงการบันทึกสถานะและข้ามไปยังตัวจัดการ อดีตจะเริ่มต้นซีพียู (จงใจทิ้งทุกสถานะ) เช่นเดียวกับเมื่อเปิดเครื่อง (รีเซ็ตจะถูกยืนยันโดยอัตโนมัติเมื่อเปิดเครื่อง) เนื่องจากส่วนหนึ่งของคำจำกัดความของอินเทอร์รัปต์คือช่วยประหยัดสถานะการรีเซ็ตไม่สามารถทำตามคำจำกัดความนั้นได้
psusi

9

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

  • เคอร์เนลโหมด: โปรแกรมมีมุมมองแบนหรือหน่วยความจำจริงและโปรแกรมสามารถอ่าน / เขียนได้อย่างอิสระไปยังหน่วยความจำทั้งหมดและอุปกรณ์ฮาร์ดแวร์ทั้งหมดโดยตรงโดยไม่มีข้อ จำกัด

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

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

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

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

ในสถาปัตยกรรม microkernel ที่ "เคอร์เนล" จริง ๆ มีน้อยมากและฟังก์ชั่นส่วนใหญ่ที่เคอร์เนลจัดเตรียมจะถูกย้ายไปยังกระบวนการ "เซิร์ฟเวอร์" ซึ่งทั้งหมดนี้อาจทำงานพร้อมกันบนระบบมัลติซีพียูสิ่งนี้อาจมากกว่า มีประโยชน์มากกว่าวิธีการเรียกระบบเก่าแบบธรรมดา การตีความและการจัดเส้นทาง "ข้อความ" ไปยังเคอร์เนล "เซิร์ฟเวอร์" ที่เหมาะสมจะเป็นหนึ่งในงานไม่กี่ไมโครKernelของ


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

5

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

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

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