Tại sao hệ điều hành và kernel được xử lý riêng trong Linux? [đóng cửa]


9

Khi nói đến bất kỳ hệ điều hành Linux nào, bao gồm Ubuntu, mọi người có xu hướng phân biệt các thuật ngữ kernelhệ điều hành . Điều này đúng với Windows và gia đình OS X, nhưng tại sao lại phổ biến rộng rãi trong cộng đồng Linux? Có cách nào để cập nhật kernel OS mà không cần cập nhật OS không? Hoặc ngược lại? Nếu vậy làm thế nào có thể hữu ích?


3
Đơn giản: tự do. Tự do tạo phiên bản của riêng bạn cho bất cứ điều gì bạn cảm thấy cần. Hạt nhân? Vỏ? Máy tính để bàn. Cứ liều thử đi.
Rinzwind

6
Vì họ riêng biệt? Cùng một lý do tại sao trình quản lý cửa sổ được xử lý tách biệt với máy chủ X (vì chúng tách biệt) và tại sao trình bao được xử lý tách biệt với trình giả lập thiết bị đầu cuối (vì chúng cũng tách biệt). Bây giờ, nếu bạn hỏi tại sao chúng được thiết kế theo cách đó ...
user253751

Ubuntu bây giờ cũng chạy trên kernel Windows 10 cho thấy đó là một sự tách biệt thực sự. Tất nhiên, Windows không đi kèm với máy chủ X làm phức tạp mọi thứ, nhưng đó là điều được mong đợi khi thiếu các bộ phận.
MSalters

@MSalters Trình quản lý cửa sổ trong Windows hơi phức tạp, vâng; tuy nhiên, nếu ai đó thực sự muốn chạy X trên Windows, có rất nhiều cách để xử lý việc đó. Người dễ nhất bên ngoài có lẽ sẽ là một "trình giả lập" máy chủ ở trên trình quản lý cửa sổ hiện có, mặc dù tôi không biết bản đồ đó có thể tốt đến mức nào (lần cuối cùng tôi nhìn thấy X bên trong, tôi không hy vọng lắm). Tôi sẽ không nín thở - nó không có vẻ gì với tôi như thể nhiều người quan tâm đến việc X chạy trên Windows.
Luaan

Câu trả lời:


12

Toàn bộ hệ thống GNU / Linux được xây dựng bằng cách sử dụng phương pháp mô đun. Bạn chủ yếu có thể nâng cấp ( thay thế nói chung) một mô-đun duy nhất mà không cần chạm vào người khác. Mô-đun được đề cập có thể là bộ tải khởi động, kernel, shell, lệnh, môi trường máy tính để bàn, ứng dụng GUI, bất cứ thứ gì

Tất nhiên, đó là sự thật miễn là bạn có thể quản lý các phụ thuộc một cách chính xác. Trong tập hợp các bản phân phối xung quanh Ubuntu, APT được sử dụng để giải quyết các phụ thuộc tự động.

Bạn có thể cài đặt phiên bản kernel khác bằng lệnh:

sudo apt install linux-image-<version>

Miễn là APT cho phép, bạn sẽ có thể khởi động lại và sử dụng phiên bản kernel đã chọn, có thể là chung chung, mức độ thấp, v.v. Hoặc bạn tự xây dựng một phiên bản kernel, ví dụ Linux thời gian thực và sử dụng nó với hệ thống hiện tại của bạn .


Cảm ơn rất nhiều, nhưng nó sẽ được nhất quán? Giả sử, Ubuntu 14.04 LTS có phiên bản kernel 3.19.0 và trong trường hợp cập nhật kernel, nó không còn là 14.04 LTS nữa, phải không? Vì vậy, nếu tôi cố cập nhật toàn bộ hệ thống sau hoặc cơ chế cập nhật tích hợp (Trình cập nhật phần mềm) mang đến cho tôi phiên bản mới, liệu nó có nhận biết được phiên bản kernel đã cập nhật không? Có thể kiểm tra các mô-đun riêng biệt và chỉ mang lại những thay đổi cần thiết mà không có các mô-đun đã cập nhật bị ảnh hưởng không?
Những giấc mơ gió

1
Xem packages.ubuntu.com/search?keywords=linux-image cho dài danh sách các phiên bản kernel mà mỗi phiên bản Ubuntu hỗ trợ. Phiên bản Ubuntu được xác định bởi những thứ khác nhau từ phiên bản kernel nhưng tôi không thực sự biết cái nào mà Nếu bạn quan tâm đến điều đó, bạn có thể bắt đầu một câu hỏi khác.
Melebius

1
@AleksandrMedvedev Rất lâu sau tôi mới tìm thấy nó! Phiên bản Ubuntu được ghi chú trong tệp /etc/issueđược cung cấp bởi base-filesgói. Như tôi đã viết, nó không liên quan đến phiên bản kernel.
Melebius

