[컴퓨터과학 개론] 10강 - 컴퓨터 구조(2)

2025. 11. 10. 19:08·방송통신대학교/💻컴퓨터과학 개론

✅ 1. 명령어

(1) 명령어 집합 구조

  • 내장 프로그래밍(폰 노이만 구조) 개념으로부터 직접적으로 도출된 개념이다.
  • 이것이 ISA(Instruction Set Architecture) 이다. HW와 SW의 교량 역할을 해주는 중요한 개념이다.
  • 연산 코드(OP code)는 CPU의 명령어 집합 ISA에 의해 정의되어있음.
  • 쉽게말해, CPU가 이해하고 실행할 수 있는 명령어들의 집합과 그것들의 형식, 동작을 정의한 규칙이다.
  • 즉, 프로그래머가 CPU에게 "이렇게 동작해!" 라고 말할 수 있는 언어라고 보면 됨.
  • 결과적으로 ISA 는 단순히 명령어 모음이 아닌 CPU가 어떻게 동작할지를 정해놓은 약속집같은 것이다.

[ 명령어 집합 ]

  • 컴퓨터 시스템 내에 정의되어 있는 기본적인 명령어들의 집합을 의미한다.
  • 모든 컴퓨터는 자신만의 명령어 집합을 가지고 있다.
  • 명령어 집합의 결정은 명령어 종류, 명령어 형식, 주소 지정방식 등을 고려해서 결정이 된다.
  • 명령어 집합이 결정되면 그에 상응하는 하드웨어 구조가 결정이 된다.

(2) 명령어 집합에 따른 컴퓨터 구조

  • 명령어 집합에 따라 컴퓨터 구조는 크게 CISC, RISC 두 가지로 나눌 수 있다.

[ CISC(Complex Instruction Set Computer), 복합 명령어 집합 컴퓨터 ]

  • 복합 명령어를 포함하여 명령어와 주소지정방식의 수를 많이 사용
  • 수많은 복잡한 명령어를 탑재하여 사용함으로써 프로그램에서 사용되는 전체 명령어의 개수를 줄여서 프로그램의 실행 시간 단축을 위한 개념 및 구조로 볼 수 있다.
  • 연산코드 해석 및 실행을 위한 제어장치가 복잡해지는 단점을 가진다.
  • 우리가 보통 일반적으로 사용하는 형태는 이 CISC 가 될 수 있음.

[ RISC(Reduced Instruction Set Computer), 단축 명령어 집합 컴퓨터 ]

  • 명령어를 단순화하고 개수를 줄이고 하드웨어를 간단히 개선시킨 구조이다.
  • 각 명령어의 길이를 가능한 짧게 함으로써 각 명령어의 실행 시간을 최소화 하여 많은 처리량과 빠른 속도를 지향하는 방식
  • CICS에 비해 제어장치는 비교적 간단하며, 일반적으로 하드웨어로 구성이 된다.

(3) 기본적인 명령어 종류

[ 데이터 전송 명령어 ]

  • 데이터 전송: 데이터를 변경하지 않고 한 곳에서 다른 곳으로 이동을 시키는 것을 의미함.
  • 데이터 이동 ( 레지스터 <-> 레지스터, 주기억장치 <-> 레지스터, 기억장치 <-> 기억장치 등 ) 과 같이 데이터를 옮기는 것과 관련된 명령어를 의미할 수 있다.

[ 데이터 처리 명령어 ]

  • 산술 명령어, 논리연산 명령어 ,비트 단위 명령어, 시프트 명령어 등 을 수행하는 명령어로 볼 수 있다.

[ 프로그램 제어 명령어 ]

  • 프로그램의 제어 흐름을 관리하기 위한 명령어로 볼 수 있으며, 무조건적 분기를 할 것인지 조건적 분기를 할 것인지 등등 따짐

[ 입출력 명령어 ]

  • 보조기억장치 및 입출력장치 등과의 정보 교환 명령어, 인터럽트 관련 명령어 들로 볼 수 있음.
  • 인터럽트: 프로그램의 정상 수행을 멈추고, CPU 이외의 다른 장치의 요구 사항을 수행하는 기능을 인터럽트라 부름.

(4) 명령어 형식

  • 실제 명령어는 어떤 형식을 가지고 있을까?

[ 명령어의 기본 형식 ]

  • 기본 형식에서 각 명령어는 실행에 필요한 모든 정보를 포함해야 한다.

  • 기본 형식은 연산자 코드(OP code) 와 피연산자인 오퍼랜드(operand) 2가지 부분으로 구성이 된다.

