반응형
리눅스 구조
리눅스 란?
- 유닉스와 거의 비슷한 운영체제지만, 유닉스의 장점을 포함하면서도 새로운 여러 기능을 부가적으로 가지고 있는 운영체제입니다.
- Linus Torvalds라는 필란드 사람이 대형 컴퓨터에서 사용하던 유닉스 소스를 수정하여 개인 pc에도 사용할 수 있는 공개 운영체제로 개발하였습니다.
유저 & 쉘 & 커널 관계
- 유저가 CLI를 통해 명령어를 입력하면 명령어가 쉘에게 전달됩니다.
- 쉘이 명령어를 커널이 이해할 수 있게 번역해 커널에게 넘기면, 커널은 이 명령어를 통해 하드웨어를 컨트롤하여 다시 유저에게 output처리를 합니다.
리눅스 구성요소
커널 (Kernel)
- '커널'이란 운영체제(OS)의 두 가지 구성요소 중 하나입니다.
- 커널은 하드웨어를 직접적으로 제어하는 운영체제의 핵심이며 프로세스 관리, 메모리 관리, I/O 시스템 관리, 파일 시스템 관리 등을 수행합니다.
- 흔히 리눅스의 우분투, 센토스 등의 배포판은 리눅스 커널을 기반으로 만들어졌다고 보면 되며, 리눅스 커널을 기반으로 만들어진 배포판들을 흔히 리눅스라고 칭합니다.
- 1만 줄 이상의 C 프로그램과 1000여 줄의 어셈블리어로 구성되어 있어서 이식성이 좋습니다.
- 커널은 주기억 장치에 적재되며, 리눅스가 부팅될 때 메모리로 로드됩니다.
쉘 (Shell)
- '쉘'이란 운영체제(OS)의 두 가지 구성요소 중 나머지 하나입니다.
- 쉘은 커널을 컨트롤할 수 있으며 커널은 하드웨어를 컨트롤합니다. 즉, 하드웨어를 유저가 컨트롤하기 위한 인터페이스라고 볼 수 있습니다.
- 쉘을 사용하면 커널단의 복잡한 동작 방식을 알 필요 없이 쉘 상의 인터페이스로 시스템 자원들을 쉽게 관리할 수 있습니다.
- 쉘의 종류는 bash, zsh 등이 있습니다.
- 사용가능한 쉘의 목록을 확인하려면 다음과 같이 명령어를 입력합니다.
- 더욱 자세한 설명은 [OS] Shell과 쉘(Shell) 스크립트(*.sh): bash shell를 참고해주시기 바랍니다.
프로세스 (Process)
프로세스란?
- 커널의 관리 하에 현재 시스템에서 동작 중인 모든 프로그램을 프로세스라 합니다.
- 모든 프로세스는 고유의 권한과 책임을 가지고, 연산을 위해 컴퓨팅 자원을 이용하거나 서로 통신을 할 수 있습니다.
- 직관적인 이름을 가진 ps 명령어를 이용하면 현재 실행 중인 프로세스를 확인할 수 있습니다.
프로세스 구분: 동작 방식에 의한
- Foreground process
- 쉘/터미널에서 사용자가 입력한 명령을 해석하여 실행하고 그 결과를 출력하는 방식의 프로세스가 Foreground process입니다.
- 입력한 명령이 실행되어 결과가 출력될 때까지 사용자가 다른 작업을 수행할 수 없습니다.
- Background process:
- Foreground process와 달리 사용자 입력과 상관없이 실행되는 프로세스를 말합니다.
- 명령의 처리가 끝나는 것과 관계없이 곧바로 터미널에 프롬프트가 출력되어 사용자가 다른 작업을 수행할 수 있습니다.
- 명령어의 마지막에 &을 추가하면 특정 명령을 Background process로 실행할 수 있습니다.
프로세스 구분: 생성 주체에 의한
- Init 프로세스: 리눅스 시스템이 부팅되면 가장 먼저 실행되는 프로세스로 파일 시스템 구조 검사, 파일 시스템 마운트, 서버 데몬 실행, 사용자를 위한 셸 실행 등의 작업을 수행합니다.
- 데몬 프로세스: 사용자에게 특정 기능/서비스를 제공하는 프로세스입니다.
- 부모 프로세스: 다른 프로세스를 생성하는 프로세스이며, init 프로세스를 제외한 모든 프로세스는 부모 프로세스를 가집니다.
- 자식 프로세스: 부모 프로세스에 의해 생성되는 프로세스로 작업이 완료되면 부모 프로세스에게 결과를 전달한 후 종료됩니다.
- 고아 프로세스: 부모 프로세스가 끝났는데도 불구하고 남아있는 자식 프로세스를 고아 프로세스라고 합니다.
- 좀비 프로세스: 종료 신호를 부모 프로세스가 처리하지 못할 경우 자식 프로세스를 좀비 프로세스라고 합니다.
쉘 세션(Shell session)
- 하나의 유저가 실행시킨 쉘을 의미하며 하나의 쉘/터미널*마다 하나의 쉘 세션만을 가질 수 있습니다.
- 만약 터미널에서 세션 로그아웃이 발생하면 HUP(Hang UP) signal을 전달하여 해당 세션에서 실행된 모든 프로세스를 종료시킵니다.
- 터미널/콘솔이란? 쉘을 실행하기 위한 Wrapper Program을 의미합니다. (엄밀히 말하면 콘솔은 HW, 터미널은 SW측면에서 시스템을 조작할 수 있는 체계를 말하지만 현재는 명확한 구분 없이 사용된다고 합니다.)
- 터미널을 실행시켰을 때 커서 앞에 있는 문자를 Prompt라고 하고, 쉘을 통해 명령어를 전달할 준비가 되었음을 알려주는 기능을 합니다. ($: 보통 유저, #: 시스템 관리자)
- 터미널/콘솔이란? 쉘을 실행하기 위한 Wrapper Program을 의미합니다. (엄밀히 말하면 콘솔은 HW, 터미널은 SW측면에서 시스템을 조작할 수 있는 체계를 말하지만 현재는 명확한 구분 없이 사용된다고 합니다.)
참고
- 커널과 쉘에 관하여: https://roadofdevelopment.tistory.com/6
- 리눅스와 커널: https://studymake.tistory.com/104
- [Linux] 리눅스란? / 커널/쉘/파일구조: https://mkil.tistory.com/186
- [Linux] 리눅스의 기본 구조: kernel, shell, process and shell session: https://tigris-data-science.tistory.com/m/entry/Linux-%EB%A6%AC%EB%88%85%EC%8A%A4%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EA%B5%AC%EC%A1%B0-kernel-shell-process-and-shell-session
반응형
'Study: ComputerScience(CS) > CS: OperatingSystem' 카테고리의 다른 글
[OS] 쉘(Shell) 기본 문법: bash shell (0) | 2023.01.22 |
---|---|
[OS] 리눅스의 쉘(Shell)과 설정 파일 적용 순서(feat. bash, zsh, ...) (0) | 2022.07.23 |