909 Devlog

[컴퓨터 구조] - 컴퓨터 시스템 개요 본문

Computer Science/컴퓨터 구조

[컴퓨터 구조] - 컴퓨터 시스템 개요

구공구 2023. 10. 5. 03:03
728x90

👋 본 글은 "컴퓨터 구조론" 책을 읽고 요약, 정리한 글입니다.


책 구매 링크에서 책을 확인하실 수 있습니다.

 

1장에서는 컴퓨터의 기본 구조와 동작 원리에 대하여 설명하고, CPU와 기억장치 및 I / O 장치들을 포함한 전체 컴퓨터 시스템의 구성 방법에 대하여 개괄적으로 설명한 다음에, 모바일용 소형 컴퓨터부터 슈퍼컴퓨터에 이르기까지 각종 컴퓨터 분류들에 대한 최근 발전 동향에 대하여 살펴봅니다.

 

컴퓨터 시스템은 기본적으로 하드웨어와 시스템 소프트웨어로 구성된다.

  • 하드웨어 : 컴퓨터 정보들의 전송 통로를 제공해 주고, 그 정보에 대한 처리가 실제 일어나게 해주는 물리적인 실체들
    • 메인 보드, CPU, 메모리, 저장장치 등
  • 소프트웨어 : 정보들이 이동하는 방향과 정보 처리의 종류를 지정해 주고, 그러한 동작들이 일어나는 시간을 지정해 주는 명령들의 집합
    • 시스템 소프트웨어 (운영체제 (윈도우, IOS, 안드로이드 등))
    • 응용 소프트웨어(대부분의 프로그램 (크롬, VSCode, 카카오톡 등))

⭐ 소프트웨어는 하드웨어에 의존적이다

➡️ 컴퓨터의 기본적인 능력(기능, 속도)들은 하드웨어에 달려있으며, 소프트웨어의 수준에 따라 하드웨어의 효율이 향상되거나 편리하게 사용가능

 

🎯 1. 컴퓨터의 기본 구조


컴퓨터는 프로그램 코드를 정해진 순서대로 실행(execute)하는 과정에서 필요한 데이터를 읽어서(read), 처리하고(processing), 결과를 저장(store)한다.

 

이러한 기능들을 수행하는 컴퓨터 하드웨어는 아래 그림과 같이 여러 요소들이 상호 연결되어 구성된다.

중앙처리장치(Central Processing Unit : CPU) : 프로그램 실행과 데이터 처리를 담당하는 핵심요소

  • 프로그램 실행과 데이터 처리라는 중추적인 기능의 수행을 담당
  • 컴퓨터의 특성과 성능에 가장 큰 영향을 미치는 구성요소
  • CPU가 한 번에 처리하는 데이터의 길이(비트 수)에 따라 8-비트, 32-비트, 64-비트 컴퓨터로 분류됨
  • 컴퓨터의 이론적인 처리 속도는 CPU의 성능에 의해 결정(실제 속도는 시스템 내 다른 요소들의 영향을 받음)

CPU가 처리할 프로그램 코드와 데이터는 기억장치(memory)에 저장되는데, 기억장치는 특성과 속도 및 용도에 따라 주기억장치와 보조저장장치로 나누어짐

  • 주기억장치 : 액세스 속도가 높지만, 프로그램 실행 중에만 사용될 수 있는 일시적 기억장치
    • 메인 보드 상에서 CPU 가까이 위치
    • 반도체 기억장치 칩들로 이루어져 고속의 읽기 및 쓰기가 가능
    • 가격이 높고 면적을 많이차지하여 저장 용량에 한계
    • 영구 저장 능력이 없으므로 프로그램 실행 중에만 일시적으로 사용
  • 보조저장장치 : 속도는 느리지만, 영구저장능력을 가진 보조적 기억장치
    • 하드 디스크(HDD)나 SSD과 같이 영구 저장 능력을 가진 기억장치들을 말함
    • 저장 밀도가 높고, 비트당 가격이 저렴
    • 기계적인 장치가 포함되거나 쓰기 동작이 복잡한 반도체 칩들을 이용하기 때문에 속도가 느림
    • 보조저장장치들은 CPU가 직접 액세스(읽기 / 쓰기) 하지 못하고, 별도의 제어기를 통해서만 가능

입출력장치(I / O Devices) : 사용자와 컴퓨터 간의 상호작용을 위한 장치

  • 입력장치와 출력장치를 통칭하는 용어 (키보드, 마우스, 모니터 등)
  • CPU와 직접 데이터를 교환할 수 없어 별도의 제어기가 CPU로부터 명령을 받아 장치의 동작을 제어하고 데이터를 이동시킴