5

Như bạn đã biết Kernel là một phần quan trọng của HĐH, trong các bản phân phối GNU / Linux, bạn có thể dễ dàng cập nhật kernel mà không cần chạm vào phần khác của HĐH. Tuy nhiên, chúng tôi chỉ đơn giản là cập nhật một phần của hệ điều hành của chúng tôi.

Một hệ điều hành được tạo thành từ hai phần, không gian kernel và không gian người dùng.

Vì vậy, có, bạn có thể cập nhật không gian kernel mà không cần chạm vào không gian người dùng nếu chỉ phiên bản mới tương thích với không gian người dùng hiện tại của bạn.

Và về việc cập nhật các công cụ không gian người dùng, đó là một công cụ khác.

Khi bạn chạy:

sudo apt-get upgrade

Nếu có bản cập nhật cho kernel, bạn sẽ nhận được:

The following packages have been kept back:
  linux-generic linux-headers-generic linux-image-generic

vì vậy bạn chỉ cập nhật không gian người dùng của mình và khi bạn chạy một cái gì đó như

sudo apt-get dist-upgrade

bạn đang cập nhật mọi thứ, kể cả kernel.

Để chỉ nâng cấp Kernel của bạn lên phiên bản mới hơn, hãy sử dụng một cái gì đó như:

$ apt-cache search "linux-image-[0-9]+.*-generic" | awk '{print $1}' | head -4
linux-image-4.4.0-21-generic
linux-image-4.10.0-14-generic
linux-image-4.10.0-19-generic
linux-image-4.10.0-20-generic

để tìm danh sách các hạt nhân mới hơn, sau đó cài đặt nó như một gói mới, ví dụ:

sudo apt install linux-image-4.10.0-14-generic

Điều này chắc chắn là không đúng sự thật.
mook765

Sửa lỗi cho tôi;) để tôi học được điều gì đó mới :)
Ravexina

3
sudo apt upgradecũng sẽ nâng cấp kernel nếu có phiên bản mới. sudo apt full-upgradesẽ loại bỏ ass packeges tốt, những gì asudo apt upgradesẽ không làm.
Soren A

Vì bây giờ tôi nâng cấp lên kernel mới là một loại Cài đặt và trong khi sử dụng upgradetiểu ban, nó sẽ không cài đặt bất kỳ gói mới nào cũng không xóa bất kỳ gói nào, đó là lý do tại sao chúng tôi sử dụng dist-upgrade. ít nhất apt-gethoạt động theo cách này;) vì vậy tôi đã cập nhật các lệnh của mình để ngăn chặn bất kỳ sự nhầm lẫn nào.
Ravexina

1
Tôi có nhiều kinh nghiệm hơn với apt-command, sau một nghiên cứu ngắn, có vẻ như câu trả lời của bạn đã chính xác aptapt-getxử lý vấn đề khác, xem hiroom2.com/2016/05/20/ub Ubuntu-16-04-debian-8-apt -command / Lọ . Vì vậy, một số kiến ​​thức cho cả hai chúng tôi ...
mook765

3

Đầu tiên, một vài điều rõ ràng, bởi vì tôi cảm thấy bạn không hiểu làm thế nào các hệ thống GNU / Linux ra đời. Chịu đựng tôi nếu điều này không có gì mới đối với bạn:

"Kernel" không chỉ là một chương trình khác chạy, mà nó là một phần của HĐH cung cấp các chức năng cơ bản: nếu bạn muốn khởi động một chương trình (giả sử, bạn gõ "ls" tại dòng lệnh) thì nhị phân phải được tải từ đĩa (bao gồm một số hoạt động của hệ thống tệp để xác định vị trí của nó và một số xử lý tệp để xử lý dữ liệu), sau đó "môi trường xử lý" được tạo: bộ nhớ được gán, số tiến trình được phát hành, v.v. (FS, đọc từ tệp, ...) được xử lý bởi các thư viện hệ thống, nhưng các thư mục sau là các hàm kernel. Trong một số ý nghĩa, hạt nhân "là hệ điều hành" và mọi thứ khác chỉ là trang trí xung quanh nó.

"Linux" trên thực tế (chỉ!) Một hạt nhân không có phần nào khác của HĐH xung quanh. Linus Torvalds bắt đầu viết nó bằng cách lấy hạt nhân hệ điều hành mẫu của Andrew Tanenbaums MINIX và hoàn thành nó để nó là một hạt nhân hoàn toàn có thể thực hiện được. Cho đến ngày nay vẫn có Linus (và nhiều người khác đóng góp / đã đóng góp), người đã phát triển hạt nhân này. Hạt nhân này vẫn rất giống với UNIX, nhưng KHÔNG phải là hạt nhân UNIX.

