운영체제

쉘(Shell)과 커널(Kernel)

샥쿠 2023. 9. 18. 18:41

쉘(Shell)이란?

쉘은 사용자가 OS의 자원에 접근하기 위해 사용하는 인터페이스이다.

사용자는 다양한 쉘 명령어(shell script)를 사용하여 OS의 자원에 접근할 수 있다.

커널(Kernel)이란?

쉘(shell)은 껍질 ↔ 커널(kernel)은 알맹이

커널은 운영체제의 일부이며, 하드웨어를 제어한다.

만약 커널이 없다면 하드웨어를 기계어 수준으로 직접 제어해야한다.

커널을 사용한다면 커널을 거치지 않고 직접 하드웨어를 제어할 수 없으며, 커널에서 제공하는 시스템 콜을 통해 하드웨어에 접근해야한다.

쉘과 커널의 관계

쉘은 커널과 통신하기 위한 도구이다. 쉘은 명령어 집합으로 이루어져 있으며 사용자는 CLI를 통해 명령어(shell script)를 실행할 수 있다.

쉘은 3가지 표준 입출력을 통해 사용자와 소통한다.

  • 표준 입력(0)
  • 표준 출력(1)
  • 표준 에러(2)

입력 장치(키보드), 출력 장치(모니터)를 통해 통신한다. 쉘에서 명령어를 키보드로 입력하면 시스템 콜을 이용하여 커널로 전달한다.

쉘은 일종의 프로그램이며, 실행되면 메모리에 올라가면 프로세스가 된다. 쉘 프로세스를 통해 운영체제 커널의 기능을 사용할 수 있다.

쉘 명령어 (Shell Script)

shell script를 실행하면 무슨 일이 일어날까?

ls

디렉토리의 컨텐츠(파일, 디렉토리)를 출력하는 ls 명령어를 실행한다고 생각해보자.

ls 명령어를 실행하는 것은 /usr/bin/ls에 위치한 파일을 실행하는 것이다. 이런 파일을 ELF(Executable and Linkable Format)라고 하며 리눅스에서 실행할 수 있는 프로그램의 일종이다. 참고로 엘프🧝‍♀️(ELF)의 반대인 드워프(DWARF, Debugging With Attribute Record Format)는 디버깅을 위한 파일 포맷이라고 한다.

터미널에 ls 명령어 입력하면 현재 시스템의 쉘이 ls라는 프로그램 실행한다. ls는 파일과 디렉토리를 출력해야하므로 하드웨어의 파일 시스템에 접근해야한다. 쉘은 내부적으로 시스템 콜을 실행하여 커널이 하드웨어에 접근해 원하는 데이터를 가져오도록 한다.

추천 받은 책 목록