## 목차 ##

  1. 컴퓨터의 기본구조
  2. 정보의 표현과 저장
  3. 시스템의 구성
  4. 컴퓨터 구조의 발전 과정


## 0. Intro ##

computer_system_architecture

컴퓨터 시스템

  • 프로그램 형태로 주어진 작업을 수행하는 주체로서 하드웨어(HW)와 소프트웨어(SW)로 구성

하드웨어

  • 전기적 신호들로 표현되는 정보를 전달하는 물리적 실체로 CPU, 메모리, 모니터, 네트워크 카드, 키보드 등으로 구성된다. 아래는 가장 중요한 핵심 모듈들이다.

    ** a) 메인보드(main board) **

    주요 IC칩, 메모리, 입출력(I/O)장치 슬롯들이 장착되는 회로 기판

    ** b) 중앙처리장치(CPU- Central Processing Unit) **

    명령의 실행 및 연산을 담당하는 컴퓨터의 핵심 부품으로 사람의 뇌에 해당

    ** c) 주기억 장치(Main Memory) **

    프로그램이 구동되면서 올라가는 메모리로 프로그램이 실행되기 위해 필요한 데이터들의 임시 저장소

    ** d) 입/출력 장치(Input/Output) **

    키보드, 마우스와 같이 정보의 입력과 출력을 담당하는 부품

소프트웨어

  • 컴퓨터가 실행해야 할 명령어들의 집합

소프트웨어는 하드웨어가 제공하는 기능들을 사용하여 프로그램을 실행한다. 그러나 소프트웨어의 설계 수준에 따라 하드웨어의 사용 효율이 달라지므로 HW와 SW는 상호 보완적인 존재이다.




## 1. 컴퓨터의 기본 구조 ##

컴퓨터는 프로그램(명령어 집합, 즉 코드)를 정해진 순서대로 처리하고 실행하는데 이 과정에서 읽기(read), 처리(process), 저장(store)가 발생하며 이 기능들은 아래 그림과 같은 구성요소에 의해 실행

program_execution

1) CPU

  • 명령어들을 직접 처리하는 유닛으로 컴퓨터 성능에 가장 큰 영향을 미치는 부품
  • 한 번에 처리하는 정보량에 따라 8비트, 32비트, 64비트 컴퓨터로 분류

2) 메모리

  • CPU가 처리할 프로그램의 명령어(코드)와 데이터(자료)가 저장되는 장소로 여기서는 메인 메모리(주기억장치)를 지칭
  • 고속의 읽기(Read)/쓰기(Write)
  • 프로그램 실행 중에 관련 데이터를 임시로 사용하는 용도로서 프로그램이 종료되면 데이터가 메모리에서 내려감
  • 보조 메모리(보조기억장치)는 하드디스크, SSD, CD-ROM과 같이 데이터를 영구적으로 저장하는 기억장치로서 메인 메모리보다 R/W 속도가 떨어지지만 가격이 저렴. 또한 메인 메모리처럼 CPU가 직접 접근하는 방식이 아닌 별도의 제어기를 사용

3) 입출력장치

  • 키보드와 마우스와 같은 입력장치와 모니터, 프린터, 스피커 같은 출력장치로 구성
  • CPU와 직접 데이터를 교환하지 않고 별도의 제어기를 사용하며 따라서 주변장치라고 불림




## 2. 정보의 표현과 저장 ##

  • 컴퓨터를 통해 이동하는 모든 정보(프로그램 코드, 데이터)는 2진수(binary number)의 형태로 저장되며 이러한 정보저장 단위를 비트(bit)라고 함
  • 응용프로그램이 고급 언어(C++, Java, Python과 같은 프로그래밍 언어)로 작성된 후 컴파일러에 의해 기계어(2진수의 나열)로 번역되고 컴퓨터가 기계어로 번역된 명령어들을 실행
  • 기계어는 CPU에 의존적이며 이는 CPU마다 내부 회로를 구성하는 소자들의 종류나 갯수, 연결방식 등이 다르기 때문
  • 고급언어와 기계어 사이에 어셈블리어(assembly language)를 두어 프로그래머가 작성한 코드가 CPU에 따라 다른 기계어로 번역된다. 어셈블리 언어를 기계어로 번역해주는 프로그램을 어셈블러(assembler)라고 한다

assembly

명령어 형식

위 그림에서 하나의 명령어는 8bit로 구성된다. 명령어는 CPU마다 다른 포맷을 가질 수 있다.

명령어 형식(instuction format)은 명령어의 비트 수, 용도 및 필드 구성방식을 지정해주는 형식으로 명령어 포맷이라 보면 된다.

instruction_field

a) 연산코드 필드 : 연산의 종류 결정
b) 오퍼랜드 : 기억장치 주소

위 그림의 예제는 아래 내용을 표현한다.

'001' -> 레지스터 A로 적재하라는 명령

'00101' -> 00101은 10진수로 5이므로 기억장치의 5번지를 가르킨다.

