Điều gì tạo nên một hệ điều hành Unix Unix-Like Giống?


20

Tôi thường xuyên bắt gặp thuật ngữ "unix-like" trên nhiều trang web.

Không có tiêu chuẩn; nó chỉ là trong cách nó cư xử.

Nhưng nếu tôi phát triển kernel từ đầu, điều gì sẽ khiến nó được coi là "giống như unix"?

Về cơ bản, những thứ tạo ra mã viết như Unix là gì?


Câu trả lời:


15

Không có tiêu chuẩn; nó chỉ là trong cách nó cư xử.

Tôi tin rằng hầu hết các HĐH "giống như không trộn" đều nỗ lực rất nghiêm túc để tuân thủ tiêu chuẩn POSIX , được giám sát bởi Nhóm Mở, người cũng kiểm soát Đặc tả UNIX đơn xác định "UNIX thực". Cái trước là cốt lõi của cái sau.

Vì vậy, trên thực tế, có một tiêu chuẩn xác định tính thực tiễn của các hệ điều hành giống như unix . Hãy xem danh sách các hệ điều hành tuân thủ "đầy đủ" và "chủ yếu" ở cuối bài viết trên wikipedia trên POSIX.

Có một số lý do rõ ràng linux đặc biệt có thể không được coi là tuân thủ đầy đủ hoặc có thể được chứng nhận bởi Thông số kỹ thuật Unix đơn (SUS), nhưng những điều này không phải vì bất kỳ hệ thống linux cụ thể nào nhất thiết không tương thích với nó. Bài viết trên wikipedia tóm tắt thông số kỹ thuật theo cách này:

SUSv3 tổng cộng khoảng 3700 trang, được chia thành bốn phần chính:

Định nghĩa cơ sở (XBD) - danh sách các định nghĩa và quy ước được sử dụng trong thông số kỹ thuật và danh sách các tệp tiêu đề C phải được cung cấp bởi các hệ thống tuân thủ. 84 tệp tiêu đề trong tổng số được cung cấp.

Shell và tiện ích (XCU) - một danh sách các tiện ích và mô tả về shell, sh. 160 tiện ích trong tổng số được chỉ định.

Giao diện hệ thống (XSH) - chứa thông số kỹ thuật của các chức năng khác nhau được triển khai dưới dạng các cuộc gọi hệ thống hoặc chức năng thư viện. 1123 giao diện hệ thống trong tổng số được chỉ định.

Cơ sở lý luận (XRAT) - lời giải thích đằng sau tiêu chuẩn.

Giao diện dòng lệnh và kịch bản lệnh người dùng chuẩn là shell POSIX, một phần mở rộng của Bourne Shell dựa trên phiên bản đầu tiên của Korn Shell.

Các chương trình, dịch vụ và tiện ích cấp độ người dùng khác bao gồm awk, echo, ed, vi và hàng trăm người khác. Các dịch vụ cấp chương trình bắt buộc bao gồm các dịch vụ I / O (tệp, thiết bị đầu cuối và mạng) cơ bản.

Một bộ thử nghiệm đi kèm với tiêu chuẩn. Nó được gọi là PCTS hoặc Bộ kiểm tra chứng chỉ POSIX.

Ngoài ra, SUS bao gồm đặc tả CURSES (XCURSES), chỉ định 372 chức năng và 3 tệp tiêu đề. Nói chung, SUSv3 chỉ định 1742 giao diện.

Điều này rõ ràng đề cập cụ thể đến rất nhiều thành phần userland (chẳng hạn như shell) đơn giản không phải là một phần của kernel linux. Vì vậy, không có cách nào mà linux.org et. al. có thể có chứng nhận kernel một mình - theo nghĩa này, nó hoàn toàn không phải là một hệ điều hành. Tất nhiên, họ có thể cố gắng chứng nhận một số hệ thống cụ thể bằng cách sử dụng kernel, nhưng điều này sẽ vô nghĩa đối với sơ đồ phân phối chung: kernel và những người duy trì nó độc lập với những người duy trì lõi người dùng (GNU) những người độc lập với những người duy trì các bản phân phối hệ điều hành được lắp ráp thực tế (Debian, Fedora, v.v.).

