맨위로가기

마이크로코드

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

마이크로코드는 CPU 내부의 제어 신호를 생성하기 위한 일련의 마이크로 명령어 집합으로, 초기 컴퓨터 설계에서 시작하여 컴퓨터 아키텍처 및 성능에 큰 영향을 미쳤다. 1947년 훨윈드 I의 설계에서 컨트롤 스토어 개념이 도입된 이후, 1951년 모리스 윌크스에 의해 마이크로프로그래밍이라는 용어가 만들어졌다. IBM System/360은 마이크로코드를 통해 호환성을 확보하고 컴퓨터 패밀리화를 실현했으며, 초기 마이크로프로세서에서도 명령 디코딩 회로 설계를 단순화하는 데 사용되었다. 1980년대 RISC 설계 철학의 등장으로 마이크로코드의 역할에 대한 논쟁이 있었지만, 현대 CPU에서도 여전히 일부 복잡한 명령어 구현, 하위 호환성 유지, 특정 애플리케이션 프로세서에서 활용되고 있다. 마이크로코드는 유연성과 호환성을 제공하며, 버그 수정 및 성능 향상에 기여하지만, CISC 프로세서에서는 파이프라인 및 인터럽트 지연에 영향을 미칠 수 있다. 쓰기 가능한 제어 저장소(WCS)를 사용하면 마이크로코드 패치를 용이하게 할 수 있으며, x86 CPU는 이러한 WCS를 통해 마이크로코드 버그 수정 및 보안 취약점 대응에 활용하고 있다.

2. 역사

마이크로코드의 역사는 컴퓨터 아키텍처 발전과 밀접하게 연관되어 있다.

1947년 훨윈드 I 설계는 컨트롤 스토어 개념을 도입하여 컴퓨터 설계를 단순화하고 애드혹 방식을 넘어서는 계기를 마련했다. 컨트롤 스토어는 2차원 격자 형태의 다이오드 매트릭스였다.[77] 1951년 모리스 윌크스조건문과 비슷한 조건부 실행 기능을 추가하여 마이크로프로그래밍 개념을 발전시켰고, 이를 '마이크로프로그래밍'이라 명명하며 단순한 컨트롤 스토어와 구별했다.

마이크로코드는 CPU의 명령어 집합을 하드와이어드하는 대신, 마이크로 프로그램 루틴을 통해 프로세서 동작과 프로그래밍 모델을 정의하여 제어 로직 개발을 단순화했다. 하드와이어드 CPU 설계는 변경이 어려웠지만, 마이크로코드는 설계 후반에도 쉽게 변경할 수 있어 CPU 설계를 용이하게 했다.

1958년 IBM 709는 상업용 최초로 마이크로코드를 사용한 별도 아키텍처 에뮬레이터를 제공했고, 1964년 IBM System/360은 마이크로코드를 통해 호환성을 확보하여 컴퓨터 패밀리화를 실현하고, 구현에 의존하지 않는 공통 사양으로서 컴퓨터 아키텍처를 확립했다.

초기 마이크로프로세서는 명령 디코딩부 회로 설계를 단순화하기 위해 ROM 등을 사용하여 CPU 내부 제어를 수행했다. 예를 들어 MOS 6502는 PLA를 사용하여 명령 디코딩과 제어를 수행했다.[65]

1940년대부터 1970년대 후반까지는 어셈블리 언어 프로그래밍이 주를 이루었고, 마이크로코드는 더 높은 수준의 명령어를 쉽게 정의하여 프로그래머 생산성을 높였다. 1970년대 CPU 속도가 메모리 속도보다 빨라지면서 메모리 블록 전송, 메모리 프리페치, 다단계 캐시 등 기술이 사용되었고, 마이크로코드는 더 적은 수의 복잡한 기계 명령어로 메모리 대역폭 요구를 줄여 이를 도왔다.

IBM System/360, Digital Equipment Corporation VAX 등은 복잡한 마이크로 프로그램으로 구현된 명령어 집합을 가진 아키텍처였으며, 이러한 접근 방식은 복합 명령어 집합 컴퓨터(CISC)로 불렸다.

마이크로 프로그래밍은 현대 CPU 설계에서도 여전히 사용되며, 시뮬레이션에서 디버깅된 후 제어 저장소 대신 논리 기능이 대체되기도 한다. 논리 기능은 종종 더 빠르고 저렴하다.

2. 1. 초기 개념

1947년 훨윈드 I 설계에서 컨트롤 스토어 개념이 도입되어 컴퓨터 설계를 단순화하고 애드혹 방식을 넘어서는 계기를 마련했다. 컨트롤 스토어는 다이오드 매트릭스였고, CPU의 내부 클럭으로부터 제어 시간 펄스를 받아들이고, 게이트와 다른 회로의 신호를 제어하기 위해 연결하는 2차원 격자 형태였다. 펄스 배분기는 CPU 클럭에서 만들어진 펄스를 8개의 별도 시간 펄스로 나누었고, 각각은 격자의 다른 열을 활성화하여 연결된 제어 신호를 활성화했다.[77]

1951년, 모리스 윌크스는 컴퓨터 소프트웨어의 조건문과 개념이 비슷한 조건부 실행 기능을 추가하여 마이크로프로그래밍 개념을 발전시켰다. 그의 초기 구현체는 한 쌍의 매트릭스로 구성되었다. 하나는 훨윈드 컨트롤 스토어의 방식으로 신호를 만들고, 두 번째 매트릭스는 어느 신호의 열이 다음 사이클에서 호출할 것인지 선택하였다. 컨트롤 스토어의 한 줄이 두 번째 매트릭스 내의 다른 대안에서 선택 가능한 방법을 제공하는 조건 기능이 구현되었다. 윌크스는 이 기능을 설명하고 단순한 컨트롤 스토어와 구별하기 위해 '''마이크로프로그래밍'''(microprogramming)이라는 용어를 만들었다.[15]