[ 연산자 코드(OP code) ]

  • CPU가 실제로 처리할 연산의 종류로 덧셈 뺄셈 나눗셈 곱셈 논리연산 등이 될 수 있음.
  • 연산자 코드에 얼만큼의 비트가 할당이 되느냐에 따라 CPU가 수행할 수 있는 최대 명령어의 개수가 달라짐.
  • 연산 코드(OP code)는 CPU의 명령어 집합 ISA에 의해 정의되어있음.

[ 오퍼랜드(operand) ]

  • 피연산자로써, 명령어가 사용할 데이터 또는 데이터가 저장되어 참조될 기억장치의 주소를 나타내는게 오퍼랜드이다.
  • 오퍼랜드의 크기 또는 개수는 명령어 집합, 명령어 등 컴퓨터 구조에 따라 달라질 수 있음.

(5) 명령어 형식 - 오퍼랜드 개수에 따른 구분

  • 연산의 대상이 되는 데이터가 어디서 추출되고, 결과가 어디에 저장할 지에 따른 구분
  • 쉽게말해, 오퍼랜드 개수에 따라서 계산 되고 명령어가 처리 되는 방식이 달라 질 수 있다는 의미임.
  • 위의 사진에서 오퍼랜드의 갯수에 따라 스택, 누산기 등 다양한 방법을 사용하게 됨.

  • 0주소 명령어: 스택 기반 아키텍처에서 사용되는 명령어 형식이다.
  • 1주소 명령어: 무조건 누산기(ACC) 중심 명령어 형식이다.
  • 2주소 명령어: 결과를 첫 번째 피연산자(R1 등)에 저장하는 방식이며, 누산기를 안써도 된다. ( 제일 많이 씀 )
  • 3주소 명령어: 일반 레지스터끼리 자유롭게 연산하는 방식이다.
  • 2주소와 3주소의 차이는 2주소는 MOVE 를 통해 레지스터에 데이터를 이동 시킨 뒤 ADD 명령을 통해 더해줘야 하지만, 3주소는 오퍼랜드를 3개까지 쓸 수 있어, 데이터 두 개를 더해서 레지스터에 이동 시키는 것을 한 번에 할 수 있음.

(5) 명령어 형식 - 명령어의 메모리 표현

  • 위와 같이 1-주소 명령어를 사용한다고 가정하면, 1주소 명령어므로 오퍼랜드는 하나가 될 것이고 이후 연산자 코드와 오퍼랜드의 공간을 각각 4비트라고 가정을 하겠다.
  • 즉, LOAD나 ADD MUL STORE 등의 연산자 명령어들은 해당 이진수 처럼 표현이 될 수 있을 것이다.
  • W X Y Z 와 같이 데이터를 넘기게 되면 해당 명령어에 맞게 처리가 될 것이다.
  • 이러한 방식으로 명령어 또한 이진의 비트 패턴으로 메모리에 표현이 된다.

(5) 주소지정방식

  • 연산에 사용될 데이터가 기억장치의 어디에 위치하는 지를 지정하는 방법이다.
  • CPU 명령어에서 operand 필드를 어떻게 해석할지, 즉 값을 어디서 가져올지 결정하는 규칙을 의미함.
  • 쉽게말해, 명령어 안에 있는 오퍼랜드를 주소로 볼지, 데이터로 볼지, 그리고 주소라면 직접 참조할지, 간접적으로 참조할지 등을 결정하는 방법을 의미 할 수 있음.
  • 명령어 개수/길이를 줄이고, 기억장치 사용에 대한 융통성을 증가시키기 위해 다양한 주소지정방식이 사용이 되고 있다.
  • 유효주소: 주소지정방식에 의해 계산되어 실제 데이터가 저장된 기억장치의 주소를 의미함.

[ 즉시 주소지정방식 ]

  • 연산자 코드 옆에 오퍼랜드에는 연산에서 사용 할 데이터 또는 그 데이터가 어디에 저장 되어있는지 기억장치의 주소 있음
  • 이 즉시 주소지정방식에서 오퍼랜드는 주소가 아닌 데이터가 들어가게 된다. 즉, 실제 데이터가 들어가는 것임.
  • 실제 데이터가 들어가기 때문에 기억장치를 참조할 필요가 없어 속도가 빠를 수 있음.
  • 레지스터 및 변수의 초기화에 주로 쓰임. 또한, 오퍼랜드의 길이가 실제 데이터의 크기와 관련이 있게 됨.
  • 정리하면 즉시 주소지정방식을 사용 할 때 오퍼랜드에 들어가는 값은 데이터로만 볼 수 있다는 의미임.
  • 또한, 데이터를 넣는 경우에는 주소를 이미 알고 있는 경우이다?

