Làm thế nào để một hệ thống unix hoặc linux hoạt động? [đóng cửa]


37

Tôi muốn biết làm thế nào hệ điều hành hoạt động một cách ngắn gọn :

  • Các thành phần cơ bản được xây dựng dựa trên
  • Làm thế nào những thành phần này làm việc với nhau
  • Điều gì làm cho unix UNIX
  • Điều gì làm cho nó khác biệt với các hệ điều hành khác như Windows

3
wow câu hỏi này sẽ mất rất nhiều thời gian để trả lời toàn diện ... như một vài cuốn sách. Có rất ít hệ điều hành (không gian nhúng sang một bên và các cửa sổ là ngoại lệ đáng chú ý) không phải là Unix.
xenoterracide

2
không biết nên khóc hay cười
zvolkov

27
Làm thế nào để một hệ thống unix hoặc linux hoạt động? Rất tốt cảm ơn :-).
Gaurav

3
Yêu câu hỏi. Đó là loại khiến người dùng có kinh nghiệm kiểm chứng bằng sự hiểu biết của chính họ và cho chúng ta tất cả cơ hội để hiểu vũ trụ của unix và linux.
Stein Åsmul

5
Vâng, trong một tóm tắt thực tế, bạn có một vỏ, và dưới đó bạn có một hạt nhân. Đây cũng là cách Unix hoạt động.
Tom Zych

Câu trả lời:


74

Một hệ thống UNIX bao gồm một số phần hoặc các lớp mà tôi muốn gọi chúng.

Để khởi động một hệ thống, một chương trình có tên là bộ tải khởi động nằm ở khu vực đầu tiên của phân vùng đĩa cứng. Nó được hệ thống khởi động và đến lượt nó xác định vị trí nhân hệ điều hành và tải nó.

Phân lớp

  1. Hạt nhân. Đây là chương trình trung tâm được khởi động bởi bộ tải khởi động. Nó thực hiện tương tác phần cứng cơ bản cho hệ thống (đĩa, bộ nhớ, video, âm thanh) và cung cấp một môi trường ảo trong đó nó có thể khởi động các chương trình. Nhân cũng vận chuyển tất cả các trình điều khiển xử lý tất cả các khác biệt nhỏ giữa các thiết bị phần cứng. Đối với thế giới bên ngoài (các lớp cao hơn), mỗi lớp thiết bị dường như hoạt động chính xác theo cùng một cách nhất quán - điều này đến lượt các chương trình có thể dựa vào.

  2. Các hệ thống con nền. Chỉ có những chương trình thông thường, mà không theo cách của bạn. Họ xử lý những thứ như đăng nhập từ xa, cung cấp một bus tin nhắn cental và thực hiện các hành động dựa trên các sự kiện phần cứng / mạng. Ví dụ: khám phá bluetooth, quản lý wifi, v.v .. Bất kỳ dịch vụ mạng nào (máy chủ tệp, máy chủ in, máy chủ web) cũng sống ở cấp độ này. Trong các hệ thống UNIX, tất cả chỉ là các chương trình bình thường.

  3. Các công cụ dòng lệnh. Đây là tất cả các chương trình nhỏ có thể được bắt đầu để thực hiện những việc như chỉnh sửa văn bản, tải xuống tệp hoặc quản trị hệ thống. Tại thời điểm này, một hệ thống UNIX hoàn toàn có thể sử dụng cho các quản trị viên hệ thống. Trong Windows, lớp này không thực sự tồn tại nữa.

  4. Giao diện người dùng đồ họa. Đây cũng chỉ là các chương trình, sự khác biệt duy nhất là họ vẽ các cửa sổ trên màn hình thay vì viết văn bản. Điều này làm cho hệ thống dễ sử dụng hơn cho người dùng thường xuyên.

Bất kỳ dịch vụ hoặc sự kiện sẽ đi từ dưới lên đến đỉnh.

Thư viện - nền tảng chung

Các chương trình thực hiện rất nhiều việc phổ biến như hiển thị cửa sổ, vẽ nội dung trên màn hình hoặc tải xuống tệp. Những điều này giống nhau cho nhiều chương trình, do đó mã được đặt trong các tệp "thư viện" riêng biệt ( .sotệp - có nghĩa là đối tượng chia sẻ). Thư viện có thể được chia sẻ trên tất cả các chương trình.

Đối với mỗi điều có thể tưởng tượng, có một thư viện. Có một cái để đọc / ghi tệp PNG. Có một cho các tệp JPEG, để đọc XML, để mã hóa, để phát lại video, v.v.