2. 2. 상용화 및 발전

IBM이 1964년에 출시한 System/360 시리즈는 마이크로코드를 통해 호환성을 확보하고 컴퓨터의 패밀리화를 실현했다. 이를 통해 구현에 의존하지 않는 공통 사양으로서의 컴퓨터 아키텍처를 확립했다.[16] 저가형 모델은 8비트 산술 논리 장치(ALU)를 사용했지만, 고가형 모델은 동일한 덧셈을 단일 사이클에 수행하는 완전한 32비트 ALU를 사용했다. 이러한 차이는 제어 로직으로 구현할 수 있지만, 각 기기마다 완전히 다른 디코더를 구현하는 데 드는 비용은 과도했을 것이다. 마이크로코드를 사용함으로써 ROM의 코드만 변경하면 되었다. 예를 들어, 한 기계에는 부동 소수점 장치(FPU)가 포함되어 두 숫자를 곱하는 마이크로코드가 몇 줄에 불과할 수 있지만, FPU가 없는 동일한 기계에서는 여러 번의 덧셈을 사용하여 동일한 작업을 수행하는 프로그램이 되었으며, 변경되는 것은 ROM뿐이었다.[16]

초기 마이크로프로세서의 명령 집합은 그렇게 복잡하지 않았지만, 명령 디코딩부의 회로 설계를 단순화하기 위해 ROM을 사용하여 CPU 내부 제어를 수행했다. 예를 들어 MOS 6502는 PLA를 사용하여 명령 디코딩과 제어를 수행했다.[65] 디지털 이큅먼트 코퍼레이션 (DEC)의 VAX 컴퓨터 패밀리도 마이크로코드를 채택하여 다양한 하드웨어에서 동일한 아키텍처를 구현했다.[17] 인텔 8086는 마이크로코드의 초기 예시 중 하나이다.[6]

모토로라 68000은 다양한 어드레싱 모드를 가진 직교 명령어 집합을 제공하며, 모든 것이 마이크로코드로 구현되었다. 칩 표면적의 약 20%가 마이크로코드 시스템이었고,[18] 후기 추정치에 따르면 시스템의 68,000개의 트랜지스터 중 약 23,000개가 마이크로코드 시스템의 일부였다고 한다.

2. 3. RISC와의 관계

1980년대 중반 RISC 설계 철학이 등장하면서 마이크로코드의 역할에 대한 논쟁이 발생했다. IBM 내부 프로젝트에서 시작된 이 논쟁은 복잡한 명령어 집합에 대한 경쟁이 지속되면서 더욱 심화되었다.[19]

존 코크가 이끄는 팀은 System/360 (및 System/370) 프로그램에서 방대한 양의 성능 데이터를 조사한 결과, 컴파일러는 가장 간단한 명령어를 주로 사용하며, 이는 하드웨어로 구현되어 가장 빠르게 실행된다는 사실을 발견했다. 이는 마이크로코드를 사용하여 이러한 차이점을 숨기는 원래 목적과 상반되는 것이었다.[19]

이러한 발견은 "컴퓨터와 사용자 사이에 마이크로코드를 배치하는 것은 가장 자주 실행되는 명령어를 수행하는 데 비용이 많이 드는 오버헤드를 부과한다"는 결론으로 이어졌다.[19] 이는 RISC 개념으로 발전했으며, 복잡한 마이크로코드 엔진과 관련 ROM을 줄이거나 제거하고, 해당 회로를 추가 레지스터 또는 더 넓은 ALU 등에 할당하여 성능을 향상시키는 방식이었다.

하지만 업계는 RISC 개념에 혼란과 적대감을 보였으며, 프로세서 외부에서 명령어를 구현하면 메모리 접근 시간이 늘어나 전체 성능이 저하된다는 주장이 제기되었다.[20] 그러나 지지자들은 시뮬레이션을 통해 명령어 수가 크게 증가하지 않는다는 것을 입증했다.[19]

1980년대 후반, 최초의 상업용 RISC 설계가 등장하면서 다른 회사들의 복잡한 설계를 능가하기 시작했다. 결국, DEC Alpha 설계에서는 마이크로코드를 포기했고, CISC 프로세서도 하드와이어 회로를 사용하여 많은 기능을 수행하도록 전환되었다. 예를 들어, 인텔 80486은 하드와이어 회로를 사용하여 명령어를 가져오고 디코딩하며, 마이크로코드는 명령어를 실행하는 데만 사용했다.[21] 펜티엄 프로는 명령어를 가져와 일련의 마이크로 연산으로 디코딩하여 실행 유닛으로 전달하고, 실행 유닛은 마이크로 연산을 스케줄링하고 실행하며, 비순차적으로 수행할 수도 있었다. 복잡한 명령어는 미리 정의된 마이크로 연산 시퀀스로 구성된 마이크로코드를 사용하여 구현되었다.[22]

일부 프로세서는 특수한 모드에서 실행되는 머신 코드를 사용하기도 한다. 예를 들어, DEC Alpha는 PALcode를 사용하여 TLB 미스 처리 및 인터럽트 처리와 같은 기능을 구현했다.[23] IBM System/390 CPU와 z/Architecture CPU는 밀리코드를 사용하여 일부 명령어를 구현한다.[24]

마이크로코드는 네트워크 프로세서, 디지털 신호 프로세서, 채널 컨트롤러 등 특정 응용 분야 프로세서에서 여전히 활용되고 있다.

