Làm thế nào để nhân Linux so với kiến ​​trúc vi nhân?


38

Tôi đã đọc một lần rằng một lợi thế của kiến ​​trúc vi hạt là bạn có thể dừng / khởi động các dịch vụ thiết yếu như mạng và hệ thống tệp mà không cần phải khởi động lại toàn bộ hệ thống. Nhưng xem xét rằng hạt nhân Linux ngày nay (có phải luôn luôn như vậy không?) Cung cấp tùy chọn sử dụng các mô-đun để đạt được hiệu quả tương tự, những lợi thế (còn lại) của hạt nhân là gì?



1
Bạn có thể đọc tranh luận về hạt nhân MicroKernel và Monolithic. oreilly.com/openbook/opensource/book/appa.html Trong bài viết này, Andrew Tanenbaum hỗ trợ Microkernel và Linus Torvalds hỗ trợ kernel Monolithic.
Bhuwan

Câu trả lời:


35

Microkernels yêu cầu ít mã hơn để được chạy trong chế độ trong cùng, đáng tin cậy nhất so với hạt nhân nguyên khối . Điều này có nhiều khía cạnh, chẳng hạn như:

  • Microkernels cho phép các tính năng không cơ bản (như trình điều khiển cho phần cứng không được kết nối hoặc không sử dụng) được tải và tải theo ý muốn. Điều này chủ yếu có thể đạt được trên Linux, thông qua các mô-đun.
  • Microkernels mạnh hơn: nếu một thành phần không phải nhân bị hỏng, nó sẽ không mang theo toàn bộ hệ thống. Một hệ thống tập tin lỗi hoặc trình điều khiển thiết bị có thể làm sập hệ thống Linux. Linux không có cách nào để giảm thiểu những vấn đề này ngoài thực hành mã hóa và thử nghiệm.
  • Microkernels có một cơ sở tính toán đáng tin cậy nhỏ hơn . Vì vậy, ngay cả trình điều khiển thiết bị độc hại hoặc hệ thống tệp cũng không thể kiểm soát toàn bộ hệ thống (ví dụ: trình điều khiển có nguồn gốc đáng ngờ cho tiện ích USB mới nhất của bạn sẽ không thể đọc được đĩa cứng của bạn).
  • Một hậu quả của điểm trước đó là người dùng thông thường có thể tải các thành phần của chính họ sẽ là các thành phần hạt nhân trong một hạt nhân nguyên khối.

GUI GUI được cung cấp qua cửa sổ X, là mã vùng người dùng (ngoại trừ (một phần) trình điều khiển thiết bị video). Nhiều thông báo hiện đại cho phép người dùng thông thường tải trình điều khiển hệ thống tệp thông qua FUSE . Một số bộ lọc gói mạng Linux có thể được thực hiện trong vùng người dùng. Tuy nhiên, trình điều khiển thiết bị, bộ lập lịch, trình quản lý bộ nhớ và hầu hết các giao thức mạng vẫn chỉ là kernel.

Một tác phẩm kinh điển (nếu có ngày tháng) đọc về Linux và microkernels là cuộc tranh luận TanenbaumTHER Torvalds . Hai mươi năm sau, người ta có thể nói rằng Linux đang rất chậm tiến tới cấu trúc vi hạt nhân (các mô-đun có thể tải xuất hiện sớm, FUSE gần đây hơn), nhưng vẫn còn một chặng đường dài.

Một điều khác đã thay đổi là sự liên quan của ảo hóa ngày càng tăng trên máy tính để bàn và máy tính nhúng cao cấp: đối với một số mục đích, sự khác biệt có liên quan không phải là giữa kernel và userland mà là giữa bộ ảo hóa và hệ điều hành khách.



1
Đó là tất cả lý thuyết rất hay. Nếu một thiết bị được nêm bằng cách nào đó, hệ thống sẽ được nướng. Nếu trình điều khiển gặp sự cố giữa chừng mặc dù hoạt động, không khởi động lại trình điều khiển sẽ khôi phục hệ thống về trạng thái chức năng. Nếu bạn muốn có bất kỳ hiệu suất nào, các trình điều khiển phải được đa luồng ... và lợi thế của "một trình lập lịch biểu" hoàn toàn bị mất. Muốn có hiệu suất, bạn phải tránh (ngày càng tốn kém) các bản sao bộ nhớ và chuyển đổi ngữ cảnh ... và "tính mô đun" bị mất. Tra cứu kích thước của một số microkernels và bạn sẽ thấy chúng có kích thước và độ phức tạp tương đương với các hạt nhân nguyên khối với các trình điều khiển đi kèm .
vonbrand

