반응형
커널과 통신
- 시스템 호출은 하드웨어와 사용자 공간 프로세스 사이에 있는 계층
- 이 계층은 세가지 역할을 수행
- 사용자 공간에 하드웨어 인터페이스를 추상화된 형태를 제공
- 시스템 호출은 시스템보안 및 안정성을 제공
- 사용자 공간과 기타 시스템 사이에 계층을 둠으로써 프로세스 별 가상 시스펨 환경을 제공
API, POSIX, C 라이브러리
- 애플리캐이션으 일반적으로 시스템 호출을 직접 사용하지 않고 사용하지 않고, 사용자 공간에 구현된 애플리케이션 프로그래밍 인터페이스(API)를 이용
- API는 애플리케이션이 사용하는 프로그래밍 인터페이스
- API는 하나 또는 이상의 시스템 호출을 사용해 구현되며 경우에 따라 시스템 호출을 사용하지 않을 수 있다.
< printf() 호출 시 애플리케이션, C 라이브러리, 커널사이의 관계>
- 유닉스에서 가장 유명한 API는 POSIX 표준이다.
- POSIX는 API와 시스템 호출간의 관계를 보여주는 예
- 리눅스의 시스템 호출 인터페이스는 다른 유닉스 시스템과 마찬가지로 C라이브러리 형태로 제공
- C라이브러리는 표준 C라이브러리와 시스템 호출 인터페이스 등 유닉스 시스템의 주요 API가 구현
- C라이브러리는 모든 C프로그램이 사용하며, 대다수의 POSIX API를 추가로 제공
- 유닉스 인터페이스의 공통적인 모토는 "정책이 아닌 방식을 제공하라" → 유닉스 시스템 호출은 특정 기능을 아주 일반적인 형태로 제공
시스콜
- 시스템 호출 (리눅스에서는 syscall)은 보통 C 라이브러리에 정의된 함수를 호출하는 방식으로 사용
- 이 함수는 0개 혹은 하나 이상의 인자를 받고 하나 이상 부수효과를 발생 가능
- 시스템 호출에서 오류가 발생할 경우 C라이브러리는 전역 변수인 errno에 특정 오류 코드를 기록
- 라이브러리 함수인 perror() 를 사용하여 이 변수를 사람이 보기 편한 문자열 형태로 변환 가능
- 시스템 호출은 정의된 특정 동작을 수행, 그렇지만 함수 정의로는 구현 내용에 대해 아무것도 알 수없음에 주의
- 시스템 호출 정의 방법 : 함수 정의 부분에 asmlinkage 지시자가 있으며 이 자시자는 해당 함수의 인자를 스택에서만 찾으라고 컴파일러에게 알려준다 → 이는 리눅스의 모든 시스템 호출이 사용하는 명명규칙
시스템 호출 번호
- 리눅스의 모든 시스템 호출에는 시스콜 번호가 할당
- 이 번호는 특정 시스템 호출을 참조하는데 사용하는 고유번호
- 사용자 공간 프로세스가 시스템 호출을 실행 할 때 시스콜 번호를 통해 실행 할 시스템 호출을 확인
- 프로세스는 이름을 사용해 시스콜을 참조하지 않는다
- 시스콜 번호는 한번 할당 하면 변경할 수 없으므로 매우 중요
- 커널은 등록된 모든 시스템 호출의 목록을 sys_call_table이라는 시스템 호출 테이블에 저장
시스템 호출 성능
- 리눅스 시스템 호출은 다른 운영체제 보다 빠르다.
- 첫번째, 리눅스의 빠른 Context switch 시간이며
- 다음은 시스템 호출 핸드러의 구현이 간단하게 되어 있다.
반응형
'리눅스 커널 프로그래밍' 카테고리의 다른 글
리눅스 커널 - 시스템 콜 (3) (0) | 2017.12.06 |
---|---|
리눅스 커널 - 시스템 콜 (2) (0) | 2017.12.03 |
리눅스 커널 - I/O (Storage) stack of the Linux kernel (개요) (0) | 2017.11.16 |
리눅스커널 - 프로세스 스케줄링 (5) (0) | 2017.11.14 |
리눅스커널 - 프로세스 스케줄링 (4) (0) | 2017.11.13 |