컴퓨터 내부 구조(1)
컴퓨터 하드웨어는 어떻게 구성되는가
1. 메모리
- 메모리는 컴퓨터에서 프로그램과 데이터를 저장하고 읽어오는 장치이다.
- 메모리는 주기억장치와 보조기억장치로 구분된다.
- 주기억장치는 CPU와 직접 통신할 수 있는 빠르고 휘발성인 메모리이다. 주기억장치에는 RAM (Random Access Memory)와 ROM (Read Only Memory)가 있다.
- RAM은 읽기와 쓰기가 가능한 메모리로, 프로그램의 실행과 데이터의 처리에 사용된다. RAM은 전원이 꺼지면 저장된 내용이 사라진다.
- ROM은 읽기만 가능한 메모리로, 컴퓨터의 부팅이나 기본적인 입출력 작업에 필요한 프로그램이 저장된다. ROM은 전원이 꺼져도 저장된 내용이 유지된다.
- 보조기억장치는 CPU와 간접적으로 통신할 수 있는 느리고 비휘발성인 메모리이다. 보조기억장치에는 HDD (Hard Disk Drive), SSD (Solid State Drive), CD-ROM, USB 메모리 등이 있다.
- HDD는 자기 디스크에 데이터를 기록하는 방식으로, 대용량의 데이터를 저장할 수 있다. HDD는 기계적인 부품이 있어 충격에 취약하고 소음이 발생한다.
- SSD는 플래시 메모리를 사용하는 방식으로, HDD보다 빠르고 안정적이다. SSD는 기계적인 부품이 없어 충격에 강하고 소음이 없다.
- CD-ROM은 광학 디스크에 데이터를 기록하는 방식으로, 읽기 전용이다. CD-ROM은 휴대성이 좋고 비용이 저렴하다.
- USB 메모리는 플래시 메모리를 사용하는 방식으로, 읽기와 쓰기가 가능하다. USB 메모리는 휴대성이 좋고 호환성이 높다.
2. 입력과 출력
- 입력과 출력은 컴퓨터와 사용자나 다른 장치와의 정보 교환을 가능하게 하는 장치이다.
- 입력장치는 사용자나 다른 장치로부터 정보를 받아 컴퓨터로 전달하는 장치이다. 입력장치에는 키보드, 마우스, 스캐너, 마이크, 카메라 등이 있다.
- 출력장치는 컴퓨터로부터 정보를 받아 사용자나 다른 장치로 전달하는 장치이다. 출력장치에는 모니터, 프린터, 스피커, 헤드셋 등이 있다.
- 입력과 출력은 시스템 버스를 통해 CPU와 메모리와 통신한다. 시스템 버스는 데이터 버스, 주소 버스, 제어 버스로 구성된다.
- 데이터 버스는 데이터를 전송하는 전선의 집합이다. 데이터 버스의 너비는 한 번에 전송할 수 있는 비트의 수를 결정한다.
- 주소 버스는 메모리나 입출력 장치의 주소를 전송하는 전선의 집합이다. 주소 버스의 너비는 주소할 수 있는 메모리나 입출력 장치의 수를 결정한다.
- 제어 버스는 CPU와 메모리나 입출력 장치 사이의 명령이나 상태를 전송하는 전선의 집합이다. 제어 버스는 읽기, 쓰기, 인터럽트 등의 신호를 전달한다.
3. 중앙 처리 장치
- 중앙 처리 장치 (CPU)는 컴퓨터의 두뇌 역할을 하는 장치이다. CPU는 프로그램의 명령을 해석하고 실행하며, 데이터를 처리한다.
- CPU는 산술 논리 장치 (ALU), 시프트, 실행 장치로 구성된다.
3-1. 산술 논리 장치
- 산술 논리 장치 (ALU)는 CPU의 연산 부분이다. ALU는 덧셈, 뺄셈, 곱셈, 나눗셈 등의 산술 연산과 AND, OR, NOT, XOR 등의 논리 연산을 수행한다.
- ALU는 두 개의 입력과 하나의 출력을 가진다. 입력은 피연산자로, 메모리나 레지스터에서 가져온다. 출력은 연산 결과로, 메모리나 레지스터에 저장한다.
- ALU는 연산의 종류를 결정하는 제어 신호를 받는다. 제어 신호는 명령어의 일부로, CPU의 제어 장치에서 생성한다.
- ALU는 연산의 상태를 나타내는 조건 코드를 생성한다. 조건 코드는 오버플로우, 캐리, 제로, 부호 등의 비트로 구성된다. 조건 코드는 레지스터에 저장하거나 분기 명령어에 사용한다.
3-2. 시프트
- 시프트는 CPU의 비트 이동 부분이다. 시프트는 데이터의 비트를 왼쪽이나 오른쪽으로 이동시키는 연산을 수행한다.
- 시프트는 한 개의 입력과 하나의 출력을 가진다. 입력은 이동할 데이터로, 메모리나 레지스터에서 가져온다. 출력은 이동 결과로, 메모리나 레지스터에 저장한다.
- 시프트는 이동 방향과 이동 비트 수를 결정하는 제어 신호를 받는다. 제어 신호는 명령어의 일부로, CPU의 제어 장치에서 생성한다.
- 시프트는 이동의 상태를 나타내는 조건 코드를 생성한다. 조건 코드는 캐리, 제로, 부호 등의 비트로 구성된다. 조건 코드는 레지스터에 저장하거나 분기 명령어에 사용한다.
3-3. 실행 장치
- 실행 장치는 CPU의 제어 부분이다. 실행 장치는 프로그램 카운터, 명령어 레지스터, 명령어 해독기, 제어 장치로 구성된다.
- 프로그램 카운터 (PC)는 다음에 실행할 명령어의 주소를 저장하는 레지스터이다. PC는 명령어를 실행할 때마다 증가하거나 분기 명령어에 따라 변경된다.
- 명령어 레지스터 (IR)는 현재 실행하는 명령어를 저장하는 레지스터이다. IR은 PC가 가리키는 메모리 주소에서 명령어를 가져와 저장한다.
- 명령어 해독기는 IR에 저장된 명령어를 해독하는 장치이다. 명령어 해독기는 명령어의 형식과 의미를 분석
- 명령어 해독기는 IR에 저장된 명령어를 해독하는 장치이다. 명령어 해독기는 명령어의 형식과 의미를 분석하여 제어 신호를 생성한다. 제어 신호는 ALU, 시프트, 메모리, 레지스터 등의 작동을 제어한다.
- 제어 장치는 CPU의 전체적인 동작을 조정하는 장치이다. 제어 장치는 명령어 해독기에서 생성된 제어 신호를 적절한 순서와 타이밍에 따라 전달한다. 제어 장치는 명령어의 실행 사이클을 관리한다.
4. 명령어 집합
- 명령어 집합 (instruction set)은 CPU가 인식하고 실행할 수 있는 명령어의 집합이다. 명령어 집합은 CPU의 구조와 성능에 영향을 미친다.
- 명령어 집합은 명령어, 주소 지정 모드, 조건 코드 명령어, 분기 명령어, 최종 명령어 집합 구성으로 구분된다.
4-1. 명령어
- 명령어 (instruction)는 CPU가 수행할 기본적인 작업을 나타내는 이진 코드이다. 명령어는 연산 코드 (opcode)와 피연산자 (operand)로 구성된다.
- 연산 코드는 명령어의 종류를 나타내는 비트이다. 연산 코드는 산술, 논리, 데이터 전송, 제어 전송 등의 연산을 지정한다.
- 피연산자는 명령어의 대상이 되는 데이터이다. 피연산자는 상수, 레지스터, 메모리 주소 등이 될 수 있다.
- 명령어의 형식은 명령어의 길이와 연산 코드와 피연산자의 비트 수를 결정한다. 명령어의 형식에는 고정 길이 형식과 가변 길이 형식이 있다.
- 고정 길이 형식은 모든 명령어의 길이가 동일한 형식이다. 고정 길이 형식은 명령어의 해독이 쉽고, 파이프라이닝이 가능하다. 파이프라이닝은 명령어의 실행을 여러 단계로 나누어 병렬로 처리하는 기법이다.
- 가변 길이 형식은 명령어의 길이가 다른 형식이다. 가변 길이 형식은 명령어의 길이를 최적화할 수 있고, 메모리 공간을 절약할 수 있다.
4-2. 주소 지정 모드
- 주소 지정 모드 (addressing mode)는 명령어의 피연산자가 어떻게 지정되는지를 나타내는 방식이다. 주소 지정 모드는 피연산자의 접근 속도와 유연성에 영향을 미친다.
- 주소 지정 모드의 종류에는 즉시 주소 지정, 레지스터 주소 지정, 직접 주소 지정, 간접 주소 지정, 상대 주소 지정, 인덱스 주소 지정, 베이스 주소 지정 등이 있다.
- 즉시 주소 지정은 피연산자가 명령어에 직접 포함되는 방식이다. 즉시 주소 지정은 접근 속도가 빠르지만, 피연산자의 크기가 제한된다.
- 레지스터 주소 지정은 피연산자가 레지스터에 저장되어 있는 방식이다. 레지스터 주소 지정은 접근 속도가 빠르고, 피연산자의 크기가 유연하다.
- 직접 주소 지정은 피연산자가 메모리 주소로 지정되는 방식이다. 직접 주소 지정은 접근 속도가 느리고, 피연산자의 크기가 제한된다.
- 간접 주소 지정은 피연산자가 메모리 주소를 가리키는 레지스터나 메모리에 저장되어 있는 방식이다. 간접 주소 지정은 접근 속도가 느리지만, 피연산자의 크기가 유연하고, 동적인 주소 할당이 가능하다.
- 상대 주소 지정은 피연산자가 PC에 저장된 주소와 명령어에 포함된 오프셋의 합으로 계산되는 방식이다. 상대 주소 지정은 분기 명령어에 유용하다.
- 인덱스 주소 지정은 피연산자가 명령어에 포함된 기준 주소와 인덱스 레지스터에 저장된 오프셋의 합으로 계산되는 방식이다. 인덱스 주소 지정은 배열이나 테이블과 같은 자료 구조에 유용하다.
- 베이스 주소 지정은 피연산자가 베이스 레지스터에 저장된 기준 주소와 명령어에 포함된 오프셋의 합으로 계산되는 방식이다. 베이스 주소 지정은 스택이나 서브루틴과 같은 자료 구조에 유용하다.
4-3. 조건 코드 명령어
- 조건 코드 명령어 (condition code instruction)는 CPU가 수행한 연산의 결과에 따라 조건 코드 레지스터에 저장된 비트를 변경하는 명령어이다. 조건 코드 명령어는 산술, 논리, 비교, 테스트 등의 연산을 수행한다.
- 조건 코드 레지스터는 CPU의 상태를 나타내는 레지스터이다. 조건 코드 레지스터에는 오버플로우, 캐리, 제로, 부호, 부동 소수점 예외 등의 비트가 있다.
- 조건 코드 명령어는 분기 명령어와 함께 사용되어 프로그램의 흐름을 제어할 수 있다. 분기 명령어는 조건 코드 레지스터의 비트를 검사하여 참이면 분기하고, 거짓이면 분기하지 않는다.
4-4. 분기 명령어
- 분기 명령어 (branch instruction)는 프로그램의 흐름을 변경하는 명령어이다. 분기 명령어는 조건 분기와 무조건 분기로 구분된다.
- 조건 분기는 조건 코드 레지스터의 비트를 검사하여 참이면 분기하고, 거짓이면 분기하지 않는 명령어이다. 조건 분기에는 BEQ (Branch if Equal), BNE (Branch if Not Equal), BLT (Branch if Less Than), BGT (Branch if Greater Than) 등이 있다.
- 무조건 분기는 조건과 상관없이 항상 분기하는 명령어이다. 무조건 분기에는 JMP (Jump), JSR (Jump to Subroutine), RTS (Return from Subroutine) 등이 있다.
- 분기 명령어는 분기할 주소를 피연산자로 가진다. 분기할 주소는 상대 주소 지정, 인덱스 주소 지정, 베이스 주소 지정 등의 방식으로 지정할 수 있다.
4-5. 최종 명령어 집합 구성
- 최종 명령어 집합 구성은 CPU가 지원하는 명령어의 집합을 결정하는 과정이다. 최종 명령어 집합 구성은 CPU의 성능과 복잡도에 영향을 미친다.
- 최종 명령어 집합 구성은 다음과 같은 요소를 고려해야 한다.
- 명령어의 개수와 종류: 명령어의 개수와 종류는 CPU가 수행할 수 있는 연산의 다양성과 효율성을 결정한다. 명령어의 개수와 종류가 많을수록 CPU가 더 많은 작업을 할 수 있지만, CPU의 구현이 복잡해지고, 명령어의 길이가 길어지고, 메모리 공간이 낭비된다.
- 명령어의 길이: 명령어의 길이는 CPU가 명령어를 해독하고 실행하는 시간에 영향을 미친다. 명령어의 길이가 짧을수록 CPU가 더 빠르게 명령어를 처리할 수 있지만, 명령어의 종류와 피연산자의 크기가 제한된다.
- 피연산자의 개수와 위치: 피연산자의 개수와 위치는 CPU가 데이터를 전송하고 저장하는 방식에 영향을 미친다. 피연산자의 개수와 위치가 다양할수록 CPU가 더 유연하게 데이터를 처리할 수 있지만, CPU의 구현이 복잡해지고, 명령어의 길이가 길어지고, 메모리 접근이 늘어난다.
- 주소 지정 모드의 개수와 종류: 주소 지정 모드의 개수와 종류는 CPU가 피연산자를 지정하는 방식에 영향을 미친다. 주소 지정 모드의 개수와 종류가 많을수록 CPU가 더 다양하고 효율적인 방식으로 피연산자를 지정할 수 있지만, CPU의 구현이 복잡해지고, 명령어의 길이가 길어지고, 메모리 접근이 늘어난다.
출처
(1) 컴퓨터 하드웨어란? | 컴퓨터 하드웨어 구성요소 | Crucial Korea ….
(2) 컴퓨터 하드웨어의 구성 - CPU, 스택, 멀티코어, 캐시메모리 ….
(3) [운영체제] 컴퓨터 하드웨어의 구성 - 벨로그.