[ 직접 주소지정방식 ]

  • 피연산자 부분에 주기억장치 주소가 들어가 있는 방식을 의미한다.
  • 즉, 명령어의 operand가 메모리 주소 자체를 담고 있는 방식으로 볼 수 있으며, 이 부분은 유효주소가 될 수 있음.
  • 유효주소: 주소지정방식에 의해 계산되어 실제 데이터가 저장된 기억장치의 주소를 의미함.
  • 결과적으로 오퍼랜드의 길이가 실제 접근 가능한 메모리의 크기와 관련이 있게 됨.

[ 간접 주소지정방식 ]

  • 명령어의 operand 가 실제 데이터가 있는 메모리 주소가 아닌, 그 주소를 가리키는 주소를 담고 있는 방식이다.
  • 즉, 한 단계 더 참조해서 데이터를 가져오거나 저장하는 방식으로 볼 수 있다. (operand -> 메모리 안 주소 -> 실제 데이터)

[ 레지스터 주소지정방식 ]

  • 명령어의 operand 가 메모리가 아닌 CPU 내부의 레지스터를 가리키는 방식이다.
  • 즉, 데이터가 메모리에 있는 것이 아니라, CPU 레지스터 안에 직접 존재함을 의미함.
  • 메모리를 거치지 않고 CPU 내부에서 바로 연산이 가능하여 속도가 매우 빠르다는 특징이 있음.
  • 레지스터 수의 제한 때문에 많은 데이터를 다루기에는 힘들어 메모리를 사용해야 됨.

[ 레지스터 간접 주소지정방식 ]

  • 명령어의 operand 가 레지스터를 가리키고, 그 레지스터 안에 실제 데이터가 있는 메모리 주소가 들어 있는 방식이다.
  • 즉, operand -> 레지스터 -> 메모리 주소 -> 실제 데이터 순으로 접근을 한다.
  • 속도는 직접 레지스터보다 느리지만, 간접 주소 지정보다는 빠르다는 특징이 있다.

[ 상대 주소지정방식 ]

  • 명령어의 operand가 메모리의 절대 주소가 아니라, ,현재 실행 중인 명령어 주소를 기준으로 한 상대적 위치를 나타내는 방식
  • 즉, 현재 위치 + operand 값 = 실제 데이터 주소가 된다.

(6) 정리

  • 여기까지는 명령어와 관련된 내용이다.
  • 명령어 집합을 결정하는데 명령어 형식, 명령어 종류, 주소지정방식 등이 영향을 미친다.
  • 이러한 명령어 집합이 결정이 되면 그에 대응하는 컴퓨터 구조가 자연스럽게 결정이 되는 것임.

✅ 2. 중앙처리장치

(1) 명령어를 하드웨어에 구현하는 방법

  • 명령어가 제어장치 또는 처리장치 일부분으로써 하드웨어에 구현하는 방법은 총 2가지가 있다.

[ 마이크로 프로그램에 의한 제어장치 ]

  • 산술/논리연산과 명령어 수행 순서 조작 회로가 제어기억장치에 저장된 비트 패턴("마이크로 연산")으로 기동하는 장치
  • 각 명령어는 여러 개의 마이크로 연산으로 구현이 됨
  • 명령어 집합의 변경이나 명령어 추가 등이 용이함.
  • CISC 컴퓨터 구조에서 주로 사용이 됨.
  • 쉽게말해, 마이크로 프로그램이란, CPU의 제어기억장치 안에 저장된, 명령어를 실행하기 위한 마이크로 명령어들의 집합으로 볼 수 있음. 즉, ROM 또는 PLA 같은 하드웨어적인 메모리 회로로 구현이 되어있음. 회로 형태의 메모리 안에 미리 정의된 마이크로 명령어들의 집합이 들어가 있는 것임. ( 회로로써 구현이 되어있음 )
  • 결국 CPC 마다 동작이 다른 이유는 명령어 집합(ISA)가 다르기 때문이다. 이 ISA는 CPU의 추상적 명세이므로 이 명세를 가지고 만들어지는 것이 마이크로프로그램이다. 즉, ISA 설계에 따라 마이크로프로그램이 구현이 되는 것이다. CPU 설계 철학에 따라 ISA가 회사마다 다르게 정의되기 때문에 마이크로프로그램 자체가 당연히 다르게 구현이 될 수 밖에 없다.
  • 즉, 제어장치는 CPU의 각 장치에 신호를 보내 동작을 제어해주고, 제어기억장치는 마이크로프로그램을 저장하는 메모리로 볼 수 있으며 이곳에는 마이크로명령 단위로 CPU가 수행할 제어단어를 저장을 해준다.
  •  
  • CPU 에는 수많은 레지스터와 ADD, MOVE 와 같은 연산을 위한 회로가 물리적으로 만들어져 있음.
  • 이러한 물리적 회로들간의 연결이 이렇게 미리 정의되어있는 것이며, 제어기억장치의 마이크로프로그램의 의해서 회로가 활성화 되어서 해당 연산에 맞는 회로가 수행이 됨. 그래서 레지스터랑 연산으로 한정이 되어있는 것임.