3. 구현 방식

마이크로프로그램은 CPU를 제어하는 마이크로명령어들의 집합이다. 마이크로코드를 사용한 프로그램을 '''마이크로 프로그램'''이라고 하며, 일반적인 프로그램에 비해 매우 작다.

마이크로코드는 원래 컴퓨터의 제어 로직을 개발하는 더 간단한 방법으로 개발되었다. 초기 CPU의 명령어 집합은 하드와이어드 방식으로, 기계 명령어의 각 단계(피연산자 주소 계산, 읽기 및 쓰기 포함)는 조합 논리 회로와 순차 상태 머신 회로에 의해 직접 제어되었다. 이러한 하드와이어드 프로세서는 효율적이었지만, 복잡한 명령어 집합으로 인해 설계 및 디버깅이 어려웠다.

마이크로코드는 전용 회로 대신 마이크로 프로그램 루틴을 통해 프로세서의 동작과 프로그래밍 모델을 정의하여 작업을 단순화했다. 설계 후반에도 마이크로코드는 쉽게 변경 가능했지만, 하드와이어드 CPU 설계는 변경이 매우 번거로웠다.

마이크로 프로그램의 각 마이크로 명령어는 CPU 내부 기능 요소들을 제어하는 비트들을 제공한다. 하드 와이어드 CPU에 비해 내부 CPU 제어가 특수한 형태의 컴퓨터 프로그램이 된다는 장점이 있어, 복잡한 전자 설계 문제를 덜 복잡한 프로그래밍 문제로 바꾼다.

프로그래머는 마이크로 어셈블러[1]를 사용하여 비트 테이블을 기호적으로 정의하고, 시뮬레이터 프로그램을 통해 마이크로 프로그램을 디버깅한다.

마이크로 코드는 각 마이크로 명령어가 디코딩 없이 CPU 요소를 제어하는지 (수평 마이크로 코드), 조합 논리 회로에 의한 광범위한 디코딩이 필요한지에 따라 "수평" 또는 "수직"으로 특징지어진다. 수평형 마이크로코드는 프로세서 각 부분을 동시에 작동시키는 장점이 있지만, 여러 연산을 동시에 수행할 수 없는 경우 NOP 필드가 많아지는 단점이 있다.

3. 1. 구성 요소

마이크로프로그램 방식에서는 프로세서 자체를 더 작은 제어 장치, 기억 장치, 명령어 집합으로 이루어진 작은 컴퓨터로 간주한다. 이때, "더 작은 ~" 등과 같은 것을 "마이크로 ~"라고 부른다.

  • '''마이크로 시퀀서'''는 제어 저장소의 다음 워드를 가져온다. 시퀀서는 카운터와 같은 것으로, 제어 저장소의 일부 데이터에 따라 점프한다(값을 카운트 업하여 가리키는 위치를 변화시킨다). 경우에 따라서는 명령 레지스터의 내용에 따라 점프한다. 가장 단순한 시퀀서는 제어 저장소의 몇 비트를 로드하는 레지스터이다.
  • '''레지스터'''는 CPU의 데이터를 보존하는 고속 메모리이다. 레지스터에는 프로그램 카운터, 스택 포인터 등 애플리케이션 프로그래머가 쉽게 접근할 수 없는 것도 포함된다. 대부분의 레지스터 파일은 3개의 포트를 갖는다. 즉, 동시에 두 개의 레지스터를 읽고 하나의 레지스터에 쓸 수 있다.
  • '''ALU'''는 계산을 수행한다. 덧셈, 논리 부정, 오른쪽 시프트, 논리곱, 논리합 등이다. ALU에서 다른 기능을 실현하는 경우도 있다.


이들은 모두 실행 유닛의 구성 요소이다. 최근의 CPU는 여러 개의 실행 유닛을 갖는다. 단순한 컴퓨터에서도 하나의 실행 유닛을 메모리의 읽기/쓰기에 사용하고, 다른 실행 유닛을 사용자 코드 실행에 사용한다.

이러한 요소를 하나의 칩에 통합하는 경우도 있다. 이 칩이 실행 유닛의 '''슬라이스'''를 구성하며, 이를 '''비트 슬라이스 칩'''이라고 부른다. 예를 들어 AMD Am2900 패밀리가 있다.[39] 해당 패밀리의 마이크로 시퀀서 Am2909는 하나의 칩으로 4-bit 분의 주소를 생성할 수 있으며, n 개를 사용하여 4n-bit 분의 주소를 생성한다.

실행 유닛의 각 구성 요소나 실행 유닛끼리는 여러 개의 와이어로 결선된다. 이것을 '''버스'''라고 부른다.

3. 2. 수평형 마이크로코드

수평형 마이크로코드는 단일 마이크로 명령어에 여러 개의 개별 마이크로 연산을 결합하여 동시 작동을 가능하게 한다.[1] 이러한 방식은 CPU의 각 부분을 직접 제어하며, 일반적으로 상당히 넓은 제어 저장소를 필요로 한다. 각 워드는 108비트 이상인 경우도 드물지 않다. 시퀀서 클럭의 각 틱마다 마이크로코드 워드가 읽혀지고, 디코딩되어 CPU를 구성하는 기능적 요소를 제어하는 데 사용된다.

전형적인 수평 마이크로프로그램 워드는 다음과 같이 좁게 정의된 비트 그룹으로 구성된다.

레지스터 소스 A레지스터 소스 B목적지 레지스터ALU 연산점프 유형점프 주소



