Quick Flow
application in user mode
-> library / runtime API
-> system-call boundary
-> kernel validates request and permissions
-> driver or kernel subsystem performs protected work
-> result returns to user mode일반 애플리케이션은 임의의 물리 메모리나 장치를 직접 제어하지 않습니다. 운영체제에 요청하고 kernel이 권한과 인자를 검사한 뒤 보호 자원에 접근합니다.
권한 분리
User mode 코드는 제한된 가상 주소 공간과 권한에서 실행됩니다. 잘못된 pointer가 보통 해당 process를 실패시키는 수준에 머무르는 이유입니다. Kernel mode 코드는 시스템 전체 자원에 더 강한 권한을 가지므로 오류가 운영체제 전체 안정성에 영향을 줄 수 있습니다.
File open, socket 생성, process 시작처럼 보호된 작업은 runtime 함수 한 줄로 보이더라도 내부에서 kernel 서비스가 필요할 수 있습니다. 모든 library 호출이 system call인 것은 아니며, user space에서 끝나는 계산도 많습니다.
비용과 판단
경계를 넘을 때 mode 전환과 인자 검증 비용이 있으므로 아주 작은 I/O를 지나치게 많이 호출하면 batching이 유리할 수 있습니다. 그러나 system call을 줄이기 위해 복잡한 buffer를 먼저 만들기보다 실제 호출 수와 I/O 병목을 측정합니다.
권한이 필요한 문제를 해결할 때 관리자 권한으로 실행하는 것을 기본 해법으로 두지 않습니다. 필요한 resource와 최소 권한을 먼저 확인합니다.
자주 틀리는 점
- kernel mode가 CPU의 다른 물리 core에서 실행된다는 뜻은 아닙니다.
- API 함수와 system call을 일대일로 대응시키지 않습니다.
- user mode process끼리도 운영체제의 IPC와 권한 검사를 거칠 수 있습니다.
- driver 오류의 영향 범위는 일반 application 오류보다 클 수 있습니다.
참고 링크
1 sources