[ 직접 회로로 구성된 제어장치 ]

  • 연산과 명령어 수행 회로가 기억장치에 의존하지 않고 직접 구성된 제어 회로에 의해 기동하는 장치
  • 빠른 수행이 가능하지만 명령어 집합의 변경에 쉽게 적응할 수 없음.
  • 명령어 수가 적은 RISC 컴퓨터 구조에서 주로 사용이 됨.

(2) 레지스터

  • 마이크로 프로그램에 의해서 명령어를 하드웨어에 어떻게 구현하고 조작하는지 살펴보겠음.
  • 중앙처리장치(CPU) 에는 산술논리연산장치, 제어장치, 레지스터 등이 있음.
  • 이 레지스터는 범용 레지스터, 특수 레지스터 로 나눌 수 있음.
  • 범용 레지스터: 일반적인 목적을 가지고 여러 연산에서 사용되는 어떤 데이터등을 가지고 저장하기 위해서 사용되는 것임.

  • CPU 내부에는 범용 레지스터가 있을 수 있고 특수 레지스터(AC, MAR, PC, IR, MBR 등) 가 있을 수 있음.
  • 주기억장치와 시스템 버스를 통해 주소, 제어 신호, 데이터를 주고 받게 된다.

  • MAR (Memory Address Register) → 주소 버스를 통해 메모리 주소 지정
  • 제어장치 (Control Unit, CU) → 제어버스를 통해 읽기/쓰기 신호 전달
  • MBR (Memory Buffer Register) → 데이터 버스를 통해 메모리와 데이터 주고받음
  • IR (Instruction Register) → MBR에서 읽어온 명령어 저장 및 해석
  • CPU가 제어장치로 주기억장치의 명령어를 가져오는 명령어를 주는 행위가 존재함. 즉, 주기억장치는 단순히 데이터 저장소만 가지고 있는 것이 아닌, 읽기/쓰기 신호를 처리하는 제어 회로가 있다. 메모리 내부에도 제어버스를 받아 동작하는 회로가 있고, 이 회로가 MAR 주소와 제어 신호를 받아 데이터를 읽거나 쓰는 역할을 한다. 읽을 땐 MBR에 저장을 해줌 데이터 버스를 통해

[ 누산기 AC, Accumulator ]

  • 데이터나 연산 결과를 일시적으로 저장하는 레지스터이다.

[ 기억장치 버퍼 레지스터 MBR, Memory Buffer Register ]

  • 기억장치에 저장될 또는 기억장치에서 읽어온 데이터를 임시로 저장하는 레지스터이다.
  • 데이터 버스를 통해 메모리와 데이터를 주고 받는 역할을 함.

[ 기억장치 주소 레지스터 MAR, Memory Address Register ]

  • 현재 PC(Program counter) 내용을 시스템 버스의 주소 버스로 출력하기 전에 일시적으로 저장해주는 레지스터
  • PC: 다음에 수행될 명령어가 저장되어 있는 기억장소의 주소를 저장하는 레지스터로 볼 수 있음.

(3) 처리장치

  • 처리장치란 연산장치 + 레지스터 를 묶어서 일컫는 표현으로 사용이 된다.
  • 모든 기능은 비트 패턴으로 구성된 마이크로 연산으로 구현이 된다.
  • 마이크로 연산: CPU 내부에서 레지스터나 ALU, 버스 등에서 일어나는 아주 작은 단위의 연산을 의미한다.
  • 쉽게말해, 한 단계의 데이터 이동이나 연산을 의미하는 것임. 하나의 연산 단위를 마이크로 연산 단위로 볼 수 있음.

[ 시프트 연산 ]

  • 모든 비트들을 왼쪽으로 한 칸씩 이동 하느냐 오른쪽으로 한 칸씩 이동하느냐 하는 연산임.
  • 결과적으로는 왼쪽 시프트를 하면 이진수의 값이 2곱셈이 되고, 반대로 오른쪽으로 하면 2나눗셈 연산이 됨.

