새소식

CS/시스템

시스템 콜

  • -

1. 시스템 콜이란?

시스템 호출(system call)은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다. 보통 C나 C++과 같은 고급 언어로 작성된 프로그램들은 직접 시스템 호출을 사용할 수 없기 때문에 고급 API를 통해 시스템 호출에 접근하게 하는 방법이다.

 

 

2. 왜 필요할까?

응용프로그램에서 시스템과 관련한 기능(프로세스 관리, 메모리 관리, 파일 관리, 보안 및 보호, 에러 검출, 통신 등)을 사용해야할 때가 있다. 이때는 반드시 커널 모드로 전환해서 권한을 얻은 후 시스템 콜을 사용해 기능을 구현해야한다. 권한은 왜 필요할까? 해커가 악의적으로 시스템 콜을 사용하는 경우나 초보 사용자가 하드웨어 명령어를 잘 몰라서 잘못 함수를 호출했을 때 시스템 전체를 망가뜨릴 수 있기 때문이다. 따라서 이러한 명령어들은 특별하게 커널 모드에서만 실행할 수 있도록 설계되어있고, 만약 유저 모드에서 시스템 콜을 할 경우에는 운영체제에서 불법 적인 접근이라 여기고 trap을 발생시킨다.

CPU의 권한 모드

- 사용자 모드 : 일반적인 명령들을 실행하며, 응용프로그램에 의해 사용되어진다
- 커널 모드 : 특권 명령어 실행. 운영체제가 원하는 작업 수행을 위해 특정 자원 접근에 가능케하는 모드로, OS에 의해 사용되어진다. 

 

 

3. 시스템 콜 예시

"cp in.txt out.txt"를 실행하면?

일반적으로 윈도우 운영체제라면 라면 마우스가, 리눅스라면 키보드가 사용자로부터 입력을 받는데 이때 I/O 시스템 콜을 사용한다. 

위와 같은 문장을 입력을 받아서 'cp' 프로그램을 실행시키면 

먼저 'in.txt' 파일이 현재 디렉터리에서 접근할 수 있는 파일인지를 검사하기 위해 시스템 콜을 호출한다.

만약 파일이 존재하지 않는 다면 에러를 발생시켜야 하고, 프로그램을 종료하는데 이때 시스템 콜이 사용된다.

만약 파일이 존재한다면, 복사한 파일을 저장하기 위해 'output.txt' 파일명이 있는지 검사.

그리고 이 때도 마찬가지로 이 파일명이 존재하는지 존재하지 않는지 검사하기 위해 시스템 콜을 통해 확인

그리고 만약 파일 명이 이미 존재한다면, 덮어 씌워야 할지 아니면, 이어서 붙여야 하는지 User에게 물어본다.

만약 저장하고자 하는 파일 이름이 겹치지 않다면, 파일을 저장한다.

응용프로그램에서

 

4. 시스템 콜 종류

  1. 프로세스 제어(Process Control)
    • fork() : 자식 프로세스의 생성
    • exit() : 현재 프로세스 종료
  2. 파일 조작(File Manipulation)
    • open() : 파일이나 장치 열기
    • read() : 파일 읽기
    • write() : 파일 쓰기
    • close() : 파일 닫기
  3. 정보 유지(Information Maintenance)
    • getpid() : 그룹 아이디 얻어오기
    • alarm() : 설정한 시간 후 알람 시그널이 전달되도록 함
  4. 통신(Commnication)
    • pipe() : 내부 통신을 위한 채널을 생성한다.
  5. 보호(Protection)
    • chmod() : 파일 권한 변경
    • chown() : 파일 소유자 변경

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.