얼마전에 깨달은 바가 있어서 CS 공부를 깊게 시작해보려고 합니다.
먼저 컴퓨터 구조를 공부해 볼 생각이고 해당 교재를 사용했습니다.

오늘은 컴퓨터의 기본구조, 정보의 표현과 저장, 시스템의 구성에 대해 공부해 보았습니다.
1. 컴퓨터의 기본구조
1) 하드웨어와 소프트웨어
컴퓨터 시스템은 하드웨어와 시스템 소프트웨어로 구성됩니다.
시스템에 각종 응용 소프트웨어들이 탑재되어 사용자와 상호작용하면서 프로그램을 처리합니다.
프로그램 형태로 주어지는 작업(Job)을 수행하기 위해서 전기적 신호들을 가지고 새로운 정보를 생성해야 합니다.
이때 각종 정보의 전송통로를 제공하고, 정보에 대한 처리가 실제 일어나게 해주는 물리적인 실체들을 하드웨어라고 합니다.
하드웨어: 컴퓨터에서 정보를 처리하는 물리적 실체
하드웨어의 구성요소를 간단하게 알아보겠습니다.
- 메인보드: 주요 IC 칩들, 메모리 모듈, I/O 장치 인터페이스 슬릇 장착 기판
- CPU 및 GPU: 멀티코어 마이크로 프로세서 및 그래픽처리유니트 칩
- 주기억장치 모듈: 메모리 침 장착 보드 ex) DDR5, SDRAM
- 보조저장장치
- 하드디스크(HDD): 데이터 보조 저장 장치
- SSD: 플래시 메모리 칩들을 이용하여 구성한 대용량 저장장치 - I/O장치(입출력 장치): 키보드, 마우스, 모니터, 프린터 등등
- 확장보드 : 기능추가를 위하여 장착되는 보드 ex) 사운드카드
- 전원공급장치
소프트웨어는 정보들이 이동하는 방향과 정보 처리의 종류를 지정해주고, 그러한 동작들이 수행될 시간을 지정해주는 명령들의 집합입니다.
소프트웨어: 정보처리의 종류와 수행 시간을 지정해주는 명령들의 집합
소프트웨어는 하드웨어에 의존적이며, 하드웨어가 제공해주는 기능들을 이용하여 최종적인 결과를 얻을 수 있도록 도와줍니다.
따라서 컴퓨터의 정보처리 능력은 근본적으로 하드웨어에 달렸으며, 소프트웨어의 수준에 따라 하드웨어의 효율이 향상되거나 편리해집니다.
2) 기본 구조
컴퓨터 하드웨어는 상호 연결되어 구성되어있으며, 프로그램 코드들을 정해진 순서대로 실행합니다.
그 과정에서 필요한 데이터를 읽어서(read), 처리(processing)하고, 결과를 저장(store)합니다.
그 중에서도 중앙처리장치, 기억장치, 입출력장치에 대해 알아보겠습니다.