Trên Linux, các thư viện phổ biến cho các nhà phát triển ứng dụng là Qt và Gtk. Các thư viện này sử dụng các thư viện cấp thấp hơn trong nội bộ cho các nhu cầu cụ thể của họ, đồng thời thể hiện chức năng của họ một cách nhất quán và ngắn gọn để các nhà phát triển ứng dụng tạo ứng dụng nhanh hơn.

Các thư viện cung cấp nền tảng ứng dụng, trên đó các lập trình viên có thể xây dựng các ứng dụng người dùng cuối cho Hệ điều hành. Hệ thống cung cấp càng nhiều thư viện chất lượng cao, càng ít lập trình viên phải viết để tạo ra một chương trình đẹp.

Một số thư viện có thể được sử dụng trên các hệ điều hành khác nhau (ví dụ: Qt là), một số thư viện thực sự được gắn chặt vào một hệ điều hành. Điều này sẽ hạn chế chương trình của bạn chỉ có thể chạy ở nền tảng đó.

Liên thông quá trình

Một góc thứ ba của một hệ điều hành, là cách các chương trình có thể giao tiếp với nhau. Đây là các máy móc truyền thông liên tiến trình (IPC). Chúng tồn tại trong một số hương vị, ví dụ như một phần của bộ nhớ dùng chung hoặc một kênh nhỏ được thiết lập giữa hai chương trình để trao đổi dữ liệu. Ngoài ra còn có một xe buýt tin nhắn trung tâm mà mỗi chương trình có thể đăng một tin nhắn và nhận được phản hồi. Điều này được sử dụng cho truyền thông toàn cầu, nơi chưa biết chương trình nào có thể đáp ứng.

Từ thư viện đến Hệ điều hành

Với các thư viện, IPC và kernel, các lập trình viên có thể xây dựng tất cả các loại ứng dụng cho dịch vụ hệ thống, quản trị người dùng, cấu hình, quản trị, công việc văn phòng, giải trí, v.v. Đây là bộ hoàn chỉnh mà người dùng mới nhận ra là "hệ điều hành ".

Trong các hệ thống UNIX / Linux, tất cả các dịch vụ chỉ là chương trình. Tất cả các công cụ quản trị hệ thống chỉ là chương trình. Tất cả đều làm công việc của họ, và họ có thể bị xích lại với nhau. Tôi đã tóm tắt rất nhiều chương trình lớn tại http://codingdomain.com/linux/sysadmin/


Các bộ phận khác biệt với Windows

UNIX chủ yếu là một hệ thống các chương trình, tập tin và quyền hạn chế. Rất nhiều sự phức tạp được tránh, làm cho nó trở thành một hệ thống mạnh mẽ trong khi có vẻ như nó có một công việc dễ dàng thực hiện nó.

