운영체제는 사용자 모드와 커널 모드로 나뉘어 동작

🔖사용자 모드

사용자 모드에서 사용자 애플리케이션 코드가 실행

  • 접근할 수 있는 메모리 영역이 사용자에게 허용된 정도로 제한
  • 하드웨어에 직접 접근 불가 → 접근 위해 시스템 콜 호출

🔖커널 모드

운영체제가 CPU를 사용하는 모드

  • 모든 시스템 메모리와 CPU Instruction에 접근 가능
  • 하드웨어에 직접 접근 가능 (하드웨어를 제어하는 명령어 실행)

🔖왜 나뉘어 동작할까? 시스템을 보호하기 위해서 나뉘어 동작 권한 없이 시스템 내부의 데이터를 건들일 수 있다면, 시스템을 해칠 수 있음

📖시스템 콜

운영 체제의 커널이 제공하는 서비스에 대해 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스

  • 응용프로그램이 커널 영역의 기능을 사용자 모드에서 사용 가능하도록 함

📖시스템 콜 처리

📎시스템 콜 처리 예시

open()이 호출된 경우

  1. 사용자 모드에서 사용자 프로세스가 시스템 콜 호출 → 커널 모드 진입
  2. 커널은 내부적으로 시스템 콜을 구분하기 위해 기능별로 고유번호 할당, 그 번호에 해당하는 제어 루틴 정의
  3. 커널은 요청받은 시스템 콜에 대응하는 고유번호 확인, 그 번호에 맞는 서비스 루틴 호출
    • open()에 매칭된 커널 함수인 sys_open() 실행
  4. 커널은 서비스 루틴 처리 → 사용자 모드 전환

📖시스템 콜 유형

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

  • fork(), exec(), wait(), exit()

2. 파일 조작(File Manipulation)

  • open(), read(), write(), close()

3. 장치 관리(Device Management)

  • ioctl(), read(), write()

4. 정보 유지(Information Maintenance)

  • getpid(), alarm(), sleep()

5. 통신(Communication)

  • pipe(), shm_open(), mmap()

6. 보호(Protection)

  • chmod(), umask(), chown()