Skip to content

Commit

Permalink
Update 2024-10-25-os.md
Browse files Browse the repository at this point in the history
  • Loading branch information
yulmwu committed Oct 25, 2024
1 parent e95ea55 commit aa52c1a
Showing 1 changed file with 34 additions and 2 deletions.
36 changes: 34 additions & 2 deletions _posts/fast/2024-10-25-os.md
Original file line number Diff line number Diff line change
Expand Up @@ -220,14 +220,25 @@ EUC-KR은 약 2000개 이상의 한글을 표현할 수 있으나, 그럼에도

## 1-3. 명령어

> 목차 상 명령어를 먼저 설명하나, 원활한 이해를 위해 후반의 [컴퓨터 구조](#2-컴퓨터-구조)([메모리](#2-2-메모리주기억장치), [레지스터](#2-1-3-레지스터) 등)를 먼저 보고 오거나, 오고가며 병행하는걸 추천한다.
> ### 메모리 간단 설명
> 이 내용은 "메모리"[^mem1] 목차에 넣으려 했으나, 이 개념을 모른다면 제대로된 설명이 어려워서 미리 설명하려고 한다.
>
> 우리가 컴퓨터에서 어떠한 프로그램을 실행했을 때, 그 프로그램의 명령어와 그 프로그램의 데이터는 메모리에 적재된다.[^mem2] 그리고 CPU에서 프로그램의 명령어를 실행하기 위해, 또는 데이터 읽기/쓰기를 위해 메모리에 접근할 땐 이 메모리에 접근한다.[^mem3]
>
> 메모리에 어떤 데이터가 적재될 때, 어떠한 공간에 적재되는데 이 공간엔 **주소**라는 개념이 존재한다.
> 메모리에 적재된 데이터엔 모두 주소가 할당되어있고, 이 주소를 통해 메모리에 적재된 데이터에 접근하게 된다.
>
> 이 주소라는 개념때문에 미리 설명을 하였고, 이제부터 "주소에 접근한다" 라는 문장은 **메모리에 저장된 데이터 또는 명령어를 가져오기 위해 주소를 사용하여 가져온다(접근한다)** 라는 의미가 된다.[$mem4]
{: .prompt-info }

> 목차 상 명령어를 먼저 설명하나, 원활한 이해를 위해 후반의 [컴퓨터 구조](#2-컴퓨터-구조)([메모리](#2-2-메모리주기억장치), [레지스터](#2-1-3-레지스터) 등)를 먼저 보고 오거나, 오고가며 병행하는 것도 좋은 선택이다.
{: .prompt-info }

우리가 사용하는 모든 컴퓨터의 프로그램은 명령어의 집합이다.

> 프로그램, program
>
> 1. (명사) 진행 계획이나 순서. 또는, 그 목록. 순화어는 `계획(표)', `차례(표)'. "∼을 짜다"
> 1. (명사) 진행 계획이나 순서. 또는, 그 목록. 순화어는 `계획(표)`, `차례(표)`. `∼을 짜다`
> 2. (컴퓨터) 어떤 문제를 해결하기 위해 컴퓨터에게 주어지는 처리 방법과 순서를 기술한 일련의 명령문의 집합체.
>
> 정의 출처: Oxford Languages
Expand Down Expand Up @@ -439,6 +450,22 @@ print(a + b)

# 2. 컴퓨터 구조

서론이 너무 길었다. 사실 글 전체를 1시간만에 끝내려고 했는데, 거의 450줄 가량을 써버렸다.
아무튼 이제부터 본격적으로 컴퓨터 구조론에 대해 들어가보려고 한다.

"컴퓨터 구조"라 하면 보통 크기 2가지의 파트로 나뉘게 된다. 하나는 앞서 설명한 "컴퓨터가 이해하는 데이터"와 이 파트에서 서술할 "컴퓨터의 부품"이다.

컴퓨터는 크게 4가지의 부품으로 구분할 수 있다.

* **CPU**(중앙처리장치)
* **메모리**(주기억장치)[^cs1]
* **보조기억장치**(SSD, HDD 등)
* **입출력장치**(외부 키보드, 마우스, 모니터 등)

그리고 이들을 서로 이어주는 통로인 **버스**라는 개념도 추후 설명한다.

메모리에 대해선 너무나 중요한 개념이고, 이 개념을 모른다면 제대로된 설명이 불가능하기 때문에, 메모리에 대해 잊어버렸다면 "명령어" 절에서 설명한 [메모리 간단 설명](#메모리-간단-설명)을 보고 오는걸 추천한다.

## 2-1. CPU

### 2-1-1. ALU
Expand Down Expand Up @@ -476,9 +503,14 @@ print(a + b)
---

[^todo]: [작성자용] 아직 완료되지 않은 차례는 `%`로 표기한다. 하위 차례 전체를 포함할 시 `%%`로 표기한다.
[^mem1]: 일반적으로 "메모리"라 하면 주기억장치(RAM)을 의미한다.
[^mem2]: 프로그램의 모든 명령어와 데이터가 메모리에 올라가는건 아니다.
[^mem3]: 메모리뿐만 아니라 레지스터, 캐시 메모리에서 접근하기도 한다.
[^mem4]: 컴퓨터공학(또는 과학)에선 메모리 등에서 데이터를 가져올 때 "가져온다" 라는 단어보단 "접근하다"라는 단어를 주로 사용한다.
[^architecture]: 아키텍쳐란 컴퓨터 시스템의 하드웨어 구조를 의미한다. x86-64, ARM 등의 다양한 아키텍쳐가 존재한다.
[^plt0]: 소스 코드(Source Code)는 소프트웨어 제작에 사용되는 코드로, 다른 말로 원시 코드라고도 한다.
[^plt1]: 니모닉(mnemonic) 기호라고 부른다.
[^plt2]: 이해하지 않아도 좋다. 어셈블리어가 저렇게 생겼다는 것만 알면 된다.
[^pp1]: 자세히 들어가면 "그대로" 복사하는건 아니다. 최적화 등의 과정으로 내용이 바뀔 수 있다.
[^ip1]: 다만 인터프리트 과정에서 추가적인 메모리 소비(오버헤드)가 발생하기 때문에 이 점을 고려해야 한다.
[^cs1]: 추후 설명할 예정이지만, "메모리"라 칭하는건 대부분 주기억장치(RAM)을 의미한다.

0 comments on commit aa52c1a

Please sign in to comment.