2.1) 중앙처리장치(CPU, processor)
중앙처리장치는 프로그램 실행과 데이터 처리라는 중추적인 기능의 수행을 담당합니다. 프로세서라고도 불리며, 사실상 컴퓨터의 특성과 성능에 가장 큰 영향을 미치는 구성요소 입니다. CPU가 한번에 처리하는 데이터의 길이(비트 수)에 따라 8-비트, 32-비트, 64-비트 컴퓨터로 분류됩니다. 컴퓨터의 이론적인 처리속도는 CPU의 성능에 의해 결정됩니다.
중앙처리장치(CPU): 프로그램 실행과 데이터 처리를 담당
2.2) 기억장치(memory)
기억장치는 CPU가 처리할 프로그램 코드와 데이터를 저장합니다. 기억장치는 특성과 속도 및 용도에 따라 주기억장치와 보조저장장치로 나누어집니다.
주기억장치(main memory)
메인 보드 상에서 CPU 가까이 위치하며, 반도체 기억장치 칩들로 이루어져 고속의 읽기 및 쓰기가 가능합니다.
단점으로는 가격이 높고 면적을 많아 차지하기 떄문에 저장 용량에 한계가 있습니다. 또한 영구 저장 능력이 없고 전원이 공급되는 동안에만 사용할 수 있는 기억장치 입니다.
주기억장치(main memory): 엑세스 속도가 높지만 프로그램 실행 중에만 사용될 수 있는 일시적 기억장치
보조저장장치(auxiliary storage device)
영구 저장 능력을 가진 기억장치입니다. 저장 밀도가 높고 비트당 가격이 저렴하지만, 기계적인 장치가 포함되거나 쓰기 동작이 복잡한 반도체 칩들을 이용하기 때문에 속도가 느립니다. 또한 CPU가 직접 액세스(읽기/쓰기) 하지 못하고 별도의 제어기를 통해서만 가능합니다.
보조저장장치(auxiliary storage device): 속도는 느리지만, 영구저장 능력을 가진 보조적 기억장치
ex) HDD, SSD
2.2) 입출력장치(I/O device)
입력장치와 출력장치를 통칭합니다. 키보드, 모니터, 프린터 등등이 있으며 CPU와 직접 데이터를 교환할 수 없습니다. 각 장치를 위한 별도의 제어기가 CPU로부터 명령을 받아서 장치의 동작을 제어하고 데이터를 이동시킵니다.
입출력장치(I/O device): 사용자와 컴퓨터간의 상호작용을 위한 장치
컴퓨터 하드웨어는 여러 요소들이 상호 연결되어 구성됩니다.
보조저장장치나 입출력장치와 같이 별도의 제어기를 통해 CPU 와 액세스 하는 장치를 주변장치라고 표현합니다.
여기서 시스템 버스는 CPU와 다른 요소들 간의 정보교환통로입니다.
2. 정보의 표현과 저장
컴퓨터가 처리하는 정보의 종류는 프로그램 코드와 데이터가 있습니다. 디지털 컴퓨터에서 이러한 정보들은 비트들의 조합으로 표현됩니다.
컴퓨터 프로그램은 C, Python 같은 고급언어로 작성됩니다. 이는 사람은 이해하기 쉽지만, 컴퓨터는 전혀 이해하지 못합니다. 이 프로그램은 컴파일러라고 부르는 소프트웨어를 통해 컴퓨터가 이해할 수 있게 번역됩니다. 이렇게 번역된 언어를 기계어 또는 기계코드라고 부릅니다.
컴파일러(compiler): 고급언어 프로글매을 기계어로 변환해주는 소프트웨어
기계어(machine language): 컴퓨터 하드웨어가 이해할 수 있는 언어
고급 언어는 어느 컴퓨터에서나 동일하지만, 기계어는 CPU마다 서로 다릅니다. 각 CPU 고유의 중간언어를 어셈블리 언어 혹은 어셈블리 명령어라고 합니다. 그리고 이러한 언어로 작성된 프로그램을 어셈블리 프로그램이라고 합니다. 그림으로 보면 다음과 같습니다.

여기서 LOAD, ADD, STOR는 어셈블리 명령어가 지정하는 동작을 개략적으로 나타내며 니모닉스라고 부릅니다.
어셈블리 언어로 작성된 어셈블리 프로그램은 어셈블러라는 소프트웨어를 통해 기계어로 번역됩니다.
어셈블리 프로그램(assembly program): 고급 언어와 기계어 사이의 중간 언어인 어셈블리 언어로 작성된 프로그램
니모닉스(mnemonics): 명령어가 지정하는 동작을 나타내는 간략화된 기호
어셈블러(assembler): 어셈블리 프로그램을 기계어로 번역해주는 소프트웨어
그림의 예시를 통해 기계어에 대해 좀 더 알아보겠습니다.
LOAD A,X 는 기계어 00100101로 표현하였습니다.

연산코드 001은 연산을 지정해줍니다. 여기서는 레지스터 A로 적재하라는 뜻입니다.
오퍼랜드의 00101은 데이터가 저장되어 있는 기억장치 주소를 가르킵니다.
두가지를 합치면 '기억장치 5번지의 데이터를 읽어서 레지스터 A에 저장해라' 가 됩니다.
명령어는 다양하게 구성될 수 있으며, 위의 예와 같이 연산코드가 3비트이면 2^3 = 8가지의 연산을 지정할 수 있습니다.
마찬가지로 오퍼랜드는 5개의 비트로 되어있음으로 2^5 = 32개가 됩니다.
이렇게 각 명령어에 들어갈 필드의 종류와 각 필드의 비트 수에 대한 구성을 명령어 형식이라고 합니다.
명령어 형식(instruction format): 명령어의 비트 수와 용도 및 필드 구성방법을 지정해주는 형식
각 기억장소에 저장되는 데이터 단위로서, CPU에 의해 한번에 처리될 수 있는 비트들의 그룹을 단어라고 합니다.
단어의 길이는 CPU의 하드웨어 구조에 따라 8, 16, 32, 64 등으로 다양합니다.
단어(word): CPU에 의해 한번에 처리될 수 있는 비트들의 그룹
3. 시스템의 구성
1) CPU와 기억장치

