파일시스템·스케줄링·고급 — IPC·시그널·cgroup·관측
파일시스템·스케줄링·고급 — IPC·시그널·cgroup·관측
🎯 이 lesson 을 읽고 나면
이 lesson 을 다 읽고 나면 아래 3가지를 자신 있게 할 수 있습니다.
- ▸✅ Context Switching 비용 (스레드 < 프로세스)
- ▸✅ epoll · kqueue · IOCP 이벤트 기반 I/O
- ▸✅ Copy-on-Write + fork() 동작
학습 목표를 체크리스트로 두고 다 답할 수 있게 되면 lesson 을 닫으세요.
파일 시스템 — inode와 디렉토리
한 줄: 파일 = inode + 데이터 블록 + 디렉토리는 이름→inode 매핑.
파일 열기 → 읽기 6단계:
1. open("/etc/hosts") — 경로 파싱
2. dentry 캐시 조회 — 디렉토리 항목 캐시 (RAM)
3. inode 로드 — 권한·크기·블록 위치·timestamp 메타데이터
4. 권한 체크 — 사용자/그룹·rwx
5. fd 할당 — 파일 디스크립터 번호 반환 (0,1,2 = stdin/stdout/stderr, 3+ = 사용자)
6. read(fd, buf, n) — 블록을 페이지 캐시 → 사용자 버퍼
파일시스템 종류:
흔한 함정:
- ▸❌ "too many open files" — fd 부족 (
ulimit -n증가) - ▸❌ 파일 동시 쓰기 → 깨짐 (fcntl 락·O_APPEND)
- ▸❌ symbolic link 따라가다 무한 루프 (
-L옵션 주의) - ▸✅
fsync()호출로 디스크 sync 보장 (DB·write-ahead log)
CPU 스케줄링 — 누가 먼저 실행되나
Linux CFS (Completely Fair Scheduler) — 기본 스케줄러 (2.6.23+).
원리: 각 프로세스의 virtual runtime 추적. 가장 적게 실행한 프로세스 우선 → 공평성.
스케줄링 정책:
Round Robin (RR) 동작:
1. 각 프로세스에 타임 슬라이스 (예: 10ms) 할당
2. 슬라이스 끝나면 큐 끝으로
3. 다음 프로세스 실행
→ 공평하지만 컨텍스트 스위치 비용
스케줄링 함정:
- ▸❌ nice 값 잘못 (낮을수록 우선순위 ↑) — 직관과 반대
- ▸❌ 실시간 SCHED_FIFO 무한 루프 → 시스템 전체 멈춤
- ▸❌ CPU affinity 미설정 → 캐시 무효화 잦음
현대 트렌드:
- ▸EEVDF (Earliest Eligible Virtual Deadline First) — Linux 6.6+ 의 CFS 후속
- ▸Pluggable — sched_ext 로 BPF 스케줄러 커스텀 (2024+)
IPC·시그널·좀비 — 프로세스 간 통신
IPC (Inter-Process Communication) 종류:
시그널 활용:
Graceful Shutdown 패턴:
좀비 프로세스 (Zombie):
- ▸자식 종료했지만 부모가
wait()호출 안 함 → PCB 만 남아있는 상태 - ▸
ps에서Z상태로 표시 - ▸방지: 부모가 SIGCHLD 핸들러 등록 후
waitpid()호출 - ▸고아 프로세스: 부모 먼저 죽으면 init(PID 1)이 입양 → init 가 wait → 정리
cgroup + 관측성 — 컨테이너의 토대
cgroup (Control Group) — Linux 가 프로세스 그룹의 자원을 제한. Docker·K8s 의 핵심.
활용 예:
Docker 예: docker run --memory=1g --cpus=0.5 nginx 가 내부적으로 cgroup 설정.
cgroup v2 (현대 Linux): 통합된 계층 (v1 의 분리된 컨트롤러 통합).
관측성 (Observability) 3축:
eBPF (Extended Berkeley Packet Filter):
- ▸커널 안에서 안전하게 코드 실행 (커널 패치 X)
- ▸시스템 콜·네트워크·디스크 모든 이벤트 관측
- ▸도구:
bcc·bpftrace·pixie·falco(보안) - ▸Cilium (K8s 네트워크), Datadog APM 모두 eBPF 기반
관측 함정:
- ▸❌ 메트릭만 (왜 그런지 모름) → trace 도
- ▸❌ 로그 폭주 (10TB/day) → 샘플링·필터링
- ▸❌ /var/log 가득 → 로그 로테이션 필수 (logrotate)
🤖 AI 에게 이렇게 요청해보세요
이 lesson 의 개념을 알면 AI 에게 구체적으로 지시할 수 있습니다. 막연한 "고쳐줘" 가 아니라 어휘를 가진 요청 — 그게 토큰 절약의 출발점입니다.
- ▸"이 작업이 컨텍스트 스위칭 비용 큰지 진단해줘"
- ▸"이 작업을 epoll (Linux) 기반 비동기로 바꾸면 어떤 이점이 있는지 알려줘"
왜 이게 토큰을 줄이나
개념을 모를 땐 AI 답변을 받고도 "그게 뭐예요?" 를 다시 물어야 합니다. 그 "다시 물음" 이 토큰을 잡아먹습니다. 개념 한 번 익혀두면 대화가 한 번에 끝납니다.