(4) 제어단어

  • 상세한 수준의 마이크로 연산의 결정 즉, 어떤 마이크로 연산이 필요할지 결정을 하고 나면 마이크로 연산을 처리장치에 직접 다루기 위해서는 제어단어가 필요함.
  • 각 비트들이 처리장치의 논리회로 내의 각종 MUX(멀티플렉서)와 디코더의 선택 제어선으로 연결되어 하드웨어를 회로 수준에서 직접적으로 통제하기 위해서 필요한 것이 제어단어로 볼 수 있다.
  • 각 마이크로 연산은 제어단어와 일대일 매핑이 되어있다.
  • 쉽게말해, 제어단어는 CPU 내부에서 ALU, 레지스터, 시프트 장치 등 다양한 하드웨어 요소를 제어하기 위해 만들어진 이진수 단어로 볼 수 있다. 또한, 제어장치가 제어단어를 읽고 해석해서 CPU 내부의 장치들을 정확히 동작 시킬 수 있도록 도와줌.
  • 또한, 처리장치는 연산장치 + 레지스터 의 묶음으로 제어를 당하는 입장으로 보면 됨.
  • 결론은, CPU를 설계하려면 각 명령어에 대응하는 제어단어를 미리 정의해야 하며, 제어단어의 이진 신호에 따라 제어장치가 ALU와 레지스터 등 내부 회로를 정확히 동작시키도록 내부적으로 논리 회로를 설계해야 한다.

  • 16비트 제어단어를 예시로 들면, R0 = R1 + R2 의 마이크로 연산을 한다고 가정을 하면 R1(010) , R2(011), R0(000), +(0001), 시프트안함(000) 이 되기 때문에 제어단어는 0100110000001000 의 이진수가 될 것이다.
  • 즉, 마이크로 연산과 제어단어는 이렇게 1:1 대응이 된다.
  • 처리장치에서 입력으로 받아들여서 하드웨어를 회로 수준에서 제어를 할 수 있게 된다.
  • 결론은 모든 명령은 제어단어 형태로 제어기억장치에 저장 되어있는 형태가 될 것이다.
  • 즉, 제어단어와 1:1 매핑이므로, 마이크로 연산을 수행하는 결과가 되는 것이다.

(5) 처리장치의 구성

  • 위의 16비트 제어단어의 처리장치 구성 모습이다.
  • # 처리장치 자체는 연산장치 + 레지스터로만 이루어져 있기 때문에 제어는 외부에서 해주게 된다.
  • (1) 위의 디코더에 의해서 레지스터에 R1과 R2에는 이미 쓰기가 되어있는 형태이다. 즉, 값이 레지스터에 들어가있음.
  • (2) 이후, 입력선택1,2 를 통해 MUX1,2 에 R1과 R2의 이진수 주소값을 넣게 되면, R1과 R2의 MUX 연결선이 활성화가 된다.
  • (2) 즉, 해당 R1,R2 MUX 연결선만 파이프처럼 열리기 때문에 두 개의 레지스터 값이 들어오게 된다.
  • (3) 이후 산술논리연산장치에 무슨 연산을 할 것 인지 제어신호를 쏘게 되는데 여기선 더하기 연산이 될 것이다.
  • (4) 이후 시프트 선택이 될텐데, 여기선 없는 것으로 되어있으므로 그냥 넘어가게 된다.
  • (5) 시프트 연산이 없는 더하기 연산만 된 데이터가 레지스터 쓰기 연산의 의해 R0 에 데이터가 들어가게 된다.
  • 정리하면, R1,R2 레지스터에 들어가있는 값이 입력 선택 신호로 인해 MUX가 판단을 해줘 산술 논리연산장치로 들어가게 되며, 거기서 연산이 된다. 즉, 정수,실수 등의 이진수 데이터가 산술논리연산장치 내부의 가산기를 통해 계산이 되어서 출력이 되는 원리로 볼 수 있음.
  • 결론은 하나의 산술논리연산이 이러한 과정을 통해 처리가 되는 것이다.
  • 하나의 명령어가 아닌 연속된 여러 명령어들을 순차적으로 어떤식으로 처리를 할까? 의문이 들게 됨 이건 제어장치가 해줌.

(6) 제어장치

  • 메모리에 저장된 명령을 어떻게 순차적으로 가져와서 수행할 것인가를 통제하는 것을 해줌.
  • 이러한 제어장치에는 두 가지 기본적인 기능을 가지고 있음.
  • [1] 처리장치를 구동해서 특정 연산을 수행한 후 처리장치 내의 레지스터 값을 갱신하고 연산 결과를 출력하는 기능
  • [2] 현재 주어진 명령을 수행한 후 다음에 수행할 명령의 주소 정보를 생성하는 기능이 있음.

