시스템 콜이란?
운영체제는 사용자 모드(User mode)와 커널 모드(Kernel mode)로 나뉘어 동작하고, 이렇게 나뉘어 동작하는 것을 이중 동작 모드(Dual Mode Operation)라고 합니다.
그렇다면 운영체제는 왜 이중 동작 모드로 구동이 될까요?
바로 시스템을 보호하기 위해서입니다. 예를 들어 사용자가 권한 없이 시스템 내부의 데이터를 만질 수 있다고 가정해보겠습니다. 이럴 경우 쉽게 내부 데이터 접근이 가능하여 의도치 않게 또는 악의적으로 시스템을 해칠 수가 있습니다. 이런 경우를 대비해 시스템을 보호하기 위해서 이중 동작 모드로 구동이 됩니다. 이렇게 구동되어 유저 애플리케이션이 함부로 시스템 자원에 접근할 수 없게 되는 것이죠.
사용자 모드는 접근할 수 있는 메모리 영역이 사용자에게 허용된 정도로 제한되어 있고, 하드웨어에 직접적으로 접근할 수 없습니다.
커널 모드는 모든 세스템 메모리와 CPU Instruction에 접근 가능하고, 하드웨어에 직접적으로 접근할 수 있습니다.
한 마디로 커널 모드가 사용자 모드보다 높은 권한을 가져 사용자 모드에서 유저 애플리케이션의 필요에 따라 커널 모드로 변환하여 시스템 영역에 접근할 수 있습니다.
이렇게 사용자 모드에서 커널 모드로 전환하기 위해 필요한 인터페이스를 시스템 콜이라고 합니다.
시스템 콜 처리
1) 사용자 프로세스가 시스템 콜 호출(커널 모드 진입)
2) 커널은 내부적으로 시스템 콜을 구분하기 위해 기능별로 고유번호를 할당하고 그 번호에 해당하는 제어 루틴을 정의
3) 커널은 요청받은 시스템 콜에 대응하는 고유번호 확인하고 번호에 맞는 서비스 루틴 호출
4) 커널은 서비스 루틴을 처리하고, 사용자 모드로 전환
open()에 매칭된 커널 함수 sys_open()를 실행
시스템 콜 유형
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()
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 메모리 계층 구조(Memory Hierarchy) (0) | 2022.11.10 |
---|---|
[운영체제] 운영체제(OS) (0) | 2022.11.02 |