시스템 호출 (system call)
쉽게 풀면
파일을 읽거나 네트워크로 데이터를 보내는 일은 응용 프로그램이 직접 할 수 없고 운영체제에게 부탁해야 합니다. 시스템 호출은 그 부탁을 위한 공식 창구로, 이 호출이 일어나면 프로세서가 사용자 모드에서 커널 모드로 전환되어 커널이 대신 일을 처리하고 결과만 돌려줍니다. 아무 코드나 하드웨어를 건드리지 못하게 막는 보호 장치이기도 합니다.
왜 중요한가
운영체제가 하드웨어와 자원을 안전하게 중재할 수 있는 근거가 바로 이 경계입니다. 동시에 모드 전환 비용이 있어 호출 횟수가 성능에 직접 영향을 주므로, 입출력을 묶어 처리하거나 커널을 거치지 않는 경로를 만드는 최적화가 계속 연구됩니다. 보안 측면에서도 어떤 호출을 허용할지 제한하는 것이 샌드박싱의 기본 수단입니다.
논문에서는 이렇게 쓰입니다
커널에 부탁하는 횟수 자체가 느림의 원인이어서 여러 요청을 한 번에 모아 보냈다는 뜻입니다.
조금 더 깊게 보면
보통 호출 번호와 인자를 레지스터에 담고 전용 명령으로 트랩을 일으키면, 커널이 정해진 처리기에서 인자를 검증하고 해당 서비스 루틴을 실행한 뒤 결과와 오류 코드를 돌려줍니다. 응용 프로그램은 대개 이 과정을 감싼 표준 라이브러리 함수를 통해 간접적으로 사용합니다. 모드 전환 비용과 캐시 오염 때문에, 시간 조회처럼 빈번한 일부 호출은 커널 메모리를 사용자 공간에 매핑해 전환 없이 처리하기도 합니다.
주의할 점
라이브러리 함수 호출과 혼동하기 쉽지만, 특권 수준이 바뀌는지 여부가 결정적 차이입니다. 인터럽트가 하드웨어가 비동기적으로 발생시키는 사건인 반면, 시스템 호출은 프로그램이 스스로 일으키는 동기적 트랩입니다.