답변:
시스템 호출은 커널에 의해 직접 처리됩니다.
라이브러리 호출은 동적 (또는 정적으로 링크 된) 라이브러리에 의해 처리됩니다. 라이브러리 호출을 수행하는 프로그램은 호출이 작동하기 전에 해당 라이브러리를 먼저 가져와야합니다. 라이브러리 호출 자체는 시스템 호출을 사용할 수 있습니다.
때때로 라이브러리는 시스템 호출에 "프론트 엔드"로 제공되어 커널이 제공하지 않는 추가 기능이나 사용 편의성을 제공합니다.
기본적으로 리눅스 커널 viz에는 두 가지 모드가 있습니다.
모든 리눅스 커널은이 두 모드 사이에서 서로 전환됩니다. 일반적으로 라이브러리 호출 은 사용자 모드 에서 실행 되고 시스템 호출 은 커널 모드 에서 실행 됩니다 . 운영 체제 측면에서 커널 모드는 본질적 으로 원자 모드이며 감독 모드입니다. 거의 모든 라이브러리 호출은 작업을 수행하기 위해 커널의 도움이 필요합니다. 각 라이브러리 호출은 차례로 기본 시스템 호출을 호출합니다. 다음 예제를 사용하여 더 명확하게 아이디어를 만들어 봅시다.
c 프로그램에서는 항상 헤더 파일에서 fopen ()을 사용합니다. 프로그래밍 환경은 커널에서 시스템 호출 open ()을 호출하고 파일 열기 작업을 수행합니다. 다시 실행 후, 제어 흐름은 사용자 모드로 돌아갑니다.
이를 설명하기 위해 다음 작업을 수행하십시오.
man man
: 여기 1-8에서 수동 섹션이 각각 특정 목적을 가지고 있습니다.man fopen
: respose를 볼 수 있습니다 FOPEN(3)
. 여기서 3은 c- 라이브러리 호출 섹션 인 매뉴얼 페이지의 매뉴얼 섹션 3을 나타냅니다.수행 man open
: respose를 볼 수 있습니다 OPEN(2)
. 여기서 2는 시스템 호출 섹션 인 매뉴얼 페이지의 수동 섹션 2를 나타냅니다.
당신이 개념을 이해하기를 바랍니다.
다른 답변에서 여기에 언급 된 차이점을 추가하십시오.
라이브러리 호출은 단순히 함수 호출이므로 사용자 공간에서 커널 공간으로 전환되지 않습니다. 반면에 시스템 호출은 커널 모드에서 작동하기 때문에 시스템 호출은 사용자 공간에서 커널 공간으로 전환됩니다.