[ 명령어 사이클 ]

  • 인출: 주기억장치로 부터 수행할 명령어를 가지고 오는 과정
  • 해독: 가지고온 명령어에 대응하는 마이크로연산을 찾는 과정
  • 실행: 해독 된 명령을 산술논리연산장치에 넣어 수행을 시키게 됨. 즉, 연산을 처리하게 되는데 이걸 실행이라함.
  • 저장: 다시 레지스터에 쓰고 주기억장치에 저장하는것을 저장이라함.
  • 이러한 명령어 사이클이 존재함.

(7) 제어장치의 구성 요소

[ 프로그램 카운터 - PC, Program Counter ]

  • 다음에 수행될 명령어가 저장되어 있는 주기억장치의 주소를 저장하고 있는 곳을 의미함.

[ 명령어 레지스터 - IR, Instruction Register ]

  • 주기억장치에서 인출되어 현재 실행 중인 명령어를 저장하는 레지스터를 의미함.
  • 쉽게말해, 주기억장치에서 명령어를 가지오는 과정을 인출이라 하며, 이 인출 된 명령어를 저장하고 있는 레지스터를 의미함.

[ 제어기억장치 - control memory ]

  • 마이크로 연산의 집합을 저장하고 있는 기억장치이다. ( ROM 으로 구현이 되어있음 )
  • 마이크로명령어: 명령어 사이클의 각 주기에서 실행되는 마이크로연산들에 대응되는 비트들로 이루어진 단어이다.
  • 마이크로프로그램: 마이크로명령어들의 집합을 의미한다.
  • 저러한 마이크로프로그램이 저장되어 있는 곳이 제어기억장치이다.
  • 이미지를 보면 ADD R1, R2 명령어를 제어기억장치한테 던져주게 되면 ALU:ADD, R1 읽기, R2 읽기, 결과 R1 쓰기, 버스:ALU→R1 와 같은 제어단어를 받게 되고, 이것을 통해 CPU의 제어장치가 각 하드웨어에 명령을 내릴 수 있게 됨.

[ 명령어 해독기 ]

  • 주어진 명령어를 제어기억장치의 해당 마이크로 명령이 시작하는 주소로 매핑해 주는 것의 역할을 함.
  • 즉, 명령어 해독기는 제어기억장치에서 어떤 제어단어를 읽어야 하는지 주소를 선택하는 역할을 하는것임.
  • 쉽게말해, 명령어를 보고 CM 주소를 결정하고, CM에서 해당 주소의 제어단어를 읽어 CPU 내부에 보내도록 하는 구조임.
  • 또한, 명령어 해독기를 통해 버스, 레지스터, ALU에 신호가 전달되어 명령어가 실행이 될 수 있음.
  • 명령어(IR에 저장된)를 읽고 명령어의 opcode를 확인을 함.
  • 이후, 해당 opcode에 맞는 제어기억장치(CMU) 주소를 선택 후 제어기억장치에 요청을 함
  • 제어기억장치에서 제어단어를 출력 해줌.
  • 이후, 회로상에서 제어단어에 맞게 처리가 됨. 즉, ALU/레지스터/버스 동작 등이 처리가 되는 것임.

[ 주소 결정회로 ]

  • 명령어에 포함된 주소 정보, 제어단어와 연결된 주소 정보, 처리장치 구동 후 결과로 나오는 상태 비트 등으로부터 제어기억장치의 다음 수행할 마이크로 명령의 주소를 생성해주는 것이 바로 주소 결정회로이다.

[ 제어기억장치 주소 레지스터 CMAR ]

  • 제어기억장치에서 다음에 수행할 마이크로 명령의 위치를 가리키는 주소 저장되는 곳

[ 제어기억장치 데이터 레지스터 CMDR ] 

  • 제어기억장치에서 가져온 다음 수행할 마이크로 연산 저장
  • CMDR 없이 제어기억장치의 출력이 직접 다른 장치들로 연결

(8) 제어장치의 구성

