ทำไม Linux จึงเรียกเคอร์เนลแบบเสาหิน?


208

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

หาก Linux สามารถรองรับโมดูลได้ทำไมไม่แบ่งระบบย่อยทั้งหมดออกเป็นโมดูลและโหลดเมื่อจำเป็น? ในกรณีนั้นเคอร์เนลไม่จำเป็นต้องโหลดโมดูลทั้งหมดในตอนแรกและสามารถรักษาดัชนีของฟังก์ชั่นในโมดูลและโหลดได้เมื่อจำเป็น

คำตอบ:


290

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

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

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

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

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

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

ฉันใช้ Linux (เสาหิน) ในการผลิต แต่ส่วนใหญ่ของการเรียนรู้ของฉันแฮ็กหรือ tinkering กับการพัฒนาเคอร์เนลจะเข้าสู่ microkernel เฉพาะHelenOS

แก้ไข

หากคุณได้คำตอบที่ยืดยาวของฉันคุณอาจจะสนุกกับการอ่านการอภิปราย ' Torvalds-Tanenbaum ที่ยอดเยี่ยมเกี่ยวกับการออกแบบเคอร์เนล ' แม้จะสนุกกว่าที่จะอ่านในปี 2013 มากกว่า 20 ปีหลังจากที่มันปรากฏขึ้น ส่วนที่สนุกที่สุดคือลายเซ็นของ Linus ในหนึ่งในข้อความสุดท้าย:

Linus "my first, and hopefully last flamefest" Torvalds

เห็นได้ชัดว่านั่นไม่เป็นความจริงเลยนอกจากคำทำนายของ Tanenbaum ว่า x86 จะล้าสมัยในไม่ช้า

หมายเหตุ:

เมื่อฉันพูดว่า "Minix" ฉันไม่ได้หมายถึง Minix 3 นอกจากนี้เมื่อฉันพูดถึง The HURD ฉันกำลังอ้างอิง (ส่วนใหญ่) Mach microkernel Mach ฉันไม่ได้ตั้งใจจะดูถูกงานล่าสุดของผู้อื่น


5
Linus Torvalds ที่น่าสนใจได้รับอิทธิพลอย่างมากจาก MINIX ของ Andew Tanenbaum เมื่อเขาสร้าง Linux อย่างไรก็ตาม MINIX ขึ้นอยู่กับการออกแบบเคอร์เนลขนาดเล็กในขณะที่ Linux ใช้เคอร์เนลเสาหิน
Martin Liversage

2
@ มาร์ติ Liversage: ผิดหวังมากกว่าอิทธิพล :) ฉันแก้ไขคำตอบของฉันเพื่อสะท้อนให้เห็นว่า
Tim Post

25
@DigitalRoss: คุณควรเห็นกล่องจดหมายของฉันหลังจากตอบคำถามนี้ Linus เชื่องเมื่อเทียบกับผู้ที่ชื่นชอบ Minix และ Mach
ทิมโพสต์


3
@p_l ฉันคิดว่ามันใกล้เคียงกับเวลาที่เราต้องพูดคุยเกี่ยวกับความแตกต่างระหว่างไมโครเสาหินและไฮบริด นั่นอาจจะเป็นคำถามที่ดีสวย :)
ทิมโพสต์

15

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

ในระบบปฏิบัติการเคอร์เนลที่ไม่ใช่เสาหินเช่น Windows ส่วนใหญ่ของ OS จะทำงานในโหมดผู้ใช้

ไม่ว่าในกรณีใด OS สามารถเป็นแบบแยกส่วนได้สูง


9
Windows เป็นเคอร์เนลเสาหินแน่นอนที่สุด
Adam Rosenfield

7
@ อดัม: ฉันไม่เห็นด้วย Windows 16 บิตแบบเก่าเป็นเคอร์เนลเสาหินเช่นเดียวกับ Windows 95 และที่คล้ายกัน แต่ Windows รุ่นที่ใช้ NT รวมถึงเซิร์ฟเวอร์ทุกรุ่นรวมถึง Vista และ 7 นั้นเป็น microkernel อย่างชัดเจนหรือไฮบริดสลีขึ้นอยู่กับนิยามของ "microkernel" ที่คุณใช้
CesarGon

8
เพียงเพราะไดรเวอร์เครื่องพิมพ์ไม่ทำงานใน ring0 ไม่ได้ทำให้มันเป็น microkernel :)
คาเฟ่

7
@caf: ผมขอแนะนำให้คุณดูที่en.wikipedia.org/wiki/Windows_NT_kernelและen.wikipedia.org/wiki/Comparison_of_operating_system_kernels คุณจะเห็นว่า Windows NT และผู้สืบทอดรวมถึง Vista, 7 และเซิร์ฟเวอร์ได้รับการอธิบายว่า "เคอร์เนลลูกผสม" ระบบย่อยขนาดใหญ่สองระบบปฏิบัติการทำงานอย่างเต็มที่ในโหมดผู้ใช้ไม่ใช่แค่ไดรเวอร์เครื่องพิมพ์ :-)
CesarGon

