시스템 콜
위의 그림은 운영체제 서비스의 전체적인 오버뷰 입니다. 그림을 보면, 인터페이스와 서비스 사이에 시스템 콜이 존재하는데, 시스템 콜이 운영체제 내부에서 운영체제를 둘로 나누고 있는 상태임을 알 수 있습니다. 유저의 요청과 서비스,하드웨어의 경계를 만들어주고 있는 느낌!
# 시스템 콜이란?
시스템 콜은 응용프로그램에서 운영체제에게 하드웨어 자원 사용을 요청 할 수 있는 하나의 수단으로, 프로세스가 하드웨어에 접근해서 필요한 기능을 사용할 수 있게 합니다.
시스템 콜이 필요한 이유는 보안 때문입니다
[ 듀얼 모드 ]
듀얼 모드란? 다중 프로그래밍 환경에서 사용자와 운영체제는 시스템 자원을 공유하게 되는데, 자원에 대한 접근을 사용자 모드(User Mode)와 커널 모드(Kernel Mode)로 분리하여 운영체제를 보호하는 기법입니다. 사용자가 메모리 내부까지 직접 접근을 하여, 주요한 운영체의 리소스에 영향을 미치는 행위를 하면 안되기 때문에 사용자에게 제한을 두어 사용자가 메모리 내의 주요 운영체제 자원에 직접적으로 접근할 수 없도록 합니다(보안)
운영체제에서 프로그램이 구동되는데 있어, 파일을 읽어오거나 쓰거나 화면에 메세지를 출력하는 등 많은 부분이 커널 모드를 사용합니다.
[ 시스템 콜 과정 ]
- 유저가 커널에게 시스템콜 요청
- 커널은 시스템 콜 수행
- 시스템콜 결과를 유저에게 반환
시스템 콜의 과정이 내부적으로 어떻게 작동하는지 예시를 통해 보겠습니다.
우선 사용자가 CLI에서 cp in.txt out.txt 명령어(in.txt 파일을 out.txt 이름의 파일로 복사)를 실행해서 커널에 시스템 콜을 요청하면 커널에서 시스템 콜을 수행합니다.( 수행과정 : input file, output file name을 받아서, input file을 열고 output파일을 생성 - Loop로 input file을 쭉 읽고 output file에 쓰기를 반복하다가 읽을 것이 더 이상 없어지면 Loop 종료하고 output file을 닫음 - 종료 메세지를 스크린에 보내고 정상적으로 종료). 수행과정 후 시스템 콜 결과인 in.txt파일이 복사된 output.txt이 유저에게 반환
[ 시스템 콜 유형 ]
- 프로세스 제어
- 프로세스 생성,종료
- 로드, 실행
- 프로세스 속성 가져오기, 프로세스 속성 설정
- wait 이벤트, signal 이벤트
- 메모리 할당 및 해제 - 파일관리
- 파일 생성, 삭제
- 열기, 닫기
- 읽기, 쓰기, reposition
- 파일 속성 값 확인, 지정 - 장치관리
- 장치 요청, 해제
- 읽기,쓰기,재배치
- 장치 속성 가져오기, 설정
- 논리적인 장치 연결 및 분리 - 정보유지
- 시스템 날짜 가져오기 및 설정
- 시스템 데이터 가져오기 및 설정
- 프로세스, 파일 및 장치 속성 가져오기 및 설정 - 통신
- 통신 연결 생성, 삭제
- 메세지 보내기 받기
- 전송상태 정보
- 원격장치 연결 또는 분리 - 보호
- 파일 권한 얻기 및 설정