가. CPU 동작 순서
주어진 설명은 컴퓨터의 기본적인 동작 순서를 나타내고 있습니다. 아래는 각 단계에 대한 설명입니다.
1. 보조기억장치 또는 입력장치에서 데이터를 주기억장치로 읽기:
- 보조기억장치(예: 하드 디스크)에서 데이터를 읽거나, 입력장치(예: 키보드)로부터 데이터를 입력받아 주기억장치(예: RAM)로 전송합니다.
2. 중앙처리장치(CPU)에서 데이터 읽기 및 처리:
- CPU는 주기억장치에 저장된 데이터를 읽어와서 처리합니다. 이 처리는 CPU의 연산(산술, 논리 등)이 포함될 수 있습니다.
3. 처리된 데이터를 주기억장치에 다시 저장:
- CPU가 처리한 데이터를 다시 주기억장치에 저장합니다. 이는 계산 결과를 저장하거나, 다음 단계에서 필요한 데이터를 준비하는 등의 목적으로 수행됩니다.
4. 주기억장치에서 데이터 출력 또는 저장:
- 주기억장치에 저장된 데이터는 출력장치(예: 모니터, 프린터)로 전송되어 사용자에게 표시되거나, 보조기억장치(예: 하드 디스크, SSD)에 저장될 수 있습니다.
5. 제어장치에 의한 명령어 실행 제어:
- CPU의 제어장치는 주어진 명령어가 순서대로 실행되도록 제어합니다. 이는 명령어의 해독과 실행을 관리하며, 각 단계의 수행이 올바르게 이루어지도록 보장합니다.
이러한 과정은 컴퓨터가 데이터를 읽어와서 처리하고, 그 결과를 다시 저장하며, 필요에 따라 출력하거나 저장하는 일련의 과정을 설명합니다.
나. CPU의 연산 순서
○ CPU의 연산 순서는 Fetch -> Decode -> Execute -> Writeback
어진 설명은 CPU의 기본적인 동작 단계를 설명하고 있습니다. 아래는 각 단계에 대한 설명입니다:
1. Fetch (인출):
- 프로그램 카운터(PC)가 가리키는 주소에 있는 명령어를 주기억장치에서 인출하여 CPU 내부로 가져옵니다.
- 프로그램 카운터는 다음에 실행할 명령어의 주소를 가리키는 레지스터입니다.
2. Decode (해석):
- CPU는 가져온 명령어를 해독하여 그 내용을 이해하고, 다음 실행할 동작을 결정합니다.
- 명령어가 어떤 연산을 수행해야 하는지와 필요한 피연산자 등을 식별합니다.
3. Execute (실행):
- CPU는 해독된 명령어에 따라 실제로 연산을 수행합니다.
- 연산은 산술, 논리, 메모리 액세스 등 다양한 동작을 포함할 수 있습니다.
4. Writeback (쓰기):
- 실행된 명령어에 의해 계산된 결과나 변경된 상태를 다시 메모리에 기록하거나 레지스터에 저장합니다.
- 이로써 명령어의 실행이 완료되고 다음 명령어를 실행할 준비가 됩니다.
이러한 과정은 CPU가 명령어를 가져와 해독하고, 해당 명령어를 실행한 후에는 결과를 저장하거나 다음 단계로 진행하는 일련의 단계를 나타냅니다.
다. 레지스터 동작 원리와 종류
레지스터는 CPU 내부에서 데이터나 제어 정보를 일시적으로 저장하거나 조작하는데 사용되는 작은 저장소입니다. 아래는 각 레지스터의 동작 원리와 종류에 대한 설명입니다:
1. 프로그램 카운터(PC):
- 다음에 실행할 명령어의 주소를 저장합니다.
- CPU가 명령어를 차례로 실행할 때, 다음에 실행할 명령어의 주소를 가리키는 역할을 합니다.
2. 메모리 주소 레지스터(MAR):
- 메모리 주소를 보관하고, CPU가 주소를 사용하여 메모리에서 데이터를 읽거나 쓸 때 사용됩니다.
3. 메모리 버퍼 레지스터(MBR):
- 메모리 주소 레지스터가 가져온 데이터나 명령을 일시적으로 저장하는 역할을 합니다.
- 데이터일 경우에는 누산기 레지스터로 전달되어 연산에 사용될 수 있습니다.
4. 명령어 레지스터(IR):
- 현재 실행 중인 명령어의 내용을 저장합니다.
- CPU가 명령어를 해석하고 실행하기 위해 필요한 정보를 포함합니다.
5. 제어장치:
- 명령어 레지스터(IR)에 있는 명령어를 받아들여 해석하고, 이를 기반으로 시스템에 지시를 보냅니다.
- 명령어에 따라 다음에 수행할 동작을 제어합니다.
6. 누산기 레지스터(AC):
- 연산의 결과나 중간 값을 저장하는 레지스터입니다.
- 연산에 사용되는 데이터들이 여기에서 조작되고 계산됩니다.
7. 산술 논리 장치(ALU):
- 산술 및 논리 연산을 수행하는 장치입니다.
- 누산기 레지스터에서 가져온 데이터들을 연산하여 결과를 내보냅니다.
ex) 16bit CPU ○ 해당 기계어는 램에 위와 같이 저장됨 ○ 램은 8비트씩 저장하므로 두 줄로 저장 | |
PC가 다음에 수행할 주소인 램의 100번 주소를 가리키고, 메모리 주소 레지스터는 해당 명령 수행을 위해 100번 주소를 PC로부터 읽어오며, 메모리 버퍼 레지스터는 100번째 주소의 값을 읽어와 저장한다. 이 단계를 '인출'이라고 함 | |
SCRIPT https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9114794658383389 SCRIPT
(adsbygoogle = window.adsbygoogle || []).push({});
| |
메모리 버퍼 레지스터에 저장된 데이터는 명령이기 때문에 명령어 레지스터에 저장하고 PC는 1 Word 만큼 증가(16bit CPU이므로 2byte만큼) - 100 -> 102 명령어 레지스터에 저장된 명령은 제어장치로 이동되어 해석 이 단계를 '해석'이라고 함 | |
제어장치의 명령은 10번째 데이터를 읽어 오는 명령이며 메모리 주소 레지스터에 읽어올 메모리의 주소(10번)가 저장되고, 해당 주소(10번)에서 값을 읽어 메모리 버퍼 레지스터에 저장 10번 주소의 값은 명령어가 아닌 값(2)이므로 누산기 레지스터에 저장됨 여기까지가 명령어 LOAD[10] | |
다음 처리를 위해 PC에 저장된 다음 실행할 주소(102)를 메모리 주소 레지스터로 가져옴 메모리 버퍼 레지스터를 통해 해당 값을 읽어오고, 해당 값은 명령어이기 때문에 명령어 레지스터로 저장함 명령어 레지스터의 명령 수행을 위해 제어장치로 저장 | |
SCRIPT https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-9114794658383389 SCRIPT
(adsbygoogle = window.adsbygoogle || []).push({});
| |
ADD 명령을 수행하기 위해 누산기 레지스터의 값 2는 ALU로 전달 11의 값을 읽기 위해 메모리 주소 레지스터에 저장되고 읽어온 값은 메모리 버퍼 레지스터에 저장 해당 값(3)은 명령이 아닌 값이므로 바로 누산기 레지스터에 저장 ALU에 의해 바로 2 + 3이 수행되고 값은 누산기 레지스터에 다시 저장 이 단계를 '실행'이라고하며, 모든 과정은 제어장치를 통해 컨트롤됨 | |
마지막으로 PC에 저장된 104번째 명령을 처리하기 위해 메모리 주소 레지스터가 104를 저장하고, 메모리 버퍼 레지스터가 해당 주소의 값을 읽어옴 해당 값은 STORE[12]인 명령어로 명령어 레지스터에 저장됨 해당 명령 수행을 위해 메모리 주소 레지스터에 저장할 주소(12)가 저장되고, 누산기 레지스터에 저장된 5가 메모리 버퍼 레지스터에 저장되고, 지정된 주소(12)의 메모리에 저장된다. 이와 같이 CPU는 인출 -> 해석 -> 실행 -> 저장하는 과정을 거침 |
댓글 없음:
댓글 쓰기