이러한 유형의 마이크로 머신이 opcode 다음에 주소가 오는 JUMP 명령을 구현하려면, 마이크로코드는 두 개의 클럭 틱이 필요할 수 있다. 아래는 마이크로 어셈블러 소스 코드의 예시이다.

```

# 숫자 기호로 시작하는 모든 줄은 주석이다.

# 이것은 단지 레이블일 뿐이며, 어셈블러가 메모리 주소를 기호적으로 나타내는 일반적인 방법이다.

InstructionJUMP:

# 다음 명령을 준비하기 위해, 명령 디코드 마이크로코드는 이미 프로그램 카운터를 메모리 주소 레지스터(MAR)로 이동했다.

# 이 명령은 메모리 데이터 레지스터(MDR)에서 MAR로 복사하여 점프 opcode 다음에 오는 메모리 워드에서 점프 명령의 대상 주소를 가져온다.

# 이렇게 하면 메모리 시스템이 다음 명령을 MDR로 가져와 명령 디코딩에 사용할 수 있도록 두 개의 클럭 틱을 제공한다.

# 시퀀서 명령 "next"는 제어 워드 주소에 1을 더하는 것을 의미한다.

MDR, NONE, MAR, COPY, NEXT, NONE

# 이것은 다음 명령의 주소를 프로그램 카운터(PC)에 넣는다.

# 이것은 메모리 시스템에 이전 마이크로 명령어에서 시작된 가져오기를 완료할 수 있는 클럭 틱을 제공한다.

# 시퀀서 명령은 명령 디코드의 시작 부분으로 점프하는 것이다.

MAR, 1, PC, ADD, JMP, InstructionDecode

# 명령 디코딩은 일반적으로 엉망이고, 에뮬레이션되는 정확한 프로세서에 매우 특수하므로 표시되지 않는다.

# 이 예시조차도 단순화된 것이다.

# 많은 CPU는 opcode 다음에 오는 워드에서 가져오는 것 외에도 주소를 계산하는 여러 가지 방법을 가지고 있다.

# 따라서 하나의 점프 명령 대신, 해당 CPU는 관련 점프 명령군을 가지고 있다.

```

CPU 제어의 모든 부분을 각 클럭 사이클마다 기술하여 시퀀서를 동작시킨다. 각 틱마다 CPU의 일부 부분만 사용되고 나머지 마이크로 명령어의 비트 그룹은 no-op이 되는 경우가 많다. 하드웨어 및 마이크로코드를 신중하게 설계하면 이 속성을 활용하여 CPU의 다른 영역을 사용하는 작업을 병렬화할 수 있다. 예를 들어, ALU는 첫 번째 틱 동안 필요하지 않으므로 이전 산술 명령을 완료하는 데 잠재적으로 사용할 수 있다.

수평형 마이크로코드는 프로세서의 각 부분을 동시에 작동시키는 지시가 가능하다는 장점이 있지만, 동시에 여러 연산을 수행할 수 없는 경우에는 NOP가 되는 필드가 많아질 수 있다는 단점이 있다.

3. 3. 수직형 마이크로코드

수직형 마이크로코드는 각 마이크로 명령어의 비트 필드가 상당히 인코딩되어 있어 일반적으로 중간 조합 논리 회로를 거친다. 이 논리는 차례로 내부 CPU 요소(ALU, 레지스터 등)에 대한 제어 및 시퀀싱 신호를 생성한다. 이는 비트 필드가 제어 및 시퀀싱 신호를 직접 생성하거나 최소한으로만 인코딩되는 수평 마이크로코드와 대조적이다.[40] 결과적으로 수직형 마이크로코드는 더 짧은 명령어 길이와 더 적은 저장 공간을 필요로 하지만, 디코딩하는 데 더 많은 시간이 소요되어 CPU 클럭 속도가 느려진다.[40]

일부 수직형 마이크로코드는 더 복잡한 컴퓨터를 에뮬레이션하는 단순한 기존 컴퓨터의 어셈블리 언어와 유사하다.[40] DEC 알파 프로세서, IBM 메인프레임 System/390 및 z/아키텍처의 CMOS 마이크로프로세서와 같은 일부 프로세서는 특수 명령어, 특수 레지스터, 일반 기계 코드에서는 사용할 수 없는 기타 하드웨어 리소스에 액세스할 수 있는 특수 모드에서 실행되는 기계 코드를 사용한다.[41][42] 예를 들어 알파 프로세서에서는 PAL코드, IBM 메인프레임 프로세서에서는 밀리코드라고 불린다.

또 다른 형태의 수직형 마이크로코드는 다음과 같은 두 개의 필드를 가진다.

필드 선택필드 값
CPU 제어 부분 선택CPU 해당 부분 제어



"필드 선택"은 제어 저장 장치의 이 단어에 의해 제어될 CPU의 부분을 나타낸다. "필드 값"은 CPU의 해당 부분을 제어한다. 이러한 유형의 마이크로코드를 사용하면 설계자는 제어 저장 장치의 사용하지 않는 비트를 줄여 비용을 절감하기 위해 의도적으로 더 느린 CPU를 선택한다. 그러나 복잡성이 감소하면 CPU의 클럭 주파수가 증가하여 명령어당 사이클 수가 증가하는 영향을 줄일 수 있다.

트랜지스터 가격이 저렴해지면서 수평형 마이크로코드가 마이크로코드를 사용하는 CPU 설계에서 주류를 이루게 되었고, 수직형 마이크로코드는 덜 자주 사용되었다. 마이크로프로그램 방식에서 프로세서는 더 작은 제어 장치, 기억 장치, 명령 집합으로 이루어진 작은 컴퓨터로 간주되기도 한다. 이때 "더 작은" 구성 요소를 "마이크로"라고 부른다.