15

Một hạt nhân giới hạn thời gian hệ thống ở chế độ kernel, trái ngược với không gian người dùng, ở mức tối thiểu tuyệt đối có thể.

Nếu sự cố xảy ra trong chế độ kernel, toàn bộ kernel sẽ bị hỏng và điều đó có nghĩa là toàn bộ hệ thống sẽ bị hỏng. Nếu sự cố xảy ra trong chế độ người dùng, chỉ cần quá trình đó đi xuống. Linux rất mạnh về vấn đề này, nhưng vẫn có thể cho bất kỳ hệ thống con kernel nào ghi vào bộ nhớ của bất kỳ hệ thống con kernel nào khác, dù cố ý hay vô tình.

Khái niệm microkernel đặt rất nhiều thứ theo chế độ kernel truyền thống, chẳng hạn như trình điều khiển mạng và thiết bị, trong không gian người dùng. Vì hạt nhân không thực sự chịu trách nhiệm rất nhiều, điều đó cũng có nghĩa là nó có thể đơn giản và đáng tin cậy hơn. Hãy nghĩ về cách thức giao thức IP, bằng cách đơn giản và ngu ngốc, thực sự dẫn đến các mạng mạnh mẽ bằng cách đẩy sự phức tạp ra các cạnh và để lại lõi nạc và có ý nghĩa.


5

Cảm ơn đã đăng các liên kết để đọc tài liệu! Điểm trừu tượng của Brent W là âm thanh, và ở một mức độ nào đó, tôi đồng cảm với mối quan tâm của Christoph L về sự phức tạp quá mức trong các cơ chế đồng bộ hóa vi hạt nhân; tuy nhiên, tôi nghĩ rằng bài báo sau có thể đang xem xét các vòng lặp sự kiện dựa trên thông báo. Vì các vòng lặp sự kiện không chia sẻ bộ nhớ với nhau, nên khóa không cần thiết và vì (IMO) chúng cho vay theo kiểu mã hóa khai báo, nên có thể xác định thuật toán nhất quán (điểm của phép tính lambda ...) - Tôi thường viết mã ứng dụng, nhưng Q này đã là một trải nghiệm học tập thú vị
anthropic android

1

Chỉ cần nhìn vào kiến ​​trúc x86 - hạt nhân nguyên khối chỉ sử dụng các vòng 0 và 3. Thật lãng phí. Nhưng hơn một lần nữa nó có thể nhanh hơn, vì chuyển đổi ngữ cảnh ít hơn.

nhẫn x86


Cấu trúc vòng x86 chỉ là quá mức. Không sử dụng thực tế (ngoại trừ máy ảo, nhưng điều đó ngày càng được sử dụng ...)
vonbrand

1
  1. Hạt nhân nguyên khối cũ hơn nhiều so với hạt nhân vi mô . Nó được sử dụng trong Unix trong khi ý tưởng về hạt nhân xuất hiện vào cuối những năm 1980 .

  2. Ví dụ về các HĐH có các hạt nhân nguyên khối là UNIX, LINUX trong khi các HĐH có vi nhân là QNX, L4, HURD và ban đầu Mach (không phải MacOS X) mà sau đó được chuyển đổi thành kernel lai. Ngay cả MINIX không phải là một vi nhân thuần túy vì trình điều khiển thiết bị của nó được biên dịch như một phần của hạt nhân.

  3. Hạt nhân nguyên khối nhanh hơn hạt nhân siêu nhỏ . Hạt nhân Mach đầu tiên chậm hơn 50% so với hạt nhân nguyên khối. Các phiên bản sau này như L4 chỉ chậm hơn 2% hoặc 4% so với hạt nhân nguyên khối .

  4. Các hạt nhân nguyên khối thường cồng kềnh trong khi các hạt nhân tinh khiết phải có kích thước nhỏ , thậm chí vừa với bộ đệm cấp đầu tiên của bộ xử lý (hạt nhân thế hệ thứ nhất).

  5. Trong các hạt nhân nguyên khối, trình điều khiển thiết bị cư trú trong không gian kernel trong khi trình điều khiển thiết bị vi nhân nằm trong không gian người dùng .

  6. Do trình điều khiển thiết bị nằm trong không gian kernel, nó làm cho kernel nguyên khối kém an toàn hơn so với microkernel (Lỗi trong trình điều khiển có thể dẫn đến sự cố). Microkernels an toàn hơn hạt nhân nguyên khối, do đó chúng được sử dụng trong nhiều thiết bị quân sự.

  7. Hạt nhân nguyên khối sử dụng tín hiệu và ổ cắm để đảm bảo IPC trong khi phương pháp vi nhân sử dụng hàng đợi tin nhắn . Thế hệ thứ nhất của hạt nhân vi mô IPC được triển khai kém nên chúng bị chậm trên các công tắc ngữ cảnh.

  8. Thêm các tính năng mới vào một hệ thống nguyên khối có nghĩa là biên dịch lại toàn bộ kernel trong khi bạn có thể thêm tính năng mới hoặc các bản vá mà không cần biên dịch lại