Cụ thể, đây là những nguyên tắc có thể tìm thấy trên các hệ thống UNIX / Linux:

  • Có những cách thống nhất để truy cập thông tin. ("Mọi thứ chỉ là một tập tin"). Bạn có thể mở tệp, ổ cắm mạng, kênh IPC, tham số kernel và chặn thiết bị dưới dạng tệp. Do đó, sự xuất hiện của các hệ thống tập tin ảo trong / dev, / sys và / Proc. API duy nhất bạn cần là open, readclose.

  • Hệ thống cơ bản là minh bạch. Mọi chương trình hoạt động theo cùng một quy tắc. Không giống như Windows, không có sự khác biệt giả tạo giữa "chương trình giao diện điều khiển", "chương trình gui" hoặc "dịch vụ nền". Tất cả chúng chỉ là chương trình, điều đó xảy ra để làm những việc khác nhau. Tất cả chúng cũng có thể được quan sát, phân tích và gỡ lỗi theo cùng một cách.

  • Các cài đặt có thể đọc, có thể chỉnh sửa và có thể được chú thích bằng các bình luận. Chúng thường có định dạng kiểu INI, nhưng có thể sử dụng định dạng tùy chỉnh cho nhu cầu của ứng dụng đó. Bởi vì chúng chỉ là các tệp, chúng có thể được sao chép sang các hệ thống khác, được lưu trữ hoặc được sao lưu bằng các công cụ tiêu chuẩn.

  • Không có ứng dụng "làm tất cả trong một lần" lớn. Câu thần chú là "làm một việc, làm tốt". Các công cụ dòng lệnh có thể được kết nối và cùng nhau trở nên mạnh mẽ. Các dịch vụ riêng biệt (ví dụ: SMTP, IMAP và POP và đăng nhập) là các chương trình con riêng biệt, tránh các vấn đề bảo mật và mã đan xen phức tạp. Môi trường máy tính để bàn phức tạp ủy thác công việc khó khăn cho các chương trình cá nhân.

  • fork(). Các chương trình mới được bắt đầu bởi một chương trình nhân bản chính nó. Bản sao thiết lập mọi thứ (ví dụ: xử lý tệp) và tùy ý thay thế chính nó bằng mã chương trình mới. Điều này giúp dễ dàng áp dụng các cài đặt bảo mật và hạn chế tương tự cho các chương trình mới, chia sẻ bộ nhớ hoặc thiết lập cơ chế IPC. Chi phí bắt đầu một quá trình cũng rất thấp.

  • Hệ thống tệp là một cây, trong đó các phân vùng đĩa và chia sẻ mạng khác có thể được gắn kết. Có một lần nữa, một cách phổ biến để truy cập dữ liệu. Các vị trí hệ thống phổ biến (ví dụ /usrcó thể dễ dàng được gắn dưới dạng chia sẻ mạng.

  • Hệ thống được xây dựng cho các đặc quyền người dùng thấp. Sau khi đăng nhập, mọi người dùng (trừ root) chỉ giới hạn tài nguyên của riêng họ, chỉ chạy các ứng dụng và tệp. Dịch vụ mạng giảm đặc quyền của họ càng sớm càng tốt. Có một cách rõ ràng duy nhất để có được nhiều đặc quyền hơn hoặc yêu cầu ai đó thực hiện một công việc đặc quyền thay cho họ. Mọi cuộc gọi khác bị giới hạn bởi các hạn chế và giới hạn của chương trình.

  • Mỗi chương trình lưu trữ các thiết lập trong một tập tin / thư mục ẩn của thư mục nhà người dùng. Không có chương trình nào cố gắng viết một tập tin cài đặt toàn cầu.

  • Ưu tiên cho các cơ chế giao tiếp được mô tả công khai về các cơ chế bí mật hoặc các cơ chế 1-1 cụ thể. Các nhà cung cấp và nhà phát triển phần mềm khác được khuyến khích tuân theo cùng một đặc điểm kỹ thuật, vì vậy mọi thứ có thể dễ dàng được kết nối, hoán đổi và vẫn được kết nối lỏng lẻo.


1
Câu trả lời dễ thương, tôi biết thật khó để giải thích ngắn gọn! cảm ơn! ;-)
Sander Versluys

1
vâng thưa ngài, làm tốt câu trả lời này
Stefan

14
Nút +10 ở đâu ???
EricSchaefer

1
Cảm ơn tất cả các ý kiến ​​và bình chọn! Thật tuyệt khi biết câu trả lời được đánh giá cao này!
vdboor

1
@faif, nó khá chuẩn (ngay cả các hệ điều hành của Microsoft cũng có), và vẻ đẹp nằm trong mắt của kẻ si tình mà tôi cho là. Vấn đề là tất cả mọi thứ là một tập tin, thậm chí là những người đặc biệt.
psusi

11

UNIX là một hệ điều hành mạnh mẽ, được xây dựng trên một thiết kế âm thanh đã được chứng minh là thành công trong hơn 40 năm (điều đó gần như vĩnh cửu trong khoa học máy tính). Công nghệ trung tâm dựa trên ngôn ngữ C và vô số các chương trình nhỏ: các lệnh UNIX. Triết lý cơ bản đã được McIlroy tóm tắt:

Viết chương trình làm một việc và làm tốt. Viết chương trình để làm việc cùng nhau. Viết chương trình để xử lý các luồng văn bản, bởi vì đó là một giao diện phổ quát.

Thông tin thêm về triết lý UNIX có thể được tìm thấy trong ESRaymond "Nghệ thuật lập trình UNIX".


2
+1 cho "Nghệ thuật lập trình UNIX". Tuy nhiên, trong khi API được định nghĩa xung quanh C, không có vấn đề kỹ thuật nào với việc triển khai toàn bộ hệ thống trong Haskell (với các bit lắp ráp;)) hoặc đại loại như thế.
Maciej Piechotka

3
Các bit của lắp ráp cũng có thể được viết bằng Haskell. Hãy nhìn vào Tiềm năng
Phil Miller

10