보조저장장치와 입출력장치와 같이 CPU가 직접 액세스 할 수 없고, 별도의 제어기를 통해 액세스 가능한 장치들을 주변장치라고 부름

🎯 2. 정보의 표현과 저장


컴퓨터가 받아들이고 처리하는 정보의 종류는 프로그램 코드와 데이터가 있음, 

디지털 컴퓨터에서 이러한 정보들은 모두 2진수를 나타내는 비트(bit)들의 조합으로 표현

 

프로그램 코드를 표현하는 방법들로는 아래 3가지가 있음

  • 기계어
    • 기계 코드라고도 함
    • 컴퓨터 하드웨어 부품들이 이해할 수 있는 언어로서, 2진 비트들로 구성
    • CPU마다 서로 다름
  • 어셈블리 언어
    • 고급 언어와 기계어 사이의 중간 언어
    • 어셈블러로 번역시 기계어와 일대일 대응
    • CPU마다 서로 다름
    • 어셈블리 언어로 작성된 프로그램을 어셈블리 프로그램이라 함
  • 고급 언어
    • 사람들이 이해하기 쉽지만 컴퓨터 하드웨어는 전혀 이해할 수 없음
    • 컴파일러라고 부르는 소프트웨어를 통해 하드웨어가 이해할 수 있는 기계어로 번역됨
    • 어느 컴퓨터에서 사용되든 거의 동일

아래 그림과 같이 프로그래머가 고급 언어로 프로그래밍을 하면, 컴파일러롤 통해 어셈블리어로 변환되고, 어셈블러를 통해 다시 기계어로 변환되어 컴퓨터 하드웨어가 이해하게 됨

고급 언어 프로그램 어셈블리 프로그램 기계어 프로그램
Z = X + Y LOAD A, X : 기억장치 X번지의 내용을 레지스터 A에 적재 001 / 00101
  ADD A, Y : 기억장치 Y번지의 내용을 레지스터 A에 적재된 값과 더한 후 A에 적재 100 / 00110
  STOR Z, A : 레지스터 A의 내용을 기억장치 Z번지에 저장 010 / 00111

각 어셈블리 명렁어가 지정하는 연산을 나타내는 기호인 LOAD, ADD, STOR 등을 니모닉스(mnemonic)라 부름

 

명령어는 니모닉스 처럼 CPU가 수행해야 할 동작 외에도 A, X와 같이 처리할 데이터가 저장되어 있는 기억장치 주소나 레지스터 번호도 구체적으로 지정해 줌

 

LOAD A, X 명령어에 대한 기계어인 00100101은 다음 그림과 같이 연산코드와 오퍼랜드로 나누어진다

위 예시는 두 개의 필드들로 구성되는 것으로 가정했는데, 이와 같이 각 명령어에 들어갈 필드의 종류와 각 필드의 비트수에 대한 구성을 명령어 형식이라고 한다.

 

위 예시에서는 연산코드 필드와 오퍼랜드 필드가 있는데

연산코드 필드에 저장된 "001"은 "레지스터 A로 적재하라"는 연산을 지정하는 비트들이며

오퍼랜드 필드에 저장된 "00101"은 적재될 데이터가 저장되어 있는 기억장치의 주소를 가리킨다

2진수 101은 10진수로 5이므로 위 예시 명령어는 "기억장치 5번지의 내용을 읽어서 레지스터 A에 저장하라"는 명령을 나타내는 명령어이다.

 

명령어는 비트들의 개수와 용도 및 주소지정 방식에 따라 다양하게 구성되는데

위 예시처럼 연산 코드가 3비트로 이루어진다면 2³ = 8가지의 연산들을 지정할 수 있고

오퍼랜드의 비트수가 5이므로 최대 2⁵ = 32개의 주소를 지정할 수 있다.

 

번역된 기계어들은 아래 그림과 같이 기억장치에 순서대로 저장된다

각 기억 장소에 저장되는 데이터의 단위를 단어(word)라 부르는데 이는 CPU에 의해 한 번에 처리될 수 있는 비트들의 그룹을 의미한다.

단어의 길이는 CPU의 하드웨어 구조에 따라 8, 16, 32, 64비트 등으로 다양하지만 위 예에서는 단어가 8비트, 즉 한 바이트(byte) = 8bit인 것으로 가정하고 있다.

 

🎯 3. 시스템의 구성


📌 3 - 1. CPU와 기억장치의 접속

