-
OS - KernelProgramming/CS 2021. 11. 7. 21:38
안녕하세요 BeePeach입니다.
오늘 공부해볼 내용은 Kernel, Shell, SysytemCall입니다.
지난번 포스팅에서 OS는 system resource를 관리하고 사용자와 컴퓨터 사이에 인터페이스를 제공한다고 했습니다.
여기에 핵심이 되는 개념이 Kernel, Shell, SystemCall입니다.
Kernel
Kernel의 사전적 의미는 알맹이입니다.
의미처럼 Kernel은 리소스를 관리하고 프로세스와 하드웨어의 보안등 OS의 핵심 프로그램을 의미합니다.
이런 중요한 기능을하기때문에 아무나 접근해서는 안되겠죠??
그래서 OS에는 2가지 모드가 존재합니다.
User mode
리소스에 마음대로 접근할 수 없는 모드입니다.
일반적으로 application이 실행되는 모드가 바로 사용자모드입니다.
그리고 여기서 리소스에 접근한다던지 필요한 기능이 있다면 요청을 보내게 됩니다.
Kernel mode
모든 리소스에 접근할 수 있는 모드입니다.
요청을 받으면 커널이 요청에 대한 작업을 수행한 후 결과를 반환해줍니다.
그럼 여기서 커널의 기능을 사용하겠다고 요청을 보낼때 사용하는게 바로 System call입니다.
System call
아주 간단하게 말하면 함수입니다.
OS의 기능을 사용할 수 있도록 만들어진 명령 함수입니다.
위에서 사용자모드에서 필요한 기능이 있다면 커널에 요청을 보낸다고 했죠??
그 요청을 바로 시스템콜을 통해서 보냅니다.
시스템콜을 호출하면 사용자 모드에서 커널모드로 진입하게 됩니다.
커널은 시스템콜이 요청한 작업을 한뒤에 작업의 결과를 시스템콜의 리턴값으로 전달합니다.
그러면서 다시 커널모드에서 사용자모드로 돌아가게 되는것이죠.
이렇게 우리가 만든 프로그램들은 계속해서 사용자모드와 커널모드를 왔다갔다하면서 실행되게 됩니다.
OS에서 제공하는 API들은 모두 사실 시스템콜로 구성되어 있습니다.
각각 언어가 제공하는 open관련 함수들도 내부적으로는 sys_open이라는 시스템콜을 호출하는 것입니다.
그럼 Shell은 뭘까요??
Shell
사용자와 컴퓨터 사이에 인터페이스를 제공해주는 프로그램을 shell 이라고 합니다.
왜 이름이 shell(껍데기)일까요??
사전전 의미가 Kernel(알맹이)와 상반되는 의미이죠??
Kernel이란 OS의 핵심 프로그램을 말합니다.
Shell은 사용자와 kernel사이에 인터페이스를 담당하기때문에 shell이란 이름을 사용합니다.
외부에서 껍데기를 통해서만 알맹이에 접근할 수 있잖아요??
그 개념을 생각하면 이해하기 쉽습니다.
Shell의 종류는 크게 GUI, CLI로 나뉩니다.
GUI Shell에는 Mac의 Finder, Window의 탐색기가 있습니다.
CLI Shell에는 bash, csh, zsh, ksh등등이 있습니다.
우리가 사용하는 termial 또는 iTerm은 zsh입니다.
OS 개발 순서
마지막으로 운영체제를 개발하는 순서를 알아보면 이해가 조금 더 잘됩니다.
- Kernel을 개발한다
- SystemCall을 개발한다
- API를 개발한다
- Shell을 개발한다.
- 응용프로그램을 개발한다.
정리
정리하자면 커널이란 OS의 핵심 기능을 의미하고 커널의 기능을 사용하기 위해서는 커널모드로 동작해야하는데 커널모드로 실행하기 위해선 반드시 시스템 콜을 이용해야합니다.
시스템 콜을 사용하기 쉽도록 각 언어별로 API가 제공됩니다.
그리고 사용자들은 shell을 통해서 커널의 기능을 쉽게 사용할 수 있습니다.
728x90'Programming > CS' 카테고리의 다른 글
OS - Scheduling Algorithm (0) 2021.11.18 OS - Process Scheduling (0) 2021.11.09 OS - 운영체제 기본 (0) 2021.11.05 Compile이란?? (1) 2020.09.15