수직형 마이크로코드는 NOP 비용을 줄인다. 매우 단순한 컴퓨터로 복잡한 컴퓨터를 에뮬레이션하는 것과 유사하며, PDP-8 시절에 일반적이었다.

4. 장점

마이크로코드는 복잡한 전자 회로 설계를 단순한 프로그래밍 문제로 변환하여 CPU 설계를 용이하게 한다.[11] 하드와이어드 CPU 설계는 변경하기 매우 번거로웠지만, 마이크로코드는 설계 프로세스 후반에도 쉽게 변경할 수 있었기 때문이다.[11]

1940년대부터 1970년대 후반까지는 어셈블리 언어로 프로그래밍하는 경우가 많았다. 더 높은 수준의 명령어는 프로그래머 생산성을 높였고, 마이크로코드의 중요한 장점은 강력한 기계 명령어를 상대적으로 쉽게 정의할 수 있다는 점이었다.[16] 예를 들어, IBM의 System/360 시리즈는 바이너리 값을 십진수 문자열로 형식화하는 것과 같은 고급 언어 구조에 맞춰진 연산을 포함하여 매우 복잡한 명령어 집합을 가질 수 있었고, 이 작업에 필요한 복잡한 일련의 명령어들을 저렴한 메모리에 저장할 수 있었다.[16]

1970년대에는 CPU 속도가 메모리 속도보다 빠르게 증가했고, 메모리 블록 전송, 메모리 프리페치 및 다단계 캐시와 같은 수많은 기술이 이를 완화하는 데 사용되었다. 마이크로코드를 통해 가능해진 고급 기계 명령어는 더 적은 수의 더 복잡한 기계 명령어에 더 적은 메모리 대역폭이 필요하므로 이를 더욱 도왔다.[16] 예를 들어, 문자열에 대한 연산은 단일 기계 명령어만으로 수행할 수 있으므로 여러 명령어 페치를 피할 수 있었다.[16]

4. 1. 유연성 및 호환성

마이크로프로그래밍을 통해 엔지니어들은 주어진 명령어 집합 아키텍처를 다양한 기본 하드웨어 마이크로 아키텍처에서 쉽게 구현할 수 있다.[13]

IBM System/360은 16개의 범용 레지스터를 가진 32비트 아키텍처를 가졌지만, System/360 구현의 대부분은 훨씬 더 단순한 기본 마이크로 아키텍처를 구현하는 하드웨어를 사용했다. 예를 들어, System/360 모델 30은 산술 논리 장치(ALU)와 주 메모리에 8비트 데이터 경로를 가졌고, 범용 레지스터를 더 빠른 속도의 코어 메모리의 특수 장치로 구현했다. System/360 모델 40은 ALU에 8비트 데이터 경로, 주 메모리에 16비트 데이터 경로를 가졌으며, 범용 레지스터를 더 빠른 속도의 코어 메모리의 특수 장치로 구현했다. 모델 50은 완전한 32비트 데이터 경로를 가졌고, 범용 레지스터를 더 빠른 속도의 코어 메모리의 특수 장치로 구현했다.[13] 모델 65에서 모델 195까지는 더 큰 데이터 경로를 가졌으며, 더 빠른 트랜지스터 회로에서 범용 레지스터를 구현했다. 이처럼 마이크로프로그래밍을 통해 IBM은 상당히 다른 하드웨어와 광범위한 비용 및 성능 범위를 가진 많은 System/360 모델을 설계하면서도 모든 모델을 아키텍처적으로 호환할 수 있게 했다. 이는 각 모델에 대해 작성해야 하는 고유한 시스템 소프트웨어 프로그램 수를 극적으로 줄였다.

DEC의 VAX 컴퓨터 제품군에도 비슷한 접근 방식이 사용되었다. 그 결과, 서로 다른 VAX 프로세서들은 서로 다른 마이크로 아키텍처를 사용하지만, 프로그래머에게 보이는 아키텍처는 변경되지 않았다.

4. 2. 수정 용이성

마이크로프로그램 방식은 프로세서의 버그를 수정하기 쉽게 만든다. 하드웨어 로직이나 배선을 고칠 필요 없이 마이크로 프로그램을 수정하여 많은 버그를 해결할 수 있다.

4. 3. 성능 향상

1940년대부터 1970년대 후반까지는 어셈블리 언어로 프로그래밍하는 경우가 많았다. 더 높은 수준의 명령어는 프로그래머 생산성을 높였고, 마이크로코드의 중요한 장점은 강력한 기계 명령어를 상대적으로 쉽게 정의할 수 있다는 점이었다.[16] 고급 기계 명령어는 더 적은 수의 더 복잡한 기계 명령어에 더 적은 메모리 대역폭을 필요로 하여 성능 향상에 기여했다. 예를 들어, 문자열 연산은 단일 기계 명령어로 수행하여 여러 명령어 페치를 피할 수 있었다.[16]

컴퓨터 초창기에는 CPU가 메모리보다 느렸기 때문에, 복잡한 처리는 CPU 내부에서 마이크로 프로그램으로 구현하는 것이 메모리 접근 횟수를 줄여 성능을 향상시켰다.

5. 한계

마이크로코드를 사용하는 CPU는 일반적으로 하나의 명령어를 실행하는 데 여러 클럭 사이클이 소요되며, 해당 명령어에 대한 마이크로 프로그램의 각 단계마다 하나의 클럭 사이클이 소요된다.[39] 이는 와이어드 로직 방식에 비해 실행 속도가 느릴 수 있다는 단점으로 이어진다.

5. 1. 인터럽트 및 파이프라인

