[CS] 시스템 콜(System Call)

giggle·2023년 7월 26일
0

📌 시스템 콜(System Call)이란?

시스템 콜을 설명하기 앞서 운영체제는 시스템을 보호하기 위해 이중 동작 모드로 동작합니다.

이중 동작 모드는 사용자 모드와 커널 모드로 나눠집니다.
사용자 모드는 접근할 수 있는 메모리 영역이 사용자에게 허용된 정도로 제한되어 있고, 하드웨어에 직접적으로 접근할 수 없습니다.
커널 모드는 모든 시스템 메모리와 CPU Instruction에 접근 가능하고, 하드웨어에 직접적으로 접근 할 수 있습니다.

커널 모드가 사용자 모드보다 높은 권한을 가져 사용자 모드에서 유저 애플리케이션의 필요에 따라 커널 모드로 변환하여 시스템 영역에 접근할 수 있습니다.

이렇게 사용자 모드에서 커널 모드로 전환하기 위해 필요한 인터페이스를 시스템 콜이라고 합니다.

📌 시스템 콜(System Call)을 사용하는 이유?

가장 큰 이유는 유저 애플리케이션(ex. 우리가 흔히 개발하여 실행하는 자바 애플리케이션)이 운영체제의 치명적인 데이터를 수정/삭제하는 권한을 막기 위해서 입니다. 직접적인 하드웨어 요청이나 기타 시스템요청은 OS가 제공하는 System call을 통해 호출하도록 제공해줍니다.

만약 유저 애플리케이션이 System call을 호출하여 사용하면, 해당 애플리케이션은 커널모드로 잠시 전환되는 작업을 거치게 됩니다.

📌 시스템 콜(System Call) 사용

시스템 콜 처리

  1. 사용자 프로세스가 시스템 콜 호출(커널 모드 진입)
  2. 커널은 내부적으로 시스템 콜을 구분하기 위해 기능별로 고유번호를 할당하고 그 번호에 해당하는 제어 루틴을 정의
  3. 커널은 요청받은 시스템 콜에 대응하는 고유번호를 확인하고 번호에 맞는 서비스 루틴 호출
  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()

참고


피드백 및 개선점은 댓글을 통해 알려주세요😊

profile
배움을 글로 기록하는 개발자가 되겠습니다.

0개의 댓글