Tôi đã xem qua câu trả lời của câu hỏi này nhưng không hiểu lắm về sự khác biệt giữa các cuộc gọi hệ thống và chức năng thư viện. Về mặt khái niệm, sự khác biệt giữa hai là gì?
Tôi đã xem qua câu trả lời của câu hỏi này nhưng không hiểu lắm về sự khác biệt giữa các cuộc gọi hệ thống và chức năng thư viện. Về mặt khái niệm, sự khác biệt giữa hai là gì?
Câu trả lời:
Về mặt khái niệm, một chức năng thư viện là một phần của quy trình của bạn.
Trong thời gian chạy, mã thực thi của bạn và mã của bất kỳ thư viện nào (chẳng hạn như libc.so), nó phụ thuộc vào, được liên kết thành một quy trình duy nhất. Vì vậy, khi bạn gọi một hàm trong một thư viện như vậy, nó sẽ thực thi như một phần của quy trình của bạn, với cùng các tài nguyên và đặc quyền. Đó là ý tưởng tương tự như gọi một chức năng mà bạn tự viết (với các trường hợp ngoại lệ có thể xảy ra như chức năng PLT và / hoặc trampoline, bạn có thể tìm kiếm nếu bạn quan tâm).
Về mặt khái niệm, một cuộc gọi hệ thống là một giao diện đặc biệt được sử dụng để thực hiện cuộc gọi từ mã của bạn (thường không có đặc quyền) đến kernel (có quyền nâng cấp đặc quyền khi cần thiết).
Ví dụ, xem người đàn ông Linux brk . Khi một chương trình C gọi malloc
để phân bổ bộ nhớ, nó đang gọi một hàm thư viện trong glibc.
Nếu đã có đủ không gian cho việc phân bổ trong quy trình , nó có thể thực hiện bất kỳ quản lý heap cần thiết nào và trả lại bộ nhớ cho người gọi.
Nếu không, glibc cần yêu cầu thêm bộ nhớ từ kernel: nó (có thể) gọi brk
hàm glibc, đến lượt nó gọi là tòa nhà brk
. Chỉ khi điều khiển được chuyển đến kernel, thông qua tòa nhà, có thể sửa đổi trạng thái bộ nhớ ảo toàn cầu để dự trữ thêm bộ nhớ và ánh xạ nó vào không gian địa chỉ của tiến trình của bạn.
Thêm vào câu trả lời vô dụng: Các
chức năng của thư viện nhanh hơn các cuộc gọi hệ thống và thường không chứa các cân nhắc về quyền / bảo mật, vì chúng đang chạy với các đặc quyền của quy trình và đó là bộ nhớ.
Mặt khác, các tòa nhà, vì chúng chạy trong kernel, có quyền truy cập vào mọi thứ trong hệ thống, và vì vậy chúng cần kiểm soát quá trình gọi có thể làm gì khi gọi chúng (xác minh rằng nó có quyền mở tệp, cho ví dụ), ngoài ra, vì các tòa nhà cao tầng nằm trong kernel, nên việc gọi chúng đòi hỏi một công tắc ngữ cảnh trong CPU, đây là một quá trình rất nặng nề so với việc chỉ gọi một cuộc gọi thư viện.
Các tòa nhà thường phản ánh việc sử dụng CPU hệ thống trong các chương trình giám sát.
cuộc gọi thư viện - gọi một chương trình con được liên kết vào ứng dụng (thông qua bao gồm hoặc thêm thư viện).
cuộc gọi hệ thống - chuyển điều khiển sang HĐH (người dùng-> hệ thống Proc-> HĐH) và đặt bộ xử lý ở chế độ đặc quyền