CISC 프로세서 중에는 매우 긴 시간이 소요되는 명령이 존재하기도 한다. 이러한 명령 실행 시간의 길이는 명령어 파이프라인이나 인터럽트 지연에 영향을 미친다.[39]

5. 2. 현대 CPU에서의 역할

넥스젠 Nx586을 시작으로 하는 x86 계열, 인텔 펜티엄 프로, AMD K5와 같은 현대의 CISC 구현에서는 마이크로 오퍼레이션을 동적으로 버퍼링하여 RISC 또는 전통적인 마이크로코드와 유사한 명령어 인코딩을 사용한다. 하드와이어드 명령어 디코딩 유닛은 일반적인 x86 명령어에 대한 마이크로 오퍼레이션을 직접 생성하지만, 더 복잡하거나 드물게 사용되는 명령어에 대해서는 마이크로 오퍼레이션을 포함하는 전통적인 마이크로코드 ROM을 사용한다.[2]

예를 들어, x86은 루프나 문자열 명령어, 부동 소수점 장치의 초월 함수 또는 비정규화 수와 같은 특이한 값, 그리고 CPUID와 같은 특수 목적 명령어 등 복잡한 다단계 연산을 처리할 때 마이크로코드에서 마이크로 오퍼레이션을 찾는다.

6. 쓰기 가능한 제어 저장소 (WCS)

몇몇 컴퓨터는 ''쓰기 가능한 마이크로코드''를 사용하여 제작되었다. 이 설계에서 마이크로코드는 ROM이나 하드와이어 로직(hardwired logic) 대신 ''쓰기 가능한 제어 저장소'' (WCS)라고 하는 RAM에 저장된다.[45] 이러한 컴퓨터는 때때로 ''쓰기 가능한 명령어 집합 컴퓨터''(WISC)라고도 불린다.[45]

6. 1. 장점

WCS는 몇 가지 이점을 제공한다. 우선 마이크로프로그램 패치가 용이하다. 특정 하드웨어 세대에서는 ROM보다 빠른 접근 속도를 제공하기도 한다.[47] 사용자 프로그래밍 가능한 WCS는 사용자가 특정 목적에 맞게 머신을 최적화할 수 있게 해준다.

6. 2. 활용 예시

제록스 알토 워크스테이션[46], DEC VAX 8800 제품군[46], 심볼릭스 L- 및 G-머신[46], IBM System/360 및 System/370 구현 일부[46], DEC PDP-10 머신[46], 데이터 제너럴 이클립스 MV/8000[47] 등은 쓰기 가능한 마이크로코드를 사용한 상업용 머신이었다.

IBM System/370은 콘솔에서 호출 가능한 '초기-마이크로프로그램 로드'('IML' 또는 'IMPL')[48] 기능을 제공했으며, 전원 켜짐 재설정('POR') 또는 긴밀하게 결합된 멀티프로세서 복합체의 다른 프로세서에서 호출할 수 있었다. IBM 360/85[49][50]와 같은 일부 상업용 머신은 마이크로코드를 위한 읽기 전용 저장소와 쓰기 가능한 제어 저장소를 모두 가지고 있었다.

1995년 펜티엄 프로부터 시작하여, 여러 x86 CPU는 쓰기 가능한 인텔 마이크로코드를 가지고 있다.[51][52] 이를 통해 전체 칩을 교체할 필요 없이 마이크로프로그램을 패치하여 인텔 코어 2 및 인텔 제온 마이크로코드의 버그를 수정할 수 있었다. 또한, 2018년 초에 공개된 스펙터 및 멜트다운과 같은 설계에서 발견된 보안 취약점에 대응하기 위해 인텔이 최대 10년 된 일부 프로세서 아키텍처에 대해 제공한 마이크로코드 패치 세트가 있다.[53][54] 마이크로코드 업데이트는 리눅스,[55] FreeBSD,[56] 마이크로소프트 윈도우,[57] 또는 마더보드 BIOS를 통해 설치할 수 있다.[58]

HP 2100, DEC PDP-11/60, TI-990/12[59][60] 및 바리안 데이터 머신 V-70 시리즈 미니컴퓨터를 포함하여 일부 머신은 사용자 프로그래밍 가능한 쓰기 가능한 제어 저장소를 옵션으로 제공했다.

7. 저작권

마이크로 프로그램(마이크로 코드)은 프로그램의 일종으로, 일반적인 프로그램과 마찬가지로 저작권으로 보호받는 것으로 판시되었다. 인텔Advanced Micro Devices(AMD) 간의 호환 CPU에 관한 분쟁에서는 마이크로 코드의 라이선스도 쟁점이 되었다. 또한, 하드와이어드 로직의 경우, 패턴이 회로 배치 이용권으로 보호받는다.

8. 활용 사례


  • 찰스 배비지가 고안한 해석 기관은 캠(Cam)을 이용해 연산을 제어했는데, 이는 일종의 읽기 전용 제어 저장소였다.
  • EMIDEC 1100[25]은 페라이트 코어에 전선을 통과시키는 방식의 제어 저장소를 사용했으며, 'the laces'라고 불렸다.
  • IBM System/360 시리즈의 많은 기종이 마이크로 프로그램 방식이다.

