시스템 콜은 권한 경계를 넘는 계약이다
파일, 프로세스, 네트워크 작업은 라이브러리 함수처럼 보여도 trap, 커널 검증, 결과 복귀라는 공통 경로를 지난다.| 구간 | 역할 | 확인할 것 |
|---|---|---|
| user |
read(), write() 같은 wrapper 호출
|
일반 함수 호출처럼 보이지만 커널 요청을 준비한다 |
| libc | 시스템 콜 번호와 인자를 약속된 위치에 배치 | ABI 규약이 맞아야 커널이 요청을 해석한다 |
| trap | 사용자 모드에서 커널 모드로 전환 | 권한 검사와 비용이 생기는 지점이다 |
| return | 결과 값과 실패 코드를 사용자 공간으로 전달 |
errno나 반환값이 디버깅 단서가 된다
|
관찰 포인트
파일
파일, 파이프, 소켓은 파일 디스크립터라는 같은 핸들 규칙을
쓴다.
프로세스
fork, exec, wait 조합이 셸
실행의 뼈대다.
성능
잦은 시스템 콜은 모드 전환과 검증 비용 때문에 병목이 될 수
있다.
추적
strace로 실패한 커널 요청과 순서를 확인한다.