เคอร์เนล Linux เปรียบเทียบกับสถาปัตยกรรม microkernel อย่างไร


38

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


5
ในหัวข้อของ microkernels และลินุกซ์เห็นนี้คำตอบที่ดีมากที่จะ“ทำไมลินุกซ์เคอร์เนลที่เรียกว่าเสาหิน”
Gilles 'ดังนั้น - หยุดความชั่วร้าย'

1
คุณสามารถอ่านการโต้วาทีบนเคอร์เนล MicroKernel vs Monolithic oreilly.com/openbook/opensources/book/appa.htmlในบทความนี้ Andrew Tanenbaum รองรับ Microkernel และ Linus Torvalds รองรับเคอร์เนลเสาหิน
Bhuwan

คำตอบ:


35

microkernelsต้องมีรหัสน้อยที่จะทำงานในด้านในสุดของโหมดที่เชื่อถือได้มากที่สุดกว่าเมล็ดเสาหิน สิ่งนี้มีหลายด้านเช่น:

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

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

คลาสสิก (ถ้าวัน) อ่านเกี่ยวกับ Linux และ microkernels เป็นอภิปราย Tanenbaum-Torvalds ยี่สิบปีต่อมาใคร ๆ ก็สามารถพูดได้ว่าลีนุกซ์กำลังเคลื่อนไปยังโครงสร้างไมโครคาร์ทช้ามาก (โมดูลที่โหลดได้ปรากฏขึ้นก่อนหน้านี้, FUSE เป็นแบบล่าสุด), แต่ยังมีทางยาวไปอีก

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



1
นั่นคือทฤษฎีที่ดีมาก หากอุปกรณ์ได้รับการอย่างใดอย่างหนึ่งระบบคือขนมปัง หากคนขับล่มระหว่างการดำเนินการไม่ต้องรีสตาร์ทไดรเวอร์จะทำให้ระบบกลับสู่สถานะใช้งานได้ หากคุณต้องการประสิทธิภาพใด ๆ ไดรเวอร์จะต้องมีหลายเธรด ... และข้อดีของ "one scheduler" จะหายไปอย่างสมบูรณ์ ต้องการประสิทธิภาพคุณต้องหลีกเลี่ยงการคัดลอกหน่วยความจำ (และค่าใช้จ่ายมากขึ้น) และเปลี่ยนบริบท ... และ "โมดุล" จะหายไป ค้นหาขนาดของ microkernels บางส่วนแล้วคุณจะเห็นขนาดและความซับซ้อนที่เทียบเคียงได้กับเมล็ดขนาดใหญ่ที่มีไดรเวอร์รวมอยู่ด้วย
vonbrand

15

microkernel จำกัด เวลาที่ระบบอยู่ในโหมดเคอร์เนลเมื่อเทียบกับ userspace เพื่อให้ได้ค่าต่ำสุดที่แน่นอน

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

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


5

ขอขอบคุณที่โพสต์ลิงก์ไปยังเนื้อหาการอ่าน! จุดของ Brent W ในเชิงนามธรรมคือเสียงและในระดับหนึ่งผมเห็นอกเห็นใจกับความกังวลของ Christoph L เกี่ยวกับความซับซ้อนเกินกว่าในกลไกการซิงโครไนซ์เคอร์เนล อย่างไรก็ตามฉันคิดว่ากระดาษหลังอาจมองเห็นลูปของเหตุการณ์ที่เป็นข้อความ ตั้งแต่เหตุการณ์ลูปไม่ได้มีหน่วยความจำร่วมกับแต่ละอื่น ๆ ล็อคไม่จำเป็นและตั้งแต่ (IMO) พวกเขายืมตัวให้รูปแบบการเข้ารหัสเปิดเผยขั้นตอนวิธีการที่สอดคล้องกันสามารถอย่างชัดเจนที่กำหนดไว้ (จุดแลมบ์ดาแคลคูลัส ... ) - ฉันมักจะเขียนรหัสแอพ แต่ Q นี้เป็นประสบการณ์การเรียนรู้ที่สนุกสนาน
android anthropic เมื่อ

1

ลองดูที่สถาปัตยกรรม x86 - เคอร์เนลเสาหินจะใช้วงแหวน 0 และ 3 เท่านั้นเสียจริงๆ แต่ยิ่งไปกว่านั้นมันอาจเร็วกว่าเดิมเนื่องจากการสลับบริบทน้อย

แหวน x86


โครงสร้างแหวน x86 นั้นกำลังรอการปรับเปลี่ยน ไม่มีการใช้งานจริง (ยกเว้นเครื่องเสมือน แต่มีการใช้เพิ่มมากขึ้น ... )
vonbrand

