서론
서버형 컴퓨터에 OS로는 대부분 리눅스를 사용하는 것을 알 수 있다. 델, 아마존, 애저에서 클라우드 및 네트워크 엔지니어로 일하는 선배들의 말을 들었을 때 대부분의 서버에 OS는 리눅스를 사용한다고 한다. 여태까지 개발자가 리눅스를 사용하는 이유 혹은 서버에서 OS로 리눅스를 선택하는 이유에 대해 막연하게 리눅스가 CLI가 잘 되어 있어서라고 알고 있었는데, 이 글에서는 왜 리눅스가 윈도우보다 서버 OS로 더 많이 선택되는지에 대해서 알아보고자 한다. 물론 OS는 드라이버, 시스템 라이브러리, UI, 커널 등 다양한 요소들로 이루어져 있지만, 이 글에서는 리눅스의 커널에 대해서 알아보고자 한다.
배경지식
커널
커널은 운영체제의 핵심 구성 요소 중 하로, 하드웨어와 소프트웨어 간의 중개자 역할을 한다. 커널은 파일 관리, 공정 관리
I/O 관리, 메모리 관리, 장치 관리 등담당하며, 사용자와 응용 프로그램이 하드웨어를 효율적으로 사용할 수 있도록 지원한다. 커널은 운영체제의 핵심 기능을 수행하며, 안정성과 성능을 보장하는 중요한 역할을 한다. 이를 통해 컴퓨터 시스템이 원활하게 작동하고, 사용자에게 필요한 서비스를 제공할 수 있다.
쉘
쉘은 사용자가 운영 체제의 서비스를 사용할 수 있도록 인터페이스를 제공하는 특수 사용자 프로그램이다. 쉘은 사용자가 읽을 수 있는 명령을 받아 커널이 이해할 수 있는 명령으로 변환하는 역할을 한다. 이는 키보드 등의 입력장치나 파일에서 읽어온 명령을 실행하는 명령언어 해석기로서의 기능을 한다. 사용자가 로그인하거나 터미널을 시작할 때 쉘이 자동으로 시작되며, 이를 통해 사용자와 운영 체제 간의 상호작용을 가능하게 한다.
리눅스가 서버 OS로 사용되는 이유
리눅스가 서버 OS로 많이 사용되는 이유는 리눅스가 무료이고 빠르며 customize할 수 있는 특징들을 가지고 있기 때문이다. 이 글에서는 왜 리눅스가 윈도우보다 빠른지에 대해 집중해서 설명해 보고자 한다.
먼저 OS의 속도에 대해 얘기하려면 CPU와 저장장치의 발전에 대해서 이해해야 한다. 다들 알다시피 저장장치 혹은 GPU는 그 발전 속도가 매우 빠르다. 그러나 CPU의 속도를 늘리는 데는 한계가 있어 대부분 클럭을 크게 향상시키기보다는 코어 수와 쓰레드 수를 늘리는 식으로 CPU는 발전하고 있다. 공정을 미세화하는 데도 한계가 있어 최근 삼성에서는 다시 CPU의 층을 쌓는 연구를 시작했다는 기사를 본 적이 있다. 이것이 중요한 점은 CPU가 대부분 병목의 원인이라는 것이다. 물론 CPU의 코어 수와 쓰레드 수가 늘어나고 있지만, 모든 프로세스와 프로그램이 멀티코어, 멀티스레드로 작동할 수 있는 것은 아니다. 따라서 CPU를 효율적으로 사용할 수 있는 OS의 중요성이 더욱 커지고 있는 것이다. 네트워크 요청도 결국 CPU에서 처리되기 때문에 OS의 속도가 빠르다면 더 많은 네트워크 요청을 해결할 수 있는 것이다. 즉 네트워크 부하를 더 잘 처리할 수 있는 것이다. 그렇다면 리눅스는 왜 윈도우보다 빠를까?
스케줄러
리눅스와 윈도우의 스케줄러는 각기 다른 방식과 목적을 가지고 있다. 리눅스의 EEVDF 스케줄러는 가상 데드라인을 기준으로 task를 스케줄링하여 실시간 시스템에서 효율적인 스케줄링을 목표로 한다. 반면, 이전의 CFS는 공정성을 중시하여 각 task동일한 CPU 시간을 할당한다. 두 스케줄러 모두 red-black tree 구조를 사용하여 task 관리의 시간 복잡도를 O(log n)으로 유지한다. 윈도우 커널의 스케줄러는 우선순위 기반 스케줄링을 사용하며, 각 프로세스와 스레드에게 우선순위를 부여하여 높은 우선순위의 작업을 먼저 실행한다. 큐를 사용하여 효율적으로 스레드를 관리하며, deadline 방지를 위해 낮은 우선순위의 스레드에게도 실행 기회를 부여한다. 윈도우 스케줄러의 시간 복잡도는 우선순위 큐 관리에서 O(1)에 가깝고, 큐 내 삽입 및 삭제는 O(n)일 수 있다.
런타임 라이브러리
대부분의 윈도우 프로그램들은 파일 크기가 큰 런타임 라이브러리들을 필요로 한다. 왜냐하면 Microsoft는 프로그램이 돌아가는데 필요한 모든 것이 설치 패키지 안에 포함되어 있어야 한다고 생각하기 때문이다. 그러나 리눅스는 그렇지 않다. 리눅스에서 라이브러리 혹은 프로그램들을 설치해 본 사람들은 필요로 하는 사전 프로그램들이 있다는 것을 알 것이다. 즉 리눅스의 런타임 라이브러리들은 보통 윈도우보다 그 파일 크기가 작고 효율적이다. 또한 프로그램이 필요로 하는 라이브러리는 다른 프로그램에 의해 이미 메모리상에 올라가 있는 경우가 많다. 이에 따라 리눅스의 프로그램 코드는 윈도우 것보다 더 작으며 더 효율적으로 돌아갈 수 있는 것이다.
종속성과 독립
윈도우는 윈도우 상에서 무언가를 작동시키기 위해서 윈도우가 필요하다. 이 말은 윈도우의 GUI를 만들기 위해 서로 상호 연관되어 있는 시스템 라이브러리들과 커널 코드가 필요하다는 것이다. 그러나 리눅스의 GUI는 종류가 매우 다양하며 그에 따라 프로그램의 목적에 맞는 GUI를 선택할 수 있다.
파일 시스템
윈도우는 저장 방식으로 NTFS와 FAT32를 사용한다. 이 방식은 file chunk들을 반환하고 메모리에서 코드를 교환할 때 큰 파일을 사용하게 만든다. 리눅스의 파일 시스템은 EXT4 혹은 reiser 등을 사용한다. 또한 리눅스는 프로그램을 구동시키기 위해 딱 필요한 것만 로드하므로 윈도우보다 더 빠를 수 있다.
참고 자료
- Wikipedia. (2024, July). Linux kernel. Retrieved from Wikipedia
- Quora. (2024, July). Why does Linux seem so much faster than Windows?. Retrieved from Quora
- GeeksforGeeks. (2024, July). Introduction to Linux Shell and Shell Scripting. Retrieved from GeeksforGeeks
'Computer Science' 카테고리의 다른 글
CPU 스케줄링 (1) | 2024.07.19 |
---|---|
브라우저 렌더링 과정 (0) | 2024.07.17 |