2009-02-21 37 views

Trả lời

30

Cuộc gọi hệ thống là các chức năng của hệ điều hành, như trên UNIX, chức năng malloc() được xây dựng bên trên cuộc gọi hệ thống sbrk() (để thay đổi kích thước bộ nhớ của bộ nhớ).

Thư viện chỉ là mã ứng dụng không phải là một phần của hệ điều hành và thường sẽ có sẵn trên nhiều hệ điều hành. Về cơ bản, chúng giống như các cuộc gọi hàm trong chương trình của riêng bạn.

Dòng có thể hơi mờ nhưng chỉ xem các cuộc gọi hệ thống dưới dạng chức năng cấp hạt nhân.

12

Cuộc gọi hệ thống là giao diện giữa mã cấp người dùng và hạt nhân. C thói quen thư viện là các cuộc gọi thư viện như bất kỳ khác, họ chỉ xảy ra được thực sự thường được cung cấp (khá nhiều phổ). Rất nhiều thói quen thư viện chuẩn là các trình bao bọc (mỏng hoặc khác) xung quanh các cuộc gọi hệ thống, điều này có xu hướng làm mờ dòng một chút.

Để sử dụng cái nào, theo nguyên tắc chung, hãy sử dụng quy tắc phù hợp nhất với nhu cầu của bạn.

6

Các cuộc gọi được mô tả trong phần 2 của hướng dẫn sử dụng là tất cả các trình bao bọc tương đối mỏng xung quanh các cuộc gọi thực tế đến các dịch vụ hệ thống bẫy cho hạt nhân. Các thường trình thư viện chuẩn C được mô tả trong phần 3 của hướng dẫn sử dụng là các hàm thư viện phía máy khách có thể hoặc không thực sự sử dụng các cuộc gọi hệ thống.

This posting có mô tả về các cuộc gọi hệ thống và bẫy cho hạt nhân (trong ngữ cảnh hơi khác) và giải thích cơ chế bên dưới các cuộc gọi hệ thống với một số tham chiếu.

11

Thư viện các chức năng chung được xây dựng trên giao diện cuộc gọi hệ thống, nhưng các ứng dụng được sử dụng miễn phí cả hai.

Cuộc gọi hệ thống giống như các khóa xác thực có quyền truy cập để sử dụng tài nguyên hạt nhân.

enter image description here

Trên ảnh là từ lập trình Linux Advanced và giúp chúng ta hiểu cách thức ứng dụng người dùng tương tác với hạt nhân.

+0

pic tuyệt vời. rất rõ ràng – henryyao

3

Như một quy tắc chung, bạn nên luôn sử dụng phiên bản thư viện C. Chúng thường có các trình bao bọc xử lý những điều bí truyền như khởi động lại trên một tín hiệu (nếu bạn đã yêu cầu). Điều này đặc biệt đúng nếu bạn đã liên kết với thư viện. Tất cả các quy tắc có lý do để bị phá vỡ. Lý do sử dụng các cuộc gọi trực tiếp,

  1. Bạn muốn libc không thuyết phục; Có thể với một trình cài đặt. Mã như vậy có thể chạy trên Android (bionic), uClibc và các hệ thống glibc/eglibc truyền thống khác, bất kể thư viện được sử dụng. Ngoài ra, tải động với trình bao bọc để tạo lớp glibc/bionic thời gian chạy cho phép nhị phân Android/Linux kép.
  2. Bạn cần hiệu suất cực đoan. Mặc dù điều này có lẽ hiếm và rất có thể là sai lầm.Có thể suy nghĩ lại vấn đề sẽ mang lại lợi ích hiệu suất tốt hơn và không phải gọi hệ thống thường là một chiến thắng hiệu suất, mà đôi khi có thể làm libc.
  3. Bạn đang viết một số mã initramfs hoặc init không có thư viện; để tạo hình ảnh nhỏ hơn hoặc khởi động nhanh hơn.
  4. Bạn đang thử nghiệm hạt nhân/nền tảng mới và không muốn làm phức tạp cuộc sống với hệ thống tệp toàn diện; rất giống với initramfs.
  5. Bạn muốn làm điều gì đó rất nhanh chóng khi khởi động chương trình, nhưng cuối cùng muốn sử dụng các thói quen libc.
  6. Để tránh lỗi đã biết trong số libc.
  7. Chức năng không khả dụng qua libc.

Xin lỗi, hầu hết các ví dụ đều là Linux cụ thể, nhưng các lý do nên áp dụng cho các biến thể Unix khác. Mục cuối cùng là khá phổ biến khi các tính năng mới được đưa vào hạt nhân. Ví dụ: khi kqueue hoặc epoll nơi được giới thiệu lần đầu tiên, không có libc để hỗ trợ chúng. Điều này cũng có thể xảy ra nếu hệ thống có một thư viện cũ hơn, nhưng một hạt nhân mới hơn và bạn muốn sử dụng chức năng này.

Nếu quy trình của bạn chưa sử dụng số libc thì rất có thể một số thứ trong hệ thống sẽ có. Bằng cách mã hóa các biến thể của riêng bạn, bạn có thể phủ nhận bộ nhớ cache bằng cách cung cấp hai đường dẫn đến cùng một mục tiêu kết thúc. Ngoài ra, Unix sẽ chia sẻ các trang mã giữa các quy trình. Nói chung không có lý do gì để không sử dụng phiên bản libc.

Các câu trả lời khác đã thực hiện một công việc xuất sắc về sự khác biệt giữa libc và cuộc gọi hệ thống.

Các vấn đề liên quan