อะไรคือความแตกต่างระหว่าง Monolithic และ Micro Kernel?


114

ใครช่วยอธิบายด้วยตัวอย่างความแตกต่างระหว่างเสาหินและไมโครเคอร์เนล การจำแนกประเภทอื่น ๆ ของเคอร์เนลด้วยหรือไม่?



2
ฉันอยากจะแนะนำหน้า Wikipedia
David Heffernan

อีกคำถามที่มีประโยชน์ - stackoverflow.com/questions/1806585/…
Aniket Thakur

คำตอบ:


114

เคอร์เนลเสาหินเป็นกระบวนการขนาดใหญ่เดียวที่ทำงานทั้งหมดในพื้นที่แอดเดรสเดียว มันเป็นไฟล์ไบนารีแบบคงที่เดียว บริการเคอร์เนลทั้งหมดมีอยู่และดำเนินการในพื้นที่ที่อยู่เคอร์เนล เคอร์เนลสามารถเรียกใช้ฟังก์ชันได้โดยตรง ตัวอย่างของระบบปฏิบัติการที่ใช้เคอร์เนลเสาหิน: Unix, Linux

ในไมโครเคอร์เนลเคอร์เนลถูกแบ่งออกเป็นกระบวนการที่แยกจากกันซึ่งเรียกว่าเซิร์ฟเวอร์ เซิร์ฟเวอร์บางตัวทำงานในพื้นที่เคอร์เนลและบางเซิร์ฟเวอร์ทำงานในพื้นที่ผู้ใช้ เซิร์ฟเวอร์ทั้งหมดจะแยกจากกันและทำงานในพื้นที่ที่อยู่ที่ต่างกัน เซิร์ฟเวอร์เรียก "บริการ" จากกันโดยการส่งข้อความผ่าน IPC (Interprocess Communication) การแยกนี้มีข้อดีคือหากเซิร์ฟเวอร์หนึ่งล้มเหลวเซิร์ฟเวอร์อื่นก็ยังสามารถทำงานได้อย่างมีประสิทธิภาพ ตัวอย่าง OS ที่ใช้ microkernel: Mac OS X และ Windows NT


36
ทั้ง Mac OS X และ Windows เป็นเคอร์เนลแบบไฮบริดซึ่งเกี่ยวข้องกับเคอร์เนลเสาหินมากขึ้น ตัวอย่างของเมล็ดพืชขนาดเล็ก ได้แก่ Mach QNX AmigaOS Minix
zeitue

7
GNU Hurdเป็นตัวอย่างที่ดีของระบบปฏิบัติการที่ทำงานบน microkernel ยังคงอยู่ในระหว่างการพัฒนาและ Linux distros ยอดนิยมบางตัวมีพอร์ต Hurd (Debian / Hurd, Arch Hurd ฯลฯ )
beatgammit

78
  1. การออกแบบเคอร์เนลเสาหินนั้นเก่ากว่าแนวคิดไมโครเคอร์เนลซึ่งปรากฏในตอนท้ายของปี 1980

  2. เมล็ด Unix และ Linux เป็นแบบเสาหินในขณะที่ QNX, L4 และ Hurd เป็นไมโครเคอร์เนล เดิม Mach เป็นไมโครเคอร์เนล (ไม่ใช่ Mac OS X) แต่ต่อมาถูกแปลงเป็นเคอร์เนลลูกผสม Minix (ก่อนเวอร์ชัน 3) ไม่ใช่ microkernel แท้เนื่องจากไดรเวอร์อุปกรณ์ถูกคอมไพล์เป็นส่วนหนึ่งของเคอร์เนล

  3. เมล็ดเสาหินมักจะเร็วกว่าเมล็ดไมโคร เครื่องไมโครเคอร์เนลเครื่องแรกทำงานช้ากว่าเมล็ดเสาหินส่วนใหญ่ 50% ในขณะที่รุ่นต่อมาเช่น L4 ช้ากว่าการออกแบบเสาหินเพียง 2% หรือ 4%

  4. เมล็ดเสาหินมีขนาดใหญ่ในขณะที่ไมโครเคอร์เนลมีขนาดเล็ก - มักจะพอดีกับแคช L1 ของโปรเซสเซอร์ (ไมโครเคอร์เนลรุ่นแรก)

  5. ในเมล็ดเสาหินไดรเวอร์อุปกรณ์จะอยู่ในพื้นที่เคอร์เนลในขณะที่อยู่ในไมโครเคอร์เนลไดรเวอร์อุปกรณ์คือพื้นที่ผู้ใช้

  6. เนื่องจากไดรเวอร์อุปกรณ์ของเมล็ดเสาหินอยู่ในพื้นที่เคอร์เนลเมล็ดเสาหินจึงมีความปลอดภัยน้อยกว่าไมโครเคอร์เนลและความล้มเหลว (ข้อยกเว้น) ในไดรเวอร์อาจทำให้เกิดข้อขัดข้อง (แสดงเป็น BSOD ใน Windows) ไมโครเคอร์เนลมีความปลอดภัยมากกว่าเมล็ดพืชเสาหินจึงมักใช้ในอุปกรณ์ทางทหาร

  7. เมล็ดเสาหินใช้สัญญาณและซ็อกเก็ตเพื่อใช้การสื่อสารระหว่างกระบวนการ (IPC) ไมโครเคอร์เนลใช้คิวข้อความ ไมโครเคอร์เนลรุ่นที่ 1 ใช้ IPC ได้ไม่ดีและช้าเมื่อใช้สวิตช์บริบทนั่นคือสาเหตุที่ทำให้ประสิทธิภาพไม่ดี

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


