Linux 커널 | OS, 커널이란?
Linux, OS란?
OS (Operating System)는 주로 다음 두 가지 역할을 가진 소프트웨어이다.
- 하드웨어 관리
- 소프트웨어가 하드웨어에 액세스
Linux는 OS이고, Linux는 주로 다음 세 가지로 구성된다.
- 커널 (암묵적으로 Linux는 이를 말한다.)
- 시스템 라이브러리
- 시스템 유틸리티
Linux Operating System has primarily three components
Kernel − Kernel is the core part of Linux.
System Library − System libraries are special functions or programs using which application programs or system utilities accesses Kernel’s features.
System Utility − System Utility programs are responsible to do specialized, individual level tasks.
https://www.tutorialspoint.com/operating_system/os_linux.htm
Linux 커널이란?
Linux 커널(kernel)이란 OS의 코어가 되는 부분을 말한다. 메모리 관리, 파일 시스템, 프로세스 관리, 디바이스 제어 등 OS로서 하드웨어나 애플리케이션 소프트웨어를 제어하기 위한 기본적 기능을 갖고 있는 소프트웨어 있다. 스마트폰이나 테블릿 단말기용 OS인 Android는 Linux 커널 위에서 구축되었다.
커널에는 기능을 정리하면 다음과 같다.
- 하드웨어 리소스 (CPU, 메모리, 스토리지 등) 관리
- 소프트웨어에서 하드웨어 및 리소스에 대한 액세스를 추상화
소프트웨어: 프로세스, 커널
하드웨어: CPU, Memory, Devices(스토리지 등)
하드웨어란?
하드웨어는 컴퓨터에서 물리적으로 처리하는 장치(기계)이다.
주요 하드웨어 목록은 다음과 같다.
하드웨어 | 역할 | 이미지 |
---|---|---|
CPU | 계산 처리를 수행하는 장치 | |
레지스터 (CPU에 있음) |
CPU 계산에 사용하는 값을 놓는 영역 전원을 끄면 데이터가 사라진다. | |
캐시 메모리 (CPU에 있음) |
CPU와 메모리 간의 버퍼 - CPU의 계산 결과를 캐시 - 전원을 끄면 데이터가 사라진다. |
|
메모리 (주 기억장치/Primary Memory) |
CPU에서 실행 중인 프로그램(프로세스)이나, 그 계산 결과를 일시적으로 두는 디바이스 - CPU로부터 액세스 가능한 기억 영역 - 전원을 끄면 데이터가 사라진다. |
|
스토리지 (보조 스토리지/Secondary Memory) |
메모리에 있는 계산 결과를 파일로 저장하는 디바이스 - CPU 로부터 액세스 불가능한 기억 영역 - CPU 가 파일 에 액세스 하려면 , 한 번 메모리 에 읽어들여야 한다. - 전원을 꺼도 데이터가 사라지지 않는다. |
|
NIC | Network Interface Card. 데이터를 다른 컴퓨터와 송수신하는 장치 예전에는 확장 카드 중 하나였지만, 최근에는 마더보드에 처음부터 탑재 |
|
마우스, 키보드 | 데이터를 입력하는 장치 | |
디스플레이 | 데이터를 출력하는 장치 |
CPU 작동 모드
CPU의 동작 모드에는 “커널 모드"와 “사용자 모드"가 있다.
출처: https://ja.wikipedia.org/wiki/CPU%E3%83%A2%E3%83%BC%E3%83%89
각 모드의 차이는 다음과 같다.
CPU 동작 모드 | 하드웨어 액세스 제한 | 대상 소프트웨어 | 프로세스 동시 실행 |
---|---|---|---|
커널 모드 | 없음 | 커널 | 가능 |
사용자 모드 | 있음 | 커널 이외 | 불가능(인터럽트 발생) |
저장 장치의 특징
각 저장 장치의 특징 비교는 다음과 같다.
소프트웨어란?
소프트웨어는 컴퓨터의 처리와 데이터의 집합이고, 하드웨어의 물리적 것에 대해 논리적인 의미를 갖게 한 것이라고 할 수 있다.
주요 소프트웨어 목록은 다음과 같다.
소프트웨어 | 이름 | 설명 |
---|---|---|
프로그램 | 처리를 위해 만들어진 소프트웨어 | |
프로세스 | 메모리에 로드된 실행중 프로그램 실행중인 프로그램의 단위 하위 프로세스는 새롭게 가상 메모리를 확보 |
|
스레드 | 프로세스의 CPU 코어를 사용하는 단위 자식 스레드는 상위 스레드 의 가상 메모리를 공유 |
|
응용 프로그램 | 컴퓨터에 사용하는 목적에 따라 제작된 기능적 프로그램 | |
모듈 | 특정 기능을 가진 작은 프로그램 모듈을 결합하여 응용 프로그램과 라이브러리를 만듭니다. |
|
라이브러리 | 재사용 가능한 형태로 정리한 프로그램 라이브러리 단독으로는 동작하지 않는다 |
|
패키지 | 프로그램의 실행에 필요한 것을 정리한 것 구체적으로는 이하와 같은 것이 포함됩니다. - 실행 파일 - 라이브러리- 모듈 - 설정 파일 - 자원 (이미지, 음악 파일 등) 패키지와 라이브러리 사이의 관계에 대해서는 달걀이 먼저 또는 닭이 끝나는 것과 같은 이야기로 패키지A에 포함되는 라이브러리에는 패키지B가 포함되어 있거나 한다. |
|
미들웨어 | 어플리케이션이 자주 이용하는 OS의 기능을 정리한 프로그램 | |
커널 | 하드웨어를 조작하기 위한 소프트웨어 | |
시스템 라이브러리 | 응용 프로그램이 커널을 호출하는 라이브러리 | |
시스템 유틸리티 | 컴퓨터의 “분석, 관리, 유지 보수"를 수행하는 소프트웨어 | |
OS | 커널, 시스템 라이브러리, 시스템 유틸리티를 정리한 것 |
시스템 호출
시스템 호출은 프로세스가 커널 기능을 호출하는 프로세스이다.
시스템 호출은 프로세스가 하드웨어 리소스(CPU, 메모리 스토리지 등)에 액세스할 때 사용 된다. 이는 사용자 모드의 프로세스가 하드웨어 리소스에 액세스할 수 없기 때문이다.
프로세스에서 호출되는 시스템 호출 목록은 strace [실행 프로그램]
명령어로 확인할 수 있다.
$ strace echo hello
execve("/usr/bin/echo", ["echo", "hello"], 0x7ffe17de5a58 /* 27 vars /) = 0
brk(NULL) = 0x55d18e342000
arch_prctl(0x3001 / ARCH_??? */, 0x7ffe31e2d540) = -1 EINVAL (부적절한 인수)
.....
하드웨어 리소스 추상화
커널의 기능의 하나인 “하드웨어 자원의 추상화"란, 하드웨어의 차이를 OS가 흡수하는 것이다.
프로그램은 하드웨어의 다르다는 것에 걱정할 필요가 없다.
프로그램은 아래 3개가 다르다는 것을 인식할 필요 없이 시스템 호출 write()
로 쓰기가 가능하다.
- A사의 SSD
- B사의 SSD
- C사의 USB 메모리
하드웨어 리소스 관리
커널의 기능의 하나인 “하드웨어 리소스의 관리"에는 아래와 같이 주요 3가지가 있다.
- 프로세스가 이용하는 하드웨어 리소스의 용량을 결정한다.
- 프로세스가 이용하는 하드웨어 리소스의 순서를 결정한다.
- 다른 프로세스가 하드웨어 리소스를 이용하고 있는 경우, 프로세스를 기다리게 한다.
커널 기능
커널의 대표적인 기능은 아래와 같다.
커널 기능 | 대상 하드웨어 | 설명 |
---|---|---|
프로세스 관리 | CPU | 프로세스 에 CPU 할당 |
메모리 관리 | 메인 메모리 | 프로세스 에 메모리 할당 |
스토리지 관리 파일 시스템 |
스토리지 | 프로세스에서 스토리지로 데이터 읽기 및 쓰기 |
I/O 디바이스 | 관리 모든 기기 | 장치에 입출력 |
각 커널의 기능은 다음 문서에서 설명한다.