본문 바로가기
프로그래밍/Linux

[Linux] Kernel(커널), Shell(쉘)이란 무엇인가?

by HI_Ai 2023. 8. 30.
반응형

리눅스 운영체제의 구성요소인 Kernel과 Shell에 대해 알아보겠습니다.

 


1. 커널(Kernel)

커널은 하드웨어와 소프트웨어 사이의 인터페이스 역할을 하는 운영 체제의 핵심 부분입니다. 하드웨어 리소스를 효율적으로 사용하고 소프트웨어 애플리케이션의 실행을 지원하는 중추적인 역할을 합니다. 또한 필요에 따라 동적으로 로드하거나 언로드할 수 있는 다양한 모듈과 함께 작동하여 Linux 시스템의 유연성을 높여줍니다.

 

커널의 주요 기능은 다음과 같습니다.

 - 프로세스 관리

시스템에서 실행 중인 모든 프로세스를 관리. 프로세스 스케줄링, 프로세스 생성 및 종료, 서로 다른 프로세스 간의 IPC(프로세스 간 통신) 등의 기능이 포함

사용자가 동시에 두 개의 프로그램을 실행하는 경우 커널은 어떤 프로그램에 더 많은 CPU 시간을 할당할지, 어떤 프로세스를 일시 중지할지 등을 결정해야 하는데, 이 때, 커널은 프로세스 스케줄러를 사용하여 각 프로세스에 적절한 양의 CPU 시간을 할당

 

- 메모리 관리

실제 및 가상 메모리 관리, 스왑 공간 관리 등과 같은 메모리 관리 기능을 담당

프로그램 실행 시 필요한 메모리를 할당받기 위해, 커널은 메모리 관리자를 통해 물리적 메모리를 할당하고 RAM이 부족할 경우에는 스왑 공간(디스크의 일부)을 사용하여 메모리를 확장

 

쉘의 주요 기능은 다음과 같습니다.

- 장치 드라이버

커널에는 하드웨어와 상호 작용하는 다양한 장치 드라이버가 포함되어 있고, 드라이버는 특정 하드웨어 장치를 제어하고 운영 체제와의 통신을 중개함.

사용자가 USB 메모리 스틱을 컴퓨터에 연결하면 커널은 해당 장치와 통신이 가능하도록 적절한 드라이버를 로드


- 시스템 호출 인터페이스

사용자 공간에서 실행되는 프로그램이 커널의 기능을 요청하기 위해 사용하는 인터페이스. 프로그램이 파일 저장시 'write()' 시스템 호출을 통해 커널에 파일 쓰기 요청 시도


- 네트워크 관리

네트워크 패킷의 전송과 수신, 프로토콜 스택 처리, 네트워크 상태의 모니터링 등 담당, 사용자가 웹 브라우저로 웹사이트 방문시 커널은 TCP/IP 프로토콜 스택을 통해 패킷 전송 및 수신

 

- 파일 시스템 관리

파일과 디렉터리를 관리하고 파일 저장, 검색, 수정, 삭제와 같은 파일 시스템 작업을 처리. 사용자가 파일을 열 때, 커널은 파일 시스템을 검색하여 해당 파일의 데이터를 읽음.

 


2. 쉘(Shell)

Shell은 사용자와 리눅스 운영체제 사이의 인터페이스 역할을 하는 소프트웨어입니다. 기본적으로 Shell은 사용자의 명령을 해석하고 이를 커널에 전달한 후, 커널로부터의 출력을 사용자에게 반환합니다.

즉, Shell은 사용자로부터 입력받은 명령어를 OS에 전달하고 실행시키는 역할을 합니다.

 

- 명령어 해석 및 히스토리

사용자가 입력한 명령어를 해석 및 실행. 또한 대부분의 Shell은 사용자가 이전에 입력했던 명령어의 히스토리를 저장하며, 이를 통해 사용자는 이전 명령어를 쉽게 재실행

사용자가 ls라는 명령어를 입력하면, Shell은 해당 명령어가 현재 디렉토리의 파일 및 폴더 목록을 출력하는 것임을 알고 해당 작업을 수행

 

- 스크립트 실행

Shell 스크립트라 불리는 간단한 프로그래밍 기능을 통해 일련의 명령어들을 자동으로 실행. 반복적인 작업을 자동화하거나 여러 명령어를 조합하여 복잡한 작업을 수행하는데 유용

 

- 변수 및 환경 설정

사용자나 시스템 환경에 대한 변수를 설정하고 관리. 예를 들어, PATH 환경 변수는 실행 파일을 찾을 디렉토리의 목록을 저장하는데 사용

 

- 자동 완성

많은 Shell은 사용자가 명령어나 파일 이름의 일부를 입력하면 자동으로 완성해주는 기능을 제공하여 사용자의 편의성을 높혀줌.

 

- 대표적인 Shell의 종류

Bash (Bourne Again Shell): 가장 많이 사용되는 Shell, GNU 프로젝트의 일부로 개발
Sh (Bourne Shell): Unix에서 기본적으로 사용되는 Shell
Csh (C Shell): C 언어와 유사한 문법을 갖는 Shell
Tcsh: Csh의 확장 버전, 사용자 친화적인 기능들을 추가로 제공
Zsh (Z Shell): Bash와 유사하면서 추가적인 기능과 편의성을 제공하는 Shell

 


3. Shell과 Kernel의 관계

리눅스 운영체제에서 Shell과 Kernel은 밀접한 관계를 갖고 있습니다. 각각의 역할과 상호작용을 이해하는 것은 리눅스의 작동 원리를 파악하는 데 중요하다고 할 수 있습니다.

 

사용자가 Shell에게 명령을 내리면, Shell은 이 명령을 해석하여 Kernel에 적절한 시스템 호출 형태로 전달합니다.

 

예를 들어, 사용자가 파일을 읽으라는 명령을 내리면, Shell은 해당 명령을 해석하여 Kernel에게 파일을 읽어달라는 요청을 합니다. Kernel은 이러한 시스템 호출을 받으면, 실제 하드웨어 레벨에서 필요한 동작을 수행합니다. 위의 예에서는 실제로 파일 시스템에 접근하여 파일을 읽게 됩니다. Kernel은 동작의 결과를 다시 Shell에 반환합니다. Shell은 이 결과를 포맷팅하여 사용자에게 보여줍니다.


이처럼, Shell은 사용자의 명령어를 해석하고 Kernel에게 전달하는 역할을 하며, Kernel은 실제 시스템 자원과 상호작용하여 요구되는 동작을 수행하고 그 결과를 Shell에게 반환하는 역할을 합니다. 둘은 서로 다른 역할을 하지만, 사용자의 요청을 실제 시스템 동작으로 변환하는 데 있어서 밀접한 관계를 가지고 있습니다.

반응형