Linux 커널 | OS 입문 1 | 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
커널이란?
커널이란 CPU의 동작 모드 가 커널 모드에서 동작하는 소프트웨어이다.
커널에는 다음과 같은 기능이 있다.
-
하드웨어 리소스 (CPU, 메모리, 스토리지 등) 관리
-
소프트웨어에서 하드웨어 및 리소스에 대한 액세스를 추상화
-
프로세스, 커널은 소프트웨어
-
CPU, Memory, Devices(스토리지 등)는 하드웨어
하드웨어란?
하드웨어는 컴퓨터에서 물리적으로 처리하는 장치(기계)이다.
주요 하드웨어 목록은 다음과 같다.
하드웨어 | 역할 | 이미지 |
---|---|---|
CPU | 계산 처리를 수행하는 장치 | |
레지스터 (CPU에 있음) |
CPU 계산에 사용하는 값을 놓는 영역 전원을 끄면 데이터가 사라진다. | |
캐시 메모리 (CPU에 있음) |
CPU와 메모리 간의 버퍼 - CPU의 계산 결과를 캐시 - 전원을 끄면 데이터가 사라진다. |
|
메모리 (주 기억장치/Primary Memory) |
CPU에서 실행 중인 프로그램(프로세스)이나, 그 계산 결과를 일시적으로 두는 디바이스 - CPU로부터 액세스 가능한 기억 영역 - 전원을 끄면 데이터가 사라진다. |
|
스토리지 (보조 스토리지/Secondary Memory) |
메모리에 있는 계산 결과를 파일로 저장하는 디바이스 - CPU 로부터 액세스 불가능한 기억 영역 - CPU 가 파일 에 액세스 하려면 , 한 번 메모리 에 읽어들여야 한다. - 전원을 꺼도 데이터가 사라지지 않는다. |
|
NIC | 데이터를 다른 컴퓨터와 송수신하는 장치 예전에는 확장 카드 중 하나였지만, 최근에는 마더보드에 처음부터 탑재 |
|
마우스, 키보드 | 데이터를 입력하는 장치 | |
디스플레이 | 데이터를 출력하는 장치 |
CPU 작동 모드
CPU의 동작 모드에는 “커널 모드"와 “사용자 모드"가 있다.
각 모드의 차이는 다음과 같다.
CPU 동작 모드 | 하드웨어 액세스 제한 | 대상 소프트웨어 | 프로세스 동시 실행 |
---|---|---|---|
커널 모드 | 없음 | 커널 | 가능 |
사용자 모드 | 있음 | 커널 이외 | 불가능(인터럽트 발생) |
저장 장치의 특징
각 저장 장치의 특징 비교는 다음과 같다.
… 작성중 …
소프트웨어란?
소프트웨어는 컴퓨터의 처리와 데이터의 집합이다.
소프트웨어는 하드웨어의 물리적 것에 대해 논리적인 의미를 갖게 한 것이라고 할 수 있다.
주요 소프트웨어 목록은 다음과 같다.
소프트웨어 | 이름 | 설명 |
---|---|---|
프로그램 | 처리를 위해 만들어진 소프트웨어 | |
프로세스 | 메모리에 로드된 실행중 프로그램 실행중인 프로그램의 단위 하위 프로세스는 새롭게 가상 메모리를 확보 |
|
스레드 | 프로세스의 CPU 코어를 사용하는 단위 자식 스레드는 상위 스레드 의 가상 메모리를 공유 |
|
응용 프로그램 | 컴퓨터에 사용하는 목적에 따라 제작된 기능적 프로그램 | |
모듈 | 특정 기능을 가진 작은 프로그램 모듈을 결합하여 응용 프로그램과 라이브러리를 만듭니다. |
|
라이브러리 | 재사용 가능한 형태로 정리한 프로그램 라이브러리 단독으로는 동작하지 않는다 |
|
패키지 | 프로그램의 실행에 필요한 것을 정리한 것 구체적으로는 이하와 같은 것이 포함됩니다. - 실행 파일 - 라이브러리- 모듈 - 설정 파일 - 자원 (이미지, 음악 파일 등) 패키지와 라이브러리 사이의 관계에 대해서는 달걀이 먼저 또는 닭이 끝나는 것과 같은 이야기로 패키지A에 포함되는 라이브러리에는 패키지B가 포함되어 있거나 한다. |
|
미들웨어 | 어플리케이션이 자주 이용하는 OS의 기능을 정리한 프로그램 | |
커널 | 하드웨어를 조작하기 위한 소프트웨어 | |
시스템 라이브러리 | 응용 프로그램이 커널을 호출하는 라이브러리 | |
시스템 유틸리티 | 컴퓨터의 “분석, 관리, 유지 보수"를 수행하는 소프트웨어 | |
OS | 커널, 시스템 라이브러리, 시스템 유틸리티를 정리한 것 |
시스템 호출
시스템 호출은 프로세스가 커널 기능을 호출하는 프로세스이다.
시스템 호출은 프로세스가 하드웨어 리소스(CPU, 메모리 스토리지 등)에 액세스할 때 사용 된다. 이는 사용자 모드의 프로세스가 하드웨어 리소스에 액세스할 수 없기 때문이다.
프로세스에서 호출되는 시스템 호출 목록은 strace [실행 프로그램]
명령어로 확인할 수 있다.
$ strace echo hello
execve( "/usr/bin/echo" , [ "echo" , "hello" ], 0x7fff614927f8 /* 42 vars */ ) = 0
brk( NULL ) = 0xe9f000
·····