이 초보자 친화적인 안내서에서는 컴퓨터가 작동하는 핵심 구성 요소를 설명하겠습니다: 운영 체제, 커널, 코어, 프로세스, 그리고 스레드입니다. 이 기사는 이 용어들을 종종 듣지만 뒷단에서 무슨 일이 일어나고 있는지 시각화하는 데 어려움을 겪는 사람들을 위해 만들어졌습니다. 그래서 운영 체제에 대한 개요부터 시작해 보겠습니다.
운영 체제
OS(운영 체제)의 매우 잘 알려진 기능 중 하나는 사용자가 컴퓨터 시스템의 복잡성을 직접 다룰 필요가 없도록 사용자 인터페이스를 제공하는 것입니다. 하지만 그것은 OS가 제공하는 유틸리티의 일부에 불과합니다. 우리는 OS를 정부로 생각할 수 있으며, 그것은 유용한 작업을 직접 수행하지는 않지만 환경과 규칙, 그리고 자원 관리 시스템을 제공하여 최소한의 충돌로 다른 작업을 완료할 수 있도록 돕습니다. 이 기사에서는 "자원"이라는 용어에 대해 나중에 다루겠습니다.
OS 커널
안녕하세요! 오늘은 커널과 운영 체제에 대해 이야기해보겠습니다.
많은 사람들이 커널과 운영 체제를 서로 바꿔 사용하는 경우가 많은데요, 그러나 그들은 같은 것이 아닙니다. 운영 체제는 커널, 시스템 프로그램 및 응용 프로그램으로 구성됩니다. 커널은 항상 실행 중인 프로그램으로, 가장 중요한 작업인 리소스 및 프로세스 스케줄링, 메모리 관리 및 네트워킹과 같은 작업을 처리하는 핵심 구성 요소입니다.
응용 프로그램은 특정 목적의 프로그램으로, 일반적으로 운영 체제가 제공하는 환경 내에서 사용자를 돕는 역할을 합니다. 미디어 플레이어 및 웹 브라우저가 여기에 해당합니다. 시스템 프로그램은 시스템의 기능에 중요한 역할을 하며, 운영 체제가 올바르게 동작하도록 필요합니다(필수로 커널의 일부는 아닙니다). 부트로더나 명령 줄 인터페이스가 예시로 들 수 있습니다. 그렇다면 PC를 켤 때 무슨 일이 벌어질까요?
- 먼저, "기본 입력/출력 시스템" (BIOS)이 하드웨어를 확인 및 초기화합니다.
- 그런 다음, 부트로더가 실행되어 기본 메모리(RAM)로 보관된 OS 커널을 불러옵니다.
- 이제 커널이 메모리에 로드되었으므로, 제어가 커널로 이동되고 다른 OS 서비스를 초기화하여 부팅을 완료합니다.
- 이제 커널은 프로세스 스케줄링을 시작할 수 있습니다.
이렇게 커널과 운영 체제에 대해 알아봤습니다.더 궁금한 내용이 있으시면 언제든지 질문해 주세요!
자원
컴퓨터 시스템에서의 자원은 OS가 프로세스의 적절한 실행을 지원하기 위해 제공해야 하는 기능 또는 요구 사항입니다. 일부 자원은 다음과 같습니다:
- 메모리 (RAM): 프로세스는 실행이 시작될 때 RAM에 로드되어야 하며 실행이 완료되면 RAM에서 나와야 합니다.
- CPU 시간: 프로세스가 실행되는 동안 CPU가 사용하는 시간.
- 네트워크: 네트워크 대역폭과 같은 네트워크 자원은 다중 사용자 및 애플리케이션 사이에서 네트워크 자원의 공정한 사용을 보장하기 위해 적절히 관리되어야 합니다.
- 디스크 공간: OS 파일 시스템은 프로그램 및 파일이 보조 기억장치(하드 디스크, SSD)에 어떻게 저장되는지 관리합니다.
이제 이러한 리소스를 사용하는 엔티티로 나아갈 수 있습니다.
프로세스, 스레드 및 코어
프로세스
프로그램은 작업을 완료하기 위해 수행해야 하는 명령어의 집합으로, 보조 기억장치에 대기 중입니다. 실행되는 순간, 프로그램은 주 기억장치로 로드되어 자체 리소스가 할당됩니다. 프로그램의 이 인스턴스를 프로세스라고 합니다. 프로세스는 단순히 "동작 중인 프로그램"입니다. 예를 들어 Windows에서 실행 파일(.exe)인 chrome.exe는 실행될 때 실행 중인 프로세스가 됩니다.
쓰레드
프로세스는 자체 메모리와 자원을 갖춘 독립적인 실행 환경이며, 쓰레드는 그 프로세스 내에서 실행되는 가장 작은 실행 단위입니다. 하나의 프로세스에는 여러 개의 쓰레드가 존재할 수 있습니다. 프로세스는 여러 작업을 완료해야 하는 프로젝트로 생각할 수 있습니다. 각 작업은 다른 쓰레드에 의해 처리될 수 있으며, 프로젝트에 여러 명의 작업자가 서로 다른 작업에 집중하는 것과 같습니다.
프로세스 내에서 쓰레드는 같은 자원과 메모리 공간을 공유합니다. 예를 들어, 웹 브라우저를 사용할 때 한 쓰레드는 파일 다운로드를 관리하고, 다른 쓰레드는 사용자 입력을 처리할 수 있습니다. 이러한 공유 자원에도 불구하고, 쓰레드는 독립적으로 작동하며 동시에 실행될 수 있어 개별 작업에 동시에 진행할 수 있습니다.
코어
코어는 CPU의 기본 물리적 연산 단위로, 한 번에 하나의 스레드를 실행할 수 있습니다. CPU는 한 번에 여러 작업을 수행할 수 있도록 하나 이상의 코어를 가질 수 있으며, 대부분의 현대 프로세서는 다중 코어를 갖고 있습니다. 여기서 "작업"은 OS가 스케줄링하는 소프트웨어 프로세스 및 스레드를 가리킵니다. OS는 실행할 많은 스레드를 갖고 있을 수 있지만, CPU는 주어진 시간에 코어 수 * 각 코어당 하드웨어 스레드 수만큼의 작업만을 실행할 수 있고, 나머지는 OS가 스케줄링할 때까지 대기해야 합니다.
최종 예제로 넘어가기 전에, 예제를 더 잘 이해할 수 있도록 몇 가지 중요한 개념을 간단히 살펴보겠습니다:
- 문맥 교환은 CPU가 스레드 간에 빠르게 전환할 수 있도록 하는 기능으로, 여러 스레드가 동시에 실행되는 것처럼 나타납니다.
- Hyper-Threading은 물리적 CPU 코어를 두 개의 논리적 코어, 즉 스레드로 분할하여 서로 다른 소프트웨어 스레드를 처리할 수 있도록 하는 하드웨어 기능입니다.
- P 및 E 코어: P 코어(성능)와 E 코어(효율)는 인텔 기술의 일부입니다. P-코어는 고 클록 속도와 Hyper-Threading을 갖춘 전통적인 디자인으로, E-코어는 P-코어보다 물리적으로 작고 훨씬 적은 전력을 소비하며 주로 백그라운드 응용 프로그램에 사용됩니다.
지금부터는 Windows 작업 관리자 스크린샷을 살펴보겠습니다.
여기에서 인텔 프로세서가 16개의 코어(8개의 P-코어 및 8개의 E-코어)를 가지고 있는 것을 확인할 수 있습니다. Hyper-Threading이 활성화되면 각 P-코어는 2개의 스레드를 처리하고, 각 E-코어는 1개의 스레드를 처리합니다. 이 구성으로 인해 총 24개의 논리 프로세서가 생성됩니다([8 P-코어 × 2개의 스레드] + [8 E-코어 × 1개의 스레드] = 24개의 논리 프로세서). 여기서 동시에 실행되는 스레드는 24개 뿐으로 보일 수 있지만, 프로세서 내 각 작업의 실행 시간은 극히 빠르며 나노초로 측정되어 CPU가 컨텍스트 스위칭 및 멀티태스킹을 통해 많은 스레드를 효과적으로 관리할 수 있습니다.
이것이 전부입니다! 운영 체제에 대한 이 소개를 마치며 이러한 기본적인 OS 개념에 대해 더 잘 이해하셨기를 바랍니다. 이 글은 포괄적인 가이드가 되기보다는 견고한 OS 기초를 쌓기 위한 시작점으로 의도되었습니다. 즐겁게 읽으셨기를 바랍니다.
향후 기술 포스트 더 보려면 LinkedIn이나 Twitter에서 연락하세요! 감사합니다.