From aa52c1aed8cfa0adc94e3d164c94a68cc2b8826f Mon Sep 17 00:00:00 2001 From: ky0422 Date: Fri, 25 Oct 2024 14:12:36 +0900 Subject: [PATCH] Update 2024-10-25-os.md --- _posts/fast/2024-10-25-os.md | 36 ++++++++++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/_posts/fast/2024-10-25-os.md b/_posts/fast/2024-10-25-os.md index 5c16bbe..772fd49 100644 --- a/_posts/fast/2024-10-25-os.md +++ b/_posts/fast/2024-10-25-os.md @@ -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 @@ -439,6 +450,22 @@ print(a + b) # 2. 컴퓨터 구조 +서론이 너무 길었다. 사실 글 전체를 1시간만에 끝내려고 했는데, 거의 450줄 가량을 써버렸다. +아무튼 이제부터 본격적으로 컴퓨터 구조론에 대해 들어가보려고 한다. + +"컴퓨터 구조"라 하면 보통 크기 2가지의 파트로 나뉘게 된다. 하나는 앞서 설명한 "컴퓨터가 이해하는 데이터"와 이 파트에서 서술할 "컴퓨터의 부품"이다. + +컴퓨터는 크게 4가지의 부품으로 구분할 수 있다. + +* **CPU**(중앙처리장치) +* **메모리**(주기억장치)[^cs1] +* **보조기억장치**(SSD, HDD 등) +* **입출력장치**(외부 키보드, 마우스, 모니터 등) + +그리고 이들을 서로 이어주는 통로인 **버스**라는 개념도 추후 설명한다. + +메모리에 대해선 너무나 중요한 개념이고, 이 개념을 모른다면 제대로된 설명이 불가능하기 때문에, 메모리에 대해 잊어버렸다면 "명령어" 절에서 설명한 [메모리 간단 설명](#메모리-간단-설명)을 보고 오는걸 추천한다. + ## 2-1. CPU ### 2-1-1. ALU @@ -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)을 의미한다.