"GNU" bắt đầu như một sáng kiến ​​để "làm tốt hơn" nhiều lệnh UNIX phổ biến. Tôi sẽ không thảo luận nếu họ thành công hay không, nhưng họ chắc chắn đã viết rất nhiều phần mềm và tại một thời điểm có một bộ các chương trình tiện ích. Họ thậm chí đã bắt đầu phát triển nhân hệ điều hành của riêng mình (HURD), chủ yếu dựa trên UNIX, nhưng chắc chắn là khác biệt. Nhưng cho đến ngày nay, HURD đang trong giai đoạn phát triển ban đầu và hầu như không phải là một giải pháp hiệu quả. "GNU" btw. là viết tắt của "GNU (is) Not UNIX" - họ đã cố gắng khắc phục một số hạn chế (nhận thức hoặc thực tế) của UNIX với ý định tạo ra một người kế thừa cho UNIX (một lần nữa: tôi không muốn tham gia thảo luận nếu họ thành công hoặc không - tôi không quan tâm nếu nó "tốt hơn" hay "tệ hơn", nhưng nó chắc chắn là khác nhau!).

Vì vậy, với một bộ công cụ thiếu kernel và kernel thiếu bộ công cụ, đó là một sự phát triển tự nhiên để kết hợp hai thứ này lại với nhau: GNU / Linux đã được tạo.

Tuy nhiên, để có HĐH hoạt động (và khả thi), bạn cần nhiều hơn là kernel và bộ công cụ: bạn cần một hệ thống quản lý gói, bạn cần quy trình cài đặt, bạn cần cấu hình mẫu, bạn cần ....

Một số người khác nhau (hoặc nhóm của họ) đã đi đến kết luận này và sử dụng kết hợp GNU / Linux để tạo ra một hệ thống GNU / Linux theo ý thích của họ, bằng cách thêm chính xác những điều tôi đã nói ở trên: họ đã tạo ra một trình quản lý gói, một hệ thống đóng gói , thủ tục cài đặt và những gì nhiều hơn nữa. Các nhóm khác nhau (tương ứng là kết quả của những nỗ lực của họ) là những gì các bản phân phối khác nhau. Ngày nay, có ba trình quản lý gói khác nhau (apt cho Debian và các hệ thống dẫn xuất như * ub Ubuntu, vòng / phút cho RedHat và các hệ thống dẫn xuất như Fedora, CentOS và hơn thế nữa, pacman cho ArchLinux) nhưng tất cả những thứ này chỉ quản lý các gói phần mềm (về cơ bản) giống nhau: những gì được gọi khi bạn phát hành "ls" hoặc "df", v.v.

Vì vậy, "về nguyên tắc", bạn có thể cập nhật kernel một mình, giống như những người đã tạo phân phối từ các phiên bản khác nhau của tất cả các phần mềm tôi đã nói ở trên đã làm.

Nhưng, và đây là một BUT lớn thực sự: bởi vì không chỉ có kernel và một số phần mềm bổ sung mà còn rất nhiều điều khác cần lưu ý, như các công cụ cấu hình hệ thống (systemd, một số bản phân phối sử dụng và một số không), mạng các công cụ quản lý như NetworkManager, phụ thuộc vào một số phiên bản của thư viện Gnome, v.v. - "phân phối" là một điều khá phức tạp và rất có thể là nếu bạn cố cập nhật kernel, cuối cùng bạn sẽ cập nhật rất nhiều những thứ khác vì nhiều phụ thuộc lẫn nhau.

Tuy nhiên, và "về nguyên tắc", như trên: bạn cũng có thể tạo bản phân phối của riêng mình bằng cách tải xuống tất cả các nguồn, biên dịch chúng, tìm một bộ kết hợp phiên bản hoạt động, đặt một số hệ thống đóng gói (hoặc sử dụng một trong những hệ thống hiện có ) - vân vân, cho đến khi bạn có một hệ thống phân phối, có thể cài đặt và cấu hình. Đây là những gì người tạo ra các bản phân phối như Ubuntu làm và nó không phải là một phép lạ - chỉ là rất nhiều công việc phức tạp, vì vậy trong thực tế, hầu hết người dùng đều né tránh điều đó và sử dụng thứ gì đó họ có thể sẵn sàng sử dụng.

Tôi mong bạn trả lời câu hỏi này.


GNU đã không bắt đầu như một sáng kiến ​​để "làm tốt hơn" nhiều lệnh UNIX phổ biến. GNU là một hệ điều hành ngay từ đầu, với mục đích là phần mềm miễn phí để đáp ứng với UNIX là độc quyền hạn chế. Bạn có thể đọc thêm từ trang web của họ . Họ quyết định chuyển tất cả phần mềm của họ sang Linux vì vào thời điểm Linux được tạo, GNU vẫn không có kernel hoạt động.
Ian Emnace

