[리눅스 커널] 시스템 콜
reference : 리눅스 커널 심층 분석, 로버트 러브 지음, 황정동 옮김 시스템 콜 커널과 통신 시스템 콜은 하드웨어와 사용자 공간 프로세스 사이에 있는 계층이다. 이 계층은 다음과 같은 세 가지 역할을 한다. 첫째, 사용자 공간에 하드웨어 인터페이스를 추상화된 형태로 제공(파일 입출력 시 애플리케이션은 디스크나 저장 매체의 형식이나 파일시스템 형식 같은 것을 신경 쓸 필요가 없다. 둘째, 시스템 콜은 시스템 보안 및 안정성을 제공(커널이 시스템 자원과 사용자 공간 사이에서 중재자 역할을 하기 때문에, 커널이 접근권한과 같은 기준을 적용해 통제할 수 있다. 예를 들면, 하드웨어를 잘못 사용하거나 다른 프로세스의 자원을 빼았는 등의 동작을 막을 수 있다. 셋째, 사용자 공간(user-space)과 기타 시스템 사이에 계층을 둠으로써 프로세스별 가상 시스템 환경을 제공할 수 있다. 만약 애플리케이션이 아무런 제약없이 시스템 자원에 접근할 수 있다면 멀티태스킹이나 갓아 메모리를 구현하는 것은 거의 불가능에 가깝다. 리눅스의 시스템 콜은 사용자 공간에서 커널과 상호작용할 수 있는 유일한 수단이다. 트랩(trap)을 제외하면 시스템 콜은 정상적인 방법으로 커널로 진입하는 유일한 수단이다. 장치파일이나 /proc 파일시스템을 이용하는 다른 인터페이스도 결국은 시스템 호출을 통하게 되어 있다. APIs, POSIX, and the C Library 애플리케이션은 일반적으로 시스템 콜을 직접 사용하지 않고, 사용자 공간에 구현된 애플리케이션 프로그래밍 인터페이스(API, Application Programming Interface)를 이용한다. 이 때문에 애플리케이션이 사용하는 인터페이스와 커널이 제공하는 인터페이스 사이에 직접적인 연관이 없다는 점이 아주 중요하다. API는 애플리케이션이 사용하는 프로그래밍 인터페이스다. 이 인터페이스는 하나 또는 그 이상의 시스템 콜을 사용해 구현되며, 경우에 따라 시스템 콜을...