CS/Linux

[Linux] 리눅스의 기본 구조: kernel, shell, process and shell session

Tigris 2022. 4. 25. 22:48

평소에 리눅스 계열의 OS를 사용하며 항상 궁금했던 커널, 쉘, 프로세스, 그리고 쉘 세션에 대해서 알아보았습니다.

커널(Kernel)

커널이란 리눅스 운영 체제의 주요 구성 요소 중 하나로 하드웨어와 프로세스를 연결하고 하드웨어의 주요 기능을 제어하는 역할을 합니다. 커널은 주로 메모리 관리, 프로세스 관리, 장치 드라이버, 시스템 호출 및 보안을 수행하고, 사용자에게는 직접적으로 보이지 않습니다.

쉘(Shell)

쉘은 커널과 유저가 Interactive할 수 있도록 만들어진 Interface입니다. 대표적인 쉘로는 bash shell, Z shell(Zsh)이 있으며 이외에도 다양한 CLI(Command-Line Interface)과 GUI(Graphical User Interface)가 존재합니다.

(참고: Shell이라는 이름이 붙은 이유는 사용자와 운영 체제 사이의 Interface를 감싸는 껍질이기 때문이라고 합니다 🙂)

프로세스(Process)

커널의 관리 하에 현재 시스템에서 동작 중인 모든 프로그램을 프로세스라 합니다. 모든 프로세스는 고유의 권한과 책임을 가지고, 연산을 위해 컴퓨팅 자원을 이용하거나 서로 통신을 할 수 있습니다. 직관적인 이름을 가진 ps 명령어를 이용하면 현재 실행 중인 프로세스를 확인할 수 있습니다.

프로세스는 크게 두 가지로 구분할 수 있습니다.

  1. Foreground process: 쉘/터미널에서 사용자가 입력한 명령을 해석하여 실행하고 그 결과를 출력하는 방식의 프로세스가 Foreground process입니다. Foreground process의 경우 입력한 명령이 실행되어 결과가 출력될 때까지 사용자가 다른 작업을 수행할 수 없습니다.
  2. Background process: Foreground process와 달리 사용자 입력과 상관없이 실행되는 프로세스를 말합니다. 명령의 처리가 끝나는 것과 관계없이 곧바로 터미널에 프롬프트가 출력되어 사용자가 다른 작업을 수행할 수 있습니다. 명령어의 마지막에 &을 추가하면 특정 명령을 Background process로 실행할 수 있습니다.

또한, 프로세스는 생성 주체에 의해서 다음과 같이 구분할 수 있습니다.

  1. Init 프로세스: 리눅스 시스템이 부팅되면 가장 먼저 실행되는 프로세스로 파일 시스템 구조 검사, 파일 시스템 마운트, 서버 데몬 실행, 사용자를 위한 셸 실행 등의 작업을 수행합니다.
  2. 데몬 프로세스: 사용자에게 특정 기능/서비스를 제공하는 프로세스입니다.
  3. 부모 프로세스: 다른 프로세스를 생성하는 프로세스이며, init 프로세스를 제외한 모든 프로세스는 부모 프로세스를 가집니다.
  4. 자식 프로세스: 부모 프로세스에 의해 생성되는 프로세스로 작업이 완료되면 부모 프로세스에게 결과를 전달한 후 종료됩니다.
  5. 고아 프로세스: 부모 프로세스가 끝났는데도 불구하고 남아있는 자식 프로세스를 고아 프로세스라고 합니다.
  6. 좀비 프로세스: 종료 신호를 부모 프로세스가 처리하지 못할 경우 자식 프로세스를 좀비 프로세스라고 합니다.

쉘 세션(Shell session)

쉘 세션이란 하나의 유저가 실행시킨 쉘을 의미하며 하나의 쉘/터미널*마다 하나의 쉘 세션만을 가질 수 있습니다. 만약 터미널에서 세션 로그아웃이 발생하면 HUP(Hang UP) signal을 전달하여 해당 세션에서 실행된 모든 프로세스를 종료시킵니다.

* 터미널/콘솔이란 쉘을 실행하기 위한 Wrapper Program을 의미합니다. (엄밀히 말하면 콘솔은 HW, 터미널은 SW측면에서 시스템을 조작할 수 있는 체계를 말하지만 현재는 명확한 구분 없이 사용된다고 합니다.)

** 터미널을 실행시켰을 때 커서 앞에 있는 문자를 Prompt라고 하고, 쉘을 통해 명령어를 전달할 준비가 되었음을 알려주는 기능을 합니다. ($: 보통 유저, #: 시스템 관리자)

잘못된 내용, 오타, 부정확한 문장 등 어떤 피드백이든 환영합니다. 감사합니다.


References

https://askubuntu.com/questions/596420/whats-the-shell-session

https://blog.naver.com/asianchairshot/221383363419

https://superuser.com/questions/144666/what-is-the-difference-between-shell-console-and-terminal

https://gsk121.tistory.com/44

https://andrew0409.tistory.com/30