From 073fa5d09559ac41c815d61e8124172b42b9eb3c Mon Sep 17 00:00:00 2001 From: ky0422 Date: Mon, 11 Nov 2024 10:15:56 +0900 Subject: [PATCH] Update 2024-10-25-os.md --- _posts/fast/2024-10-25-os.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/_posts/fast/2024-10-25-os.md b/_posts/fast/2024-10-25-os.md index 7b983bb..feb8efc 100644 --- a/_posts/fast/2024-10-25-os.md +++ b/_posts/fast/2024-10-25-os.md @@ -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 @@ -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]: 실제로 전력 소모면에선 임베디드를 제외하면 큰 차이가 없긴 하다.