모델특징
모델 25주기억 장치인 자기 코어 메모리의 선두 16k바이트에 마이크로 프로그램을 저장. 16비트 마이크로 아키텍처, 7 워드의 마이크로 명령어. 카드 리더에서 마이크로 코드를 읽어들임. IBM 1410 에뮬레이션도 같은 방식으로 로드.[26]
모델 308비트 마이크로 아키텍처, 적은 수의 하드웨어 레지스터. 전용 펀치 카드 리더에서 마이크로 코드를 읽어 CROS (Capacitor Read-Only Storage)에 저장.[27]
모델 4056비트 마이크로 명령어. TROS (Transformer Read-only Store)에 마이크로 프로그램 저장.
모델 50병렬로 동작하는 두 개의 데이터 경로 (32비트 산술 연산, 8비트 논리 연산). 90비트 마이크로 명령어.
모델 85고속화를 위해 명령 페치 기구 (I-unit)와 실행 기구 (E-unit) 분리. E-unit은 마이크로 프로그램 방식, 108비트 마이크로 명령어 (에뮬레이터 기능 구현 시 더 넓어짐).


  • NCR 315는 수작업으로 결선한 페라이트 코어 제어 저장소를 사용.
  • DEC PDP-11은 PDP-11/20을 제외하고 마이크로 프로그램 방식.[28]
  • 버로스 시스템

모델특징
B700주 기억 장치에 저장된 16비트 마이크로 프로그램 사용. 각 마이크로 명령은 레지스터 로드 명령으로 실행되거나 ROM에 저장된 56비트 "나노 코드"에 매핑.
B1700비트 단위 주소 지정 가능 메모리. B700과 유사한 계층 구조. 운영 체제가 COBOL, FORTRAN 등을 위한 가상 머신 인터프리터 사전 로드.

참조

