Bạn có thể đã bắt gặp thuật ngữ POSIX. Bạn đã bao giờ tự hỏi nó là gì và tại sao các lập trình viên thường thảo luận về việc tuân thủ POSIX chưa?

Bạn sẽ nghe thấy từ viết tắt hoặc đọc về nó: POSIX, trên các bảng và bài báo trực tuyến khác nhau. Các lập trình viên và nhà phát triển hệ thống dường như lo lắng về điều đó nhất. Nghe có vẻ bí ẩn và, trong khi có nhiều nguồn tốt về chủ đề này, một số diễn đàn thảo luận (ngắn gọn là một phần bản chất của họ), không đi sâu vào chi tiết nó là gì và điều này có thể dẫn đến nhầm lẫn. Vậy thì POSIX thực sự là gì?

POSIX là gì?

POSIX là viết tắt của Portable Operating System Interface – là một bộ tiêu chuẩn được phát triển bởi tổ chức IEEE (Institute of Electrical and Electronic Engineers) với mục đích tạo ra các sản phẩm tương thích linh động (portable) giữa các hệ điều hành.

Việc tuân thủ tiêu chuẩn đảm bảo khả năng tương thích khi các chương trình UNIX được di chuyển từ nền tảng UNIX này sang nền tảng UNIX khác. Trọng tâm của POSIX chủ yếu là các tính năng từ System V UNIX và BSD UNIX của AT&T.

Một tiêu chuẩn phải được đánh vần và tuân theo các quy tắc về cách đạt được mục tiêu về khả năng tương tác giữa các hệ điều hành. POSIX bao gồm những thứ như: System interface, Commands and Utilities, Network File Access … – POSIX còn nhiều thứ khác.

Tại sao lại là POSIX?

Chúng ta có thể dùng 1 từ để nói về POSIX: tính di động (portable).

Hơn 60 năm trước, các lập trình viên phải viết lại code hoàn toàn nếu họ muốn phần mềm của họ chạy trên nhiều hệ thống. Điều này không thường xuyên xảy ra do chi phí liên quan, nhưng tính di động đã trở thành một tính năng vào giữa những năm 1960 – không phải thông qua POSIX – mà là trong mạng lưới máy tính lớn.

IBM đã giới thiệu dòng máy tính lớn System/360. Các kiểu máy khác nhau có những chuyên môn riêng, nhưng phần cứng sao cho chúng có thể sử dụng cùng một hệ điều hành: OS/360.

Hệ điều hành không chỉ có thể chạy trên các kiểu máy khác nhau mà các ứng dụng cũng có thể chạy trên chúng. Điều này không chỉ giữ cho chi phí thấp mà còn tạo ra các hệ thống máy tính – các hệ thống trên một dòng sản phẩm có thể hoạt động cùng nhau. Tất cả đều phổ biến ngày nay – mạng và hệ thống, nhưng hồi đó, đây là một vấn đề lớn!

Hệ thống IBM 360 | Tín dụng hình ảnh: IBM

Khi UNIX xuất hiện, cùng lúc đó, nó cũng cho thấy nhiều hứa hẹn ở chỗ nó có thể hoạt động trên các máy của các nhà sản xuất khác nhau. Tuy nhiên, khi UNIX bắt đầu rẽ nhánh thành các hương vị khác nhau, việc chuyển code qua các biến thể UNIX này trở nên khó khăn. Lời hứa về tính di động của UNIX đã mất đi vị thế.

Để giải quyết vấn đề về tính di động này, POSIX đã được thành lập vào những năm 1980. Tiêu chuẩn được xác định dựa trên System V UNIX và BSD UNIX của AT&T, hai biến thể lớn nhất vào thời điểm đó. Điều quan trọng cần lưu ý là POSIX không được hình thành để kiểm soát cách hệ điều hành được xây dựng – bất kỳ công ty nào cũng có thể tự do thiết kế biến thể UNIX của mình theo bất kỳ cách nào họ muốn. POSIX chỉ quan tâm đến cách ứng dụng giao tiếp với hệ điều hành. Theo cách nói của lập trình viên, một interface là phương thức mà code của một chương trình có thể giao tiếp với một chương trình khác. Interface mong đợi Chương trình A cung cấp một loại thông tin cụ thể cho Chương trình B. Tương tự như vậy, Chương trình A mong muốn Chương trình B trả lời lại bằng một loại dữ liệu cụ thể.

Ví dụ: nếu tôi muốn đọc một tệp bằng lệnh cat, tôi sẽ gõ một cái gì đó như thế này trên dòng lệnh:

cat myfile.txt

Không cần nói nhiều về lập trình, tôi sẽ chỉ nói rằng lệnh cat gọi hệ điều hành để tìm nạp tệp để cat có thể đọc nó. Cat đọc nó và sau đó hiển thị nội dung của tệp trên màn hình. Có rất nhiều tác động lẫn nhau giữa ứng dụng ( cat) và hệ điều hành. Cách thức hoạt động của sự tương tác này là điều mà POSIX quan tâm. Nếu sự tương tác có thể giống nhau trên các biến thể UNIX khác nhau, thì tính di động – bất kể hệ điều hành, nhà sản xuất và phần cứng – sẽ được lấy lại.