1
โดยพูดถึงMINIXว่าคุณหมายถึงเวอร์ชันไหน รุ่นที่ 3 ได้แยกไดรเวอร์อุปกรณ์และระบบไฟล์จากเมล็ด
orustammanapov

เกี่ยวกับ 8. นั่นหมายความว่าเมื่อคุณติดตั้งโปรแกรมใน Linux ไบนารีเคอร์เนลทั้งหมดจะถูกคอมไพล์ใหม่หรือไม่? ไบนารีของเคอร์เนลนี้อยู่ที่ไหน ขอบคุณ
Nikos

@ Nik-Lz: ไม่ใช่โปรแกรม แต่เป็นคุณสมบัติ โปรแกรมมักจะทำงานบนพื้นที่ผู้ใช้ หากคุณต้องการรันโค้ดในพื้นที่เคอร์เนลคุณมีสองทางเลือก: สร้างในเคอร์เนลหรือโหลดด้วยโมดูลเคอร์เนล ref
bayuah

26

เคอร์เนลเสาหิน

ทุกส่วนของเคอร์เนลเช่น Scheduler, File System, Memory Management, Networking Stacks, Device Drivers ฯลฯ จะได้รับการดูแลในหน่วยเดียวภายในเคอร์เนลในMonolithic Kernel

ข้อดี

•การประมวลผลที่เร็วขึ้น

ข้อเสีย

•ความผิดพลาดไม่ปลอดภัย•การพอร์ตไม่ยืดหยุ่น•การระเบิดของขนาดเคอร์เนล

ตัวอย่าง • MS-DOS, Unix, Linux

ไมโครเคอร์เนล

เฉพาะส่วนที่สำคัญมากเช่น IPC (การสื่อสารระหว่างกระบวนการ) ตัวกำหนดตารางเวลาพื้นฐานการจัดการหน่วยความจำพื้นฐานไพรเวต I / O พื้นฐานเป็นต้นเท่านั้นที่จะใส่ลงในเคอร์เนล การสื่อสารเกิดขึ้นผ่านการส่งข้อความ อื่น ๆ จะได้รับการดูแลเป็นกระบวนการของเซิร์ฟเวอร์ใน User Space

ข้อดี

•ทนต่อการชนพกพาขนาดเล็กลง

ข้อเสีย

•การประมวลผลช้าลงเนื่องจากการส่งข้อความเพิ่มเติม

ตัวอย่าง • Windows NT


14

1. เคอร์เนลแบบเสาหิน (เสาหินบริสุทธิ์):all

  • บริการเคอร์เนลทั้งหมดจากส่วนประกอบเดียว

    (-) ไม่สามารถเพิ่ม / ลบได้มีความยืดหยุ่นน้อยกว่า / เป็นศูนย์

    (+) การสื่อสารระหว่างคอมโพเนนต์ดีกว่า

เช่น - Unix แบบดั้งเดิม

2. เคอร์เนลไมโคร:few

  • บริการเพียงไม่กี่อย่าง (การจัดการหน่วยความจำ, การจัดการ CPU, IPC ฯลฯ ) จากเคอร์เนลหลักบริการอื่น ๆ (การจัดการไฟล์การจัดการ I / O ฯลฯ ) จากเลเยอร์ / ส่วนประกอบต่างๆ

  • Split Approach [บางบริการอยู่ในโหมดพิเศษ (เคอร์เนล) และบางบริการอยู่ในโหมดปกติ (ผู้ใช้)]

    (+) ยืดหยุ่นสำหรับการเปลี่ยนแปลง / การไล่ระดับสี

    (-) ค่าใช้จ่ายในการสื่อสาร

เช่น: - QNXเป็นต้น

3. เคอร์เนลโมดูลาร์ (Modular Monolithic):most

  • การรวมกันของเคอร์เนลไมโครและเสาหิน

  • คอลเลกชันของโมดูล - โมดูลสามารถเป็น -> คงที่ + ไดนามิก

  • ไดรเวอร์มาในรูปแบบของโมดูล

เช่น: - Linux Modern OS


1

ในสเปกตรัมของการออกแบบเคอร์เนลจุดสุดขั้วสองจุดคือเมล็ดเสาหินและไมโครเคอร์เนล

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

ในรหัสนั้นเป็นไฟล์ C เดียวที่ก่อให้เกิดกระบวนการเดียวที่ใช้บริการทั้งหมดข้างต้น
เพื่อเป็นตัวอย่างการห่อหุ้มเคอร์เนลลินุกซ์เราตั้งข้อสังเกตว่าเคอร์เนลลินุกซ์ไม่สามารถเข้าถึงไลบรารี C มาตรฐานใด ๆ อันที่จริงเคอร์เนล Linux ไม่สามารถใช้ฟังก์ชันไลบรารี C พื้นฐานเช่น printf แต่จะใช้ฟังก์ชันการพิมพ์ของตัวเอง (เรียกว่าภาพพิมพ์)

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

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


-2

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

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