2025. 2. 8. 15:31ㆍ정보기술/운영체제 (OS)
4장: 시스템 콜이 동작하는 과정
1. 시스템 콜이 실행될 때 내부적으로 어떤 일이 일어나는가?
시스템 콜(System Call)은 프로그램이 운영체제의 기능을 사용할 수 있도록 요청하는 메커니즘입니다. 이를 통해 프로그램은 파일 조작, 프로세스 생성, 메모리 할당, 네트워크 통신 등 다양한 작업을 수행할 수 있습니다.
그렇다면 시스템 콜이 호출될 때 내부적으로 어떤 과정이 발생할까요? 이를 이해하기 위해 단계별 흐름을 살펴보겠습니다.
📌 시스템 콜의 실행 흐름 (단계별 과정)
💡 프로그램이 read() 시스템 콜을 호출한다고 가정해 봅시다.
1️⃣ 사용자 모드에서 시스템 콜 호출
- 프로그램이 read() 시스템 콜을 호출하면 실행 흐름이 사용자 모드(User Mode)에서 시작됩니다.
- 프로그램은 운영체제의 특정 기능(예: 파일에서 데이터 읽기)이 필요하므로 시스템 콜을 요청합니다.
- 시스템 콜은 보통 라이브러리 함수(예: libc)를 통해 호출됩니다.
2️⃣ 시스템 콜 번호 저장 및 트랩(Trap) 발생
- 운영체제는 시스템 콜을 효율적으로 관리하기 위해 시스템 콜 번호(System Call Number)를 사용합니다.
- read() 시스템 콜의 번호가 레지스터에 저장됩니다.
- syscall 명령어 또는 int 0x80 인터럽트 명령어를 사용해 CPU가 커널 모드로 전환됩니다.
3️⃣ 커널 모드 전환 (컨텍스트 스위칭 발생)
- 트랩(Trap)이 발생하면 CPU는 커널 모드(Kernel Mode)로 전환됩니다.
- 커널 모드는 운영체제가 하드웨어에 직접 접근할 수 있는 특권 모드입니다.
- 컨텍스트 스위칭(Context Switching)이 발생하여 현재 프로그램의 상태를 저장한 후 커널 코드로 이동합니다.
4️⃣ 시스템 콜 핸들러 실행
- 커널의 시스템 콜 핸들러(System Call Handler)가 실행됩니다.
- 시스템 콜 테이블(System Call Table)에서 read()에 해당하는 커널 함수를 찾아 실행합니다.
- 예를 들어, sys_read()라는 내부 함수가 호출될 수 있습니다.
- 커널은 파일 시스템에서 요청된 데이터를 읽어 메모리에 저장합니다.
5️⃣ 결과 반환 및 사용자 모드 복귀
- 작업이 완료되면 커널은 사용자 프로그램에 결과(예: 읽은 데이터의 크기 또는 오류 코드)를 반환합니다.
- CPU는 커널 모드에서 사용자 모드로 전환하여 프로그램이 계속 실행될 수 있도록 합니다.
- 컨텍스트가 복원되며 프로그램이 시스템 콜 호출 이후의 명령을 수행합니다.
📢 정리: 시스템 콜 실행 흐름
- 사용자 프로그램이 시스템 콜을 호출 (read(), write(), fork() 등)
- 시스템 콜 번호를 레지스터에 저장
- 트랩(Trap) 발생, CPU가 커널 모드로 전환
- 시스템 콜 핸들러가 실행되며 요청을 처리
- 작업 완료 후 결과 반환, CPU가 사용자 모드로 복귀
2. 시스템 콜 테이블과 운영체제 내부 구조
📌 시스템 콜 테이블 (System Call Table)이란?
운영체제는 다양한 시스템 콜을 지원합니다. 각 시스템 콜은 고유한 번호(System Call Number)를 가지고 있으며, 시스템 콜을 실행할 때 이 번호를 기반으로 적절한 커널 함수를 호출합니다.
운영체제 내부에는 시스템 콜 테이블(System Call Table)이 존재하며, 이 테이블은 시스템 콜 번호와 해당 핸들러 함수의 주소를 매핑합니다.
📌 시스템 콜 테이블의 구조 예시
시스템 콜 번호 | 시스템 콜 이름 | 커널 함수 |
0 | sys_read() | 파일에서 데이터 읽기 |
1 | sys_write() | 파일에 데이터 쓰기 |
2 | sys_open() | 파일 열기 |
3 | sys_close() | 파일 닫기 |
4 | sys_fork() | 새로운 프로세스 생성 |
5 | sys_exec() | 실행 중인 프로세스를 새로운 프로그램으로 변경 |
6 | sys_exit() | 프로세스 종료 |
7 | sys_wait() | 자식 프로세스 종료 대기 |
📢 시스템 콜 테이블이 하는 역할
✅ 시스템 콜을 효율적으로 처리할 수 있도록 운영체제가 관리하는 핵심 데이터 구조
✅ 사용자 프로그램이 호출한 시스템 콜 번호에 맞는 커널 함수를 실행
✅ 새로운 시스템 콜을 추가하려면 시스템 콜 테이블을 업데이트해야 함
3. 인터럽트와 트랩(Trap)의 개념
시스템 콜은 단순한 함수 호출이 아니라, 운영체제의 특권 모드(커널 모드)로 전환하는 메커니즘이 필요합니다. 이를 위해 CPU는 인터럽트(Interrupt)와 트랩(Trap)을 사용합니다.
📌 인터럽트(Interrupt)란?
인터럽트는 외부 이벤트(입출력, 하드웨어 신호 등)가 발생할 때 CPU의 현재 작업을 중단하고 특정 코드를 실행하는 메커니즘입니다.
✅ 하드웨어 인터럽트 (Hardware Interrupt)
- 키보드 입력, 마우스 클릭, 네트워크 패킷 수신 등
- 하드웨어 장치가 CPU에게 신호를 보내 인터럽트를 발생시킴
✅ 소프트웨어 인터럽트 (Software Interrupt)
- 프로그램이 명시적으로 발생시키는 인터럽트
- 시스템 콜도 int 0x80 또는 syscall 명령어를 사용해 소프트웨어 인터럽트를 발생시킴
📌 트랩(Trap)이란?
트랩은 예상된 이벤트(예: 시스템 콜, 예외 처리)가 발생할 때 실행되는 특별한 인터럽트입니다.
✅ 트랩의 역할
- 시스템 콜 처리: syscall 또는 int 0x80을 실행하면 트랩이 발생하여 운영체제의 시스템 콜 핸들러가 실행됨
- 예외 처리(Exception Handling): 0으로 나누기 오류, 페이지 폴트(Page Fault) 등이 발생하면 트랩을 통해 운영체제가 개입
- 디버깅: 브레이크포인트(Breakpoint) 설정 시 트랩을 사용하여 디버거가 프로그램의 실행을 중단할 수 있음
📢 인터럽트 vs 트랩 비교
구분 | 인터럽트 (Interrupt) | 트랩 (Trap) |
발생 원인 | 외부 하드웨어 장치 (키보드, 마우스, 네트워크 등) | 내부 소프트웨어 이벤트 (시스템 콜, 예외) |
발생 시점 | 예상치 못한 순간 (비동기) | 코드 실행 중 특정 시점 (동기) |
처리 방식 | CPU가 현재 실행 중인 작업을 중단하고 처리 | 커널이 특정 이벤트 발생 시 처리 |
🚀 정리 및 핵심 요약
✅ 시스템 콜이 실행될 때 사용자 모드 → 커널 모드 전환 과정이 발생
✅ 시스템 콜 테이블을 통해 시스템 콜 번호에 맞는 커널 함수를 실행
✅ 인터럽트(Interrupt)와 트랩(Trap)을 이용해 시스템 콜이 실행됨
✅ 인터럽트는 외부 이벤트, 트랩은 시스템 콜 및 예외 처리
'정보기술 > 운영체제 (OS)' 카테고리의 다른 글
시스템 콜 (System Call) - 6. 시스템 콜의 보안과 성능 이슈 (0) | 2025.02.08 |
---|---|
시스템 콜 (System Call) - 5. 시스템 콜을 직접 사용해 보기 (0) | 2025.02.08 |
시스템 콜 (System Call) - 3. 시스템 콜의 종류와 예제 (0) | 2025.02.08 |
시스템 콜 (System Call) - 2. 시스템 콜의 개념을 쉽게 이해하기 (0) | 2025.02.08 |
시스템 콜 (System Call) - 1. 운영체제와 시스템 콜이란? (0) | 2025.02.08 |