7
ความคิดเห็นของฉันค่อนข้างคล้ายลิ้น - การกำหนด "แบบผสม" ดูเหมือนจะไม่มีข้อมูลเลย
caf

10

; tl-dr - ไม่ลีนุกซ์เป็นหินใหญ่มาก

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

  1. การกำหนด
  2. การจัดการหน่วยความจำ
  3. การสื่อสารระหว่างกระบวนการ

ไม่มีมีไดรเวอร์ฮาร์ดแวร์ , โปรโตคอล , ระบบไฟล์ , ระงับ / ประวัติ , การจัดการนาฬิกาฯลฯ ในเคอร์เนลหลัก สิ่งเหล่านี้เหมือนกับงานของผู้ใช้ (แม้ว่าพวกเขาอาจมีสิทธิ์แตกต่างกันผ่าน MMU / ตัวกำหนดตารางเวลา)


คำทำนายของ Tanenbaum

  1. Microkernels เป็นอนาคต
  2. x86 จะตายไปและสถาปัตยกรรม RISC จะครองตลาด
  3. (5 ปีจากนั้น) ทุกคนจะใช้ระบบปฏิบัติการ GNU ฟรี

โปรแกรมเมอร์ PC และเซิร์ฟเวอร์อาจหัวเราะ แต่สองและสามนั้นเป็นเรื่องจริงสำหรับโทรศัพท์มือถือส่วนใหญ่ที่มีอยู่ Tanenbaum น่าจะเหมาะกับทุกบัญชีหาก BlackBerry QNX ประสบความสำเร็จ

นอกจากนี้L1-hypervisorsจำนวนมากยังมีไมโครเคอร์เนลอยู่ด้านล่าง เนื่องจาก Hyper-visor มักจะไม่ได้ทำอะไรมากนอกเหนือจากการสลับบริบท

เห็นได้ชัดว่าสามทำนายความสำเร็จของ Linux ;-)


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

การพัฒนาที่สำคัญคือการใช้โปรแกรมล็อคฟรีเพื่อหลีกเลี่ยงความขัดแย้งในเคอร์เนลเสาหิน วิธีนี้จะช่วยหลีกเลี่ยงการล็อคในเคอร์เนลเสาหินในขณะที่ยังลดค่าใช้จ่าย IPC เมื่อเร็ว ๆ นี้ซีพียูทั้งหมดได้ขยาย ISA ของพวกเขาเพื่อรวม primitives ที่ดีกว่าสำหรับอัลกอริธึมที่ไม่ล็อค ดังนั้น Linux อาจจะยังคงเป็นเคอร์เนลเสาหินอยู่พักหนึ่ง


1
ใช่ฉันรู้ว่า Tanenbaum หมายถึง Hurd แต่GNU เปลี่ยนมาใช้ Linuxดังนั้นการพูดจึงสนุก
เสียงอึกทึก

เหตุใดจึงไม่มีการใช้ x86 สำหรับอุปกรณ์มือถือ อะไรทำให้สถาปัตยกรรมอื่น ๆ ได้เปรียบ?
อับดุล


ใช่สิ่งเหล่านั้นสำคัญ เป็นการยากที่จะสร้าง x86 SOC (ระบบบนชิป) ไม่มีรหัส HDL มาตรฐานเพื่อสร้าง x86 ที่ผู้ขาย SOC (Broadcom, Freescale ฯลฯ ) สามารถซื้อได้
เสียงอึกทึก

9

จากWikipedia :

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

รุ่นล่าสุดของ Windows บนมืออื่น ๆ ที่ใช้เคอร์เนลไฮบริด

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


7
ถ้าฉันทำอะไรในพื้นที่เคอร์เนลฉันต้องจำไว้ว่าให้ใช้ "hybric kerkel" ที่ไหนซักแห่ง SCNR ;-)
Jürgen A. Erhard

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

5

'เสาหิน' ในบริบทนี้ไม่ได้อ้างถึงมีการปฏิบัติการขนาดใหญ่เพียงครั้งเดียวและอย่างที่คุณพูด Linux มีการสนับสนุนการโหลดแบบไดนามิกของเคอร์เนลโมดูลที่รันไทม์ เมื่อพูดถึงเมล็ด 'เสาหิน' หมายความว่าระบบปฏิบัติการทั้งหมดทำงานในโหมด 'สิทธิพิเศษ' หรือ 'ผู้ควบคุม' เมื่อเทียบกับระบบปฏิบัติการประเภทอื่นที่ใช้เคอร์เนลชนิดเช่น 'microkernel' ซึ่งมีเพียงเล็กน้อยเท่านั้น ชุดของฟังก์ชั่นทำงานในโหมดพิเศษและระบบปฏิบัติการส่วนใหญ่ทำงานในพื้นที่ผู้ใช้

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


ตรวจสอบแหล่งที่มาของคุณ wikipage ไม่ได้ทำการศึกษา www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/…
พระสงฆ์

2

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

ฉันคิดว่าโพสต์นี้จะช่วยให้คุณเข้าใจแนวคิดได้มากขึ้น

http://learnlinuxconcepts.blogspot.in/2014/03/what-are-monolithic-and-micro-kernels.html


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