Tại sao Linux được gọi là hạt nhân nguyên khối?


208

Tôi đọc rằng Linux là một hạt nhân nguyên khối. Liệu hạt nhân nguyên khối có nghĩa là biên dịch và liên kết mã hạt nhân hoàn chỉnh thành một tệp thực thi?

Nếu Linux có thể hỗ trợ các mô-đun, tại sao không phá vỡ tất cả các hệ thống con thành các mô-đun và tải chúng khi cần thiết? Trong trường hợp đó, hạt nhân ban đầu không phải tải tất cả các mô-đun và có thể duy trì một chỉ mục các chức năng trong mô-đun và tải chúng khi cần thiết.

Câu trả lời:


290

Hạt nhân nguyên khối là một hạt nhân trong đó tất cả các dịch vụ (hệ thống tệp, VFS, trình điều khiển thiết bị, v.v.) cũng như chức năng cốt lõi (lập lịch, phân bổ bộ nhớ, v.v.) là một nhóm đan chặt chẽ chia sẻ cùng một không gian. Điều này trực tiếp phản đối một hạt nhân .

Một hạt nhân thích một cách tiếp cận trong đó chức năng cốt lõi được tách biệt khỏi các dịch vụ hệ thống và trình điều khiển thiết bị (về cơ bản chỉ là các dịch vụ hệ thống). Ví dụ, VFS (hệ thống tệp ảo) và hệ thống tệp thiết bị khối (tức là minixfs) là các quy trình riêng biệt chạy bên ngoài không gian của kernel, sử dụng IPC để giao tiếp với kernel, các dịch vụ khác và quy trình người dùng. Nói tóm lại, nếu đó là một mô-đun trong Linux, thì đó là một dịch vụ trong một hạt nhân, cho thấy một quy trình bị cô lập.

Đừng nhầm lẫn thuật ngữ mô-đun hạt nhân là bất cứ điều gì ngoại trừ nguyên khối. Một số hạt nhân nguyên khối có thể được biên dịch thành mô-đun (ví dụ Linux), điều quan trọng là mô-đun được chèn vào và chạy từ cùng một không gian xử lý chức năng cốt lõi (không gian nhân).

Ưu điểm của microkernel là bất kỳ dịch vụ thất bại nào cũng có thể dễ dàng khởi động lại, chẳng hạn, không có kernel bị dừng nếu hệ thống tập tin gốc ném bỏ lệnh hủy bỏ. Tuy nhiên, điều này cũng có thể được coi là một bất lợi, bởi vì nó có thể ẩn các lỗi khá nghiêm trọng (hoặc làm cho chúng có vẻ không quá nghiêm trọng, vì vấn đề dường như liên tục tự khắc phục). Đây được coi là một lợi thế lớn trong các tình huống mà bạn chỉ đơn giản là không thể sửa chữa một cách thuận tiện một khi nó đã được triển khai.

Nhược điểm của một hạt nhân là việc nhắn tin IPC không đồng bộ có thể trở nên rất khó gỡ lỗi, đặc biệt là nếu các fibrils được triển khai. Ngoài ra, chỉ cần theo dõi sự cố FS / ghi có nghĩa là kiểm tra quy trình không gian người dùng, dịch vụ thiết bị khối, dịch vụ VFS, dịch vụ hệ thống tệp và (có thể) dịch vụ PCI. Nếu bạn nhận được một khoảng trống trên đó, đã đến lúc xem dịch vụ IPC. Điều này thường dễ dàng hơn trong một hạt nhân nguyên khối. GNU Hurd bị các vấn đề gỡ lỗi này ( tham khảo ). Tôi thậm chí sẽ không đi vào kiểm tra khi xử lý hàng đợi tin nhắn phức tạp. Microkernels không dành cho người yếu tim.

Con đường ngắn nhất để một hạt nhân ổn định, hoạt động là cách tiếp cận nguyên khối. Một trong hai cách tiếp cận có thể cung cấp giao diện POSIX, trong đó thiết kế của kernel trở nên ít được quan tâm đối với ai đó chỉ đơn giản là muốn viết mã để chạy trên bất kỳ thiết kế nào.

Tôi sử dụng Linux (nguyên khối) trong sản xuất. Tuy nhiên, hầu hết việc học, hack hoặc mày mò phát triển nhân của tôi đều đi vào một hạt nhân, cụ thể là HelenOS .

Biên tập

Nếu bạn hiểu được điều này qua câu trả lời dài dòng của tôi, có lẽ bạn sẽ có một chút thú vị khi đọc ' Cuộc tranh luận về Torvalds-Tanenbaum vĩ đại về thiết kế hạt nhân '. Nó thậm chí còn vui hơn khi đọc vào năm 2013, hơn 20 năm sau khi nó xuất hiện. Phần vui nhất là chữ ký của Linus trong một trong những tin nhắn cuối cùng:

Linus "my first, and hopefully last flamefest" Torvalds

Rõ ràng, điều đó đã không trở thành sự thật ngoài dự đoán của Tanenbaum rằng x86 sẽ sớm bị lỗi thời.

Lưu ý:

