본문 바로가기

CS/컴퓨터구조

[컴퓨터구조] 컴퓨터의 기능

현재 글은 컴퓨터 구조와 아키텍처 서적 및 대학에서 들은 강의를 기반으로 한다.


컴퓨터의 컴포넌트들

폰 노이만 아키텍처

 현대 컴퓨터는 폰 노이만 아키텍처를 따른다. 특징은 다음과 같다.

  • 데이터와 명령(instruction)이 구분되지 않고 하나의 메모리 안에 저장된다.
  • 메모리의 내용은 데이터의 유형과 관계 없이 위치 별 주소 지정이 가능하다.
  • 명령어는 기본적으로 명시된 순서에 따라 순차적으로 실행된다. ( JMP, superscalar machine 등은 예외 )
Dataflow Machine

 과거에 폰 노이만 아키텍처에 있는 병렬성의 한계를 벗어나기 위해 데이터 중심 + 비결정적으로 동작하는 dataflow machine이 연구되었다. dataflow machine은 data availity을 만족하는 데이터가 정의되는 순서대로 명령을 실행하는 아키텍처로, 결정적 모델인 폰 노이만 아키텍처보다 병렬 처리 측면의 성능이 우세할 것으로 간주되었다. 다만 당시 폰 노이만 아키텍처 기반의 CPU 개발 속도가 매우 빨라서 하드웨어 자원이 부족해서 발생하는 문제의 경우 몇 년을 기다려 다음 세데 CPU를 사용하면 해결됬다는 점, dataflow machine에 기대한 기능이 생각보다 아쉬웠다는 점에 있어서 폰 노이만 구조를 이기지는 못했다고 한다. 

 하드웨어 vs 소프트웨어 접근법

 현대 사용하는 다목적 컴퓨터는 소프트웨어적 접근법을 따른다.

하드웨어에 직접 프로그래밍하는 방식의 경우 메모리에 저장된 내용을 해석할 필요 없이 바로 실행하면 되므로, 소프트웨어적 접근법에 비해 속도가 매우 빠르다. 그러나 기능을 변경하고 싶거나, 다른 프로그램을 이용하고 싶은 경우 관련된 칩들을 바꿔 끼워야 하기 때문에 범용성이 거의 없다. 현재 임베디드 분야처럼 기능 변화가 거의 없는 영역에서 사용된다.

 소프트웨어적 접근법은 메모리에 저장된 명령을 컴파일러를 통해 해석해야 하므로 하드웨어적 방법에 비해 속도가 느리다. 대신 기능의 변경이나 타 프로그램의 이용이 필요한 경우 메모리 상의 코드를 수정하기만 하면 되기 때문에 범용성이 하드웨어적 방법에 비해 매우 뛰어나다.


컴퓨터의 대략적인 구조

  • CPU
    • instruction을 해석한다.
    • 범용 산수 / 논리 기능 관련 모듈을 가지고 있다.
    • MAR(Memory Address Register) : 다음 읽거나 쓸 메모리 주소 명시
    • MBR(Memory Buffer Register) : 메모리에 적을 데이터를 보관하거나, 메모리의 데이터를 읽어들임
    • I/OAR(I/O Address Register) : 각각의 I/O 기기들을 식별
    • I/OBR(I/O Bufffer Register) : I/O 모듈과 CPU 사이에서 데이터 교환에 이용
  • Memory
    • 순차적인 주소 공간을 가지고 있으며, 각각의 위치에 있는 데이터들은 instruction 혹은 데이터로 해석된다.
  • Devices
    • CPU와 메모리를 제외한 부가 장치들. I/O 등의 역할을 수행.
    • I/O 모듈은 CPU와 메모리 및 외부 장치 사이에서 데이터를 전송하는 기능을 수행하며, 자체적인 버퍼가 있다.

컴퓨터의 기능(Function)

  컴퓨터의 가장 기본적인 기능은 메모리에 저장된 instruction 들을 읽어 프로그램을 실행하는 것이다. 프로세서는 프로그램의 instruction을 읽어 들인 후(fetch), 각각의 명령을 순서대로 실행한다(execute). 명령을 모두 실행하면 종료한다.

Basic Instruction Cycle

Instruction Fetch & Execute

 위 과정을 좀 더 구체적으로 보면 다음과 같다.

Instruction Cycle State Diagram

  • 프로그램 카운터에 기록된 주소를 기반으로 한 워드(데이터 단위)를 읽어온다.
  • 읽어온 데이터를 자리 별로 분해 및 해석한다.
  • instruction 부분을 디코딩한다.
  • 디코딩한 instruction 의 operand 부분의 주소를 연산한다.
  • 연산한 주소를 기반으로 operand을 가져온다.
  • 가져온 데이터를 이용하여 연산을 수행한다.
  • 수행 결과를 메모리 혹은 I/O 장치로 출력한다.
  • 다음 instruction 을 실행하거나, 전부 마치고 종료.

실제 과정은 데이터를 병렬적으로 처리하는지, 추가적으로 고려할 사항이 있는지 등의 요소 등에 의해 변할 수 있다. 현재 위에 적어 둔 과정 역시 그림과 완전히 일치하지는 않으며, 대략적인 처리 과정을 열거했을 뿐이다. 만약 컴퓨터 내에서 위와 같은 과정이 처리되는 자세한 사항이 궁금하다면 마노의 컴퓨터시스템구조 책을 읽어보자.

Interrupt

 프로세서의 사용 효율을 높이거나 예상치 못한 상황에 대비하기 위해 현재 실행 중인 프로세스를 잠시 중단하고 다른 프로세스를 실행해야 할 때가 있다. 이런 경우를 위해 interrupt가 존재하며, 목적을 다음과 같이 분류될 수 있다.

상황 주체 설명
Program 명령어 실행 중
특정 조건에서 발생하는 문제들
arithmetic overflow
division by zero
illegal instruction 실행
허용 범위 이외의 메모리 영역 참조
Timer 프로세서 내의 타이머 OS의 특정 기능 지원에 사용됨
I/O I/O 컨트롤러 동작 완료 신호
프로세서에게 서비스 요청
다양한 에러 컨디션 신호
Hardware Failure 기계 레벨의 오류 power failure
memory parity error ( 전송 오류 )

인터럽트가 추가된 모델은 다음과 같다. 인터럽트 체크 과정이 추가된 것이 특징이다.

Instruction Cycle State Diagram with Interrupts

I/O Function

일반적인 I/O 방식. CPU을 거쳐야 함

 컴퓨터의 I/O 는 일반적으로 CPU의 I/O instruction 에 의해 발생한다. 외부에 대한 입출력은 CPU을 경유하는 구조로 되어 있어 해당 작업이 빈번한 경우 CPU의 부담이 커질 수 있다는 애로사항이 있다. 이 경우 메모리에서 I/O 모듈 사이로 바로 데이터가 이동할 수 있도록 구현된다면 상당한 성능 향상이 있을 것이다.

DMA

 DMA(Direct Memory Access)은 I/O 작업과 관련된 권한은 메모리 영역에 맞겨 입출력 과정을 프로세서의 개입 없이 바로 수행하기 위한 기술로, 메모리와 I/O 디바이스 간 직접 정보 전달이 가능하여 CPU 역할이 분산되며 입출력이 많은 작업에 대해 성능 향상을 가져올 수 있다.