Linux에서 라이브러리 호출과 시스템 호출의 차이점이 무엇인지 알고 싶습니다. 두 가지 개념의 개념을 더 잘 이해하는 데 도움이 되는 조언을 주시면 감사하겠습니다.
답변1
진정한 "도서관 호출"이라는 것은 없습니다. 공유 라이브러리에 연결된 함수를 호출할 수 있습니다. 이는 단순히 호출할 함수의 위치를 결정하기 위해 런타임에 라이브러리 경로를 찾는 것을 의미합니다.
시스템 호출은 커널이 처리하는 낮은 수준의 커널 호출입니다.
답변2
shell을 입력하면 man man
매뉴얼 섹션 목록이 표시됩니다.
2 시스템 호출(커널에서 제공하는 기능)
3 라이브러리 호출(프로그램 라이브러리의 기능)
예를 들어, chmod
입력하면 설명서의 2부에서 찾을 수 있습니다 man chmod
. 그리고 fprintf
3절에.
답변3
시스템 호출은 커널에 의해 직접 처리됩니다.
라이브러리 호출은 동적(또는 정적으로 링크된) 라이브러리에 의해 처리됩니다. 라이브러리를 호출하는 프로그램은 호출이 작동하기 전에 먼저 라이브러리를 가져와야 합니다. 라이브러리 호출 자체는 시스템 호출을 사용할 수 있습니다.
때때로 라이브러리는 커널에서 제공하지 않는 추가 기능이나 사용 편의성을 제공하기 위해 시스템 호출에 "프런트 엔드"로 제공됩니다.
답변4
다른 답변에서 언급된 차이점을 추가하면 됩니다.
라이브러리 호출은 단지 함수 호출이므로 사용자 공간에서 커널 공간으로의 전환이 발생하지 않습니다. 반면 시스템 호출은 커널 모드에서 실행되기 때문에 사용자 공간에서 커널 공간으로 전환됩니다.