Khi tôi nói "Minix", tôi không ám chỉ Minix 3. Ngoài ra, khi tôi đề cập đến HURD, tôi đang tham khảo (chủ yếu) hạt nhân Mach. Đó không phải là ý định của tôi để chê bai công việc gần đây của người khác.


5
Điều thú vị là Linus Torvalds chịu ảnh hưởng rất lớn từ MINIX của Andew Tanenbaum khi ông tạo ra Linux. Tuy nhiên, MINIX dựa trên thiết kế nhân vi mô trong khi Linux sử dụng hạt nhân nguyên khối.
Martin Liversage

2
@Martin Liversage: Thất vọng nhiều hơn ảnh hưởng :) Tôi đã chỉnh sửa câu trả lời của mình để phản ánh điều đó.
Tim Post

25
@DigitalRoss: Bạn sẽ thấy hộp thư đến của tôi sau khi trả lời điều này, Linus được thuần hóa so với những người đam mê Minix và Mach.
Tim Post


3
@p_l Tôi nghĩ rằng nó khá gần với thời điểm chúng ta cần nói về sự khác biệt giữa vi mô, nguyên khối và lai. Đó có thể là một câu hỏi khá hay :)
Tim Post

15

Hạt nhân nguyên khối có nghĩa là toàn bộ hệ điều hành chạy ở chế độ kernel (nghĩa là phần cứng được đặc quyền cao). Đó là, không có phần nào của HĐH chạy trong chế độ người dùng (đặc quyền thấp hơn). Chỉ các ứng dụng trên hệ điều hành mới chạy ở chế độ người dùng.

Trong các hệ điều hành hạt nhân không nguyên khối, như Windows, một phần lớn hệ điều hành tự chạy trong chế độ người dùng.

Trong cả hai trường hợp, hệ điều hành có thể được mô-đun cao.


9
Windows chắc chắn là một hạt nhân nguyên khối.
Adam Rosenfield

7
@Adam: Tôi không đồng ý. Windows 16 bit kiểu cũ hạt nhân nguyên khối, cũng như Windows 95 và tương tự. Nhưng các phiên bản Windows dựa trên NT, bao gồm tất cả các phiên bản Máy chủ cộng với Vista và 7, rõ ràng là microkernel hoặc có lẽ là hybrid, tùy thuộc vào định nghĩa của "microkernel" mà bạn sử dụng.
CesarGon

8
Chỉ vì trình điều khiển máy in không chạy trong ring0 không biến nó thành một hạt nhân vi mô :)
caf

7
@caf: Tôi khuyên bạn nên xem en.wikipedia.org/wiki/Windows_NT_kernelen.wikipedia.org/wiki/Comparison_of_operating_system_kernels . Bạn sẽ thấy Windows NT và những người kế nhiệm của họ, bao gồm cả Vista, 7 và Máy chủ, được mô tả là "hạt nhân lai". Hai hệ thống con lớn của HĐH chạy hoàn toàn ở chế độ người dùng, không chỉ là trình điều khiển máy in. :-)
CesarGon

7
Nhận xét của tôi có phần hơi tặc lưỡi - chỉ định "lai" dường như không có thông tin đến mức vô dụng.
phê

10

; tl-dr - Không, Linux luôn nguyên khối.

Các mô-đun Linux có thể có nghĩa là mô-đun trong một số ý nghĩa. Như những người khác đã lưu ý nguyên khối thường đại diện cho một hạt nhân vi mô so với hạt nhân nguyên khối . Một hạt nhân truyền thống chỉ có các tính năng này,

  1. Lập kế hoạch
  2. Quản lý bộ nhớ
  3. Thông tin liên lạc

Không có trình điều khiển phần cứng , ngăn xếp giao thức , hệ thống tập tin , tạm dừng / tiếp tục , quản lý đồng hồ , vv trong kernel chính. Những thứ này giống hệt với bất kỳ tác vụ người dùng nào (mặc dù chúng có thể có các đặc quyền khác nhau thông qua MMU / bộ lập lịch).


Dự đoán của Tanenbaum

  1. Microkernels là tương lai
  2. x86 sẽ chết và kiến ​​trúc RISC sẽ chiếm lĩnh thị trường
  3. (5 năm sau) mọi người sẽ chạy hệ điều hành GNU miễn phí

Các lập trình viên PC và máy chủ có thể cười, nhưng hai và ba chắc chắn đúng với phần lớn điện thoại di động. Tanenbaum sẽ đúng trên tất cả các tài khoản nếu BlackBerry QNX thành công.

Ngoài ra, nhiều L1-hypanneror có một hạt nhân siêu nhỏ bên dưới. Điều này là do siêu thị thường không làm được gì nhiều ngoài chuyển đổi ngữ cảnh .

Rõ ràng ba dự đoán sự thành công của Linux. ;-)


Một lập luận cho microkernels là tất cả các hệ thống con nguyên khối cần phải đồng bộ hóa nhiều giá trị cùng một lúc. Để làm điều này, họ phải sử dụng khóa và sẽ chịu sự điều chỉnh của luật Amdahl khi mở rộng sang các kiến ​​trúc song song. Bộ đếm là microkernels dẫn đến rất nhiều tin nhắn IPC.

