CS/운영체제

시스템 콜(System Call)

glorypang 2025. 9. 19. 23:23
728x90
반응형
SMALL

시스템 콜(system call)

시스템 콜(System Call)은 운영체제의 커널이 제공하는 서비스에 대해,
응용 프로그램이 커널에 접근하기 위한 인터페이스입니다.

응용 프로그램 ——————→ 커널 
          ( System Call)

 

간단히 말해서, 사용자 프로그램이 특권 명령(하드웨어 제어, 파일 접근 등)을 수행해야 할 때,
운영체제에게 "이거 좀 대신 해주세요!"라고 요청하는 방법
이에요.

 

우리가 사용하는 프로그램들은 직접 하드웨어를 건드릴 수 없어요.
왜냐하면:

  • 보안상 위험해요 (해커의 악의적 접근)
  • 시스템이 불안정해질 수 있어요 (초보자의 실수)
  • 여러 프로그램이 동시에 하드웨어를 제어하면 충돌이 일어나요

그래서 운영체제가 중간에서 안전하게 모든 하드웨어를 관리하고,
프로그램들은 시스템 콜을 통해 정중하게 부탁해야 합니다.

집에 비유하면?

  • 운영체제 = 집주인
  • 애플리케이션 = 세입자
  • 시스템 콜 = 세입자가 집주인에게 하는 요청

세입자가 "전기 좀 써도 될까요?", "화장실 좀 써도 될까요?" 하고 물어보는 것처럼,
프로그램도 "파일 좀 읽어도 될까요?", "네트워크 좀 써도 될까요?" 하고
시스템 콜을 통해 요청하는 거예요.

시스템 콜이 동작하는 원리

시스템 콜 테이블

모든 시스템 콜에는 고유한 번호가 할당되어 있어요.
운영체제는 시스템 콜 테이블이라는 것을 관리하는데,

 

이 테이블에는:

  • 시스템 콜 번호
  • 해당 기능을 처리하는 함수의 주소

가 저장되어 있어요.

시스템 콜 실행 과정

  1. 프로그램에서 `open()` 같은 시스템 콜 호출
  2. CPU가 커널 모드로 전환
  3. 운영체제가 시스템 콜 테이블에서 해당 번호 찾기
  4. 해당 인덱스가 가리키는 주소의 루틴 실행
  5. 작업 완료 후 인터럽트 발생으로 완료 알림
  6. 사용자 모드로 복귀

사용자 모드 vs 커널 모드

CPU는 보안을 위해 두 가지 모드로 동작해요.
Mode bit라는 것으로 구분하는데:

  • 0: 커널 모드
  • 1: 사용자 모드

사용자 모드 (User Mode) - Ring 3

  • 일반 애플리케이션이 실행되는 공간
  • PC(Program Counter) 레지스터가 사용자 프로그램 영역을 가리킬 때
  • 일반 명령만 실행 가능 (메모리 읽기/쓰기, CPU 계산 등)
  • 하드웨어에 직접 접근 불가능
  • 잘못된 접근 시 즉시 trap 발생하여 프로세스 종료
  • 각 프로세스는 독립된 메모리 공간 사용
  • 안전하지만 제한적

커널 모드 (Kernel Mode) - Ring 0

  • 운영체제와 드라이버가 실행되는 공간
  • PC 레지스터가 운영체제 코드 영역을 가리킬 때
  • 특권 명령 실행 가능 (I/O 장치 제어, 타이머 설정 등)
  • 모든 하드웨어 자원에 접근 가능
  • 모든 메모리 영역 접근 가능
  • 강력하지만 위험

왜 이렇게 나누나요?

인텔 x86 CPU의 `HLT` 명령어를 예로 들어볼게요.
이 명령어는 CPU를 완전히 멈춰버릴 수 있어요.


만약 일반 프로그램에서 이런 명령어를 마음대로 쓸 수 있다면?
컴퓨터가 먹통이 되겠죠!
그래서 이런 위험한 명령어들은 커널 모드에서만 실행할 수 있게 제한하는 거예요.

시스템 콜의 6가지 종류

1. 프로세스 제어 (Process Control)

프로그램의 생명주기를 관리해요.

  • `exit()`, `abort()` - 프로그램 종료/중지
  • `fork()` - 새로운 프로세스 생성
  • `exec()` - 프로그램 실행
  • `wait()` - 다른 프로세스 기다리기
  • 메모리 할당/해제

예시: "새로운 프로그램을 실행해주세요!"

2. 파일 조작 (File Manipulation)

파일과 관련된 모든 작업을 담당해요.

  • `open()`, `close()` - 파일 열기/닫기
  • `read()`, `write()` - 파일 읽기/쓰기
  • `create()`, `delete()` - 파일 생성/삭제

예시: "이 파일을 읽어서 화면에 보여주세요!"

3. 장치 관리 (Device Management)

