시스템 호출과 라이브러리 함수의 차이점


답변:


19

개념적으로 라이브러리 함수는 프로세스의 일부입니다.

런타임에 실행 코드와이 라이브러리가 의존하는 라이브러리 (예 : libc.so)의 코드는 단일 프로세스에 연결됩니다. 따라서 이러한 라이브러리에서 함수를 호출하면 프로세스의 일부로 동일한 리소스 및 권한으로 실행됩니다. 직접 작성한 함수를 호출하는 것과 같은 아이디어입니다 (PLT 및 / 또는 트램펄린 함수와 같은 예외는 관심이있는 경우 찾아 볼 수 있음).

개념적으로, 시스템 호출은 코드 (일반적으로 권한이없는)에서 커널 (필요에 따라 권한을 에스컬레이션 할 수있는 권한)로 호출하는 데 사용되는 특수 인터페이스입니다.


예를 들어, Linux man brk를 참조하십시오 . C 프로그램이 malloc메모리 할당을 호출하면 glibc에서 라이브러리 함수를 호출합니다.

프로세스 내에 할당 할 공간이 이미 충분한 경우 필요한 힙 관리를 수행하고 메모리를 호출자에게 리턴 할 수 있습니다.

그렇지 않은 경우, glibc는 커널에서 더 많은 메모리를 요청해야합니다. brkglibc 함수를 호출하고 brksyscall 을 호출합니다 . 한 번만 제어가 syscall을 통해 커널로 전달 된 경우에만 더 많은 메모리를 예약하고 프로세스의 주소 공간에 맵핑하도록 글로벌 가상 메모리 상태를 수정할 수 있습니다.


11

쓸모없는 답변에 추가 :
라이브러리 함수는 시스템 호출보다 빠르며 일반적으로 권한과 보안 고려 사항은 프로세스의 권한과 메모리로 실행되므로 권한 / 보안 고려 사항이 없습니다.

반면 Syscall은 커널에서 실행되기 때문에 시스템의 모든 것에 액세스 할 수 있으므로 호출 할 때 호출 프로세스가 수행 할 수있는 작업을 제어해야합니다 (파일을 열 수있는 권한이 있는지 확인). 예) 또한 syscall이 커널에 있기 때문에이를 호출하려면 CPU에서 컨텍스트 전환이 필요합니다. 이는 라이브러리 호출을 호출하는 것보다 매우 무거운 프로세스입니다.

Syscall은 일반적으로 모니터링 프로그램에서 시스템 CPU 사용량으로 반영됩니다.


0
  1. syscall은 OS를 지원하는 반면 lib fun은 컴파일러를 지원합니다
  2. libcall은 특정 적이지만 syscall은 getc와 같이 일반적이지만 lib fun은 한 번에 하나의 문자 만 문자열 또는 단어 단위로 액세스 할 수 없지만 syscall을 열면 텍스트 파일, 이진 파일 및 더 많은 유형의 파일을 열 수 있습니다.

0

라이브러리 호출-(라이브러리 포함 또는 추가를 통해) 응용 프로그램에 연결된 서브 루틴을 호출합니다.

시스템 호출-제어를 OS (사용자-> 시스템 프로세스-> OS)로 전송하고 프로세서를 권한 모드로 설정

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.