패스트 캠퍼스 컴퓨터 공학을 들으며 정리한 내용입니다.
1. 운영체제?
Operating System
사용자가 컴퓨터를 쉽게 다룰 수 있게 해주는 인터페이스로, 대표적으로 Window, Linux, Mac 같은 것들이 여기 포함된다.
OS는
- 시스템 자원을 관리한다.
- 사용자와 컴퓨터간의 커뮤니케이션을 지원한다. (CLI, GUI 제공)
- 컴퓨터 하드웨어와 응용 프로그램을 제어, 관리한다.
대표적으로 이런 세가지 일을 한다.
2. 운영체제의 구조?
운영체제는 쉽게 보면 아래의 그림처럼 생겼다.
위의 두 줄 Application, Shell은 일반적인 사용자가 볼 수 있는 부분이다.
그리고 아래의 Library, System Call 등등..은 OS와 관련된 부분이다.
그럼 운영체제가 어떻게 사용자의 요구를 받아 응용프로그램을 실행시키는지 알아보자.
2-1. 쉘
사용자가 응용프로그램을 실행하면 운영체제는 자원을 적절히 분배하여 프로그램을 실행시켜준다.
위의 문장을 간단하게 보면 우리는 원하는 프로그램이 있다면 마우스로 두번 클릭하는 것만으로 실행한다.
또는 CLI를 이용하면 명령어를 입력하여 실행을 할 수도 있다.
이 때, 우리가 프로그램을 실행시킬 수 있고, 서비스를 조작할 수 있도록 해주는 경계선, 화면을 인터페이스라고 하고, 해당 인터페이스를 쉘(shell)이라고 한다.
Shell은 해석하면 ‘껍데기’인데 말 그대로 운영체제를 둘러싸고 있어, 사용자는 쉘을 통해서만 운영체제에 일을 시키고, 결과를 받을 수 있다.
그러면 우리가 쉘이라는 인터페이스를 통해 운영체제에 명령을 내리는 것과 반대로, 응용프로그램은 어떤 인터페이스를 통해서 운영체제와 소통을 할까?
2-2. API
운영체제는 응용 프로그래밍과도 소통을 위하여 인터페이스를 제공하는데, 이것이 API(Application Programming interface)이다.
API를 보면 함수를 사용할 수 있도록 설명서, 명세서가 적혀져 있는데, 응용프로그램이 API에 적혀있는 함수를 운영체제에 사용하면, 운영체제는 함수를 보고 시킨 일을 수행한다.
예를들어, JAVA API를 살펴보면 응용프로그램이 운영체제에게 부탁할 수 있는 작업들이 적혀있다.
이제 우리는 응용프로그램을 만들 때 API에 적힌대로 함수를 그대로 따라 적기만 하면 된다.
그런데 이제 또 궁금한점이 생긴다.
컴퓨터는 0과 1만 알아들을 수 있는 기계아닌가? 운영체제는 어떻게 영어로 적힌 API를 보고 컴퓨터에게 전달할까?
2-3. System Call과 커널
API는 운영체제가 응용프로그램을 위해 제공하는 문서이다.
그리고 개발자들은 그 문서를 보고 응용프로그램을 작성한다.
그런데 또 컴퓨터는 0과 1만 알아들을 수 있다.
그렇다는것은 운영체제가 API를 통해 어떤 일을 해서 컴퓨터도 알아들을 수 있게 해준다는 것이 된다.
운영체제가 시스템 자원에 어떻게 명령을 내리고 일을 할 까?
일단 운영체제는 커널(kernel, 알맹이)이라는 곳에서 시스템 자원을 관리하고, 명령을 내리고, 일을 한다.
그리고, 시스템 콜(System Call, 시스템 호출)이라는 것을 통해 커널과 대화하며 시스템 자원을 관리하는 것이다.
그래서 각 언어별 API를 보면 시스템 콜을 호출하는 것을 찾을 수 있을것이다.
2-4. 사용자모드? 커널모드?
그리고 2-3에서 말했듯, 운영체제는 커널(알맹이)에서 시스템 자원을 관리하고 있다.
말그대로 껍데기 속의 중요한 알맹이인데, 이 커널도 여러 부분으로 나뉘어 있다.
제조사마다 커널의 생김새는 다르지만, 커널의 안으로 들어갈수록 중요하고, 특별한 권한이 필요하다.
위의 그림을 보면 커널의 제일 겉부분 Ring3은 사용자 모드로 누구나 쉽게 사용할 수 있다.
하지만 가장 안쪽의 Ring0은 커널모드로 특정 권한이 없으면 사용할 수 없다.
커널모드는 가장 중요한 CPU를 사용할 때 사용하는 모드로, 커널모드를 실행하려면 반드시! 시스템 콜이 필요하다.
3. 정리
위의 내용을 다시 정리해 보자면
운영체제는 응용프로그램, 시스템 자원을 관리한다.
운영체제와 사용자는 쉘 인터페이스를 통하여 대화한다.
운영체제는 API를 통하여 응용프로그램과 대화한다.
운영체제는 커널에서 시스템 자원을 관리한다.
운영체제는 시스템 콜을 통하여 시스템 자원(커널)과 대화한다.
커널에는 사용자모드, 커널모드가 있는데, 커널모드를 위해서는 반드시 시스템 콜이 필요하다.
로 간단히 정리할 수 있다.
결론은 API, 쉘, 커널, 시스템콜 모두 운영체제가 다른 것들과 대화하는데 필요한 인터페이스라는 것이다.