CPU와 시스템 내의 다른 요소들 간에 정보를 교환하는 통로인 시스템 버스는 아래 그림과 같이 세 가지의 하부 버스들로 이루어짐

  • 시스템 버스
    • 주소 버스
      • CPU가 외부로 발생하는 주소 정보를 전송하는 신호 선들의 집합
      • 각 주소선은 하나의 주소 비트를 전송하는 데 사용
      • 주소 선들의 개수가 CPU와 접속될 수 있는 최대 기억장치 용량을 결정
      • CPU가 발생하는 주소 비트들의 수를 주소 버스의 폭이라고 하는데, 그 폭이 16비트라면, 최대 2¹⁶ = 65,536 (64K)개 기억장소들의 주소를 지정할 수 있음
    • 데이터 버스
      • CPU가 기억장치 혹은 I / O 장치와의 데이터를 전송하기 위한 신호 선들의 집합
      • 데이터 버스의 폭은 한 번에 전송될 수 있는 데이터 비트의 수를 결정
      • 폭이 32비트(1단어 = 32비트)인 시스템에서는 CPU가 한 번에 32비트씩 읽어올 수 있음
    • 제어 버스
      • CPU가 시스탬 내의 각종 요소들의 동작을 제어하는 데 필요한 신호 선들의 집합
      • 제어 신호 선들의 수는 CPU, 시스템 구성에 따라 달라짐
      • 가장 기본적인 제어 신호들로는 기억장치 읽기 / 쓰기 신호와 I / O 읽기 / 쓰기 신호가 있음

주소는 CPU에 의해 발생되어 기억장치와 I / O 장치로 보내지는 단방향 정보이기 때문에

주소 버스는 단방향성이지만 데이터 버스와 제어 버스는 읽기와 쓰기 동작을 모두 지원해야 하므로 양방향성이다.

위 그림을 보면 주소 버스는 단방향 정보라는 것을 알 수 있다.

 

CPU가 기억장치에 데이터를 쓰거나, 저장된 내용을 읽는 동작을 액세스(access)라 한다

아래 그림은 CPU가 주소 버스, 데이터 버스 및 제어 신호 선들을 통하여 기억장치와 접속된 모습이다.

CPU가 데이터를 읽어올 경우에는 주소와 읽기 신호를 기억장치로 보내고,

CPU가 데이터를 쓸 경우에는 주소와 데이터 및 쓰기 신호를 기억장치에 보내주어야 한다.

따라서 CPU와 기억장치 사이에는 위와 같은 정보들의 전송 통로인 주소 버스, 데이터 버스 및 제어 신호 선들이 접속되어야 함

 

위와 같이 접속된 상태에서 CPU가 기억장치로 데이터를 쓰는 동작의 시간 흐름도를 보면 아래 그림과 같다

CPU는 데이터를 저장할 기억 장소의 주소와 저장할 데이터를 각각 주소 버스와 데이터 버스를 통하여 보내면서 동시에 쓰기 신호를 활성화시킴 (이 신호들은 모두 기억장치 쓰기 동작이 완료될 때까지 그대로 유지되어야 함)

CPU가 주소와 데이터를 보낸 순간부터 저장이 완료될 때까지의 시간을 기억장치 쓰기 시간이라고 한다.

 

CPU가 기억장치로부터 데이터를 읽는 동작의 시간 흐름도는 아래 그림과 같다

CPU는 데이터가 저장되어 있는 기억 장소의 주소를 주소 버스를 통하여 기억장치로 보내면서 동시에 읽기 신호를 활성화시킴

그러면 일정 지연 시간이 경과한 후에 기억장치로부터 읽혀진 데이터가 데이터 버스에 실리며 CPU는 그 데이터를 버스 인터페이스 회로를 통하여 읽어들임

여기서 일정 지연 시간은 주소를 해독하는 데 걸리는 시간 + 기억장치 내부에서 데이터를 인출하는 데 걸리는 시간임

CPU가 주소를 발생한 시간부터 읽기 동작이 완료될 때까지의 시간을 기억장치 읽기 시간이라 함

 

📌 3 - 2. CPU와 I/O장치의 접속

I / O 장치와 보조저장장치들은 CPU가 직접 제어하거나 액세스 하지 못하고 별도의 인터페이스 회로 혹은 제어기를 통해 CPU와 접속됨

 

CPU ➡️ 시스템 버스 ➡️ I / O 장치 제어기 ➡️ I / O 장치

여기서 장치 제어기는 CPU로부터 I / O 명령을 받아서, 해당 I / O 장치를 제어하고, 데이터를 이동함으로써 명령을 수행하는 전자 회로 장치