제어장치

  • PC(program counter): 다음에 수행 될 명령어가 주기억장치 어디에 저장되어 있는지 그 주소를 저장하고 있는 곳임.
  • - 세부적으로는 PC가 가지고 있는 주소값을 MAR 레지스터에 넣은 뒤 주소 버스로 출력을 하는 과정이 존재함.
  • IR: PC가 가리키는 주기억장치의 명령어를 가져와 인출 한 뒤 저장하는 곳을 의미한다. ( 명령어 레지스터이다. )
  • - 세부적으로는 MBR 레지스터에 데이터가 담긴 뒤 IR로 이동을 하게 된다. ( 버스와 직접 연결되어있음 MBR은 )
  • (1) PC가 가리키는 메모리로 간다. 주소를 찾아가는 느낌이며, 가게 되면 명령어가 존재함. ( PC -> MAR -> RAM )
  • (2) 명령어를 가져와 IR에 저장을 하게 된다. ( 세부적으로 RAM -> MBR -> IR )
  • (3) 명령어 해독 -> 제어기억장치에서 어디서 시작을 하는지에 대한 주소를 찾아서 CMAR 에 넣게 된다.
  • (4) 이후 CMDR 에 제어기억장치의 제어 단어를 가져와 CMDR 에 저장하게 된다.
  • (5) 이후 규격에 맞는 제어단어가 들어올 시 해당 제어단어를 처리장치에 넣게 되면서 데이터가 출력이 되는 구조이다.
  • 최종적으로는 이러한 사이클이 끝나면 PC 가 +1 씩 증가를 하게 된다. 즉, 다음 명령어의 주소를 증가시키는 느낌임.

처리장치


✅ 3. 입출력장치 및 병렬처리

(1) 기본 입출력 시스템의 구성도

  • 기본적으로 입출력장치는 중앙처리장치와 바로 연결이 될 수 없음. 이유는 구성이 다르기 때문임
  • 그래서 입출력장치 제어기, 입출력장치 인터페이스 등을 통해서 규격을 맞춘 뒤 입출력 버스를 통해서 입출력을 하게 됨.

(2) 입출력 시스템의 기본 구성요소

[ 입출력장치 ]

  • 사용자와 컴퓨터 시스템을 연결해 주는 장치 ( 키보드, 마우스, 모니터, 프린터, 디스크 등 )

[ 입출력장치 제어기 ]

  • 상이한 기계적/전자적 특성을 가진 입출력장치를 물리적/전자적으로 제어해서 구동시키는 작업을 수행
  • 쉽게말해, 입출력장치마다 기계적/전자적 특성이 다르고 컴퓨터와 연결하는 방식도 다 틀리기 때문에 서로 다른 특성을 가지는 이러한 장치들을 물리적 또는 전자적으로 제어해서 구동을 시키는 작업을 수행하는 기기가 입출력장치 제어기이다.
  • 모터 회전, 헤드 이동, 입출력 매체의 위치 정렬 등의 작업을 수행을 하는 것을 입출력장치 제어기로 볼 수 있음.
  • 제어기가 입출력장치에 포함된 경우 및 하나의 제어기로 여러 입출력장치를 제어하는 경우도 존재함.

[ 입출력장치 인터페이스 ]

  • 입출력장치와 중앙처리장치/주기억장치 사이의 데이터 전송 속도, 데이터 처리 단위, 오류 확률의 차이를 상쇄해서 올바른 전송을 위한 방법을 제공해주는 것이 입출력장치 인터페이스로 볼 수 있다.

[ 입출력 버스 ]

  • 입출력 전용으로 사용되는 정보 회선의 묶음으로 볼 수 있다.
  • 입출력장치와 중앙처리장치 사이의 정보 교환에 사용이 된다.
  • 여러 입출력장치가 하나의 버스를 사용 할 수 있기 때문에 여러 장치에 의한 버스 사용 충돌을 막기 위한 중재기가 필요함.

(3) 입출력 제어 방식

  • CPU 주기억장치 입출력장치 사이에서 어떻게 정보가 오가는지 알아 볼 것이다.

[ 프로그램에 의한 방식 ]

  • 제일 간단한 방식이지만 CPU가 주기적으로 입출력장치에 신호를 보내기 때문에 CPU가 낭비가 되는 단점이 있음.

[ 인터럽트에 의한 방식 ]

  • CPU 가 일하고 있을 때 입출력 요청이 있을 때 인터럽트를 보내 CPU를 점유하는 방식임.
  • CPU가 중간에 멈추고 해당 장치와 연결되어 연락하는 느낌임.

[ DMA 방식 ]

  • 입출력장치가 주기억장치와 직접 연결되어 있는 방식임.
  • CPU는 두 장치 간의 초기 설정 및 허가에만 관여함
  • 실제 직접적인 정보의 지동은 장치간에 DMA 제어기가 해결을 해줌.
  • DMA 제어기가 입출력을 원할 때 CPU 에게 주기억장치 사이클을 요청 하게 되고, CPU가 하던일을 마치고 요청한 주기억장치 사이클에 대해서 허용해주고 주소버스나 데이터버스를 사용 할 수 있는 권한을 DMA 제어기에게 넘겨주게 된다.
  • 이걸 가지고 이제 입출력을 하게 된다. 이후, 입출력이 완료되면 CPU 에게 인터럽트를 걸어서 받은 모든 권한을 다시 반납을 하는 방식이다.

