Điểm:-2

Tại sao một hệ điều hành muốn tuân thủ POSIX?

lá cờ de

Vấn đề lớn xung quanh POSIX là gì và cách nó can thiệp vào việc sử dụng chung của Hệ điều hành?

joeqwerty avatar
lá cờ cv
Làm thế nào để nó can thiệp, chính xác? Tôi không hiểu những gì bạn đang hỏi.
Ricardo Silva avatar
lá cờ de
@joeqwerty câu hỏi giống như, nếu một hệ điều hành không tuân thủ POSIX, thì hậu quả là gì, nó có cản trở việc sử dụng hệ điều hành hay nó không thực hiện bất kỳ thay đổi nào?
lá cờ jm
Nếu ứng dụng của bạn yêu cầu tuân thủ POSIX thì nó sẽ bị ảnh hưởng. Nếu bạn đang viết một ứng dụng cụ thể cho một hệ điều hành cụ thể thì độ khó có thể khác nhau. Tuân thủ POSIX có thể làm cho các ứng dụng di động hơn.
Ricardo Silva avatar
lá cờ de
@ doneal24 cảm ơn rất nhiều cho câu trả lời... thực ra vấn đề lớn là nếu bạn đang viết một ứng dụng để chạy trên HĐH tuân thủ POSIX, bạn có thể (hoặc không?) cũng phải viết một ứng dụng tuân thủ, nếu không thì nó sẽ ảnh hưởng đến việc chạy ứng dụng đó, đúng không?
lá cờ jm
Không. Miễn là bạn tuân theo các API do HĐH cung cấp thì bạn vẫn ổn. Có rất nhiều tiêu chuẩn mà bạn có thể làm theo.Ví dụ: thư viện GNU C tương thích với ISO C11, POSIX.1-2008, BSD và một số API dành riêng cho hệ điều hành. Liên kết [xkcd](https://xkcd.com/927) bắt buộc.
Điểm:1
lá cờ jo

Một phép loại suy hợp lý sẽ là học lái xe. Có tồn tại các quy tắc, giao thức để tuân theo và các tiêu chuẩn về chất lượng và độ bền ở cả xe và người lái.

  • Xe có vô lăng.
  • Một số có hộp số tay và một số là tự động.
  • Bạn (ở hầu hết các quốc gia) lái xe ở bên phải đường.
  • Biển báo hướng dẫn cách lái xe trên một con đường cụ thể.
  • Các đơn vị đo lường (hầu hết) tính bằng km/h.
  • Nhiên liệu lấy trong xe là một hỗn hợp và tiêu chuẩn nhất định.
  • Người lái xe được đào tạo và phải tuân theo một tiêu chuẩn nhất định về lái xe.

Bây giờ, bạn có thể gợi ý (mặc dù tôi không phải là người có văn hóa và tự cho mình một số giấy phép thơ mộng) rằng các con đường ở châu Âu "tuân thủ các tiêu chuẩn" với nhau, chẳng hạn như nếu bạn học lái xe ở Tây Ban Nha, bạn có thể lái xe đến bất cứ đâu ở châu Âu, có khả năng là với cùng một chiếc ô tô hoặc ít nhất có thể là một chiếc ô tô khác, nơi tất cả các phụ tùng và gậy đều ở vị trí mà bạn có thể mong đợi.

Ví dụ, bạn có thể phát minh ra một cách lái xe hoàn toàn mới, có thể với các biển báo hoàn toàn khác, mà bạn lái xe ở hai bên đường, sử dụng cần điều khiển để lái xe và bạn đo khoảng cách của mình theo đơn vị khối trên giờ, tuy nhiên, chuyển sang hệ thống đó từ cái mà bạn đã từng sử dụng đòi hỏi cả một con thuyền nhiều nỗ lực hơn.

Loại POSIX phù hợp với một mô hình tương tự nhưng thay vì ô tô, đường xá, tốc độ và điểm đến, nó đề cập đến đầu vào, tin nhắn, chương trình, đầu ra và tính năng.

Nói chung, tốt nhất (với tư cách là lập trình viên và người dùng) là có sẵn các quy tắc nhất định quản lý các tính năng/chức năng và đầu vào/đầu ra, vì vậy bạn có thể viết một chương trình phù hợp với các tiêu chuẩn này và sau đó không cần nỗ lực nhiều để xây dựng lại chương trình tương tự để chạy trên đó một hệ thống khác, cũng có các đầu vào/đầu ra giống nhau.

Ví dụ, hệ thống Linux gọi đọcviết tuân thủ posix. Chúng lấy một số đầu vào nhất định, theo một thứ tự nhất định và trả lại một số đầu ra nhất định với các quy tắc chi phối đầu ra có thể là gì hoặc đại diện trong những trường hợp nhất định.

Bạn có thể viết một chương trình trên Linux để mở hai tệp, sử dụng đọcviết để truyền dữ liệu giữa chúng và đóng chúng lại. Sau đó, có khả năng xây dựng lại nó để chạy trên máy Mac mà không phải viết lại mã nguồn cơ bản.

Tuy nhiên, bạn cũng có thể thực hiện thao tác chính xác như vậy -- nhanh hơn nhiều -- bằng cách mở hai tệp, sử dụng Gửi file lệnh gọi hệ thống để di chuyển dữ liệu giữa chúng và đóng lại (trừ khi bạn đang sử dụng các nhân rất cũ). Rắc rối ở đây là Gửi file cuộc gọi hệ thống không phải Tuân thủ POSIX -- bạn không thể đảm bảo rằng cuộc gọi hệ thống như vậy tồn tại đúng cách trên hệ thống để thực hiện những gì bạn muốn.

Trên thực tế, nếu bạn xem trang Mac man để biết Gửi file gọi, mặc dù được gọi là cùng một hoạt động, nhưng nó có một bộ tham số khác và cung cấp các tính năng khác nhau (đồng thời, về mặt kỹ thuật, bạn thực sự không thể sử dụng nó để sao chép từ tệp này sang tệp khác trên đĩa).

Do đó bạn sẽ không thể chạy chương trình bằng linux Gửi file có thể dự đoán được trên một hệ thống ít nhất là nhanh chóng mà không cần thay đổi chương trình hoặc sử dụng một số lớp tương thích khác.

Đây là lý do tại sao mọi người quan tâm đến POSIX. Nó tránh phát minh lại bánh xe và có khả năng cho phép bạn chuyển sang một hệ điều hành 'tuân thủ posix' tổng thể tốt hơn hoặc ít nhất, tập trung vào việc cung cấp sản phẩm của bạn thay vì lo lắng về chất lượng vật liệu được sử dụng để xây dựng nền tảng.

Tôi đã bỏ qua phần lớn vấn đề về thời điểm POSIX không thực sự được tuân thủ hoàn toàn và hoàn toàn ngay cả bởi những người cho rằng hệ thống của họ tuân thủ POSIX, nhưng đó là ý chính của khái niệm.

Một điểm cuối cùng tôi muốn làm rõ. Nếu bạn viết mã theo mẫu số chung thấp nhất của một tiêu chuẩn (như POSIX), bạn sẽ bỏ lỡ cơ hội đạt được hiệu suất lớn mà lẽ ra bạn có thể tận dụng bằng cách sử dụng các tiện ích mở rộng không chuẩn trên hệ điều hành mà bạn đang viết mã.

Vì vậy, đây cũng là một lựa chọn thiết kế, nếu bạn đang hướng tới hiệu suất cao/thông lượng cao thì để đạt được điều đó, bạn có thể không viết mã để tuân thủ POSIX.

Mặc dù vậy, việc thuê một lập trình viên biết cách lập trình 'posixally' (biết cách mở, đọc, viết pthreadđóng lại hoạt động trong POSIX) sẽ dễ dàng hơn nhiều so với việc thuê ai đó chỉ lập trình theo một số tiêu chuẩn kỳ lạ không được sử dụng.

Vì vậy, nó không chỉ là về hiệu suất (những chiếc xe), mà còn là khả năng thích ứng (sự thành thạo của họ trong việc điều khiển chiếc xe).

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.