장치 제어기는 2개의 레지스터를 포함하는데

  • 상태 레지스터
    • I / O 장치의 현재 상태를 나타내는 비트들을 저장한 레지스터
    • 준비 상태 비트, 데이터 전송 확인 비트
  • 데이터 레지스터
    • CPU와 I / O 장치 간에 이동되는 데이터를 일시적으로 저장하는 레지스터
    • 데이터 버퍼라고도 부름

 

아래 그림은 키보드와 프린터가 각각 제어기를 통해 시스템 버스와 접속되는 경우이다

CPU가 데이터를 읽어 들이는 과정은 다음과 같다

  1. 키보드의 어느 한 키가 눌림
  2. 그에 대응되는 8-비트 (ASCII 코드 7비트 + 패리티 비트) 데이터가 키보드 제어기로 전송
  3. 전송된 데이터가 데이터 레지스터에 저장됨과 동시에 상태 레지스터의 지정된 비트가 세트 (입력 데이터가 준비되었다는 의미인 비트(예시 = In_RDY)가 활성화)
  4. CPU가 상태 레지스터를 읽어 들여서 In_RDY 비트가 활성화되었는지 검사
    • 활성화 상태(1)인 경우 : 즉시 데이터 레지스터의 내용을 CPU로 읽어 들임으로써 데이터 입력 과정 완료
    • 비활성화 상태(0)인 경우 : CPU가 상태 레지스터의 내용을 읽고 검사하는 동작을 반복하며 기다린다. (활성화될 때까지 반복)

CPU가 데이터를 프린트하는 과정은 다음과 같다

  1. 프린터 제어기 내의 상태 레지스터를 읽어서 Out_RDY가 활성화되었는지 검사
    • 활성화 상태(1)인 경우 : CPU는 프린트할 데이터를 프린터 제어기의 데이터 레지스터에 쓰고, 프린트 시작 신호를 보냄
    • 비활성화 상태(0)인 경우 : CPU는 Out_RDY를 반복해서 검사하면서 기다린다

보조저장장치들 또한 각 장치를 위한 제어기를 통해 위와 유사한 방법으로 접속되지만 데이터 전송 단위에 차이점이 있다

키보드, 프린터는 바이트(8 비트) 단위로 전송하고

보조저장장치는 블록(512, 1024, 4096 바이트) 단위로 전송된다.

 

따라서 보조저장장치의 제어기 내에는 적어도 한 블록 이상을 임시로 저장할 수 있는 데이터 버퍼가 필요하다

보조저장장치 제어기들 중에는 디스크 상의 한 트랙의 내용을 모두 저장할 수 있는 트랙 버퍼 혹은 그 이상의 용량인 디스크 버퍼를 가지고 있는 경우가 많다

 

CPU는 시스템에 접속되어 있는 I / O 장치들을 직접 제어하지는 않지만, 각 장치의 제어기가 수행할 동작을 지정하는 명령을 보내거나 상태 정보와 데이터를 주고받을 수 있어야 한다.

따라서 제어기 내에 있는 상태 레지스터와 데이터 레지스터를 각각 한 단어 길이의 기억장치로 간주하고 주소를 한 개씩 배정해서 그 레지스터들을 기억장치와 같은 방법으로 읽기 및 쓰기 동작을 수행한다.

 

📌 3 - 3. 전체 시스템의 구성

지금까지의 설명들을 종합하여 기본적인 구성 요소들을 모두 포함한 완전한 컴퓨터 시스템을 구성한 그림은 아래와 같다

  • 프로그램 실행 : CPU가 주기억장치로부터 프로그램 코드를 읽어서 실행
  • 데이터 저장 : 프로그램 실행 결과로써 얻어진 데이터를 주기억장치에 저장
  • 데이터 이동 : 디스크나 SSD에 저장되어 있는 프로그램과 데이터 블록을 주기억장치로 이동
  • 데이터 입력 및 출력 : 사용자가 키보드를 통하여 보내는 명령이나 데이터를 읽어 들임, 또한 CPU가 처리한 결과 값이나 기억장치의 내용을 프린터(혹은 모니터)로 출력
  • 제어 : 프로그램이 순서대로 실행되도록 혹은 필요에 따라 실행 순서를 변경하도록 조정하며 각종 제어 신호들을 발생

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


추후 정리 예정

📌 4 - 1. 초기 컴퓨터들의 구조

 

📌 4 - 2. 주요 컴퓨터 부품들의 발전 경위

 

📌 4 - 3. 컴퓨터 시스템의 분류와 발전 동향

 

 

 

 

 

728x90