사용자 모드로 구현하는 기능3

김민세·2022년 11월 29일
0

리눅스 구조

목록 보기
5/6
post-thumbnail

시스템 콜의 wrapper 함수

리눅스에는 프로그램의 작성을 도와주기 위해 프로세스 대부분에 필요한 여러 라이브러리 함수가 있다.

시스템 콜은 보통의 함수 호출과는 다르게 C 언어 등의 고급언어에서는 직접 호출이 불가능하다. 아키텍처에 의존하는 어셈블리 코드를 사용해 호출한다.

만약 OS의 도움이 없다면 각 프로그램은 시스템 콜을 호출할 때마다 아키텍처에 의존하는 어셈블리 언어를 써서 고급언어로부터 어셈블리 코드를 호출해야만 한다.

OS의 도움이 없다면

이 방식은 프로그램을 작성하는데 시간이 오래 걸린다. 다른 아키텍처에도 사용할 수 없어 이식성도 매우 낮으며 이식할 수 없는 경우도 있다.

wrapper
OS는 내부적으로 시스템 콜을 호출하는 일만 하는 함수를 제공하는데 이를 시스템 콜 wrapper이라고 한다.

wrapper 함수는 아키텍처별로 존재한다. 고급언어로 써진 사용자 프로그램부터는 각 언어에 대응하여 준비된 시스템 콜의 wrapper 함수를 호출하기만 하면 된다.

사용자 프로그램은 wrapper 함수를 호출


표준 C 라이브러리

C 언어에는 ISO에 의해 정해진 표준 라이브러리가 있다. 리눅스에는 이 표준 C 라이브러리가 제공되고 있다. 보통은 GNU 프로젝트가 제공하는 glibc를 C 라이브러리로 사용한다. 대부분의 C 프로그램은 glibc에 링크하고 있다.

glibc는 시스템 콜의 wrapper 함수를 포함한다. 또한 POSIX 규격에 정의된 함수도 제공한다.

POSIX 규격: 유닉스 계열의 OS가 갖추어야 할 각종 기능을 정해둔 규칙

프로그램이 어떠한 라이브러리를 통해 링크하고 있는가는 ldd 명령어를 사용하여 확인할 수 있다. 테스트로 echo 명령어에 대해 ldd의 실행 결과를 본다.

실행 결과를 보면 libc라는 부분이 표준 C 라이브러리에 해당한다

시스템에 의존하고 있는 여러 가지 프로그램에 대해 ldd를 실행해보면 매우 많은 프로그램이 libc에 링크되어 있음을 알 수 있다.


OS가 제공하는 프로그램

OS가 제공하는 프로그램은 OS가 제공하는 라이브러리와 마찬가지로 대부분의 프로그램이 필요하다. OS의 동작을 변경시키는 프로그램도 OS의 일부로써 제공한다.

OS가 제공하는 프로그램

  • 시스템 초기화: init
  • OS의 동작을 바꿈: sysctl, nice, sync
  • 파일 관련: touch, mkdir
  • 텍스트 데이터 가동: grep, sort, uniq
  • 성능 측정: sar, iostat
  • 컴파일러: gcc
  • 스크립트 언어 실행 환경: prel, python, ruby
  • 셀: bash
  • 윈도우 시스템: X
profile
김민세

0개의 댓글