(4) 병렬처리

[ 파이프라인 처리기 ]

  • 프로그램 내에 내재하고 있는 시간적 병렬성을 활용하는 방법이다.
  • 즉, CPU 내의 하드웨어 요소를 파이프라인 형태로 구성하여 프로그램 수행에 필요한 작업을 시간적으로 중첩하여 수행시키는 처리기를 의미한다.
  • 하나의 연산을 서로 다른 기능을 가진 여러 개의 단계(세그먼트)로 분할하여, 각 단계가 동시에 서로 다른 데이터를 취급하도록 한다.
  • 현재 명령의 특정 단계가 끝나고 다음 단계로 넘어가면 바로 다른 명령을 불러들여서 해당 단계를 동시에 처리하는 방식임.
  • 연달아 수행될 명령어들은 서로 간의 간섭이 없어야 함.

  • 명령어 수준에서 병렬처리가 가능하게 해주는 그러한 방법으로 보면 될듯...

[ 멀티코어 구조 ]

  • 하나의 CPU에 2개 이상의 코어를 넣어서 동시에 여러 개의 명령어를 처리할 수 있는 구조이다.
  • 코어: CPU의 일부분으로 명령을 가져와 수행하는 주회로
  • 각 코어는 수행 중인 응용 프로그램의 프로세스나 스레드를 하나씩 담당한다.

[ GPGPU General Purposecomputing onGraphicsProcessing Unit ]

  • 그래픽스 처리장치를 사용한 범용 연산이다.
  • 그래픽 카드의 고도의 벙렬처리 능력을 연산에 사용하는 기술이다.

'방송통신대학교 > 💻컴퓨터과학 개론' 카테고리의 다른 글

[컴퓨터과학 개론] 12강 - 프로그래밍 언어(2)  (0) 2025.11.10
[컴퓨터과학 개론] 11강 - 프로그래밍 언어(1)  (0) 2025.11.10
[컴퓨터과학 개론] 9강 - 컴퓨터 구조(1)  (0) 2025.11.10
[컴퓨터과학 개론] 8강 - 운영체제(2)  (9) 2025.11.10
[컴퓨터과학 개론] 7강 - 운영체제(1)  (2) 2025.11.10
'방송통신대학교/💻컴퓨터과학 개론' 카테고리의 다른 글
  • [컴퓨터과학 개론] 12강 - 프로그래밍 언어(2)
  • [컴퓨터과학 개론] 11강 - 프로그래밍 언어(1)
  • [컴퓨터과학 개론] 9강 - 컴퓨터 구조(1)
  • [컴퓨터과학 개론] 8강 - 운영체제(2)
junbin2
junbin2
java.lang.NullPointerException
  • junbin2
    bin's Development Diary
    junbin2
  • 전체
    오늘
    어제
    • 전체보기 (233)
      • 방송통신대학교 (87)
        • ⚙️컴퓨터의 이해 (11)
        • 💻컴퓨터과학 개론 (15)
        • 🔢자료구조 (14)
        • 🧬알고리즘 (10)
        • ⚙️운영체제 (14)
        • 🕸️이산수학 (11)
        • 🌍유비쿼터스 컴퓨팅 (11)
        • 🖥️컴퓨터과학과 (1)
      • 공부 (72)
        • 📚백엔드 공부 (6)
        • ☕Java (23)
        • 🌳Spring (13)
        • ⚙️C (12)
        • ⚡Python (15)
        • JavaScript (1)
        • 🛢️Database (0)
        • Algorithm Problem Solving (2)
      • 네트워크 (7)
        • 📜HTTP (7)
      • 스파르타코딩클럽 (64)
      • 정보 (2)
      • 정리가 필요한 글 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GitHub
  • 공지사항

  • 인기 글

  • 태그

    Python
    컴퓨터의 이해
    Java
    유비쿼터스
    방통대
    방송통신대학교
    운영체제
    C언어
    spring
    그래프
    이산수학
    자료구조
    컴퓨터과학과
    알고리즘
    컴퓨터과학 개론
    자바
    함수
    파이썬
    방송대
    배열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
junbin2
[컴퓨터과학 개론] 10강 - 컴퓨터 구조(2)
상단으로

티스토리툴바