시스템버스는 CPU와 다른 요소들 간의 정보교환 통로입니다. 시스템 버스는 3가지의 하부버스로 이루어져 있습니다.
- 주소버스
주소 정보를 전송하는 버스입니다. 각 주소선은 하나의 주소 비트를 전송하는데 사용되며, 주소 선들의 개수가 최대 기억장치 용량을 나타냅니다. 그리고 이를 주소 버스의 폭 이라고 합니다. 만약 폭이 16비트라면 2^16 = 65536개의 주소를 지정해줄 수 있습니다. - 데이터버스
데이터를 전송하기 위한 신호 선들의 집합입니다. 데이터 버스의 폭은 한번에 전송될 수 있는 데이터 비트의 수를 결정해줍니다.
예를들어 32비트라면 CPU는 기억장치로 부터 한번에 32비트씩 읽어올 수 있습니다. - 제어버스
각종 요소들의 동작을 제어하는데 필요한 신호 선들의 집합입니다.
제어 신호 선들의 수는 CPU, 시스템 구성에 따라 달라집니다.
기본적으로 기억장치 읽기/쓰기 신호, I/O 읽기/쓰기 신호가 있습니다.
주소는 CPU에 의해 발생되고 기억장치와 I/O장치로 보내지는 정보입니다.
주소버스는 단방향성이고 데이터 버스는 읽기와 쓰기 동작을 모두 지원해야 하므로 양방향 전송이 가능해야 합니다.

위의 그림은 CPU가 주소버스, 데이터버스, 제어신호 선들을 통하여 기억장치와 접속된 모습을 보여줍니다.
기억장치로부터 데이터를 읽기 위해 읽기신호를 보내고, 데이터를 저장하기 위해 해당 기억 장소의 주소와 데이터 및 쓰기 신호를 보내줍니다. 이를 위해 전송 통로인 주소버스와 데이터버스가 연결되어 있습니다.
CPU가 데이터를 기억장치의 특정 장소에 저장하거나 이미 저장되어 있는 내용을 읽는 동작을 액세스라고 합니다.
액세스(access): 기억장치에 데이터를 쓰거나, 저장된 내용을 읽는 동작
2) CPU와 주변장치(보조저장장치, I/O 장치)
주변장치는 CPU가 직접 제어하거나 엑세스하지 못하고 별도의 인터페이스 회로 혹은 제어기를 통해서 액세스 하여야 합니다.
제어기에는 데이터 레지스터와 상태 레지스터가 있습니다. 데이터 레지스터에 데이터가 저장되고 상태 레지스터에서 입력준비 비트(In RDY)가 준비상태인지 확인합니다. 준비상태가 확인되면 데이터 레지스터의 내용을 CPU로 읽어들임으로써 데이터 입력 과정이 완료됩니다. 그림으로 보면 다음과 같습니다.
데이터 레지스터, 데이터 버퍼(access): CPU와 I/O 장치간의 임시 데이터 기억 장치
상태 레지스터(access): I/O 장치의 상태를 나타내는 비트들을 저장하는 레지스터

보조 저장장치에서는 블록단위(512바이트, 1024바이트 등) 로 전송이 이루어집니다.
제어기 내에 적어도 한 블록 이상을 임시 저장할 수 있는 데이터 버퍼가 준비되어 있어야 합니다.
데이터 버퍼는 반도체 기억장치로 구현되는데 디스크 제어기들 중 한 트랙의 모든 내용을 저장할 수 있는 트랙버퍼 혹은 디스크 버퍼를 가지고 있는경우도 많이 있습니다.
3) 전체 구조

전체 구성도입니다.
주기억장치는 CPU와 직접 액세스하고 나머지 보조저장장치, I/O 장치는 별도의 제어기를 통해 액세스 하는 모습을 확인할 수 있습니다.
또한 시스템 버스를 통해 이러한 주소, 데이터, 제어신호등이 이동하는것을 볼 수 있습니다.
컴퓨터 시스템이 수행할 수 있는 기능들을 연관시켜 보겠습니다.
- 프로그램 실행 : CPU가 주기억장치로부터 프로그램 코드를 읽어서 실행
- 데이터 저장 : 프로그램 실행 결과로서 얻어진 데이터를 주기억장치에 저장
- 데이터 이동 : 디스크나 SSD에 저장되어 있는 프로그램과 데이터 블록을 주기억장치로 이동
- 데이터 입력 및 출력 : 사용자가 키보드를 통하여 보내는 명령이나 데이터를 읽어들임
- 제어 : 프로그램이 순서대로 실행되도록 혹은 필요에 따라 실행순서를 변경
첫 CS 공부글을 작성했습니다.
공부하면서 이런것들을 모른채로 개발을 했구나 싶기도 하고 느낀점이 참 많습니다.
문제는 처음이라 그런지 공부하고 작성하는데 시간이 많이 걸렸습니다.
힘이 많이 들어간것같아서 제 나름대로 최적화를 좀 해봐야겠습니다.
아 스킨 적용되니까 양식이 조금 깨지네요... CSS 좀 건드려봐야할것같습니다.
'CS > 컴퓨터 구조' 카테고리의 다른 글
[컴퓨터 구조] 상용 프로세서들의 명령어 형식 (2) | 2025.04.08 |
---|---|
[컴퓨터 구조] 명령어 세트 (0) | 2025.04.05 |
[컴퓨터 구조] 명령어 파이프라이닝 (0) | 2025.04.02 |
[컴퓨터 구조] CPU의 구조와 명령어 실행 (4) | 2025.03.27 |
[컴퓨터 구조] 컴퓨터의 발전 과정 (2) | 2025.03.26 |