3

Câu trả lời đơn giản nhất không liên quan gì đến Ubuntu; nó liên quan đến cách xây dựng GNU / Linux. Nếu bạn cố gắng xem nó như một nhà phát triển hệ thống, bạn sẽ thấy hai thế giới, mỗi thế giới được ngăn cách bởi một đường viền sắc nét (ABI).

Thế giới hạt nhân, nơi các nhà phát triển cấp thấp làm việc, là một hệ thống riêng. Nó có mọi thứ bạn thường tìm thấy trong một ứng dụng thông thường. Sự khác biệt duy nhất là người dùng không phải là người thực sự đang sử dụng máy, mà là thế giới không gian người dùng. "Ứng dụng" kernel là người trung gian, máy chủ đang sử dụng máy - con ma trong vỏ.

Bây giờ, không gian người dùng, là thế giới bình thường mà người dùng và nhà phát triển hàng ngày đang chơi. Nó có các API, quy tắc, tệp cứng nhắc và điều quan trọng nhất là hình ảnh trẻ con, trừu tượng của máy đang chạy. Vì người dùng chỉ nhìn thấy phần này và số tiền này chiếm 99% kích thước phân phối, nên rất dễ đặt tên sai cho Hệ điều hành. Danh pháp đúng là gọi nó là phân phối phần mềm, được tạo bởi một số thực thể (Canonical, Fedora, v.v.), bằng cách sử dụng kernel (Linux, HURD, BSD, v.v.) và được xây dựng bằng một bộ công cụ (thường được cung cấp bởi GNU ).

Để trả lời câu hỏi của bạn, trong GNU / Linux (giống như trong Windows và OSX, hãy tin tôi), bạn có thể thay đổi kernel, không chỉ phiên bản, mà toàn bộ kiến ​​trúc (Kernel Linux, so với HURD Kernel), và, miễn là ABI không được chạm vào, không bao giờ thực hiện một thay đổi nào trong thế giới người dùng ... Trước đây, khi người đàn ông thực sự phải xây dựng hạt nhân từ các nguồn, bạn có thể trải qua một số thay đổi như thế này, để có được một webcam USB xảo quyệt để hoạt động ... Bây giờ, với hạt nhân mô-đun, bạn chỉ cần cài đặt một mô-đun và bạn sẽ có được một thế giới hạt nhân hoàn toàn mới, với ABI (đôi khi) được mở rộng với các tính năng mới ...

Một lần nữa, tương tự cho không gian người dùng. Khi bạn cài đặt một ứng dụng mới, giả sử, một kho lưu trữ Ubuntu, 99% thời gian, mối quan tâm lớn nhất của bạn là khả năng tương thích của các thành phần không gian người dùng khác, không phải hạt nhân thực tế. Có những trường hợp, trong đó phiên bản kernel ra lệnh (thông qua ABI) phạm vi các thứ có thể được cài đặt trong không gian người dùng, nhưng mục tiêu (ít nhất là đối với các nhà phát triển) là làm cho điều này biến mất ...

Một điều đáng suy ngẫm nữa, bạn có thể (và khá dễ dàng) xây dựng bản phân phối GNU / Linux độc đáo, đặc biệt của riêng bạn. Nhận kernel, một số tập lệnh đơn giản, một số ứng dụng và bạn đã thiết lập. Thật dễ dàng (hãy xem các bản phân phối OpenWRT GNU / Linux, đối với thiết bị mạng, toàn bộ phân phối phù hợp như 16Mb, hoặc hơn).


"một đường viền sắc nét (ABI)." Tôi nghĩ bạn có nghĩa là API. ABI là, vì thiếu một thuật ngữ tốt hơn, mã giao diện phần cứng. Mặt khác, API là mã giao diện mã.
Sam

1

Tôi đoán chúng được giữ riêng vì hạt nhân là một phần quan trọng. Một hạt nhân với hồi quy, hoặc chỉ là một bản cập nhật thất bại, có thể gây ra khá nhiều thiệt hại. Bạn có thể muốn cập nhật nó ít thường xuyên hơn; hoặc chỉ sau khi chờ đợi một thời gian để đảm bảo không ai báo cáo lỗi đáng lo ngại.

Ngoài ra một số người dùng nâng cao hoặc chuyên nghiệp biên dịch lại kernel để sửa đổi hành vi của nó để phù hợp hơn với nhu cầu của họ. Trong trường hợp như vậy, rõ ràng bạn sẽ không muốn nó tự động thay thế bằng phiên bản xuất xưởng mỗi khi bạn nâng cấp.

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.