[1] 서적 Encyclopedia of Computer Science and Technology: Volume 28 - Supplement 13 https://books.google[...] Marcel Dekker, Inc 2016-01-17
[2] 간행물 The microarchitecture of Intel, AMD and VIA CPUs https://www.agner.or[...] Technical University of Denmark 2024-08-21
[3] 웹사이트 IBM pSeries Servers - Microcode Update for Ultrastar 73LZX (US73) 18/36 GB http://download.boul[...] 2015-01-22
[4] 웹사이트 The central processing unit (CPU): Its components and functionality https://www.redhat.c[...] 2020-07-23
[5] 웹사이트 NMOS 6502 Opcodes http://www.6502.org/[...]
[6] 웹사이트 How the 8086 processor's microcode engine works http://www.righto.co[...]
[7] 웹사이트 ISO/IEC/IEEE 24765:2017(en) Systems and software engineering — Vocabulary https://www.iso.org/[...] 2024-06-23
[8] 서적 VAX 9000 System Technical Description http://www.bitsavers[...] Digital Equipment Corporation 1990-05
[9] 서적 VAX 8800 System Technical Description Volume 2 http://bitsavers.org[...] Digital Equipment Corporation 1986-07
[10] 논문 Microprogrammed Processor Having PLA Control Store http://www.computerh[...] 2011-07-10
[11] 웹사이트 J-11: DEC's fourth and last PDP-11 microprocessor design ... features ... ROM/PLA control store http://simh.trailing[...] 2011-07-10
[12] 웹사이트 6502 Images http://www.visual650[...] 2015-01-22
[13] 서적 IBM System/360 Model 50 Functional Characteristics http://bitsavers.org[...] IBM 2021-10-29
[14] 간행물 Whirlwind I Computer Block Diagrams http://www.cryptosmi[...] MIT Servomechanisms Laboratory 2006-06-21
[15] 서적 The Best Way to Design an Automatic Calculating Machine MIT Press 1989
[16] 웹사이트 Simulating the IBM 360/50 mainframe from its microcode https://www.righto.c[...]
[17] 서적 VLSI VAX Micro-Architecture http://simh.trailing[...] Digital Equipment 1988-05
[18] 간행물 Design Philosophy Behind Motorola's MC68000 http://www.easy68k.c[...] 1983-04
[19] 논문 The evolution of RISC technology at IBM https://www.cis.upen[...] 1990-01
[20] 논문 Comments on "The Case for the Reduced Instruction Computer" https://dl.acm.org/d[...] 1980-09
[21] 간행물 The execution pipeline of the Intel i486 CPU https://ieeexplore.i[...] IEEE
[22] Datasheet Pentium Pro Processor At 150, 166, 180, and 200 MHz http://stffrdhrn.git[...] Intel 1995-11
[23] 서적 Alpha AXP Architecture Reference Manual http://bitsavers.org[...] Digital Press 1995
[24] 논문 The What and Why of zEnterprise Millicode http://www.ibmsystem[...] 2012-09
[25] 웹사이트 EMIDEC 1100 computer http://www.emidec.or[...] Emidec.org.uk 2010-04-26
[26] 서적 IBM System/360 Model 25 Functional Characteristics http://www.bitsavers[...] IBM 2021-10-29
[27] 서적 Field Engineering Theory of Operation, 2030 Processing Unit, System/360 Model 30 http://www.bitsavers[...] IBM 2019-11-09
[28] 서적 Computer Structures: Principles and Examples https://archive.org/[...] McGraw-Hill
[29] 논문 Design of a Small Business Data Processing System https://www.computer[...] 1981-09
[30] 서적 Inside the AS/400, Second Edition https://books.google[...] Duke Press
[31] 웹사이트 Interview: Battling the N64 (Naboo) http://ign64.ign.com[...] IGN64 2008-03-27
[32] 웹사이트 Indiana Jones and the Infernal Machine http://www.ign.com/a[...] 2013-09-24
[33] 뉴스 Postmortem: Angel Studios' Resident Evil 2 (N64 Version) http://www.gamasutra[...] United Business Media LLC 2010-10-18
[34] 서적 Digital Scientific Meta 4 Series 16 Computer System Reference Manual http://www.bitsavers[...] Digital Scientific Corporation 2020-01-14
[35] 서적 Digital Scientific Meta 4 Computer System Read-Only Memory (ROM) Reference Manual http://www.bitsavers[...] Digital Scientific Corporation 2020-01-14
[36] 서적 The Digital Scientific Meta 4 Series 16 Computer System Preliminary System Manual http://www.bitsavers[...] Digital Scientific Corporation 1970-06
[37] 서적 Digital Scientific Meta 4 Computer System Typical ROM Pattern Listing and Program To Simulate The IBM 1130 Instruction Set http://www.bitsavers[...] Digital Scientific Corporation 1970-01
[38] 웹사이트 Western Digital 1600 http://www.antiquete[...] AntiqueTech 2017-01-05
[39] 서적 Computer Architecture and Organization McGraw-Hill
[40] 웹사이트 CS-323: High Performance Microprocessors – Chapter 1. Microprogramming http://euler.mat.uso[...] 2009-10-12
[41] 서적 High Availability and Scalability of Mainframe Environments using System z and z/OS as example https://books.google[...] KIT Scientific
[42] 간행물 The What and Why of zEnterprise Millicode http://www.ibmsystem[...] 2012-09
[43] 웹사이트 PALcode for Alpha Microprocessors System Design Guide http://download.maji[...] Digital Equipment Corporation 1996-05
[44] 서적 The Design of a Microprocessor https://books.google[...] Springer Science & Business Media 2012-12
[45] 간행물 Writable instruction set, stack oriented computers: The WISC Concept http://www.ece.cmu.e[...] 1987
[46] 뉴스 Re: What was the size of Microcode in various machines http://pdp10.nocrew.[...] 2002-09-03
[47] 웹사이트 CPSC 3300 / The Soul of a New Machine https://people.compu[...] 2023-10-27
[48] 서적 IBM System/370 Principles of Operation http://www.bitsavers[...] IBM 1974-09
[49] 서적 IBM System/360 Model 85 Functional Characteristics http://www.bitsavers[...] IBM 1968-06
[50] 서적 IBM System/360 Special Feature Description 709/7090/7094 Compatibility Feature for IBM System/360 Model 85 IBM 1969-03
[51] 간행물 Prozessorgeflüster https://www.heise.de[...] Heise Verlag 1996-05-12
[52] 서적 Intel 64 and IA-32 Architectures Software Developer's Manual, Volume 3A: System Programming Guide, Part 1 http://www.intel.com[...] Intel 2016-09
[53] 뉴스 Intel Patches All Recent CPUs, Promises Hardware Fixes For Upcoming 8th Gen Chips http://www.tomshardw[...] Paul Alcorn 2018-03-15
[54] 웹사이트 Download Linux* Processor Microcode Data File https://downloadcent[...]
[55] 웹사이트 Intel Microcode Update Utility for Linux http://urbanmyth.org[...]
[56] 웹사이트 "[ports] Index of /head/sysutils/cpupdate" https://svnweb.freeb[...] Freebsd.org
[57] 뉴스 A microcode reliability update is available that improves the reliability of systems that use Intel processors http://support.micro[...]
[58] 웹사이트 Server Products - BIOS Update required when Missing Microcode message is seen during POST http://www.intel.com[...] 2013-01-24
[59] 웹사이트 Model 990/12 LR Computer Depot Maintenance and Repair Manual http://www.bitsavers[...] Texas Instruments 2024-02-15
[60] 서적 Texas Instruments Model 990 Computer MDS-990 Microcode Development System Programmer's Guide
[61] 간행물 Microprogrammed Processor Having PLA Control Store http://www.computerh[...] 1979-11
[62] 웹사이트 J-11: DEC's fourth and last PDP-11 microprocessor design ... features ... ROM/PLA control store http://simh.trailing[...] 2013-02-07
[63] 뉴스 Microcode Update for SCSI Hard Disk http://download.boul[...]
[64] 간행물 Whirlwind I Computer Block Diagrams http://www.cryptosmi[...] MIT Servomechanisms Laboratory
[65] 문서 Visual6502.org project にあるダイ写真の上端の格子状パターンがPLAである。 http://www.visual650[...]
[66] 웹사이트 EMIDEC 1100 computer http://www.emidec.or[...] Emidec.org.uk 2010-04-26
[67] 서적 Computer Structures: Principles and Examples マグロウヒル
[68] 문서 "Writable instruction set, stack oriented computers: The WISC Concept" article by Philip Koopman Jr. 1987 http://www.ece.cmu.e[...] 1987
[69] 문서 http://pdp10.nocrew.[...]
[70] 웹사이트 CPSC 330 / The Soul of a New Machine http://www.cs.clemso[...] 2013-02-07
[71] 서적 IBM System/370 Principles of Operation http://www.bitsavers[...] 1974-09
[72] 서적 IBM System/360 Model 85 Functional Characteristics http://www.bitsavers[...] 1968-06
[73] 서적 IBM System/360 Special Feature Description 709/7090/7094 Compatability Feature for IBM System/360 Model 85 1969-03
[74] 간행물 "Intel(R) 64 and IA-32 Architectures Software Developer’s Manual", Volume 3A: System Programming Guide, Part 1 http://www.intel.com[...] 2009-12
[75] 웹인용 IBM Support: Fix Central http://www14.softwar[...] 2008-08-29
[76] 웹인용 IBM pSeries Servers - Microcode Update for Ultrastar 73LZX (US73) 18/36 GB http://download.boul[...] 2008-08-29
[77] 저널 Whirlwind I Computer Block Diagrams http://www.cryptosmi[...] MIT Servomechanisms Laboratory 2006-06-21



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com