System call là gì? Sử dụng System call như thế nào?

Trong hệ điểu hành có rất nhiều quá trình, luồng chạy trong từng mi-li giây, vậy liệu có cơ chế nào cho chúng giao tiếp với nhau? Bài sau đây sẽ giải thích cơ bản cho bạn biết về System Call, cũng như cách chúng gọi API trong hệ điều hành.

System call là gì?

System call cho người dùng cách tiếp cận những tiện ích/ dịch vụ của hệ điều hành. Mọi phương thức của người dùng qua giao diện (GUI), tập lệnh (Batch) hay câu lệnh (command line, như cmd trong window) đều có cùng mục đích chung là gọi system call, để yêu cầu hệ điều hành thực hiện tác vụ cho mình.

Thông thường, những system call được viết bằng ngôn ngữ lập trình C hoặc C++, hoặc assemble, đây là những ngôn ngữ lập trình cấp thấp (low-level), tức có khả năng tiếp cận trực tiếp đến bộ nhớ hay phần cứng máy tính.

Wikipedia
Linux System Call
Linux System Call

Sử dụng system call như thế nào

Trước hết, chúng ta cần hiểu system call được sử dụng như thế nào: Giả sử có một chương trình đơn giản có tác vụ đọc dữ liệu trong một file, và sao chép nó qua một file khác.

Để chương trình hoạt động bình thường, chương trình cần phải đọc tên của 2 file (system call 1: đọc file).

  • Nếu có lỗi xảy ra, chương trình phải xuất một dòng báo lỗi ra màn hình cho người dùng (system call 2: xuất ra màn hình) và thoát chương trình ngay (system call 3: thoát).
  • Nếu không có lỗi, sẽ đến một vòng lặp liên tục mà chương trình phải đọc từng dòng bên file này, và sao chép nó qua file kia (system call 4: sao chép).

Nếu file đầu ra (file được sao chép dữ liệu đến) trùng tên file với một file có sẵn trong thư mục, phải tự tạo tên đuôi khác cho file (system call 5: tạo tên đuôi) hoặc không cho phép sao chép. Nếu ổ cứng có vấn đề trong việc đọc và ghi, phải được xuất tên lỗi cho người dùng (lại một system call nữa). Khi sao chép thành công, phải xuất ra màn hình báo người dùng “đã thành công”.

Như có thể thấy, một chương trình đơn giản cần tạo ra rất nhiều system call. Thông thường, một hệ thống máy tính thực thi hàng trăm system call mỗi giây.

API là gì

Đa số những lập trình viên không nhìn chi tiết đến vậy. Mà những lập trình viên ứng dụng thiết kế chương trình chạy bằng giao diện lập trình ứng dụng (application programming interface, gọi tắt là API). API là những hàm (function) có sẵn cho các cho các lập trình viên.

Các loại API phổ biến nhất:

  • Window API của hệ điều hành Window
  • POSIX API cho các hệ điều hành chạy nền tảng POSIX
  • Java API cho các chương trình chạy trên máy ảo Java

Một lập trình viên có thể truy cập API thông qua các hàm có sẵn trong các thư viện của hệ điều hành. Nếu hệ điều hành được viết bằng ngôn ngữ lập trình C (Unix hay Linux), tên của thư viện đó là libc. Và các hàm đó có chức năng gọi system call thay các lập trình viên.

Ví dụ của một API chuẩn:

Api
Api

Một chương trình có sử dụng hàm read() (đọc) phải “include” thư viện unistd.h. Khi đọc thành công, Số lượng byte đã đọc sẽ được trả về.

Tại sao các lập trình viên thích sử dụng API hơn sử dụng thẳng system call?

Đó là vì:

  • Đa hỗ trợ: lập trình sử dụng API có thể chạy trên các hệ điều hành khác nhau nếu chúng có hỗ trợ cùng API.
  • Dễ hơn: hệ thống thật sẽ vô cùng chi tiết và khó lập trình.
System Call Interface

Với đa số các ngôn ngữ lập trình, sẽ có một lớp ngăn cách giữa các ứng dụng và hệ điều hành gọi là system call interface. Các ứng dụng trên máy tính muốn xài chức năng nào, dịch vụ nào của hệ điều hành phải gọi thông qua lớp này. Mỗi dịch vụ của hệ điều hành đều được đánh số, hệ điều hành sẽ tìm trong hệ thống của mình và sẽ trả về dịch vụ có số đánh tương ứng cho các ứng dụng.

Trả lời