공룡책(Operating System Concepts)과 패스트캠퍼스 강의를 참고하였습니다.
개인적인 공부용으로 작성한 글이기 때문에 틀린 내용이 있을수도 있습니다. 틀린 내용을 발견하신다면 언제든지 지적해주세요.
유저 <-> UI(GUI, command line, batch...) <-> system calls <-> services <-> OS <-> 하드웨어
쉘이란 사용자가 운영체제의 기능과 서비스를 조작할 수 있도록 인터페이스를 제공하는 프로그램이다.
쉘은 사용자로부터 명령어를 입력받고 이를 수행한다.
시스템 콜은 운영체제가 제공하는 프로그래밍 인터페이스이다.
유저가 직접 시스템 콜을 호출하는 경우는 거의 없으며 주로 API에 의해서 호출된다.
API란 응용프로그램과 운영체제 사이의 인터페이스이며 보통 라이브러리 형태로 제공된다.
대표적인 API로는 Win32 API, POSIX API, Java API 등이 있다.
유저가 어떤 기능을 사용하면 시스템 콜 인터페이스는 실행하는데 필요한 시스템 콜을 호출하고 결과를 전달한다. 전달된 결과는 다시 유저에게 전달된다. 이와 같은 과정이 유저 모드와 커널 모드를 왔다 갔다 하며 진행된다.
예를 들어, 유저가 printf()를 사용하면(유저 모드) C library에서는 write() 시스템 콜을 호출하고, 결과를 반환한다(커널 모드).
유저 모드, 커널 모드에 대해서는 다음 게시물에서 더 자세하게 다룰 예정이다.
시스템 콜에는 file management, device management, information maintenance, communications, protection과 관련된 기능들이 있다.