---
description: >-
  컴퓨터의 구조를 국가의 구조로 비유했을 때 썩 잘 맞아떨어질 수 있다. 비유의 특성상 약간 과장된 설명이 있겠지만 컴퓨터 구조의 전체적인
  흐름을 한 눈에 이해한다는 측면에서 좋은 비유인 것 같다.
---

# 1. 비유로 이해하는 컴퓨터 구조

> 이 내용은 [최호성의 컴퓨터 구조 강의](https://www.youtube.com/watch?v=LUTKYykw0Yw\&t=328s)를 듣고 직접 정리한 글입니다.

## 1. 층(Layer)

컴퓨터 구조의 핵심은 각 `Layer`의 구주와 역할, 상호작용 과정을 이해하는 일이다.

*   존립 의존

    각 레이어는 존립 의존적이다. 특히 하위 레이어에서 문제가 생기면 상위 레이어에도 문제가 생기기 때문에 다른 말로는 `전제조건` 이라고도 할 수 있겠다.
*   상호 독립

    내용적 측면에서 상호 독립적이다. 예를 들어, 같은 하드웨어에 같은 커널을 사용하더라도 시스템 영역과 같이 포함된 어플리케이션이 뭐냐에 따라 누군 우분투가 되고 누군 레드햇, 페도라가 되는 것이다.

## 2. 컴퓨터 == 국가 ❗❓

컴퓨터의 구조를 국가의 구조로 비유했을 때 썩 잘 맞아떨어질 수 있다. 비유의 특성상 약간 과장된 설명이 있겠지만 컴퓨터 구조의 전체적인 흐름을 한 눈에 이해한다는 측면에서 좋은 비유인 것 같다.

### 2.1. 국가의 구조

![](https://github.com/hidaehyunlee/Fork-my-brain/tree/4f7d19f4487fe8d450e22a9b6451bbed865ce125/images/37580034-80866853-026aeb80-8ccc-11ea-8cde-3a096eccacc3.png)

국가는 크게 세 레이어로 나눌 수 있다.

우선 `1.영토` 가 있어야 하고, 그 위에 `2.정부`가 있어야 하며, 마지막으로 `3.국민`이 존재한다. 국민 영역에는 `4.개인`이 존재한다. 한 개인이 살아가기 위해서는 `5.집` 이라는 공간이 필요할 것 이다. 그 집에서 개인은 `6.혼자 살기도하고`, 가족을 이루어 `7.여러 명이 함께 살기도 하며` 한 국가에는 이런 집들이 무수히 많을 것이다. 그런데 국민들 중에서는 정부의 역할을 동시에 하는 국민들도 존재한다. 바로 `8.공무원`이다. 민간(국민)에 속하지만 하는 일은 정부의 일이기 때문이다. 대표적인 공무원이 바로 `9.검/경` 이다. 원래 우리 국민들은 서로 집의 일에 함부로 관여할 수 없지만, 검/경은 다르다. 정부로부터 권한을 받았기 때문에 필요한 경우 개인과 집의 문제에 개입할 수 있다.

### 2.2. 컴퓨터의 구조

컴퓨터의 구조를 국가의 각 요소들에 비유해서 설명할 수 있다.

![](https://github.com/hidaehyunlee/Fork-my-brain/tree/4f7d19f4487fe8d450e22a9b6451bbed865ce125/images/37580034-80866856-0434af00-8ccc-11ea-8e68-def3e9221748.png)

| 국가      | 컴퓨터     |                                                                                                                                                              |
| ------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| 영토      | 하드웨어 영역 | 하드웨어는 물리적 개념이다. 하드웨어 위 레이어로는 모두 소프트웨어이다.                                                                                                                     |
| 정부      | 커널 영역   | 소프트웨어는 논리적(virtual) 개념이다. 소프트웨어에서 논리라는 말은 `가상(virtual)`이라는 단어와 거의 똑같은 의미다.                                                                                   |
| 국민      | 유저 영역   | 점선 위로가 진정한 유저 영역이다.                                                                                                                                          |
| 개인      | 스레드     | 스레드는 프로세스 안으로 행동반경이 제한된다. 자세한 개념은 [여기](https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html) 참고.                                                   |
| 집       | 프로세스    | 프로세스는 개별화된 공간인 메모리(virtual memory)를 가지고 있다. 다른 프로세스에 의해서 침범 받지 않도록 운영체제가 보장한다.                                                                               |
| 함께사는 개인 | 멀티 스레드  | 스레드가 여럿 일 때는 하나의 메모리 공간을 나누어 사용해야한다. 이 때 중요한 것이 바로 `동기화(Synchronization)`다. 어떤 선점된 공간(화장실? = 메모리)에 다른 스레드가 개입할 수 없도록 확인(노크)하고, 문을 잠그고(밖에서 대기시킴) 것이 동기화 과정이다. |
| 혼자사는 개인 | 싱글 스레드  | 자취생은 노크도, 문을 잠글 필요도 없다. 즉, 싱글 프로세스에서 싱글 스레딩을 할 때 동기화를 고민할 필요는 없다.                                                                                            |
| 공무원     | 서비스 영역  | 시스템 서비스 영역. 윈도우 서비스 프로세서, 리눅스의 데몬 프로세서가 이에 속한다.                                                                                                              |
| 검/경     | 디버거     | 디버거라는 것은 소프트웨어가 가지고 있는 결함을 해결하기 위해서 만들어진 또 다른 체계이다. 이것을 잘 쓰면 결함을 찾는게 되고 나쁘게 사용하면 데이터를 위변조하는 메모리 해킹도구가 된다.                                                    |

하드웨어 수준에서 가장 중요한 디바이스는 CPU이다. CPU는 다른말로 machine이라는 표현을 쓸 수 있다. 머신 위에 커널(운영체제)이 설치되면 그 위에 유저 영역의 환경, 즉 우리가 사용하는 어플리케이션이 작동하는 환경이 조성되는 것이다.

## 3. 실제적인 이해

이제 개괄적인 느낌은 알겠다. 실제로 컴퓨터가 어떻게 돌아가는지, 각 레이어 끼리는 어떻게 데이터를 주고 받는지, 파일입출력과 네트워크 연결을 예로 들어서 공부해보자. [다음 게시글](https://velog.io/@hidaehyunlee/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B5%AC%EC%A1%B0%EB%A5%BC-%ED%86%B5%ED%95%B4-%EC%9D%B4%ED%95%B4%ED%95%98%EB%8A%94-%ED%8C%8C%EC%9D%BCFile%EA%B3%BC-%EC%86%8C%EC%BC%93Socket)에 정리했다.
