김우석 개발자

커널, 쉘과 터미널의 차이

개요 : 커널의 개념과 검정 스크린의 CLI들의 차이

커널

커널은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것이다. 이러한 커널에 명령을 전달하고 실행 결과를 사용자와 응용 프로그램에 돌려주는 인터페이스가 있다.

운영체제는 커널과 인터페이스를 분리하여, 같은 커널을 사용하더라도 다른 인터페이스를 가진 형태로 제작할 수 있다.

시스템 호출은 커널이 자신을 보호하기 위해 만든 인터페이스이다. 커널은 사용자나 응용프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단한다. 따라서 자원을 이용하려면 시스템 호출을 이용하여야 한다.

응용 프로그램이 직접 하드디스크에 데이터를 저장하지 않고 커널이 제공하는 write()함수를 사용하여 데이터를 저장해달라고 요청한다. 응용 프로그램은 데이터가 하드디스크의 어느 위치에 어떤 방식으로 저장되는지 알 수 없다. 만약 자신이 저장한 데이터를 읽고 싶다면 read() 함수로 시스템 호출을 이요하여 가져오면 된다.

printf()도 시스템 호출중 하나이다. 사용자가 시스템의 특정 위치에 문자를 출력할 수 있게 되면 문자가 겹치거나 남의 문자를 지울수도 있다. 그러나 printf() 함수를 사용하면 화면의 문자와 겹치는 부분 없이 문자를 쉽게 화면에 출력할 수 있다.

응용 프로그램과 커널의 인터페이스가 시스템 호출이라면 커널과 하드웨어의 인터페이스는 드라이버가 담당한다. 컴퓨터 하드웨어는 종류가 많은데, 운영체제가 많은 하드웨어를 다 사용할 수 있는 환경을 제공하려면 각 하드웨어에 맞는 프로그램을 직접 개발해야한다.

커널은 입출력의 기본적인 부분만 제작하고, 하드웨어의 특성을 반영한 소프트웨어를 하드웨어 제작자에게 받아 커널이 실행될 때 함꼐 실행되돌고 한다. 이때 하드에어 제작자가 만든 소프트웨어를 디바이스 드라이버라고 부른다.

Black screen


Shell


쉘은 껍데기, 주변이란 뜻을 가지며 커널은 알맹이, 핵심이라는 뜻을 가진다. 커널이 하드웨어와 소프트웨어를 연결하는 핵심이며, 쉘은 커널을 감싼 껍데기, 즉 커널과 애플리케이션의 인터페이스 역할을 한다.

커널을 제어하는 명령어들을 해석해주는 역할을 한다.

../../../../../public/assets/2021-07-22-CS-Kernel/kernel_shell.png

../../../../../public/assets/2021-07-22-CS-Kernel/shell_command.png

CMD


IBM이 PC를 위한 CLI가 필요하여서 Microsoft는 최초의 인터페이스인 MS-DOS를 만들었고, 하위 디렉토리를 탐색하고, PATH에서 명령을 실행하고 생성할 수 있따는 점에서 Unix 스타일의 쉘 인터페이스의 영향을 받았다.

그래픽 UI가 상용화된 후 CMD.EXE 는 MS-DOS 기반 프로그램을 실행할 수 있는 DOS-에뮬레이터로 만들어졌다. 하지만 운영 체제 작업을 위한 기능에 대한 액세스 권한이 부족하여 Microsoft는 PowerShell을 사용하여 파워 유저 관리 작업을 실행하는 대체 방법을 개발했다.

Terminal


터미널은 통신 프로세스의 종료를 나타내는 ‘terminate’에서 유래한 전자적 관점의 용어이다. 유닉스시대의 터미널은 전신기(teleprinter) 스타일의 타자기를 의미하며, 읽기 및 쓰기 이외의 여러 추가 명령(ioctls)을 구현하는 하드웨어 기기였다.

기술 발전과 함께 컴퓨터 터미널의 개념이 바뀌었다. 많은 회사들은 전신기를 사용하지 않았으며, 일반적인 작업 책상 위에 놓을 수 있을 만큼 작은 하드 드라이브, 모니터, 키보드를 갖추었다.

../../../../../public/assets/2021-07-22-CS-Kernel/terminal.jpg

터미널 에뮬레이터는 텍스트 기반 프로그램의 단순한 창을 의미한다. 창에 문자를 입력하면 터미널은 쉘의 stdin으로 문자를 보낼 뿐만 아니라 이러한 문자를 창에 나타낸다. 쉘이 stdout 및 stderr로 출력하는 문자는 터미널로 전송되며, 터미널에서 이러한 문자를 창에 그린다.

참고자료


Are terminal and shell the same?

What is Terminal, Console, Shell and Kernel? - GeeksforGeeks

What is the exact difference between a ‘terminal’, a ‘shell’, a ‘tty’ and a ‘console’?

We’re All Mad Here : 네이버 블로그

쉘과 커널 - 생활코딩

같은 카테고리의 글