Sự khác biệt giữa cuộc gọi Thư viện và Cuộc gọi hệ thống trong Linux là gì?


13

Tôi muốn biết sự khác biệt giữa cuộc gọi Thư viện và cuộc gọi Hệ thống trong Linux. Bất kỳ con trỏ cho một sự hiểu biết tốt về các khái niệm đằng sau cả hai sẽ được đánh giá rất cao.

Câu trả lời:


9

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.


Vì vậy, nếu ai đó hỏi câu hỏi trên tôi có thể hiểu đó là sự khác biệt giữa một cuộc gọi hệ thống và một cuộc gọi chức năng.
Sen

"man ltrace" đưa ra "Trình theo dõi cuộc gọi thư viện" của tôi :)
ysdx

8

Nếu bạn nhập man manvà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 chmodtrong phần 2 của hướng dẫn khi gõ man chmod. Và fprintftrong phần 3.


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 thư viện không nhất thiết phải được xử lý bởi một thư viện động. Các thư viện có thể được liên kết tĩnh để không cần nhập (tải).
jlliagre

Thật. Tôi đã thêm thông tin đó.
LawrenceC

Chỉ một nửa trong số đó ...
jlliagre

Không nên hoạt động trong tập tin chỉ là một phần của các cuộc gọi thư viện?

1

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.


1

Về cơ bản có hai chế độ của linux kernel viz.

  1. Chế độ người dùng,
  2. Chế độ hạt nhân.

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ùngCuộ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

  1. fopen (): là một cuộc gọi Thư viện,
  2. open (): là một cuộc gọi hệ thống.

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

  1. 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ể.
  2. Do 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.
  3. Đừ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.


Hạt nhân chỉ có một chế độ, chế độ kernel. Quá trình người dùng có hai chế độ hoạt động họ chuyển đổi qua lại, userland và kernel.
jlliagre

1

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.