อะไรคือความแตกต่างระหว่างเคอร์เนล "แบบไม่ยึดเอาเสียก่อน", "ยึดเอาเสีย" และ "เลือกเฉพาะพื้นที่"
หวังว่าใครบางคนสามารถหลั่งน้ำตาแสงนี้
อะไรคือความแตกต่างระหว่างเคอร์เนล "แบบไม่ยึดเอาเสียก่อน", "ยึดเอาเสีย" และ "เลือกเฉพาะพื้นที่"
หวังว่าใครบางคนสามารถหลั่งน้ำตาแสงนี้
คำตอบ:
บนเคอร์เนลที่ยึดไว้ได้กระบวนการที่รันในโหมดเคอร์เนลสามารถถูกแทนที่ด้วยกระบวนการอื่นในขณะที่อยู่ตรงกลางของฟังก์ชันเคอร์เนล
สิ่งนี้ใช้กับกระบวนการที่ทำงานในโหมดเคอร์เนลเท่านั้นกระบวนการประมวลผล CPU ในโหมดผู้ใช้จะถูกพิจารณาว่าเป็น "idle" หากกระบวนการโหมดผู้ใช้ต้องการขอบริการจากเคอร์เนลเขาจะต้องออกข้อยกเว้นซึ่งเคอร์เนลสามารถจัดการได้
ตัวอย่างเช่น:
กระบวนการA
ดำเนินการจัดการข้อยกเว้นกระบวนการB
ได้รับการปลุกโดยการร้องขอ IRQ, เคอร์เนลแทนที่กระบวนการA
ด้วยB
(สลับกระบวนการบังคับ) กระบวนการA
ยังไม่เสร็จ ตัวกำหนดตารางเวลาจะตัดสินใจหลังจากนั้นหากกระบวนการA
รับเวลาของ CPU หรือไม่
บนเคอร์เนลที่ไม่ได้รับอนุญาตกระบวนการA
จะใช้เวลาตัวประมวลผลทั้งหมดจนกว่าเขาจะเสร็จสิ้นหรือตัดสินใจโดยสมัครใจเพื่ออนุญาตให้กระบวนการอื่นขัดจังหวะเขา (สวิตช์กระบวนการตามแผน)
โดยทั่วไประบบปฏิบัติการที่ใช้ Linux ในปัจจุบันไม่ได้รวมเคอร์เนลที่ควบคุมไว้อย่างสมบูรณ์ แต่ก็ยังมีฟังก์ชั่นที่สำคัญที่ต้องทำงานโดยไม่หยุดชะงัก ดังนั้นฉันคิดว่าคุณสามารถเรียกสิ่งนี้ว่า
นอกจากนั้นยังมีวิธีที่จะทำให้เคอร์เนล Linux (เกือบ) ยึดเอาเสียก่อนอย่างเต็มที่
ใบจองคือ -> ความสามารถของระบบปฏิบัติการในการจองหรือหยุดงานที่กำหนดไว้ในปัจจุบันเพื่อสนับสนุนงานที่มีลำดับความสำคัญสูงกว่า การกำหนดเวลาอาจเป็นหนึ่งใน แต่ไม่ จำกัด เพียงกระบวนการหรือการจัดตารางเวลา I / O เป็นต้น
ภายใต้ Linux โปรแกรมพื้นที่ผู้ใช้สามารถจองได้เสมอ: เคอร์เนลขัดจังหวะโปรแกรมพื้นที่ผู้ใช้เพื่อสลับไปยังเธรดอื่น ๆ โดยใช้เครื่องหมายขีดเวลานาฬิกาปกติ ดังนั้นเคอร์เนลไม่รอให้โปรแกรมผู้ใช้พื้นที่ปล่อยโปรเซสเซอร์อย่างชัดเจน (ซึ่งเป็นกรณีในการทำงานมัลติทาสก์แบบมีส่วนร่วม) ซึ่งหมายความว่าการวนซ้ำไม่สิ้นสุดในโปรแกรมผู้ใช้พื้นที่ไม่สามารถบล็อกระบบ
อย่างไรก็ตามจนถึง 2.6 เคอร์เนลเคอร์เนลไม่สามารถป้องกันได้: ทันทีที่เธรดหนึ่งป้อนเคอร์เนลไม่สามารถจองล่วงหน้าเพื่อดำเนินการเธรดอื่นได้ อย่างไรก็ตามการไม่มีการจองล่วงหน้าในเคอร์เนลทำให้เกิดปัญหาหลายประการเกี่ยวกับความล่าช้าและความสามารถในการปรับขยาย ดังนั้นการเสนอราคาเคอร์เนลได้รับการแนะนำใน 2.6 เมล็ดและหนึ่งสามารถเปิดใช้งานหรือปิดการใช้งานโดยใช้ตัวเลือก CONFIG_PREEMPT หากเปิดใช้งาน CONFIG_PREEMPT รหัสเคอร์เนลสามารถจองได้ทุกที่ยกเว้นเมื่อรหัสได้ปิดการใช้งานการขัดจังหวะในระบบ การวนซ้ำไม่สิ้นสุดในรหัสไม่สามารถบล็อกระบบทั้งหมดได้อีกต่อไป ถ้า CONFIG_PREEMPT ถูกปิดใช้งานการทำงาน 2.4 จะถูกกู้คืน
อ้างอิงและจัดรูปแบบจาก: http://www.linuxquestions.org/questions/linux-general-1/pre-emptive-vs-non-pre-emptive-kernel-582437/
เคอร์เนลที่ยึดเอาไว้ช่วยให้กระบวนการสามารถจองได้ในขณะที่กำลังทำงานในโหมดเคอร์เนล เคอร์เนลที่ไม่ได้รับการอนุญาติไม่อนุญาตให้กระบวนการที่รันในเคอร์เนล modeto ถูกจองไว้ก่อน กระบวนการโหมดเคอร์เนลจะทำงานจนกว่าจะออกจากโหมดเคอร์เนลบล็อกหรือสมัครใจให้ผลการควบคุมของ CPU เห็นได้ชัดว่าเคอร์เนลที่ไม่ได้รับการป้องกันเป็นอิสระจากสภาพการแข่งขันในโครงสร้างข้อมูลเคอร์เนลเนื่องจากมีเพียงกระบวนการเดียวเท่านั้นที่ทำงานในเคอร์เนลในแต่ละครั้ง เราไม่สามารถพูดได้เหมือนกันเกี่ยวกับเมล็ดที่ถูกยึดครองดังนั้นพวกมันจะต้องได้รับการออกแบบอย่างระมัดระวังเพื่อให้แน่ใจว่าข้อมูลเคอร์เนลที่ใช้ร่วมกันปราศจากเงื่อนไขการแข่งขัน เมล็ดที่ได้รับการดูแลเป็นพิเศษโดยเฉพาะอย่างยิ่งยากที่จะออกแบบสำหรับสถาปัตยกรรม SMP เนื่องจากในสภาพแวดล้อมเหล่านี้เป็นไปได้ที่กระบวนการเคอร์เนลสองโหมดจะทำงานพร้อมกันในโปรเซสเซอร์ที่แตกต่างกัน เคอร์เนล preemptive เหมาะสำหรับการเขียนโปรแกรมแบบเรียลไทม์ เนื่องจากจะทำให้กระบวนการแบบเรียลไทม์สามารถจองกระบวนการที่กำลังทำงานอยู่ในเคอร์เนลได้ นอกจากนี้เคอร์เนลที่ถูกยึดครองอาจตอบสนองได้ดีกว่าเนื่องจากมีความเสี่ยงน้อยกว่าที่กระบวนการของโหมดเคอร์เนลจะทำงานเป็นระยะเวลานานโดยพลการก่อนที่จะปล่อยโปรเซสเซอร์ให้รอกระบวนการ แน่นอนว่าเอฟเฟกต์นี้สามารถลดลงได้ด้วยการออกแบบเคอร์เนลโค้ดที่ไม่ทำงานในลักษณะนี้ ต่อมาในบทนี้เราจะสำรวจว่าระบบปฏิบัติการต่าง ๆ จัดการการจองไว้ล่วงหน้าภายในเคอร์เนลอย่างไร ผลกระทบนี้สามารถลดลงได้โดยการออกแบบเคอร์เนลโค้ดที่ไม่ทำงานในลักษณะนี้ ต่อมาในบทนี้เราจะสำรวจว่าระบบปฏิบัติการต่าง ๆ จัดการการจองไว้ล่วงหน้าภายในเคอร์เนลอย่างไร ผลกระทบนี้สามารถลดลงได้โดยการออกแบบเคอร์เนลโค้ดที่ไม่ทำงานในลักษณะนี้ ต่อมาในบทนี้เราจะสำรวจว่าระบบปฏิบัติการต่าง ๆ จัดการการจองไว้ล่วงหน้าภายในเคอร์เนลอย่างไร