[TIL/혼공컴운] 2025/02/15
그냥 웃겨서 추가한 썸네일, 열린 마음으로 계속해서 공부하지 않으면 엑셀 팡션맨이 될 수 있으니 주의하자.운영체제 ✍️앞서 정리한 컴퓨터 부품들은, 전기만 공급한다고 알아서 작동하지 않는다. 실행할 프로그램에, 필요한 컴퓨터 부품(=시스템 자원)을 할당하고, 프로그램이
그냥 웃겨서 추가한 썸네일, 열린 마음으로 계속해서 공부하지 않으면 엑셀 팡션맨이 될 수 있으니 주의하자.
운영체제 ✍️
1. 운영체제 개관 🌿
앞서 정리한 컴퓨터 부품들은, 전기만 공급한다고 알아서 작동하지 않는다.
실행할 프로그램에, 필요한 컴퓨터 부품(=시스템 자원)을 할당하고, 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램이 바로 운영체제(Operating System, OS)다.

OS 역시 프로그램이기에 다른 프로그램들과 마찬가지로 메모리에 적재된다. 다만 운영체제는 그 성질이 매우 특별해서 컴퓨터가 부팅되는 시점에, 메모리 내 커널 영역(kernel space)에 별도로 적재되어 실행된다. 커널 영역을 제외한, 응용 프로그램이 적재되는 영역을 사용자 영역(user space)이라 한다.
요컨대, OS는 커널 영역에 적재되어, 사용자 영역에 적재된 응용 프로그램들에 자원을 할당하고 이들이 올바르게 실행되도록 돕는다.

자원을 분배하고 규칙을 통해 시스템을 관리한다는 차원에서, 운영체제는 정부로 비유되기도 한다.
2. 운영체제의 큰 그림 🌿
2-1. 커널 ⚙️

아이폰을 생각해 보자. 아이폰이 제공하는 서비스는 수도 없이 많겠지만, 그중에서도 전화, 문자, 인터넷 기능처럼 핵심적인 기능들이 있을 것이다.
운영체제도 다양한 서비스를 제공하지만, 그중에서도 핵심적인 서비스들이 있다. 운영체제의 핵심 서비스를 담당하는 부분이 커널(kernel)이다. 커널이 담당하는 핵심 기능이라고 하면 프로세스 관리, 메모리 관리, 파일 시스템 관리 등이 있다.
(GUI)

(CLI)

사용자 인터페이스(UI)는 운영체제가 제공하지만 커널에는 포함되지 않는 기능이다. 위 이미지에서 빨간 라인을 전체 집합으로 보면, 초록 라인 영역의 여집합에 사용자 인터페이스(UI)가 포함된다. 사용자 인터페이스에는 그래픽 기반의 GUI와 프롬프트 기반의 CLI가 있다.
2-2. 이중 모드 / 시스템 호출 ⚙️
우리 선조들이 즐겨 하던 스타크래프트라는 전통 놀이를 아는 사람이라면 이해하기 쉬울 것이다. 운영체제는 커맨드 센터와 같아서, 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근해서는 안 된다.

따라서 운영체제는 일종의 문지기로서, 응용 프로그램이 자원에 접근하기 위해서는 반드시 운영체제를 통해야 한다.

운영체제가 문지기라는 사실은 알았다. 문지기 역할은 이중 모드(dual mode)로 구현된다.
이중 모드는 CPU가 명령어를 실행하는 모드를 크게 '커널 모드'와 '사용자 모드'로 구분하는 방식이다. 커널 모드는 커널 영역 코드를 실행할 수 있는 모드이고, 사용자 모드는 커널 영역 코드를 실행할 수 없는 모드다. CPU가 커널 모드로 실행 중인지, 사용자 모드로 실행 중인지는 플래그 레지스터 속 슈퍼바이저 플래그를 통해 확인할 수 있다.

