System call
시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. 보통 C나 C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다.
운영 체제의 구성상, 커널과 응용 프로그램은 CPU의 권한 수준(privilege levels)이나 하드웨어 접근 능력이 다르다. 커널은 CPU 시스템의 RAM/FLASH 등에 물리 주소가 일치하는 링커구조를 가지고 특정 메모리 위치에서 동작한다. 이때 커널의 기계어 코드에서 사용하는 모든 주소는 물리 주소로 고정되어 컴파일되고 로드되어 실행된다. 따라서 커널은 부팅과정에서 전체 메모리 리소스 중에 일정하게 점유하여 동작하고 인터럽트 등 모든 하드웨어 접근이 가능하다. 그러나 응용 프로그램은 커널이 제공하는 자원을 사용하므로 메모리에서 상황에 따라 다른 위치를 점유하고 실행된다. 응용 프로그램은 사용자 요청에 따라 실행되는 프로그램이므로 물리 주소를 확정할 수 없다. 따라서 응용 프로그램이 작성되면 메모리 위치가 처음부터 로드된다고 생각하고 개발도구에서 링크된다. 보통 MMU을 통해 논리 주소를 물리 주소로 변환한다. 그리고 응용 프로그램은 CPU의 권한수준이 사용자 공간(user space)에서 동작하며 특정한 기계어 명령어 실행이 불가능하다. 이와 같은 상황에서 응용 프로그램이 파일 시스템을 사용하는 등 기타 여러 상황에서 커널에 의존해야만 한다. 응용 프로그램에서 커널의 서비스를 사용하는 방법이 시스템 호출이다. 커널의 인터럽트 처리 등의 과정을 프로그램하려면 어셈블리어와 C와의 혼용구조로 구성한다. 그리고 CPU나 컴퓨터 시스템의 구조나 상황이 다르므로 CPU에 따라 분리되어 작성되고 커널소스 폴더 구조에서 소스가 분리되어 작성되고 저장 관리된다. asmlinkage는 어셈블리어와 관계가 있는 예약어이다.