Có một số câu trả lời tuyệt vời ở đây. Tuy nhiên, một điều tôi nghĩ đã bị bỏ qua là * nix khác với các hệ điều hành khác, đặc biệt là Microsoft Windows.

Khái niệm cơ bản đã được đề cập ở trên "làm một việc, làm tốt" là trọng tâm của các hệ điều hành * nix mà đôi khi nó có thể bị bỏ qua. Tuy nhiên, chính triết lý thiết kế này làm cho Linux trở nên linh hoạt và mạnh mẽ.

Chẳng hạn, Giao diện người dùng đồ họa (GUI) cho MS Windows được đan xen trong HĐH. Hầu như không thể cài đặt hệ điều hành MS mà không có GUI. Trong Linux, bạn có thể dễ dàng đưa lên một máy chủ hoặc hệ thống nhúng không có thành phần đồ họa nào cả. Nó có thể hoàn toàn là dòng lệnh điều khiển và vẫn là một máy chủ đầy đủ tính năng.

Thiết kế mô-đun của Linux cũng cho phép người quản trị hệ thống đưa xuống một dịch vụ, nâng cấp và đưa nó trở lại mà không cần khởi động lại hệ điều hành. Trong thực tế, lần duy nhất bạn phải khởi động lại hệ điều hành Linux là khi chính hạt nhân đang được sửa đổi hoặc nâng cấp.

Ví dụ: bạn có thể cài đặt trình quản lý cửa sổ mới (gnome, kde, anyever) trên Linux và người dùng hiện đang đăng nhập vào hệ thống có thể không bao giờ biết.

Trên Windows, thường thì những thay đổi đơn giản nhất đối với hệ thống yêu cầu khởi động lại, mặc dù đôi khi đây là vấn đề an toàn hơn là yêu cầu kỹ thuật thực tế. Tôi sẽ trình bày rằng đây là một trong những lỗi cơ bản của hệ điều hành MS. Trên Linux, bạn có thể nâng cấp nhiều mô-đun trình điều khiển và có ít hoặc không ảnh hưởng đến người dùng. Trên Windows, bạn có thể phải khởi động lại toàn bộ hộp nếu bạn chỉ cần cài đặt một ứng dụng mới.

Thiết kế mô-đun này cũng mang lại cho Linux sự linh hoạt phi thường. Mỗi hệ thống Linux có thể được tùy chỉnh cho nhiệm vụ cụ thể mà bạn cần thực hiện, với càng ít tài nguyên càng tốt. Với Windows, bạn không thể tắt giao diện GUI để chạy máy chủ HTTP đơn giản. Có một dấu chân bộ nhớ mà Windows giả định sẽ tạo ra một rào cản bên dưới mà phần cứng của bạn không thể đi được. Đây là một lý do chính mà Linux đã trở thành hệ điều hành được lựa chọn cho nhiều ứng dụng di động và nhúng.

Tôi có thể tiếp tục, nhưng tôi hy vọng những ví dụ này sẽ giúp giải thích tại sao Linux trở nên phổ biến và nó thực sự khác biệt với hệ điều hành khác như thế nào.



2

Tôi khuyên bạn nên đọc Lập trình nâng cao trong Môi trường Unix 2e để tìm hiểu nhiều về API và POSIX tiêu chuẩn Unix đơn, điều này sẽ cho bạn ý tưởng về những gì tạo ra Unix Unix và cách các thành phần hoạt động và phối hợp với nhau.

Tuy nhiên, đó là một cuốn sách rất nặng C và nhiều tài liệu tham khảo. Nếu bạn có vấn đề với chứng mất ngủ, hãy mang nó đi ngủ. Điều đó sang một bên nếu bạn là một lập trình viên Unix C thì phải có.


2

Theo tinh thần của hai khuyến nghị cuốn sách trước, tôi cũng muốn giới thiệu

Giao diện lập trình LINUX của M. Kerrisk

trong đó, mặc dù nhắm vào chủ đề lập trình hệ thống UNIX / Linux, tiết lộ hàng tấn thông tin chi tiết về cách Linux và các hệ thống UNIX nói chung hoạt động theo quan điểm của lập trình viên / người dùng. Nó đào sâu rất chi tiết vào hầu hết các viên đạn được đề cập trong câu trả lời của vdboor và tiết lộ đủ chi tiết theo cách dễ hiểu và dễ đọc để có được cảm nhận / hình ảnh về các khái niệm UNIX cơ bản và nền tảng của chúng.

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.