어쨌든 응용 프로그램이 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내, 사용자 모드에서 커널 모드로 전환되어야 한다. 이러한 전환 요청을 시스템 호출(system call)이라 한다.
시스템 호출은 일종의 '소프트웨어적 인터럽트'다. 일반적으로 응용 프로그램은 실행 과정에서 운영체제 서비스들을 매우 빈번하게 이용한다. 그 과정에서 시스템 호출을 자주 발생시키고 사용자 모드와 커널 모드를 오가며 실행된다.
2-3. 운영체제의 핵심 서비스 ⚙️
운영체제의 핵심 서비스에 대해 알아보겠다. 자세한 내용은 이후 정리할 글에서 소개할 예정이기에, 본 글에서는 핵심 서비스에 어떤 것들이 있는지 가볍게 살펴볼 예정이다.
#### 2-3-1. 프로세스 관리 🚀
실행 중인 프로그램을 프로세스(process)라고 한다.
일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있다. 따라서 CPU는 프로세스들을 조금씩 번갈아 가며 실행한다.

그런데 프로세스별로 요구사항이 다양하다. 이러한 프로세스들을 일목요연하게 관리하고 실행할 수 있어야 한다. 프로세스 관리나 동기화, 그리고 교착 상태 해결 등의 개념에 대해서는 향후 다룰 예정이다.
핵심 서비스 중 '프로세스 관리'가 있다는 것만 알아두자.
#### 2-3-2. 자원 접근 및 할당 🚀
모든 프로세스를 실행하기 위해서는 자원(컴퓨터 부품)이 필요하다. 운영체제가 핵심 부품을 어떻게 관리하는지 알아보자.
CPU는 한 번에 하나의 프로세스만 실행할 수 있다.
따라서 어떤 프로세스부터 CPU를 이용하게 할 것인지, 얼마나 오래 CPU를 이용하게 할 것인지를 결정해야 한다. 관련해서 앞으로 CPU 스케줄링에 대해 학습할 예정이다.
메모리에 적재되는 프로세스들은 크기도, 주소도 다양하다. 심지어 같은 프로세스라 할지라도 실행할 때마다 적재되는 주소가 달라질 수 있다. 새로운 프로세스가 적재될 때마다 어느 주소에 적재해야 할지를 결정해야 한다.
추가적으로 메모리가 이미 차 있어 적재할 공간이 없는 경우도 있을 수 있고, 메모리에 공간이 남았는데도 프로세스를 적재하지 못하는 상황도 있을 수 있다.
More to read
Amazon VPC Architecture 이해하기
새로운 프로젝트를 기획하며, 개발에서 무엇을 가장 먼저 고민해야 하는지 다시 돌아보게 되었습니다.한때는 프론트엔드가 모든 설계의 출발점이라고 믿었습니다. 유저가 무엇을 보고, 어떤 흐름에서 머무르고 이탈하는지에 대한 이해 없이 서비스를 만든다는 건 불가능하다고 생각했기
'원사이트'프론트엔드 관점으로 알고리즘 이해하기
오랜만에 방법론에 관한 글을 쓰게 되었습니다. 최근 상황은 이렇습니다. SSAFY에서는 하루에 엄청난 양의 알고리즘 문제들을 과제로 수행하게 됩니다. 그 과정에서, '구현력'이 매우 떨어진다는 생각이 들었습니다. 완전히 어려운 문제라면 '아쉬움'이라는 감정조차 느끼지
SubnetVPC 설계의 시작: IP와 Subnet
반복되는 루틴 속에서 얻은 안정감을 발판 삼아, 이제는 기술적 스펙트럼을 넓히기 위한 개인 프로젝트에 착수하고자 합니다.이번 프로젝트의 목표는 단순한 포트폴리오 구축을 넘어, 실제 서비스 수준의 블로그 시스템 구현과 다국어 처리 적용 등 실무에 가까운 역량을 한 단계