하드웨어와 소프트웨어(OS 시스템 소프트웨어) 사이의 중개자이다.
프로세스 관리, 메모리 관리, 저장 장치 관리 같은 OS의 핵심적인 기능을 모아놓은 것. (부팅시 부트로더에 의해 로드되어 항상 메모리 상주한다.)
이러한 커널에 명령을 전달하고 실행 결과를 사용자와 응용 프로그램에 돌려주는 인터페이스가 있다.
OS는 커널과 인터페이스를 분리하여, 같은 커널을 사용하더라도 다른 인터페이스를 가진 형태로 제작할 수 있게 된다.
이러한 시스템 호출은 커널이 자신을 보호하기 위해 만든 인터페이스이다.
커널은 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단한다. 이로 인해, 시스템 호출을 이용해서만 자원을 이용할 수 있다.
커널이 하드웨어와 소프트웨어를 연결하는 핵심 프로그램이라면, 쉘은 커널을 감싼 껍데기로, Kernel과 Application 사이의 인터페이스이다.
커널을 제어하는 명령어들을 해석해주는 역할을 한다.
Bash(Unix, Linux), PowerShell(Window) 가 있다.
Microsoft는 Unix 스타일의 쉘 인터페이스의 영향을 받아 최초의 인터페이스인 MS-DOS를 만들었다.
GUI가 상용화된 후 MS-DOS 기반 프로그램을 실행할 수 있는 DOS-에뮬레이터로 CMD.EXE를 만들었다.(CMD도 Shell 중 하나)
하지만, OS 작업을 위한 기능에 대한 엑세스 권하니 부족하여 PowerShell을 사용하여 파워 유저 관리 작업을 실행하는 대체 방법을 개발했다.
쉘을 실행하는 환경을 제공해주는 에뮬레이터로 텍스트 기반의 단순한 창을 의미한다.
(즉, 쉘이 실행될 때 똑같이 실행되는 복제 프로그램이라고 볼 수 있다.)
창에 문자를 입력하면 터미널은 쉘의 stdin으로 문자를 보낼 뿐만 아니라 이러한 문자를 창에 나타낸다.
쉘이 stdout 및 stderr로 출력하는 문자는 터미널로 전송되며, 이러한 문자도 창에 나타낸다.
리눅스, 맥 OS는 터미널이라는 애플리케이션이 있고, 이는 하드웨어를 소프트웨어로 구현한 애플리케이션이다. 따라서 가상 터미널 또는 터미널 에뮬레이터라고 부르는 것이 더 정확한 표현이다.
(원래 터미널의 의미는 예전에 입력과 출력이 가능한 하드웨어 장비를 뜻했고, 이를 응용 프로그램으로 구현했다는 의미이다. 두 표현을 구별하면 이해에 좋다.)
MS는 파워쉘, 커맨드 프롬프트, WSL(Windows Subsystem for Linux) 같은 커멘드라인 툴 사용자를 위해 Window Terminal을 만들었다.