System Call Interface & Privilege Switching
사용자 프로그램이 하드웨어 자원을 요청할 때 거치는 공식 관문인 시스템 콜의 생성 원리와, CPU의 실행 권한을 물리적으로 전환하는 트랩 메커니즘을 다루는 학습 노드입니다.
sys.entry
M
Me
hyunyoun's Blog
posts7 min read
1. Overview
시스템 콜 인터페이스 및 특권 전환(System Call Interface & Privilege Switching, SCP)은 소프트웨어가 하드웨어라는 '금고'를 열기 위해 거쳐야 하는 보안 검문소이자 물리적 전이 구조입니다.
애플리케이션은 디스크에 파일을 쓰거나 네트워크로 데이터를 보낼 권한이 없습니다. 학습자는 앱이 **시스템 콜(System Call)**이라는 초인종을 누르면, CPU가 현재의 실행 맥락을 동결하고 **특권 모드(Privileged Mode)**로 물리적으로 점프하는 과정을 배웁니다. 특히 이 과정에서 발생하는 레지스터 저장, 스택 교체, 그리고 하드웨어 수준의 권한 비트(CPL/RPL) 전환의 물리적 비용을 심도 있게 다룹니다. 이를 통해 '코드 한 줄'이 실제 하드웨어 자원 점유로 이어지기까지의 엄격한 물리 통제 절차를 이해합니다.
2. Scope & Boundaries
In-Scope
- System Call Mechanics: 시스템 콜의 번호 사상(Mapping), 매개변수 전달 물리(Register vs Stack)
- Privilege Transition: CPU 특권 레벨(Ring 0 vs Ring 3)의 하드웨어적 전환 원리
- Trap Architecture: 소프트웨어 인터럽트(
INT,SYSCALL)를 통한 커널 진입 물리 시퀀스 - Kernel Interface Design: POSIX standard와 같은 OS API의 하드웨어 하부 구현
Out-of-Scope
- 개별 시스템 콜(예:
write,mmap)의 내부 알고리즘 상세 (해당 기능 노드에서 분담) - 라이브러리 함수(예:
printf)의 상위 논리 구조 (05. Programming Languages 영역으로 위임)
Boundaries
- SCP vs. Library Call: 라이브러리 호출은 같은 주소 공간 내의 이동이지만, SCP는 '물리적 권한의 벽'을 넘는 하드웨어 이벤트로 경계를 확정합니다.
3. Counterexample
- 단순히 "API를 호출하는 것"을 SCP라고 정의하는 것은 잘못입니다.
syscall명령어가 실행될 때 CPU 내부의 **MSR(Model Specific Register)**이 미리 설정된 커널 진입점 주소를 어떻게 물리적으로 로드하는지 설명할 수 있어야 하며, 시스템 콜이 완료된 후 IRET 혹은 SYSRET 명령어가 유저 공간의 스택을 어떻게 물리적으로 복원하는지 입증하지 못한다면 SCP의 진정한 물리적 의미를 놓친 것입니다.
4. Prerequisites
- ALU & Data Path Design (Basic): 레지스터와 명령어 실행 주기 기초가 필수입니다. (02-01-03 ADP)
- Interrupt Latency & Jitter Physics (Recommended): 하드웨어 이벤트 처리의 물리적 지연 이해가 권장됩니다. (02-05-03 ILJ)
5. Learning Map
- The Forbidden Fruit: 왜 앱이 하드웨어를 직접 만지면 안 되는지 하드웨어 보안 철학을 배웁니다.
- The Knocking Code: 특정 레지스터에 번호를 새기고 '점프' 신호를 보내는 커널 입장권을 제작합니다.
- Ghost Switching: CPU가 순식간에 옷을 갈아입고(권한 상승) 유저의 자취를 감추는 물리 전환을 분석합니다.
- Vetting and Execution: 커널이 유저의 요청이 정당한지 검수하고 물리 상자에 직접 명령을 내리는 과정을 완성합니다.
6. Learning Topics
Basic
Core: 운영체제의 보호된 서비스 접근 (Protected Access)
- Why to Learn: 하드웨어가 무분별한 접근으로부터 보호되는 물리적 메커니즘의 입구이기 때문입니다.
- What to Learn:
- Privilege Levels: x86의 Ring 구조나 ARM의 EL 단계 등 하드웨어 권한 계층
- System Call vs Function Call: 메모리 경계를 넘느냐 안 넘느냐의 물리적 차이
- API Abstraction: 사용자가 복잡한 칩 명령 대신 표준 함수를 쓰게 하는 물리적 매핑
- How to Learn:
strace도구를 사용하여 간단한 'Hello World' 프로그램이 실행되는 동안 커널과 맺는 시스템 콜 물리 관계도 작성 실습- 사용자 모드에서 특권 명령어를 직접 실행했을 때 발생하는 하드웨어 예외 메시지 분석
- Implement: 특정 시스템 콜의 번호와 매개변수를 수동으로 레지스터에 로드하는 어셈블리 주석문
Recommended
Core: 트랩 메커니즘과 맥락 저장 (Trap & Context Saving)
- Why to Learn: 커널로 들어갈 때 사용자가 하던 일을 완벽히 보존해야 나중에 다시 돌아올 수 있기 때문입니다.
- What to Learn:
- Exception/Trap Gate: 하드웨어가 시스템 콜 신호를 받았을 때 참조하는 주소표
- Processor Context Save: PC, SP, 범용 레지스터를 커널 스택으로 물리적으로 옮기는 과정
- Mode Switching Logic: 유저 스택 포인터에서 커널 전용 스택 포인터로의 물리적 스위칭
- How to Learn:
- 시스템 콜 진입 직전과 직후의 스택 주소 물리적 변화 관찰 실습
- 하드웨어가 문맥을 저장하는 데 걸리는 클록 사이클(Clock Cycle)을 측정하고 성능 영향도 도출
- Implement: 커널 진입 시 레지스터 상태를 구조체에 담아 보존하는 'Trap Frame' 설계 시연
Practical
Core: 매개변수 전달과 보안 검증 (Argument Passing & Vetting)
- Why to Learn: 유저가 악의적이거나 잘못된 주소를 넘겨 커널을 파괴하는 물리적 사고를 방지하기 위함입니다.
- What to Learn:
- Boundary Checking: 유저가 넘긴 포인터가 실제 유저 영역의 물리 주소인지 검사
- Copy-to-User / Copy-from-User: 유저 공간과 커널 공간 사이의 데이터 물리 복사 과정
- Validation Barrier: 유효하지 않은 시스템 콜 번호에 대한 커널의 물리적 무시 로직
- How to Learn:
- 시스템 콜에 커널 영역 주소를 인자로 넘겼을 때, 커널이 이를 어떻게 감지하고 거절하는지 로그 추적 실습
- 데이터 대량 전송 시스템 콜 시 발생하는 메모리 대역폭 점유 물리 측정
- Implement: 입력받은 주소 범위가 합법적인 유저 가상 메모리 범위 내에 있는지 판별하는 가상 커널 검증 루틴
Advanced
Core: 고속 시스템 콜과 vDSO (Fast System Calls)
- Why to Learn: 고성능 서버 환경에서 시스템 콜의 물리적 오버헤드를 1나노초라도 줄여야 서비스 경쟁력이 생기기 때문입니다.
- What to Learn:
SYSENTER/SYSEXIT: 예전의 느린 인터럽트 방식을 개선한 고속 진입 하드웨어 명령어- vDSO (virtual Dynamic Shared Object): 실제 커널로 안 가고 유저 메모리에서 커널 정보를 읽게 하는 물리 지름길
- Zero-copy Syscalls: 유저와 커널 간 복사를 생략하고 물리 페이지를 공유하는 극강의 성능 기법
- How to Learn:
gettimeofday와 같은 호출이 vDSO를 통해 커널 모드 전환 없이 수행되는 물리적 과정 분석 실습- 고속 시스템 콜 적용 전후의 웹 서버 초당 처리량(TPS) 물리적 향상폭 산출
- Implement: vDSO 테이블을 조회하여 커널 내부에 직접 들어가지 않고도 특정 정보를 획득하는 코드 스켈레톤
7. Terminology
8. References
Primary
- [P1] CS2023 - OS/Operating System Principles (Interface) — Core requirements.
- [P3] CyBOK v1.1 - Hardware Security / Privilege Management — Security foundations.
Secondary
- [The Linux Programming Interface] Michael Kerrisk — The definitive guide to system calls.
- [Intel 64 and IA-32 Architectures Software Developer's Manual] — Hardware switching details.
Industry
- [POSIX.1 Standard] — The industry standard for system call APIs.
- [Microsoft Windows: Internal Architecture of System Calls] — NT-based syscall mechanics.
9. Final Checklist
Primary
- 사용자 프로그램에서 하드웨어로 직접 명령을 보낼 수 없는 물리적 이유를 'Privilege Level'과 'Memory Protection' 관점에서 설명 가능한가? (P1)
- 시스템 콜이 발생했을 때 CPU가 유저 프로세스의 현재 상태를 왜 '커널 스택'에 따로 저장해야 하는지 그 물리적 필연성을 입증할 수 있는 가? (P1)
Secondary
- 'Trap Gate'가 미리 설정되어 있지 않을 경우, 유저가
SYSCALL명령을 내렸을 때 CPU가 겪게 되는 물리적 혼란시나리오를 소통 가능한가? - 대량의 데이터를
write()시스템 콜로 보낼 때, '유저 공간 -> 커널 공간 -> 장치 드라이버'로 이어지는 데이터 복사 횟수가 물리적 성능에 미치는 영향을 수리적으로 도출할 수 있는 가?
Industry
- 고성능 트레이딩 시스템 설계 시, 빈번한 'gettimeofday' 시스템 콜 오버헤드를 줄이기 위한 'vDSO' 활용 방안을 물리적 아키텍처 관점에서 제안할 수 있는 가? (SFIA)
- 리눅스 커널 취약점 분석 시, 유저가 조작된 포인터를 시스템 콜 인자로 넘겨 커널 메모리를 엿보는 'Confused Deputy' 공격의 물리적 방어 기작을 기술할 수 있는 가?