즉, 기억장치 5번지의 데이터를 레지스터 A에 적재하라는 내용이다. 위 예에서 연산코드는 3bit를 사용하므로 2^3 = 8 가지의 연산을 지정해줄 수 있으며 오퍼랜드는 5bit를 사용하므로 2^5 = 32 개의 메모리 번지를 지정할 수 있다.

컴퓨터 CPU는 이러한 기계어 코드를 순차적으로 한 줄씩 처리하며, 이 처리 단위를 워드(word)라고 부른다. CPU종류에따라 word는 8bit, 32bit, 64bit 등으로 다양하다. 위 예에서는 word는 8bit, 즉 1byte이다.




## 3. 시스템 구성 ##

시스템 버스(System Bus)

  • 시스템 버스는 CPU와 다른 모듈들 간의 정보 교환 통로이다.

system_bus

a) 주소 버스(Address Bus)
- CPU에서 연산 중 발생하는 주소정보를 외부로 전달하기 위한 신호선들의 집합(단방향성, uni-directional)
- 각 주소선은 하나의 주소 비트를 전달하며 주소선의 갯수를 주소 버스의 폭(width)라 부름
- 예를 들어 주소선이 16개라면 16bit(2^16 = 65,536개)의 주소지정 가능
- 주소선의 폭에따라 사용할 수 있는 메모리 번지의 갯수, 사용할 수 있는 기억장치의 크기가 결정됨

b) 데이터 버스(Data Bus)
- CPU와 메모리 사이의 데이터 교환(액세스, access라고도 함) 통로(양방향성, bi-directional)
- 한 번에 교환될 수 있는 데이터의 비트 수를 데이터선의 폭이라 부름
- 예를 들어 32bit 크기의 데이터버스는 한 번에 32bit, 즉 4byte 크기의 데이터 교환이 가능

c) 제어 버스(Control Bus)
- CPU가 시스템 모듈들의 동작을 제어하는데 필요한 신호선
- CPU와 주변장치들의 구성요소에 따라 제어버스의 폭이 결정
- 메모리 읽기/쓰기 혹은 모니터 출력, 키보드 입력 등의 명령/처리를 위해 사용


ex1) 메모리 데이터 읽기

데이터를 읽기 위해서는 주소 버스를 통해 불러들일 데이터가 저장된 메모리 번지 주소와 제어버스를 통해 읽기신호를 보내면 기억장치에서 데이터버스를 통해 해당 주소에 저장된 데이터를 CPU로 전송한다.

memory_read


ex2) 키보드 입력 읽기

키보드의 키가 눌리면 대응되는 아스키(ASCII)코드 8bit가 키보드 제어기의 데이터 레지스터(data register)에 저장되며, 동시에 상태 레지스터에 입력 준비(In_RDY) 비트가 SET 된다. CPU는 반복적으로 키보드 제어기의 상태 레지스터를 점검하는데 In_RDY 비트가 세트되어있는것을 확인하면 데이터 레지스터에 저장된 데이터를 가져간다.

keyboard_read


CPU는 여러 주변 장치들을 구분하기 위해 각 주변장치 제어기의 상태 레지스터와 데이터 레지스터를 기억장치로 간주하고 주소를 배정하는 방식을 사용한다.

정리하자면 프로그램을 실행시키면 프로그램 명령어들과 데이터들이 메인 메모리에 적재되고 CPU는 시스템 버스를 통해 명령어와 데이터들을 가져와 처리하고 실행 명령 및 결과물을 시스템 버스를 통해 메인메모리로 보내며, 이 과정에서 들어오는 입력과 출력들도 CPU와 I/O장치들 사이의 시스템버스를 통해 이동한다.




## 4. 컴퓨터 구조의 발전 과정 ##

초기의 기계식 컴퓨터, 진공관을 이용한 1세대 컴퓨터부터 반도체와 IC를 활용한 현재 컴퓨터 구조에 오기까지 수많은 혁신의 역사가 존재한다. 그러나 가장 중요하다고 생각되는 현대 컴퓨터가 대부분 따르는 기초 모델이 된 폰 노이만 컴퓨터 구조는 아래와 같다.

vonneumann_architecture

폰 노이만(Von Neumann) 구조의 설계 개념은 아래와 같다.

- 2진수 체계 사용
- 프로그램과 데이터를 내부에 저장

폰 노이만이 위 설계개념을 적용하여 만든 EDVAC은 1945년에 처음 발표하였고 이후 ISA를 개발하였는데, 이 ISA가 현대 일반목적용 컴퓨터들의 기본형이다. 위 그림이 바로 이 ISA컴퓨터의 기본 구조이다. 여기서 놀라운점은 주기억장치에서 한 번에 두 개의 명령어(워드)를 읽어와 하나는 실행하고 나머지 하나는 명령어 버퍼에 저장하였다가 다음 명렁어 실행 사이클에서 실행한다는 점이다. 명령어 인출을 위한 기억장치 액세스 시간을 단축시킨 선인출(instruction prefetch) 개념은 현대 컴퓨터들에서도 사용된다. 그리고 내부에 저장된 프로그램 명령어들은 순차적으로 실행이되는데, 실행해야 할 명령어 주소를 지정하는 PC 레지스터(Program Counter 레지스터)가 이 부분을 담당한다.

+ Recent posts