Các chi tiết cụ thể về cách thực hiện tất cả những điều này được xác định trong tiêu chuẩn.

Tuân thủ là tự nguyện

Tất cả chúng ta ít nhất đã nhìn thấy một thông báo như, “for help, type: xxxxx –help..” Điều này phổ biến trong Linux và không tuân thủ POSIX. POSIX không bao giờ yêu cầu dấu gạch ngang kép, họ mong đợi một dấu gạch ngang. Dấu gạch ngang kép đến từ GNU, tuy nhiên, nó không gây hại cho Linux và thêm một chút vào đặc điểm của nó. Đồng thời, Linux hầu như tuân thủ, đặc biệt khi nói đến system call interface. Đây là lý do tại sao chúng ta có thể chạy các ứng dụng X, GNOME và KDE trên Linux, Sys V UNIX và BSD UNIX. Các lệnh khác nhau, chẳng hạn như ls, cat, grep, find, awk và nhiều lệnh khác hoạt động giống nhau trên các biến thể khác nhau.

Theo quy định, tuân thủ là một bước sẵn sàng. Khi code tuân thủ, việc chuyển sang hệ thống khác sẽ dễ dàng hơn; rất ít code viết lại, nếu có, sẽ là cần thiết. Khi code có thể hoạt động trên các hệ thống khác nhau, việc sử dụng nó sẽ có thể được mở rộng hơn. Những người sử dụng các hệ thống khác có thể hưởng lợi từ việc sử dụng chương trình. Đối với những độc giả quan tâm đến lĩnh vực tuân thủ theo chuẩn của Linux, có thể tìm thấy nhiều thông tin hữu ích tại: Linux Standard Base .

Nhưng tôi không phải là lập trình viên hay nhà thiết kế hệ thống…

Nhiều người làm việc trên máy tính không phải là lập trình viên hay nhà thiết kế hệ điều hành. Họ là nhân viên ghi chép y tế, thư ký viết thư, báo cáo v.v. Những người khác như kế toán theo dõi doanh thu, điều hành các cửa hàng trực tuyến, viết sách và báo (và một số người trong chúng ta đã đọc chúng). Trong hầu hết mọi công việc, có lẽ luôn có một chiếc máy tính bên cạnh.

POSIX cũng ảnh hưởng đến những người dùng này, cho dù họ có biết hay không. Người dùng không cần phải tuân thủ tiêu chuẩn, nhưng họ mong đợi máy tính của họ hoạt động giống nhau trên các hệ điều hành khác nhau. Khi các hệ điều hành và chương trình tuân theo tiêu chuẩn POSIX, chúng sẽ có được lợi ích về khả dễ sử dụng hơn. Họ sẽ có thể chuyển từ hệ thống này sang hệ thống khác mà không cần phải học lại quá nhiều. Dữ liệu của họ sẽ vẫn có thể truy cập được và họ vẫn có thể thực hiện các thay đổi đối với dữ liệu đó.

POSIX, cũng như các tiêu chuẩn khác, liên tục phát triển. Khi công nghệ phát triển, tiêu chuẩn cũng vậy. Các tiêu chuẩn thực sự là một hệ thống đã được thống nhất bởi mọi người, nhà sản xuất, tổ chức, v.v. để thực hiện các nhiệm vụ một cách hiệu quả. Thiết bị từ một nhà sản xuất có thể hoạt động với thiết bị của nhà sản xuất khác. Hãy suy nghĩ về điều đó: Tai nghe Bluetooth của bạn có thể được sử dụng trên iPhone của Apple cũng như trên điện thoại Android. TV của chúng ta có thể kết nối và phát trực tuyến video và chương trình từ các mạng khác nhau, chẳng hạn như Amazon Prime, BritBox, Hulu – chỉ để nêu tên một số. Giờ đây, chúng ta thậm chí có thể theo dõi nhịp tim bằng điện thoại của mình. Tất cả những điều này đều có thể thực hiện được, phần lớn là một phần, từ việc tuân thủ các tiêu chuẩn.

Lợi ích phong phú. Tôi thích điều đó.

Vậy còn chữ X thì sao?

Tôi thừa nhận điều đó, tôi chưa bao giờ nói “X” dùng để làm gì trong POSIX. Opensource.com có ​​một bài viết xuất sắc trong đó Richard Stallman giải thích chữ “X” trong POSIX nghĩa là gì. Theo lời của anh ấy:

IEEE đã hoàn thành việc phát triển thông số kỹ thuật nhưng không có tên ngắn gọn cho nó. Tiêu đề nói gì đó đại loại như “portable operating system interface” có thể dịch là Giao diện Hệ điều hành có thể di động, mặc dù tôi không nhớ chính xác từ ngữ. Ủy ban đã đặt tên ngắn gọn là “IEEEIX”. Tôi không nghĩ rằng đó là một lựa chọn tốt. Thật khó để phát âm – nó sẽ giống như một tiếng hét kinh hoàng, “Ayeee!” – vì vậy tôi mong mọi người thay vào đó sẽ gọi thông số kỹ thuật là “Unix”.

