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 Nov 11, 2024
1 parent 54f5c0e commit 073fa5d
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions _posts/fast/2024-10-25-os.md
Original file line number Diff line number Diff line change
Expand Up @@ -896,10 +896,37 @@ CPU가 인터럽트 요청을 받아들이기 위해선 플래그 레지스터

### 2-1-8. 명령어 집합 구조

CPU마다 명령어의 종류와 그 사용법, 구조가 제각각 다르고, CPU가 이해할 수 있는 명령어들의 모음을 **명령어 집합(Instruction Set)**이라고 한다.
이렇게 CPU마다 명령어가 다르면 그에 따른 레지스터와 명령어의 처리 과정 등이 모두 달라진다.

이러한 CPU의 구조를 **CPU 아키텍쳐(CPU Architecture)**라고 하며, 여기엔 x86-64, ARM 등의 여러 아키텍쳐가 존재한다.
각 아키텍쳐마다 명령어와 구조가 다르기 때문에 서로 다른 어셈블리어가 존재하며, 컴파일 언어에서 컴파일 시 해당 환경의 아키텍쳐에 맞춰 컴파일된다.

**명령어 집합 구조(Instruction Set Architecture, ISA)**[^isa1]엔 크게 2가지가 있는데, **CISC(Complex Instruction Set Computer)****RISC(Reduced Instruction Set Computer)**로 나눠진다.

#### 2-1-8-1. CISC

**CISC**는 Complex Instruction Set Computer의 약자로, 직역하면 "복잡 명령어 집합 컴퓨터" 라고 해석할 수 있다.
뜻 그대로 복잡한 형태의 명령어를 가지며, 최초의 명령어 집합 구조이다. 인텔의 x86-64가 CISC이며[^cisc1], 명령어의 종류가 다양하고 복잡하다.

한가지 특징은 명령어의 크기가 바뀔 수 있는 가변 길이 명령어를 사용한다는 점이다[^cisc2].
간단하게 말하면 명령어마다 길이가 제가각이라는 뜻이다.

이는 하나의 명령어로 다양한 처리가 가능하며, 명령어를 작성할 때 더욱 간결하고 적은 명령어로도 작성이 가능하다는 얘기이다.

하지만 이는 해석하는데 비효율적이며, 파이프라이닝에 대해 상대적으로 효율적이지 않다는 단점이 있다.
명령어가 적기때문에 호환성이 좋기도 하지만 속도가 느리고, 오히려 더욱 많은 클럭을 사용할 수 있다는 의미이다.

#### 2-1-8-2. RISC

CISC의 단점을 보완하기 위해 **RISC(Reduced Instruction Set Computer)**가 등장하였다. 직역하면 "축소 명령어 집합 컴퓨터"로 CISC와는 다르게 명령어가 적고[^risc1], 단순하며 고정 길이 명령어를 사용한다.

때문에 프로그램을 작성할 때 비교적 많은 명령어가 사용되지만, 하나의 클럭(사이클)에 하나의 명령어를 처리하기 때문에 CISC보다 효율적이다. 또한 파이프라이닝에 대해서도 더욱 용의하다.

명령어 호환성이 떨어진다는 단점이 있으나, 비교적 전력 소모가 적고[^risc2] 위와 같이 효율적이기 때문에 현대의 명령어 집합 구조에서 주로 사용되는 구조이다.

ARM 등이 RISC에 해당되며, 임베디드 시스템에 사용되는 프로세서도 대부분 RISC이다.

## 2-2. 메모리(주기억장치)

### 2-2-1. RAM
Expand Down Expand Up @@ -931,3 +958,8 @@ CPU가 인터럽트 요청을 받아들이기 위해선 플래그 레지스터
[^hs1]: 명령어를 처리하기 위해 필요한 레지스터들의 집합을 레지스터 세트라 부른다.
[^dh1]: 이를 명령어 의존성이라 한다.
[^ch1]: 분기란 명령어 실행이 순차적으로 실행되던 도중, 어느 명령어(JUMP 등)가 실행되어 다른 위치(포인터)로 이동되는것을 의미한다.
[^isa1]: 명령어 집합 구조(ISA)와 CPU 아키텍쳐는 비슷하지만 약간의 차이가 존재한다. 전자는 CPU가 처리할 수 있는 명령어들의 구조와 레지스터, 주소 지정 방식, 데이터 형식 등의 명령어 처리에 중점을 둔것에 비해, 후자는 CPU의 하드웨어적인 구조 및 설계에 가깝다.
[^cisc1]: x86-64에선 CISC 형식의 명령어를 처리하지만, 사실 현재의 x86-64는 내부적으로 RISC 처럼 처리된다. 즉 CISC와 RISC가 혼용되어 사용되며, 최근에 들어선 CISC는 거의 사용되지 않고 있다.
[^cisc2]: RISC에서도 가변 길이 명령어를 사용하기도 하기 때문에, CISC에서만 가변 길이 명령어를 사용한다는 특징도 사라지고 있는 추세이다.
[^risc1]: 실제론 RISC의 명령어가 더 적거나 하진 않을 수 있다. 하지만 주소 지정 방식이 CISC보다 단순하여 명령어 처리에 효율적이다.
[^risc2]: 실제로 전력 소모면에선 임베디드를 제외하면 큰 차이가 없긴 하다.

0 comments on commit 073fa5d

Please sign in to comment.