[OS] 시스템 호출 (System. Calls)

Jay·2021년 4월 19일
0

Computer Science

목록 보기
46/50
post-thumbnail

시스템 콜?

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

연관지어 나오는 내용
Q. 함수 호출과 시스템 호출은 뭐가 달라요?
-> 함수 호출은 사용자가 작성한 함수 및 라이브러리의 메서드 등을 호출하는 것. 시스템 호출은 OS내에 미리 정의되어 있는 함수를 호출하는 것.

시스템 콜의 필요 이유

  • 우리가 일반적으로 사용하는 프로그램은 '응용 프로그램'이다.
  • 유저레벨의 프로그램은 유저레벨의 함수들 만으로 많은 기능을 구현하기 힘들기에 커널의 도움을 받아야 한다.
  • 이러한 작업은 응용 프로그램으로 대표되는 유저 프로세스에서 유저모드에서는 수행할 수 없다.
  • 반드시 커널에 관련된 것은 커널 모드로 전환한 후에야, 해당 작업을 수행할 권한이 생긴다.
  • 커널 모드를 통한 이러한 작업은 반드시 시스템 콜을 통해 수행하도록 설계되어 있다.

Q. 권한이 왜 필요할까?

  • 해커가 악의적으로 시스템 콜을 사용하는 경우, 초보가 의도치 않게 아무 함수를 호출해서 시스템이 망가진 경우를 막기 위해!!
  • 그래서 유저 모드에서 시스템 콜을 호출할 경우 OS에서 불법적인 접근으로 인지하고 trap을 발생시킨다..

시스템 호출의 유형

  1. 프로세서 제어
  2. 파일 조작
  3. 장치 관리
  4. 정보 유지
  5. 통신

시스템 호출 종류

  • 프로세스와 관련된 시스템 호출
    • 프로세스 제어용
      • exec : 자신을 수행 가능한 다른 프로세스로 대치 수행
      • fork : 현재의 프로세스 이미지를 복사하고 child 프로세스를 만듬
      • wait
    • pipe: 파이프
    • signal : SW 인터럽트 또는 시그널
    • exit : 프로세스 종료
    • getuid, setuid : 사용자 및 그룹 id 접근
  • 표준 파일에 대한 입출력 시스템 호출
    • open(), create(), close(), read(), write(), lseek()..
  • 소켓 기반 입출력 시스템 호출
    • socket(), bind(), listen(), accept(), connect()
profile
developer

0개의 댓글