Vì GNU không phải Unix, và nó được dùng để thay thế Unix, nên tôi không muốn mọi người gọi GNU là “hệ thống Unix”. Do đó, tôi đã đề xuất một cái tên ngắn gọn mà mọi người có thể thực sự sử dụng. Không có nguồn cảm hứng cụ thể nào, tôi đã tạo ra một cái tên theo cách không thông minh hơn: Tôi lấy các chữ cái đầu của “hệ điều hành di động” và thêm “ix”. IEEE đã háo hức chấp nhận điều này.

Tuân thủ POSIX như nào?

Để tuân thủ POSIX (Portable Operating System Interface), một chương trình phải sử dụng các interface và hàm được định nghĩa trong tiêu chuẩn POSIX để đảm bảo tính di động giữa các hệ điều hành khác nhau.

Điều này có nghĩa là chương trình phải sử dụng các hàm, giao diện, và tệp tiêu chuẩn POSIX như <unistd.h>, <fcntl.h>, <stdio.h>, và <stdlib.h> để thực hiện các tác vụ như quản lý tệp tin, chế độ quyền truy cập, đọc và ghi tệp tin, và nhiều chức năng khác.

Ngoài ra, chương trình cũng phải đảm bảo sử dụng các quy ước đặt tên, định dạng thư mục và các quy định khác được định nghĩa trong POSIX để đảm bảo di động giữa các hệ điều hành khác nhau.

Vì vậy, khi viết chương trình theo tiêu chuẩn POSIX, lập trình viên cần phải đọc và hiểu các quy định và hướng dẫn được định nghĩa trong tài liệu của POSIX và sử dụng các giao diện và hàm đã được định nghĩa trong tiêu chuẩn này.

Ví dụ về viết code chuẩn POSIX

Một ví dụ về POSIX là hàm “open” trong C, được sử dụng để mở một tệp tin. Đây là một ví dụ về sử dụng POSIX trong mã nguồn C:

#include <fcntl.h>
#include <stdio.h>

int main()
{
    int fd;
    char buffer[256];

    fd = open("example.txt", O_RDONLY);
    if (fd == -1) {
        perror("open");
        return 1;
    }

    read(fd, buffer, 256);
    printf("%s\n", buffer);

    close(fd);
    return 0;
}

Trong đoạn code này, chúng ta sử dụng function open trong C với các tham số “example.txt” và O_RDONLY. Các tham số này tuân theo chuẩn POSIX để mở tệp tin và đọc nội dung của tệp tin trong việc sử dụng function “open” với tham số “example.txt” và O_RDONLY. Các tham số này được định nghĩa trong các tệp tiêu chuẩn POSIX như <fcntl.h>, và được sử dụng để mở và đọc tệp tin một cách có thể di động trên các hệ điều hành khác nhau.

Một ví dụ khác dễ hiểu hơn về sử dụng POSIX trong C là hàm “sleep”, được sử dụng để ngừng thực thi chương trình trong một khoảng thời gian nhất định.

Đây là một đoạn code đơn giản sử dụng hàm “sleep” trong POSIX:

#include <unistd.h>
#include <stdio.h>

int main() {
    printf("Start\n");
    sleep(5);
    printf("End\n");
    return 0;
}

Trong đoạn code này, hàm “sleep” trong POSIX được sử dụng với tham số là số giây cần sleep trước khi tiếp tục thực thi chương trình. Function này sẽ dừng thực thi chương trình trong 5 giây trước khi in ra “End”.

Đoạn code đã tuân thủ theo việc sử dụng các function, interface, và file tiêu chuẩn POSIX như <unistd.h>, <fcntl.h>, <stdio.h>, và <stdlib.h> để thực hiện các tác vụ như quản lý file, chế độ quyền truy cập, đọc và ghi tệp tin, và nhiều chức năng khác.

Phần kết luận

Tiêu chuẩn POSIX cho phép các nhà phát triển tạo các ứng dụng, công cụ và nền tảng trên nhiều hệ điều hành bằng cách sử dụng nhiều code giống nhau. Viết code theo tiêu chuẩn không bắt buộc, nhưng nó giúp ích rất nhiều khi bạn muốn chuyển code của mình sang các hệ thống khác.

Về cơ bản, POSIX hướng tới các nhà thiết kế hệ điều hành và nhà phát triển phần mềm, nhưng với tư cách là người dùng hệ thống, chúng ta bị ảnh hưởng bởi POSIX cho dù chúng ta có thể nhận ra điều đó hay không. Chính nhờ tiêu chuẩn mà chúng ta có thể làm việc trên một hệ thống UNIX hoặc Linux và mang công việc đó sang hệ thống khác và làm việc trên hệ thống đó mà không gặp trục trặc. Là người dùng, chúng ta sẽ nhận được nhiều lợi ích về khả năng sử dụng và tái sử dụng dữ liệu trên các hệ thống.

0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments