> For the complete documentation index, see [llms.txt](https://krjaeh0.gitbook.io/j-log/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://krjaeh0.gitbook.io/j-log/programming/cs_basics/os_memory/memory-management/operating_system.md).

# Operating\_System

## 운영체제

* 응용 프로그램의 동작을 수행하고, 응용 프로그램에게 시스템 자원을 할당하는 등의 복잡한 관리 작업은 사용자가 아니라 **운영체제(Operating System, OS)** 라는 소프트웨어에 의해 이루어진다.
* 사용자 및 응용 프로그램은 컴퓨터 하드웨어(CPU, 메모리, 입출력 장치 등)에 직접 접근하지 않고, 대신 운영체제가 하드웨어와 사용자/응용 프로그램 사이에서 중재자 역할을 한다.

| 사용자, 응용 프로그램              |
| ------------------------- |
| **운영체제**                  |
| 하드웨어 (CPU, 메모리, 입출력 장치 등) |

### 운영체제가 하는 일

* 실행중인 프로그램, 즉 프로세스에 CPU를 번갈아 할당해야 하는데, 이때 어떤 프로세스에 CPU를 할당할지 결정합니다. (CPU 스케줄링)
* 메모리 공간을 각 프로세스에 분배하고 사용하는 과정을 관리합니다.
* 컴퓨터가 입출력 장치와 정보를 주고 받는 과정을 관리합니다.

운영체제는 사용자와 컴퓨터 사이 인터페이스 역할도 합니다. 사용자가 컴퓨터에 명령을 내릴 수 있도록 하는데, 이는 다음으로 소개할 **셸**의 기능입니다.

### 커널과 셸

운영체제는 크게 **커널**과 **셸**로 나눌 수 있습니다.

#### 커널(Kernel, 알맹이)

운영체제의 핵심 기능인 하드웨어 관리를 실제로 수행하는 프로그램입니다.\
커널은 소프트웨어와 하드웨어 간의 커뮤니케이션을 관리하며, 시스템이 부팅될 때 메모리에 올라가서 꺼질 때까지 실행됩니다.

#### 셸(Shell, 껍질)

사용자와 운영체제의 커널 사이에서 사용자가 운영체제에 명령을 내릴 수 있도록 인터페이스 역할을 합니다.\
사용자가 셸에 명령을 입력하면, 셸이 명령어를 해석하여 커널에 요청합니다.\
커널은 명령을 수행하며 하드웨어를 조작하고, 수행 결과를 셸에 전송합니다.\
셸은 이 결과를 해석하여 사용자에게 출력해 줍니다. 즉, 셸은 명령어를 해석하는 역할을 하여 사용자와 운영체제가 소통할 수 있도록 합니다.\
셸을 획득하면 명령어를 통해 원하는 작업을 수행하고 시스템을 제어할 수 있게 됩니다. 따라서 일반적으로 셸을 획득하는 것을 시스템 해킹의 성공으로 여깁니다.

| 사용자, 응용 프로그램              |
| ------------------------- |
| **셸**                     |
| **커널**                    |
| 하드웨어 (CPU, 메모리, 입출력 장치 등) |

## 운영체제 종류

운영체제는 크게 Windows 운영체제와 UNIX/Linux 계열 운영체제로 나눌 수 있습니다.

Windows는 마이크로소프트사에서 개발한 운영체제로, Graphical User Interface (GUI) 기능을 제공하여 사용자가 편리하게 사용할 수 있습니다. 2022년 [통계](https://gs.statcounter.com/os-market-share/desktop/south-korea)에 의하면 대한민국 PC 운영체제 점유율의 90% 가까이를 Windows가 차지하고 있습니다. 그만큼 많은 한국인들은 어렸을 때부터 윈도우를 사용해왔으며 윈도우 사용법에 친숙할 것입니다.

UNIX는 벨 연구소에서 개발한 운영체제로, 대부분의 운영체제는 UNIX로부터 발전된 기술을 사용하고 있습니다. 따라서 현대 운영체제의 원형이라고 할 수 있습니다. 사용자가 키보드로 입력하는 명령에 의해 조작되는 Character User Interface (CUI) 기반의 대화식 운영체제입니다.

UNIX가 개발된 이후, 리누스 토발즈(Linus Benedict Torvalds)가 UNIX 기반의 **Linux** 운영체제를 개발했습니다. Linux는 소스 코드를 공개하여 누구나 수정하고 재배포할 수 있는 오픈소스 프로그램으로, 많은 사람에 의해 계속해서 발전하고 있습니다. Linux 역시 CUI 기반의 운영체제입니다. Linux를 기반으로 Ubuntu, CentOS 등의 다양한 버전이 존재하며, 드림핵 강의에서는 Ubuntu Linux를 사용합니다.

UNIX 기반의 또 다른 운영체제로는 애플에서 개발한 GUI 기반 운영체제 **macOS**, 스마트폰을 많이 사용하는 현대인에게 친숙한 모바일 운영체제 **Android**와 **iOS**가 있습니다.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://krjaeh0.gitbook.io/j-log/programming/cs_basics/os_memory/memory-management/operating_system.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
