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

: 리눅스에서이 파일을 운영하는 두 가지 방법이 있습니다 시스템 호출 (시스템 호출) 및 라이브러리 호출 (라이브러리 기능) . 책 "APUE"에서 기능의 대부분은 오히려 라이브러리 함수보다, 시스템 콜에 대해 말하고있다.

1, 시스템 콜

1.1 개념

  • 컴퓨터에서 시스템 호출 (시스템 호출), 또한 실행하는 데 더 높은 권한이 필요한 운영 체제 커널 서비스 요청에 사용자 공간 프로그램에서 실행 시스템 호출로 알려져 있습니다.
  • 시스템 호출은 사용자 프로그램과 운영 체제 사이의 인터페이스를 제공합니다. (즉, 시스템은 호출하는 사용자 프로그램은 커널과 상호 작용하는 인터페이스입니다)
  • 시스템 호출, 우리는 운영 체제가 하드웨어 장치 기능을 운영 체제 인터페이스를 제공하는 인터페이스 일련의 작업 (API)를 사용자에게 제공한다는 것을 이해할 수있다.
  • 운영 체제의 하위 상태 관리자 모드 (코어 모드) 메쉬 상태 (사용자 상태)
    대부분의 시스템이 요구하는 대화 형 작업은 커널 모드에서 수행. 예를 들어, 디바이스 간 I / O 동작 또는 통신 프로세스.
    특별 지침 : 하나는 사용자 모드에서 실행되지 특별 지시 할 수있다, 다른 운영 체제 사이의 특별 지시는 커널 모드의 차이가 있지만 몇 가지 일반적인 지침과 하드웨어는 주로 관련.
    사용자 프로그램은 사용자 모드에서 실행할 수있는 시스템은 때때로 다음 시스템을 통해 시스템 호출 인터페이스 호출을 사용, 핵심 기능에 액세스해야합니다.
    사용자 프로그램을 안전하게 이러한 권한은 매우 위험한 경우 응용 프로그램은 때때로, 위험한, 권한이 높은 명령을. (예를 들어, 프로세스는 정상적으로 작동하지 일으키는 다른 프로세스의 메모리 영역을 변경할 수있다), 그러나 그것은 완전히 이러한 권한을 부여하지 않습니다. 시스템 호출이있을 것입니다 그래서 지침 위험한 시스템 콜에 포장되어, 사용자는 자신이 그 명령의 위험을 실행 호출 할 수 있습니다뿐만 아니라.
    또한, 컴퓨터 하드웨어 자원이 더 나은 이러한 리소스를 관리하기 위해, 제한되어 운영 체제에서 모든 자원의 관리, 프로세스는 운영 체제에 이러한 리소스를 만 요청할 수 있습니다.
    운영 체제가 이러한 리소스에 대한 유일한 입구,이 항목은 시스템 호출이다.

그림 삽입 설명 여기

1.2 시스템 호출 예

예를 들어 줄 수있는, 우리가 가장 잘 알고 안녕하세요 세계 프로그램이 화면에 정보를 인쇄 할 수 있으며, 프로그램은 라이브러리 함수의 printf 출력 정보가 화면에이 하드웨어 장치를 인쇄 할 것이다의 printf () 함수를 호출합니다. 우리는 모든 하드웨어 장치의 작동이 드라이버를 필요에 대해 알고, 그리고 드라이버는 운영체제 커널에 의해 구현된다. 우리의 printf () 함수는 결국 시스템 호출의 함수 기기 화면을 작동하는 리눅스 커널 상관 함수를 호출해야 함이 의미합니다. 사실, 의 printf () 라이브러리 함수의 실현은 결국 시스템 호출 쓰기 ()를 호출.

또한, 프로세스 생성 포크 ()는 vfork (),
오픈, 판독, 혹은 sbrk는 포크 시스템 콜이다.

2, 도서관

라이브러리 기능은 레이어 시스템 호출 패키지로 이해 될 수있다. 사용자 프로그램에 커널에 의해 제공되는 시스템 호출 인터페이스는 효율성이보다 효율적이고 능률적이다, 그러나 때때로 우리는 더 복잡한 처리, 또는 좀 더 인도적인 필요, 우리는 이러한 과정이에 패키지 넣어 정보에 액세스 할 수 있어야합니다 프로그래머는 프로그램과 쉽게 원숭이 코딩 함수에 공급된다. 다음 예에서, 학습 과정, 우리는 (INT의 FD가, 숯불 * 버피 읽을 배울 것입니다 , INT 크기) 시스템 호출이 기능 플래그 (디스크립터에 의해) 파일에서입니다, 크기, 문자보다 더 읽기 섹션과이 시스템에서, 우리는 N 읽고 지정된 바이트의 데이터를 호출 할 수 있습니다,하지만 누가 원하는 것은 당신이 라이브러리 함수는 fgets를 호출 할 수있는 라인에 대한 이러한 수요를 읽어 가고 버피의 데이터를 배치 ()는 달성하는 "C 뇌관 플러스"문서 / 언급에서 IO는 물론, 모든 기능이 "C 뇌관 플러스"에서 라이브러리 함수입니다 언급했다.
예를 들어 일반적인 C 라이브러리 의 printf, 같는 fopen, fread, malloc에

3 개의 관계

도서관 기능을 가능성이 시스템 호출을 포함 할 수 있습니다, 커널 함수 라이브러리 함수를 포함시키지 않고 (나 strlen strcpy를 () 않는 strstr ()와 같은 시스템 호출을 호출 할 필요는 없습니다 위해) 등이 기능을 몇 가지 시스템 호출을 가질 수 있습니다 . 기능의 경우, 때때로 우리는 하나 당신은 또한 모든 사람의 실제 필요에 따라 선택할 수, 더 필수 요구 사항은 없다 실현하기 위해 라이브러리 함수를 사용하여 달성하기 위해 시스템 호출을 사용할 수 있습니다. 예를 들어, 파일의 작동을 위해, 우리가 달성하기 위해 가까운, (), ()의 읽기, 쓰기 () 시스템 호출) (오픈을 사용할 수 있습니다, 물론, 우리는 또한, (), (), (), ()는 fgets를에 fwrite를 FREAD를 fopen의 사용할 수 있습니다 FCLOSE () 라이브러리 함수는 우리가 다른 상황에 대한 최선의 선택을 그들의 각각의 특성을 이해하고 비교 달성했다.

도서관 전화 시스템 호출
모든 ANSI C 컴파일러에서 C 라이브러리 함수는 동일 시스템이 아닌 휴대용에 프로그램을 원인이 서로 다른 각 운영 체제를 호출
이 프로그램 (또는 함수)의 라이브러리를 호출 그것은 커널 서비스를 호출
사용자 프로그램과 관련된 커널 주소 공간에서 실행
그것의 실행 시간은 "사용자 시간"이다 그것은 런타임 "시스템"시간에 속하는
프로 시저 호출 속 호출 오버 헤드가 작다 사용자 제어 및 커널 컨텍스트 스위칭 큰 오버 헤드 사이에 필요한
C 라이브러리 libc의 약 300 함수 UNIX에서, 90 개 시스템 호출에 대해이 있습니다
게시 17 개 원래 기사 · 원의 찬양 (28) · 전망 3846

추천

출처blog.csdn.net/weixin_46027505/article/details/104756929