하드웨어 장치들을 제어해요.

  • `ioctl()` - 하드웨어 제어
  • 키보드, 마우스, 프린터 등 관리
  • 장치 연결/해제

예시: "프린터로 이 문서를 출력해주세요!"

4. 정보 유지 (Information Maintenance)

시스템 정보를 관리해요.

  • `getpid()` - 프로세스 ID 확인
  • `time()`, `date()` - 현재 시간/날짜 조회
  • `sleep()`, `alarm()` - 잠시 대기/알람 설정
  • 시스템 데이터 확인/설정

예시: "현재 시간이 몇 시인지 알려주세요!"

5. 통신 (Communication)

프로세스 간 데이터 교환을 도와요.

  • `pipe()` - 파이프 통신
  • `mmap()` - 메모리 맵핑
  • `shm_open()` - 공유 메모리
  • 네트워크 통신
  • 원격 장치 연결

예시: "다른 프로그램과 데이터를 주고받고 싶어요!"

6. 보호 (Protection)

보안과 권한을 관리해요.

  • `chmod()` - 파일 권한 변경
  • `chown()` - 파일 소유자 변경
  • `umask()` - 기본 권한 설정

예시: "이 파일을 읽기 전용으로 만들어주세요!"

실제 예시: 파일 복사하기

리눅스에서 `cp in.txt out.txt` 명령어를 입력했을 때
어떤 시스템 콜들이 순차적으로 호출될까요?

단계별 시스템 콜 호출 과정

1. 사용자 입력 받기

  • I/O 시스템 콜 호출로 키보드 입력을 받아요

2. 'in.txt' 파일 접근 가능 확인

  • 파일 존재 여부를 확인하는 시스템 콜 호출
  • 접근 불가능하면 → 에러 발생 → 프로그램 종료 시스템 콜 호출

3. 'out.txt' 파일명 검사

  • 출력 파일명이 이미 존재하는지 확인하는 시스템 콜 호출

4. 파일 처리

  • 파일이 존재하면 → 덮어쓸지 사용자에게 물어보기
  • 파일이 없으면 → 새로 생성하기
  • 두 경우 모두 시스템 콜 사용

5. 실제 파일 복사

  • 원본 파일 읽기 시스템 콜
  • 대상 파일 쓰기 시스템 콜

이렇게 간단한 파일 복사 하나에도 수많은 시스템 콜이 사용되는 거예요!

드라이버는 뭔가요?

드라이버는 운영체제와 하드웨어 사이의 번역기예요!

관계 정리

  • 애플리케이션 ↔ 운영체제: 시스템 콜
  • 운영체제 ↔ 하드웨어: 드라이버

하드웨어마다 특성이 다르기 때문에,
각 하드웨어 제조사에서 "우리 제품은 이렇게 사용해주세요"라는 설명서(드라이버)를 만들어서 제공하는 거예요.

예시로 이해하기

그래픽 카드를 새로 샀다고 생각해보세요:

  1. 하드웨어 = 그래픽 카드
  2. 드라이버 = NVIDIA나 AMD에서 제공하는 소프트웨어
  3. 운영체제가 드라이버를 통해 그래픽 카드와 소통

정리하면

핵심 포인트

  • 시스템 콜은 사용자 프로그램이 운영체제의 도움을 받기 위한 유일한 방법
  • 커널 모드에서만 특권 명령 실행 가능, 사용자 모드에서는 일반 명령만 가능
  • 모든 하드웨어 접근은 반드시 시스템 콜을 통해야 함
  • 시스템 콜 테이블을 통해 효율적으로 관리됨

우리가 컴퓨터를 사용할 때마다...

  • 파일을 클릭해서 열 때 → `open()` 시스템 콜
  • 키보드로 타이핑할 때 → I/O 시스템 콜
  • 인터넷에 접속할 때 → 네트워크 시스템 콜
  • 화면에 뭔가 표시할 때 → 그래픽 시스템 콜

모든 동작 뒤에는 시스템 콜이 숨어있어요!
직접 시스템 콜을 호출하기보다는 보통 라이브러리나 API를 통해 간접적으로 사용하지만,
결국에는 모든 프로그램이 시스템 콜 없이는 아무것도 할 수 없다는 거죠.

왜 이렇게 복잡하게?

시스템 콜과 모드 분리 덕분에 우리는:

  • 안전한 컴퓨터 환경을 가질 수 있어요
  • 안정적인 멀티태스킹이 가능해요
  • 보안이 강화된 시스템을 사용할 수 있어요

만약 모든 프로그램이 하드웨어에 직접 접근할 수 있다면? 컴퓨터는 매번 먹통이 되고,
해킹도 쉬워지고, 프로그램들끼리 충돌이 계속 일어날 거예요.

 

시스템 콜은 안전과 편의의 완벽한 균형을 제공하는 운영체제의 멋진 설계라고 할 수 있어요!

728x90
반응형
LIST