Tôi cho rằng bản thân Debian hoặc Fedora có thể tham gia vào quá trình chứng nhận (vì vậy, ví dụ, RedHat Enterprise có thể trở thành "unix được chứng nhận"), nhưng điều này đặt ra câu hỏi rằng điều đó thực sự đáng mong muốn. Tôi cho rằng lý do chính cho các hệ thống SUS là chạy phần mềm (quy mô thương mại, không dành cho người tiêu dùng) được viết cho như vậy, đơn giản không phải là phân khúc linux - những người làm việc này sẽ trả hàng ngàn đô la cho mỗi giấy phép cho HĐH bao gồm rất nhiều hỗ trợ, v.v., bởi vì họ cũng đang trả hàng chục hoặc hàng trăm ngàn đô la cho mỗi giấy phép cho bất kỳ phần mềm bổ sung nào mà họ muốn chạy trên hệ thống. Mặt khác, Linux và các ngoại lệ khác, đã theo đuổi các mục tiêu thiết kế ngoài việc tuân thủ đơn giản cho các mục đích thương mại và có nhiều ví dụ khác về điều này, ví dụ (từhttp://en.wikipedia.org/wiki/STREAM ):

STREAM được yêu cầu tuân thủ với các phiên bản Đặc tả UNIX đơn 1 (UNIX 95) và 2 (UNIX 98), nhưng do sự từ chối của các nhà phát triển BSD và Linux để cung cấp STREAM, [cần dẫn nguồn] được đánh dấu là tùy chọn cho POSIX tuân thủ của Nhóm Austin trong phiên bản 3 (UNIX 03).

Một chỗ ở thú vị làm nổi bật điểm mà SUS và Nhóm mở! = Linux ,! = BSD, v.v.


2
Lưu ý rằng được chứng nhận khác với việc tuân thủ. Ví dụ, việc Linux Foundation không được chứng nhận từng phiên bản kernel, vì chi phí và tốc độ phát triển là không thực tế. Nhưng điều đó không có nghĩa là nó (hạt nhân) không hoàn toàn hoặc hầu hết tuân thủ.
strugee

2
@strugee Tiêu chuẩn POSIX không áp dụng hoặc quan tâm đến kernel. Những gì được chuẩn hóa là các lệnh (shell, ls, cat, ...) và API (những gì libc cung cấp, các luồng). Điều làm cho một bản phân phối dựa trên Linux giống như Unix chủ yếu là các thành phần GNU (lệnh và glibc). Hạt nhân nằm ngoài phạm vi chứng nhận / tuân thủ.
jlliagre

1
Không bác bỏ nhưng làm rõ (tôi đang lặp lại điều này từ nhận xét của tôi về câu trả lời của illuminÉ): các tiêu chuẩn là "cái gì", hạt nhân là "làm thế nào". Tôi chỉ đọc các bit và mẩu của các tiêu chuẩn, nhưng tôi không nghĩ chúng đề cập đến một "hạt nhân" nào cả (nó chỉ là "hệ thống"). Vì vậy, chứng nhận và tuân thủ WRT: đó là "những gì" kernel / OS làm, không phải "làm thế nào" nó làm điều đó.
goldilocks

3
@strugee Đặc tả Unix đơn áp dụng cho giao diện người dùng. Hạt nhân cuối cùng có liên quan nhưng nhận xét của tôi là về tuyên bố của bạn về Quỹ Linux được chứng nhận hạt nhân. Một hạt nhân không thể được chứng nhận, nó thiếu tất cả các thành phần mà quá trình chứng nhận tương tác. Những gì có thể được chứng nhận (hoặc ít nhất là cố gắng tuân thủ càng tốt) là một Hệ điều hành, tức là thứ thường được gọi là phân phối trong cộng đồng Linux.
jlliagre

2
@strugee Đó có thể là lý do có thể tuy nhiên không phải là quá trình tái đầu tư nhanh mà là vấn đề nhưng thực tế không có cam kết nào để đảm bảo không có thay đổi không tương thích nào được thêm vào. Ví dụ, Solaris 10 tuân thủ, đảm bảo tính tương thích này và đã có hàng tá cập nhật kể từ khi được chứng nhận Unix03. Hơn nữa, sự kết hợp Gnu / Linux cố gắng tuân thủ như nó có thể / muốn nhưng không nhiều hơn. Nó (hầu như) không bao giờ cố gắng để được chứng nhận vì cả hai đều là một quá trình tốn kém và dù sao nó cũng không tuân thủ vì một số yêu cầu bị thiếu (cố tình) và một số tiện ích mở rộng không tương thích
jlliagre

12

Để mở rộng câu trả lời đầu tiên về POSIX, để hiểu "giống như unix" nghĩa là gì, trước tiên, bạn nên cố gắng hiểu chính xác UNIX là gì. Nhìn vào tài liệu từ Open Group , công ty sở hữu nhãn hiệu Unix, bạn sẽ tìm thấy chi tiết về sự tiến hóa của đặc tả UNIX đơn - đây là UNIX03 :

Tiêu chuẩn sản phẩm UNIX 03 là nhãn hiệu cho các hệ thống tuân thủ Phiên bản 3 của Đặc tả UNIX đơn. Đây là phiên bản nâng cao đáng kể của Tiêu chuẩn sản phẩm UNIX 98. Các cải tiến bắt buộc bao gồm căn chỉnh với Ngôn ngữ lập trình ISO / IEC 9989: 1999 C, IEEE Std 1003.1-2001 và ISO / IEC 9945: 2002. Tiêu chuẩn sản phẩm này bao gồm các tiêu chuẩn sản phẩm bắt buộc sau: Các cuộc gọi và thư viện hệ thống quốc tế mở rộng V3, lệnh và tiện ích V4, ngôn ngữ C V2 và giao diện đầu cuối quốc tế hóa.

UNIX98 :

Tiêu chuẩn sản phẩm UNIX 98 là phiên bản nâng cao đáng kể của Tiêu chuẩn sản phẩm UNIX 95. Các cải tiến bắt buộc bao gồm (1) Giao diện luồng, (2) Tiện ích mở rộng hỗ trợ đa lõi (MSE), (3) Hỗ trợ tệp lớn, (4) Liên kết động, (5) thay đổi để loại bỏ phụ thuộc hoặc hạn chế độ dài dữ liệu phần cứng và (6 ) Năm 2000 thay đổi. Ngoài ra, các cải tiến tùy chọn sau được bao gồm: Các cơ sở quản trị phần mềm và một bộ API để hỗ trợ thời gian thực. Tiêu chuẩn sản phẩm này bao gồm các tiêu chuẩn sản phẩm bắt buộc sau: Thư viện và cuộc gọi hệ thống quốc tế mở rộng V2, Lệnh và tiện ích V3, Ngôn ngữ C, Dịch vụ vận tải (XTI) V2, Ổ cắm V2 và Giao diện thiết bị đầu cuối quốc tế hóa. Ngoài ra, nó cũng có thể phù hợp với Tiêu chuẩn Sản phẩm Quản trị Phần mềm.

UNIX95 (nhấn mạnh của tôi):

Tiêu chuẩn sản phẩm này xác định một nền tảng hợp nhất để hỗ trợ một loạt các ứng dụng ban đầu được phát triển cho một trong các loại hệ điều hành được lấy từ mã và / hoặc giao diện của Hệ điều hành UNIX do AT & T phát triển , ngoài các phương tiện được cung cấp theo tiêu chuẩn sản phẩm cơ sở. Nó có phạm vi rộng hơn Base. Tiêu chuẩn sản phẩm này bao gồm các tiêu chuẩn sản phẩm sau: Các cuộc gọi và thư viện hệ thống quốc tế được mở rộng, các lệnh và tiện ích V2, Ngôn ngữ C, Dịch vụ vận tải (XTI), Ổ cắm và Giao diện thiết bị đầu cuối quốc tế hóa.

Phiên bản máy chủ của tiêu chuẩn thêm Máy chủ Internet và IPv6 trong một số trường hợp.

Vì vậy, tất nhiên chúng ta thấy tham chiếu đến Phòng thí nghiệm AT & T Bell và ngôn ngữ C là trung tâm của UNIX là gì: ngôn ngữ C, công cụ cơ sở mô-đun và trình bao và cách thức nhân, hệ thống tập tin và các thành phần hệ điều hành quan trọng khác được thiết kế và triển khai .

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Đó là nơi cuốn sách Thiết kế hệ điều hành UNIX của Maurice J. Bach trở thành cuốn sách vô giá vì nó là vấn đề lịch sử vào thời điểm này. Tất nhiên lưu ý là làm thế nào điều này có liên quan đến các phát minh khác như ngôn ngữ C thực sự. C được AT & T Bell phát triển để triển khai Unix với ngôn ngữ có thể nhanh như lắp ráp nhưng di động trên các phần cứng khác nhau và rất nhiều POSIX là một phần mở rộng cho tiêu chuẩn C.

Trong trường hợp có liên quan đến hạt nhân, bạn sẽ thường tìm thấy một sơ đồ khái niệm như sơ đồ này để minh họa cho một hạt nhân UNIX truyền thống là về cái gì:

nhập mô tả hình ảnh ở đây

Dưới đây là một số trích đoạn từ cuốn sách kinh điển của Mr Bach (1986) bàn về nền tảng của hạt nhân UNIX System V:

Tuy nhiên, tất cả chúng [các hệ thống con và chương trình ứng dụng] đều sử dụng các dịch vụ cấp thấp hơn cuối cùng được cung cấp bởi kernel và chúng tận dụng các dịch vụ đó thông qua các lệnh gọi hệ thống. Có khoảng 64 cuộc gọi hệ thống trong Hệ thống V, trong đó ít hơn 32 cuộc gọi được sử dụng thường xuyên. Chúng có các tùy chọn đơn giản giúp chúng dễ sử dụng nhưng cung cấp cho người dùng nhiều năng lượng. Tập hợp các lệnh gọi hệ thống và các thuật toán bên trong thực hiện chúng tạo thành phần thân của hạt nhân [...]

[...] Hai thành phần chính của nó là hệ thống con tập tin và hệ thống con quy trình.

Các tệp được tổ chức thành các hệ thống tệp, được coi là các thiết bị logic; một thiết bị vật lý như đĩa có thể chứa một số thiết bị logic (hệ thống tệp). Mỗi hệ thống tệp có một siêu khối mô tả cấu trúc và nội dung của hệ thống tệp và mỗi tệp trong một hệ thống tệp được mô tả bằng một nút cung cấp các thuộc tính của tệp. Các cuộc gọi hệ thống thao tác các tập tin thực hiện thông qua các nút. [và vùng đệm]

[...] Có hai phiên bản của inode: bản sao đĩa lưu trữ thông tin inode khi tệp không được sử dụng và bản sao trong lõi ghi thông tin về các tệp đang hoạt động.

Việc thực thi các quy trình người dùng trên các hệ thống UNIX được chia thành hai cấp độ: người dùng và hạt nhân. Khi một quy trình thực hiện một cuộc gọi hệ thống, chế độ thực thi của quy trình sẽ thay đổi từ chế độ người dùng sang chế độ kernel : hệ điều hành thực thi và cố gắng phục vụ yêu cầu người dùng [...]

[...] Triết lý của hệ thống UNIX là cung cấp các nguyên hàm của hệ điều hành cho phép người dùng viết các chương trình nhỏ, mô-đun có thể được sử dụng làm các khối xây dựng để xây dựng các chương trình phức tạp hơn. Một trong những nguyên thủy có thể nhìn thấy bao người dùng là khả năng chuyển hướng I / O .

[...] Ngoài việc phục vụ các cuộc gọi hệ thống, kernel còn ghi sổ chung cho cộng đồng người dùng, kiểm soát lập lịch quy trình, quản lý lưu trữ và bảo vệ các tiến trình trong bộ nhớ chính, bảo vệ các ngắt, quản lý tệp và thiết bị và xử lý lỗi hệ thống điều kiện.

Nếu bạn quan tâm đến việc triển khai các hạt nhân khác nhau trong các hệ điều hành giống như unix, bạn cũng có thể xem triển khai FreeBSD (4.4BSD) hoặc tại nhân Mach hoặc xem xét so sánh các tính năng này của chúng.

Bạn càng biết nhiều về thiết kế của UNIX, bạn càng hiểu những gì đã xảy ra trong sơ đồ sau về tổ tiên của UNIX và lịch sử của nó . Ông Bach đang nói chủ yếu về Hệ thống V trong cuốn sách của mình nhưng ông cũng thảo luận về BSD:

nhập mô tả hình ảnh ở đây

nhiều thứ hơn là bắt mắt . Chẳng hạn, Mac OSX được chứng nhận UNIX03 nhưng bạn có thấy nó được kết nối với bất kỳ UNIX thuần nào (chủ yếu là màu đỏ) không?

nhập mô tả hình ảnh ở đây

Ở trên bạn có thể thấy BSD, GNU, Microsoft và các cá nhân đa dạng đã đóng góp cho vũ trụ này như thế nào. Mặc dù GNU và cuối cùng là linux không có dòng dõi trực tiếp với UNIX, bạn thấy rằng GNU là một nỗ lực để tái thiết kế trong thế giới nguồn mở, các công cụ và phần mềm từ UNIX thương mại đã bị đóng. Vì vậy, nhìn vào phần mềm được duy trì GNU đưa ra một ý tưởng ví dụ tại các ứng dụng và thư viện nguyên mẫu ban đầu.

Các cuộc chiến cấp phép đã đóng một vai trò trong sự tiến hóa (và đôi khi đình trệ) của UNIX. Bạn có thể thấy ngay rằng các UNIX được xếp theo loại giấy phép - đóng so với BSD ( BSD cho phép tạo mã nguồn đóng ... xem OSX) và GPL cho phép Linux và GNU tự bổ sung trong thế giới copyleft. Đây là bản đồ cổ điển của kernel linux do Linus Torvalds phát triển ban đầu, nó cũng tiết lộ những gì kernel "có thể" có trong một hệ điều hành giống Unix:

nhập mô tả hình ảnh ở đây

Điều này gợi ý về ý tưởng rằng kiểu thiết kế " kernel " không phải là thứ tạo ra tiêu chuẩn UNIX hoặc định nghĩa một hệ điều hành giống như unix. Điều này được chứng minh bằng thực tế là nhiều hệ điều hành giống như unix có thể có nhân nguyên khối hoặc nhân vi mô - nguyên khối là kiểu thiết kế cổ điển cho UNIX. Trên thực tế, ngay cả trong các UNIX thuần, HPUX có một hạt nhân nguyên khối trong khi AIX sử dụng một hạt nhân. Cuộc tranh luận về thiết kế này là về hiệu năng và không liên quan đến tổ tiên hoặc danh tính Unix. Mặt khác, có một cách tiếp cận khái niệm truyền thống để cung cấp dịch vụ cho phần mềm, xử lý các hệ thống tệp, v.v. trong các hệ điều hành giống như UNIX / unix.

Tôi tin rằng những cân nhắc như vậy sẽ thêm bối cảnh vào phần hệ điều hành trong câu hỏi của bạn.


3
+1 Một số điểm hay ở đây: 1) Về mối quan hệ giữa C và Unix (để thêm: C được AT & T Bell phát triển để triển khai Unix với ngôn ngữ có thể nhanh như lắp ráp nhưng di động trên các phần cứng khác nhau và rất nhiều POSIX là một phần mở rộng cho tiêu chuẩn C). 2) Thiết kế kernel đó độc lập với các tiêu chuẩn. Tiêu chuẩn là "cái gì", hạt nhân là "làm thế nào".
goldilocks

1
@goldilocks Cảm ơn bạn, tôi đã thêm nhận xét của bạn về C nguyên văn. Tôi đã cố gắng làm rõ rằng các cân nhắc về kernel không liên quan đến tiêu chuẩn. Câu hỏi giả định rằng có một cái gì đó cụ thể về hạt nhân giống như unix nhưng không có. Mặt khác, về mặt lịch sử, các hạt nhân Unix đầu tiên có thể đã theo cách như vậy và như vậy. Sự hiểu biết của tôi còn hạn chế, nhưng tôi cho rằng hạt nhân đã thay đổi rất nhiều vì phần cứng đã thay đổi rất nhiều kể từ những năm 70. Điều rõ ràng là kernel không định nghĩa giống Unix / unix, nghĩ rằng kernel linux định nghĩa rõ ràng GNU / Linux hoặc Linux.
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.