Câu trả lời:
Thực sự không có thứ gọi là "cuộc gọi thư viện". Bạn có thể gọi một chức năng được liên kết với một thư viện chia sẻ. Và điều đó chỉ có nghĩa là đường dẫn thư viện được tra cứu trong thời gian chạy để xác định vị trí của hàm cần gọi.
Các cuộc gọi hệ thống là các cuộc gọi kernel cấp thấp được xử lý bởi kernel.
Nếu bạn nhập man man
vào trình bao của mình, bạn sẽ thấy danh sách các phần thủ công
2 Cuộc gọi hệ thống (các chức năng được cung cấp bởi kernel)
3 cuộc gọi thư viện (chức năng trong thư viện chương trình)
Chẳng hạn, bạn sẽ tìm thấy chmod
trong phần 2 của hướng dẫn khi gõ man chmod
. Và fprintf
trong phần 3.
Các cuộc gọi hệ thống được xử lý trực tiếp bởi kernel.
Các cuộc gọi thư viện được xử lý bởi một thư viện động (hoặc liên kết tĩnh). Chương trình thực hiện cuộc gọi thư viện trước tiên phải nhập thư viện đó, trước khi cuộc gọi sẽ hoạt động. Thư viện gọi chính họ có thể sử dụng các cuộc gọi hệ thống.
Đôi khi các thư viện được cung cấp dưới dạng "giao diện người dùng" cho các cuộc gọi hệ thống, để cung cấp thêm chức năng hoặc dễ sử dụng không được cung cấp bởi kernel.
Các cuộc gọi hệ thống là các chức năng mà hệ điều hành cung cấp cho các ứng dụng sử dụng. Trong khi đó các hàm như các hàm trong math.h, string.h, v.v. là những hàm không liên quan gì đến việc can thiệp vào hệ điều hành.
Về cơ bản có hai chế độ của linux kernel viz.
Bất kỳ kernel linux nào cũng tự chuyển đổi qua lại giữa hai chế độ này. Nói chung, các cuộc gọi Thư viện được thực thi trong chế độ Người dùng và Cuộc gọi hệ thống được thực hiện trong chế độ Kernel . Về mặt hệ điều hành, chế độ Kernel là nguyên tử và ở chế độ Giám sát. Hầu như tất cả các cuộc gọi Thư viện cần sự trợ giúp từ kernel để thực hiện các nhiệm vụ của nó. Mỗi thư viện lần lượt gọi các cuộc gọi hệ thống cơ bản. Hãy để chúng tôi làm cho ý tưởng rõ ràng hơn bằng cách sử dụng ví dụ sau đây
Bất cứ khi nào trong chương trình c, bạn sử dụng fopen () từ tệp tiêu đề. Môi trường lập trình gọi hệ thống gọi open () từ kernel và thực hiện tác vụ mở tệp của nó. Một lần nữa sau khi thực hiện, điều khiển luồng trở về chế độ người dùng.
Để minh họa điều này thực hiện các nhiệm vụ sau
man man
: ở đây bạn sẽ tìm thấy phần thủ công từ 1-8 mỗi mục đích cụ thể.man fopen
: bạn sẽ thấy respose như FOPEN(3)
, ở đây 3 chỉ ra phần 3 thủ công của trang man là phần gọi thư viện c.Đừng man open
: bạn sẽ thấy respose nhưOPEN(2)
, ở đây 2 chỉ ra phần 2 thủ công của trang man là phần gọi hệ thống.
Hy vọng bạn hiểu khái niệm.
Chỉ cần thêm vào sự khác biệt được đề cập ở đây trong các câu trả lời khác.
Vì một cuộc gọi thư viện chỉ đơn giản là một cuộc gọi chức năng, không có chuyển đổi từ không gian người dùng sang không gian kernel xảy ra. Mặt khác, một cuộc gọi hệ thống dẫn đến việc chuyển từ không gian người dùng sang không gian kernel vì cuộc gọi hệ thống hoạt động ở chế độ kernel.