1
  1. เคอร์เนลเสาหินมีอายุมากกว่า microkernelมาก โดยจะใช้ในระบบปฏิบัติการยูนิกซ์ในขณะที่ความคิดของ microkernel ที่ปรากฏในตอนท้ายของปี 1980

  2. ตัวอย่างของระบบปฏิบัติการที่มีเมล็ดขนาดใหญ่คือUNIX, LINUXในขณะที่ระบบปฏิบัติการที่มี microkernel คือQNX, L4, HURDและMachเริ่มต้น(ไม่ใช่ MacOS X) ซึ่งต่อมาถูกแปลงเป็นไฮบริดเคอร์เนล แม้แต่MINIXก็ไม่ใช่ microkernel ที่แท้จริงเพราะไดรเวอร์อุปกรณ์นั้นได้รับการคอมไพล์เป็นส่วนหนึ่งของเคอร์เนล

  3. เมล็ดขนาดใหญ่จะเร็วกว่าเม็ดเล็กมาก Mach microkernel ตัวแรกช้ากว่าเมล็ดข้าวเสาหิน 50% รุ่นที่ใหม่กว่าอย่าง L4 นั้นช้ากว่า kernel monolithicเพียง2% หรือ 4%เท่านั้น

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

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

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

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

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


ใน (4) คุณกำลังเปรียบเทียบแอปเปิ้ลกับแตงโม microkernel นั้น (โดยการออกแบบ) มีเพียงฟังก์ชันการทำงานที่น้อยที่สุดเคอร์เนลเสาหินมีจำนวนมากขึ้น (6) เป็นทฤษฎีที่ดีขึ้นอยู่กับความสามารถของชิ้นงานที่ได้รับการพัฒนาและกลไก IPC ที่แท้จริงนั้นรั่วไหลออกมาได้อย่างไร(สำหรับประสิทธิภาพมันไม่ได้เป็น หมายเหตุ (7) หมายถึงการจัดการที่ซับซ้อนมากของ "คิวข้อความ" ดังนั้นส่วนใหญ่จะปฏิเสธข้อดีของพวกเขา สำหรับ (8), ในกรณีของลีนุกซ์, มันเป็นไปได้ที่จะคอมไพล์โมดูลที่เป็นอิสระจากเคอร์เนล. สิ่งนี้ทำเพื่อการพัฒนาไดรเวอร์เป็นประจำ
vonbrand

0

Windows NT (เคอร์เนลพื้นฐานกับระบบ Windows ปัจจุบัน) เริ่มต้นจากการออกแบบไมโครวานิลลาค่อนข้าง เนื่องจากปัญหาด้านประสิทธิภาพรหัส "userland" ที่ถูกย้ายเข้าไปใน "micokernel" มากขึ้นเรื่อย ๆ ... วันนี้โครงสร้าง microkernel เป็นแบบดั้งเดิม


-1

กรณีคือเคอร์เนล linux เป็นลูกผสมของเสาหินและ microkernel ในการนำไปใช้แบบ monolithic ล้วนๆไม่มีโมดูลที่โหลดขณะใช้งาน


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

3
สำหรับการออกแบบไฮบริดมันจะมีความสำคัญมากขึ้นในกรณีที่ไดรเวอร์บางตัว (สำหรับ USB, สแกนเนอร์, เครื่องพิมพ์และกราฟิก) ถูกนำไปใช้ใน userspace แทนที่จะเป็นเคอร์เนล ความแตกต่างไม่ชัดเจนและ Linux สามารถระบุเป็นเคอร์เนลแบบไฮบริดได้เนื่องจากมี libusb, sane, cups และ mesa - ไม่ใช่เพราะมี insmod และ rmmod
Maciej Piechotka

-1

คำศัพท์monolithic kernelและmicrokernelไม่สามารถเปรียบเทียบได้อย่างจริงจังเนื่องจากอธิบายถึงแง่มุมต่าง ๆ ของการออกแบบเคอร์เนล (โครงสร้างเทียบกับขนาด)

เคอร์เนลเสาหินทั่วไปคือเคอร์เนล SunOS-4.x และ Linux ยังคงคล้ายกันเนื่องจากคุณกำหนดค่าเนื้อหาของเคอร์เนลพื้นฐานด้วยตนเอง

เคอร์เนล Solaris (เริ่มต้นที่ 2.1 ในปี 1992) ไม่สามารถเรียกว่าเสาหินได้อีกต่อไปเนื่องจากไดรเวอร์ทั้งหมดจะถูกโหลดโดยอัตโนมัติตามความต้องการและโหลดเพียงส่วนเล็ก ๆ ระหว่างการบู๊ตครั้งแรก

SunOS-4.x และ Solaris (SunOS-5.x) และ Linux เป็นการนำไปปฏิบัติตามบริบททั้งหมด รหัสทั้งหมดของพวกเขาทำงานในบริบท MMU เดียว

Mac OS X ขึ้นอยู่กับ Mach และทำงานเป็นการใช้งานแบบหลายบริบทโดยมีหลายกระบวนการที่คั่นด้วยบริบท MMU ในแนวคิดนี้ไดรเวอร์อยู่ในกระบวนการที่แยกต่างหากและบริบท MMU ที่แยกต่างหาก

หลายคนเรียก Mac OS X ว่า "ระบบ microkernel" แต่อาจเป็นได้ว่าเคอร์เนลพื้นฐานไม่เล็กกว่าเคอร์เนลพื้นฐานจาก Solaris

ดังนั้นดูเหมือนว่ามันจะดีกว่าที่จะพูดคุยเกี่ยวกับsingle context kernelsmulti context kernels


1
MacOS ใช้ BSD (เป็น monolitic เป็นหลัก) shim บน microkernel ไม่มีการแยกออกเป็นกระบวนการที่แยกต่างหากเลยไม่ใช่การออกแบบ microkernel จริง
vonbrand

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