시스템 콜

사용자 프로세스가 커널의 기능(파일 I/O, 프로세스 생성 등)을 안전하게 사용하기 위해 운영체제에 요청하는 프로그래밍 인터페이스입니다.

왜 필요한가?

운영체제는 사용자 모드(User Mode)와 커널 모드(Kernel Mode)를 분리하여 시스템을 보호합니다. 일반 프로세스는 하드웨어나 커널 자원에 직접 접근할 수 없으므로, 시스템 콜을 통해 커널에 작업을 위임합니다.

동작 흐름

사용자 프로세스 → 시스템 콜 호출 → 트랩(Trap) 발생 → 커널 모드 전환
→ 커널이 요청 처리 → 결과 반환 → 사용자 모드 복귀

주요 분류

분류예시설명
프로세스 제어fork(), exec(), exit()프로세스 생성·실행·종료
파일 관리open(), read(), write(), close()파일 읽기·쓰기·열기·닫기
장치 관리ioctl(), read(), write()디바이스 제어
정보 유지getpid(), time()시스템 정보 조회
통신socket(), send(), recv()프로세스 간 통신(IPC)

Java에서의 시스템 콜

Java는 JVM 위에서 동작하므로 시스템 콜을 직접 호출하지 않지만, 내부적으로 시스템 콜이 발생합니다.

// Java의 파일 읽기 → 내부적으로 open(), read() 시스템 콜 호출
FileInputStream fis = new FileInputStream("/tmp/test.txt");
int data = fis.read();  // read() 시스템 콜
fis.close();             // close() 시스템 콜

// 프로세스 생성 → 내부적으로 fork() + exec() 시스템 콜 호출
Process p = Runtime.getRuntime().exec("ls -al");

사용자 모드 vs 커널 모드

항목사용자 모드커널 모드
권한제한된 명령어만 실행모든 명령어 실행 가능
메모리 접근자신의 주소 공간만전체 메모리 접근 가능
모드 비트10
전환 계기시스템 콜, 인터럽트, 예외-

CSLOG에서 보기