Một sự phát triển chính là việc sử dụng lập trình không khóa để tránh sự tranh chấp trong một hạt nhân nguyên khối. Điều này tránh việc khóa trong một hạt nhân nguyên khối đồng thời giảm chi phí IPC. Gần đây, tất cả các CPU đã được mở rộng ISA của chúng để bao gồm các nguyên hàm tốt hơn cho các thuật toán không khóa . Vì vậy, Linux có thể sẽ vẫn là một hạt nhân nguyên khối trong một thời gian.


1
Vâng, tôi biết Tanenbaum có nghĩa là Hurd. Nhưng GNU đã chuyển sang Linux nên từ ngữ này rất buồn cười.
tiếng ồn vô nghĩa

Tại sao thiếu sử dụng x86 cho thiết bị di động? Điều gì làm cho các kiến ​​trúc khác có lợi thế?
Abdul


Vâng, đó là những điều quan trọng. Rất khó để tạo một x86 SOC (hệ thống trên chip). Không có mã HDL tiêu chuẩn để tạo x86 mà nhà cung cấp SOC (Broadcom, Freescale, v.v.) có thể mua.
tiếng ồn vô nghĩa

9

Từ Wikipedia :

Một hạt nhân nguyên khối là một kiến ​​trúc hạt nhân trong đó toàn bộ hệ điều hành đang làm việc trong không gian hạt nhân và một mình làm chế độ giám sát. Khác với các kiến ​​trúc khác, hạt nhân nguyên khối chỉ định nghĩa một giao diện ảo cấp cao trên phần cứng máy tính, với một tập hợp các lệnh gốc hoặc hệ thống để thực hiện tất cả các dịch vụ hệ điều hành như quản lý quy trình, đồng thời và quản lý bộ nhớ và một hoặc nhiều trình điều khiển thiết bị như các mô-đun.

Mặt khác, các phiên bản Windows gần đây sử dụng kernel Hybrid .

Một hạt nhân lai là một kiến ​​trúc hạt nhân dựa trên sự kết hợp các khía cạnh của kiến ​​trúc hạt nhân và nguyên khối được sử dụng trong các hệ điều hành máy tính. Thể loại này gây tranh cãi do sự tương đồng với hạt nhân nguyên khối; thuật ngữ này đã bị một số người coi là tiếp thị đơn giản. Các loại hạt nhân truyền thống là hạt nhân nguyên khối và microkernels (với nanokernels và exokernels được xem là phiên bản cực đoan hơn của microkernels).


7
Nếu tôi từng làm bất cứ điều gì trong không gian kernel, tôi phải nhớ sử dụng "hybric kerkel" ở đâu đó. SCNR ;-)
Jürgen A. Erhard

1
Windows NT luôn là một hệ thống lai. Hạt nhân có thể không chính xác lai, nhưng bạn gặp phải câu hỏi về những gì bạn được coi là một phần của nó (ví dụ
winapi

5

'Monolithic' trong ngữ cảnh này không đề cập đến việc có một tệp thực thi lớn duy nhất và như bạn nói, có Linux hỗ trợ tải động các mô-đun hạt nhân khi chạy. Khi nói về hạt nhân, 'nguyên khối' có nghĩa là toàn bộ hệ điều hành chạy ở chế độ 'đặc quyền' hoặc 'giám sát viên', trái ngược với các loại hệ điều hành khác sử dụng một loại hạt nhân như 'vi hạt nhân', trong đó chỉ có tối thiểu bộ chức năng chạy ở chế độ đặc quyền và hầu hết hệ điều hành chạy trong không gian người dùng.

Những người đề xuất microkernels nói rằng điều này tốt hơn bởi vì mã nhỏ hơn có nghĩa là ít lỗi hơn và lỗi chạy trong chế độ giám sát có thể gây ra nhiều vấn đề lớn hơn so với mã không gian người dùng (chẳng hạn như có nhiều lỗ hổng bảo mật hoặc toàn bộ sự cố hệ thống ở dạng 'hoảng loạn hạt nhân'). Một số microkernels đủ tối thiểu để chúng có thể được 'xác minh chính thức', điều đó có nghĩa là bạn có thể chứng minh một cách toán học rằng hạt nhân là 'chính xác' theo một đặc điểm kỹ thuật. L4 là một ví dụ tốt về điều này.


Kiểm tra nguồn của bạn. Các wiki được chú ý. www2.cs.uh.edu/~rzheng/course/COSC6397sp2008/...
monksy

2

Hạt nhân nguyên khối là một quá trình lớn duy nhất chạy hoàn toàn trong một không gian địa chỉ. Nó là một tệp nhị phân tĩnh duy nhất. Tất cả các dịch vụ kernel tồn tại và thực thi trong không gian địa chỉ kernel. Nhân có thể gọi các hàm trực tiếp. Các ví dụ về hệ điều hành dựa trên nhân nguyên khối là Linux, Unix.

Tôi nghĩ rằng bài đăng này sẽ giúp bạn nhiều hơn để hiểu khái niệm.

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


Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
Scott
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.