운영체제 (OS, Operating System)
우리가 사용하는 컴퓨터는 2가지로 구분할 수 있다
첫번째는 물리적으로 보고 사용할 수 있는 하드웨어 (키보드, 모니터, CPU, 메모리 등)
두번째는 물리적으로 존재하지 않는 소프트웨어
소프트웨어는 운영체제와 그 위에 설치되는 프로그램인 응용프로그램으로 다시 구분할 수 있다
운영체제는 다시 커널(Kernel)과 시스템 프로그램(Shell)으로 구분할 수 있다
운영 체제 -> CPU, 메모리, 스토리지처럼 시스템의 하드웨어와 리소스를 직접 관리하는 소프트웨어
운영체제는 애플리케이션과 하드웨어 사이에서 모든 소프트웨어와 작업을 수행하는 물리적 리소스를 연결한다
Linux
오픈 소스 운영 체제 (Operating System, OS)의 한 종류로, 유닉스(Unix)와 유사한 구조를 가지고 있고 다양한 배포판이 존재한다
Linux의 Kernel이란?
1. 커널 (Kernel)
Linux 운영체제의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 잇는 핵심 인터페이스이다
시스템의 자원 관리, 프로세스 및 메모리 관리, 하드웨어 드라이버, 파일 시스템 관리를 수행한다
커널은 항상 컴퓨터 자원만을 바라보고 있기 때문에 사용자와 직접적 상호작용은 하지 않는다
사용자와 상호작용을 하기 위해 필요한 것이 시스템 프로그램(Shell)이다.
Linux 커널은 단일형 커널 구조를 가지며 모듈화 되어 있어 컴파일 후 모듈을 로드할 수 있다
커널의 목표는 컴퓨터의 물리적 자원과 추상화 자원을 관리하는 일이다
추상화란,
물리적으로 하나인 하드웨어를 여러 사용자들이 번갈아 사용하게 중재하여 마치 한 개의 하드웨어가 여러 개인 것 처럼 보여지도록 하는 기술이다
추상화된 환경에서 사용자들은 자신이 하나의 하드웨어를 독점하여 사용하는 것처럼 느끼게 된다
2. 커널(Kernel)을 구성하는 자원 관리자
1) 태스크 (Task) 관리자
물리적 자원인 CPU를 추상적 자원인 Task로 제공
2) 메모리 (Memory) 관리자
물리적 자원인 메모리를 추상적 자원인 Page, Segment로 제공
3) 파일 시스템 (File System) 관리자
물리적 자원인 Disk를 추상적 자원인 File로 제공
4) 네트워크 (Network) 관리자
물리적 자원인 네트워크 장치를 추상적 자원인 Socket으로 제공
5) 디바이스 드라이버 (Device Driver) 관리자
각종 외부 장치에 대한 접근을 관리
3. 커널이 자원을 관리하는 이유는 무엇일까?
물리적 자원을 추상화하여 사용자가 물리적인 하드웨어에 보다 쉽게 접근할 수 있도록 하기 위해서이다.
커널은 사용자와 컴퓨터 중간에서 접근과 통신을 돕는 역할을 하는 것이다/
커널 구성 요소들이 존재하는 공간을 Kernel Space라고 한다.
Kernel Space 위에는 사용자로 여겨지는 Task (Process)들이 존재하는 User Space가 있다.
Task에는 사용자의 명령이 담겨져 있으니 Task를 사용자라고 생각하면 이해하기 쉽다.
Kernel Space와 User Space 사이에는 System Call Interface가 있다.
User Space의 Task들이 커널이 관리하는 자원에 접근해야할 때 System Call Interface를 통해 Kernel Space의 자원 관리자에게 요청이 전달된다.
커널의 각 자원 관리자는 사용자의 요청에 맞게 하드웨어에 사용자 명령을 전달하고 작업을 수행하게 된다.
참고한 글
[Linux Kernel] 커널의 개념과 리눅스 커널의 구조
Content 1. 운영체제(OS)와 배포판, 그리고 커널 2. 리눅스 커널 구조 커널이 무엇인지 이해하고, 리눅스 커널의 구조에 대해 알아봅니다. 1. 운영체제(OS)와 배포판, 그리고 커널 일반적으로 운영체제
5equal0.tistory.com
'OS > Linux' 카테고리의 다른 글
[Linux] 쉘 스크립트 프로그래밍 (1) (0) | 2024.08.20 |
---|---|
[Linux] 리눅스 기본 명령어 (정리 예정) (0) | 2024.08.20 |
[Linux] 가상 머신에 운영 체제 설치하기 (0) | 2024.08.18 |
[Linux] 가상 머신 세팅 (0) | 2024.08.18 |
[Linux] 리눅스의 쉘(Shell) 개념을 알아보자 (0) | 2024.08.18 |