Trong (4), bạn đang so sánh táo và dưa hấu. Bản thân hạt nhân (theo thiết kế) chỉ chứa chức năng tối thiểu, hạt nhân nguyên khối chứa nhiều hơn nữa. (6) là một lý thuyết hay, nó phụ thuộc vào mức độ phát triển của các mảnh và cơ chế IPC thực sự bị rò rỉ như thế nào (đối với hiệu suất, nó không thể là "thông điệp truyền qua" thực sự). Lưu ý (7) có nghĩa là việc xử lý "hàng đợi tin nhắn" rất phức tạp, do đó chủ yếu phủ nhận những lợi thế của chúng. Đối với (8), trong trường hợp ví dụ Linux, chắc chắn có thể biên dịch một mô-đun độc lập với kernel. Điều này thường được thực hiện để phát triển trình điều khiển, trên thực tế.
vonbrand

0

Windows NT (hạt nhân cơ bản cho các hệ thống Windows hiện tại) khởi đầu là một thiết kế vi hạt khá vanilla. Do các vấn đề về hiệu năng, ngày càng nhiều mã "người dùng" di chuyển vào "micokernel" ... ngày nay, cấu trúc vi hạt của nó là dấu tích.


-1

Trường hợp là hạt nhân linux là sự kết hợp giữa nguyên khối và vi hạt nhân. Trong một triển khai nguyên khối thuần túy, không có mô-đun tải khi chạy.


9
không phải vậy thực tế là các mô-đun được tải động không thay đổi thực tế, chúng được chạy với các đặc quyền hạt nhân đầy đủ và là một phần của hạt nhân nguyên khối.
vartec

3
Đối với thiết kế lai, điều quan trọng hơn là một số trình điều khiển (đối với USB, Máy quét, Máy in và đồ họa) được triển khai trong không gian người dùng thay vì kernel. Sự khác biệt là không rõ ràng và Linux có thể được coi là hạt nhân lai vì có libusb, sane, cup và mesa - không phải vì có insmod và rmmod.
Maciej Piechotka

-1

Các thuật ngữ monolithic kernelmicrokernelkhông thể được so sánh nghiêm túc vì chúng mô tả các khía cạnh khác nhau của thiết kế kernel (cấu trúc so với kích thước).

Một hạt nhân nguyên khối điển hình là hạt nhân SunOS-4.x và Linux vẫn tương tự, khi bạn cấu hình thủ công nội dung của hạt nhân cơ bản.

Hạt nhân Solaris (bắt đầu từ 2.1 vào năm 1992) không thể được gọi là nguyên khối nữa vì tất cả các trình điều khiển được tải tự động theo yêu cầu và chỉ một phần nhỏ được tải trong quá trình khởi động ban đầu.

SunOS-4.x và Solaris (SunOS-5.x) và Linux đều là các triển khai bối cảnh đơn lẻ. Toàn bộ mã của họ chạy trong một bối cảnh MMU duy nhất.

Mac OS X dựa trên Mach và chạy như một triển khai đa ngữ cảnh với một số quy trình được phân tách bằng bối cảnh MMU. Trong khái niệm này, trình điều khiển nằm trong các quy trình riêng biệt và bối cảnh MMU riêng biệt.

Nhiều người gọi Mac OS X là "hệ thống vi nhân", nhưng có thể là hạt nhân cơ bản không nhỏ hơn hạt nhân cơ bản từ Solaris.

Vì vậy, có vẻ như nó sẽ là tốt hơn để nói về single context kernelsvs multi context kernels.


1
MacOS chạy một BSD (về cơ bản là đơn sắc) trên một hạt nhân. Không có sự phân tách thành các quy trình riêng biệt ở đó, không phải là một thiết kế vi hạt thực sự .
vonbrand

1
Vì vậy, bạn thừa nhận một thiết kế sử dụng ít nhất hai quá trình được gọi là kernel. Thuật ngữ microkernelnày là sai dù sao vì nó thường được sử dụng cho một cái gì đó nên được gọi multi context kernel.
schily
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.