Chào bạn,
Không hiểu sao mình hơi khó hiểu sự khác biệt giữa vai trò của API và giao diện gọi hệ thống (system-call interface). Theo mình hiểu, API là tập hợp các hàm cho phép bạn truy cập vào một số tính năng nhất định của hệ điều hành. Hiện tại mình đang học môn Khái niệm Hệ điều hành, và cuốn sách mình đang đọc có viết:
Môi trường thời gian chạy cung cấp một giao diện gọi hệ thống đóng vai trò là cầu nối đến các lời gọi hệ thống do hệ điều hành cung cấp. Giao diện gọi hệ thống chặn các lời gọi hàm trong API và gọi các lời gọi hệ thống cần thiết trong hệ điều hành. [...] Giao diện gọi hệ thống sau đó gọi lời gọi hệ thống dự định trong nhân hệ điều hành và trả về trạng thái của lời gọi hệ thống.
Ngoài ra, trên Wikipedia có viết:
Nói chung, các hệ thống cung cấp một thư viện hoặc API nằm giữa các chương trình thông thường và hệ điều hành. Trên các hệ thống giống Unix, API đó thường là một phần của việc triển khai thư viện C (libc), chẳng hạn như glibc, cung cấp các hàm bao bọc cho các lời gọi hệ thống, thường được đặt tên giống như các lời gọi hệ thống mà chúng gọi. [...] Các hàm bao bọc của thư viện thể hiện một quy ước gọi hàm thông thường (một lời gọi thủ tục con ở cấp độ assembly) để sử dụng lời gọi hệ thống [...].
Vậy là mình hiểu API là các hàm trong thư viện cần thiết để truy cập vào các lời gọi hệ thống cấp thấp thực tế, nhưng giao diện gọi hệ thống đóng vai trò gì? Điều này có nghĩa là API không thực sự là thứ thực hiện chuyển đổi từ lời gọi hàm sang lời gọi hệ thống, vì có một giao diện gọi hệ thống ở giữa? Trong trường hợp đó, API làm gì và giao diện gọi hệ thống làm gì?
Ngoài ra, có một hình ảnh đính kèm từ cuốn sách được dùng để giải thích cách thức hoạt động của một lời gọi hệ thống:
Hình ảnh từ Khái niệm Hệ điều hành liên quan đến khái niệm này
Liệu hàm open() có phải là API trong trường hợp này không, vì nó không phải là lời gọi hệ thống trực tiếp? Vậy giao diện gọi hệ thống sẽ làm gì?
Ví dụ, mình hiểu rằng API Windows cung cấp một hàm, CreateProcess() được dùng để gọi lời gọi hệ thống NTCreateProcess() thực tế. Phải chăng giao diện gọi hệ thống mới là thứ thực hiện kết nối giữa API và lời gọi hệ thống?
Rất mong nhận được sự giúp đỡ :)