운영체제는 쉽게 말하면 컴퓨터를 관리하는 소프트웨어라고 볼 수 있다.
어플리케이션들에게 적절히 연산을 분배하고 각자의 권한을 부여하고 관리하는 역할이다.
위 그림에서 운영체제란 어디일까?
CPU, 메모리, 디바이스를 통합 관리하면서 연산 자원을 어플리케이션에게 분배하는 자리에 커널이 있다. 커널은 보안, 자원관리, 디바이스 인터페이스 추상화와 같은 역할을 하는 운영체제의 가장 핵심적인 구성요소이다.
그렇지만 커널 = 운영체제는 아니다.
운영체제의 내부는 알맹이인 커널(kernel) 과 껍데기인 셸(shell)로 이루어져 있다.
커널은 운영체제를 구성하는 요소 중 하나로 볼 수 있다.
셸은 다시 2가지로 나누어 볼 수 있다. 그래픽 기반의 GUI(Graphic User Interface) 셸과, 텍스트 기반의 CLI(Command Line Interface) 셸이다.
프로그램은 컴퓨터가 수행할 작업을 적어놓은 것이다.
컴퓨터가 프로그램을 수행할 때, 운영체제는 프로세스(process) 단위로 관리한다.
운영체제는 메모리와 CPU 연산 등의 자원을 프로세스 단위로 분배한다.
- 메모리 관리 : 운영체제는 컴퓨터의 메모리를 전부 활용하도록 허락해주지 않는다. 가상 메모리(virtual memory)로 일부만 떼어서 활용할 수 있도록 해줌으로써, 다른 프로세서의 메모리나 운영체제 자체가 사용하고 있는 커널 메모리에 접근하지 못하게 한다. 이를 프로세스 격리(process isolation)라고 부르며, 프로세스들의 소통을 위해서는 프로세스 간 통신 기법(Inter-Process Communication, IPC)을 활용해야 한다.
- CPU 자원 관리 : 프로세스에게 메모리는 주소가 제공되지만, CPU의 경우 코어 단위로 제공된다. 프로세스는 스레드(thread) 단위로 코어를 사용할 수 있는데, 기본적으로 하나의 스레드를 제공한다. 그러나 개발자는 프로그램이 더 많은 스레드를 활용하도록 다중 CPU의 이점을 활용할 수 있다.
프로세스는 운영체제가 메모리를 할당하는 작업단위라면, 스레드는 프로세스가 할당받은 메모리를 활용하는 실행단위이다.
하나의 프로그램 안에서 여러개의 프로세스를 활용하는 것을 멀티프로세싱(Multiprocessing), 하나의 프로세스 안에서 여러개의 스레드를 활용하는 것을 멀티스레딩(Multithreading)이라고 한다.
새로 알게된 점:
리눅스가 그 자체로 운영체제가 아니라, 운영체제를 위한 커널이라는 것이다.
우리가 흔히 리눅스 운영체제라 부르는 것들은 사실 이 리눅스를 커널로써 사용하는 운영체제들을 가리킨다.
리눅스 커널을 사용하는 운영체제는 우분투나 Android, ChromeOS 말고도 Debian, CentOS, Red Hat Enterprise Linux 등 다양한 종류가 있다!
'AIFEEL' 카테고리의 다른 글
[사이킷런] 머신러닝 알고리즘 (0) | 2021.09.27 |
---|---|
[파이썬] 리스트와 배열의 차이는? (0) | 2021.09.15 |
[파이썬] 문자열 다루기 - startswith, endswith (0) | 2021.09.13 |
인코딩과 디코딩의 차이점은? (0) | 2021.09.13 |
[개발자의 필수 툴] Git 와 GitHub 차이점은? (0) | 2021.09.09 |