⚠️ 공부한 내용을 정리하는 공간입니다. 설명이 부족하거나 옳바르지 못한 부분이 있을 수 있습니다.
< 목차 >
1. Memory System
2. CPU가 Program을 실행하는 과정: Instruction Cycle
- Fetch
- Decode, Execute
Memory는 데이터를 쓰거나 읽기 위한 저장공간으로 RAM(Random Access Memory)과 ROM(Read Only Memory)으로 구성된다. RAM은 휘발성 메모리로 작업 중인 파일을 한시적으로 저장하고 전원이 꺼지면 기록된 데이터들이 날아간다. ROM은 비휘발성 메모리로 전원이 꺼져도 기록된 데이터가 날아가지 않는다. Memory는 CPU가 사용하는 작업 노트이다.
“[1] CPU는 데이터를 인출하고 해석하고 실행한 다음 저장하는 과정을 거치면서 프로그램을 실행한다.” 즉 CPU의 명령주기(Instruction Cycle)는 데이터를 Fetch(인출)하고 명령을 Decode(해석)하고 Execute(실행)을 반복하는 과정으로 이뤄진다.
각 단계에 어떻게 CPU가 동작하는지에 대해서 그림 통해 설명해보겠다.
예시) int x = 8; int y = 16; LDA x; ADD y; STA y; |
CPU는 명령을 한 줄씩 Fetch하고 Decode, Execute하는 것을 반복 수행하면서 프로그램을 실행한다. 위의 예시에서 변수를 선언한 부분은 Stack Segment에 기록되고 각 변수에 대한 명령들은 코드 자체를 구성하는 메모리 영역인 Code Segment에 기록된다. 메모리에 기록된 데이터들은 Fetch되어 CPU와 소통할 수 있다. Fetch한 이후에 해당 명령을 Decode하고 Execute한다.
CPU의 명령수행주기에서 Fetch는 IR로 opcode와 operand를 전달하는 과정까지이다.
CPU가 명령을 수행할 수 있는 건 CPU가 명령어를 이해하고 있고 숙지하고 있어서가 아니다. CPU가 명령을 수행할 수 있는 건 CPU를 설계한 개발자가 명령어를 정하고 각 명령어에 opcode를 부여하여 opcode에 따라 명령어에 알맞는 행동을 하도록 설계했기 때문이다. 그래서 지금부터 예시로 설명할 CPU Instruction Cycle은 필자가 임의로 설정한 Instruction Set이다.
1) Code Segment의 첫 번째 줄을 PC가 가리키면 MAR을 해당 메모리의 주소를 읽어온다. 2) MAR이 읽어온 주소에 기록된 데이터를 MBR이 읽어온다. 3) MBR이 읽어온 데이터는 IR로 이동한다. 4) IR의 address를 MAR이 읽어온다. 5) MAR에 기록된 address에 기록된 data를 MBR이 읽어온다. 6) MBR의 기록된 data를 AC로 보낸다. 이렇게 0x0000의 명령을 끝내면 PC+1을 해서 다음 명령을 수행한다. |
1) Code Segment의 첫 번째 줄을 PC가 가리키면 MAR을 해당 메모리의주소를 읽어온다. 2) MAR이 읽어온 주소에 기록된 데이터를 MBR이 읽어온다. 3) MBR이 읽어온 데이터는 IR로 이동한다. 4) IR의 address를 MAR이 읽어온다. 5) MAR에 기록된 address에 기록된 data를 MBR이 읽어온다. 6) AC에 기록된 data와 MBR에 기록된 data를 연산하여 AC에 기록한다. |
1) Code Segment의 첫 번째 줄을 PC가 가리키면 MAR을 해당 메모리의 주소를 읽어온다. 2) MAR이 읽어온 주소에 기록된 데이터를 MBR이 읽어온다. 3) MBR이 읽어온 데이터는 IR로 이동한다. 4) IR의 address를 MAR이 읽어오고, AC에 기록된 data를 MBR이 읽어온다. 5) MBR의 기록된 데이터를 MAR의 주소로 찾아가 해당 데이터를 기록한다. |
데이터가 저장되는 주소(0x8001 ~ 0x8003)와 PC가 가리키는 주소(0x0000 ~ 0x0002)가 다른 이유
PC는 처음 주소를 가리킨다. CPU가 명령을 수행함에 따라 데이터가 생성되고 그에 따라 새롭게 생성된 데이터를 저장할 주소가 필요하다. 이때 상수 데이터가 PC가 가리키는 주소로 저장되면 혼란스러워진다. 그래서 CPU가 작업하는 상수 데이터가 담긴 주소를 혼란스럽게 만들지 않도록 구역을 정한 뒤 주소를 설정해준다. 위 예시같은 경우는 0x8001 ~ 0x8003까지 상수를 저장하는 공간으로 임의로 설정한 것이다. 이렇게 메모리를 사용한 이유에 대해서는 추후에 Addressing Mode(주소지정방식)에 관련한 글에서 확인할 수 있을 것이다.
< 참조 >
[1] bRd 3D. (2021.07.31) CPU는 어떻게 작동할까?-[Video file].(17분 55초~) 검색경로 https://www.youtube.com/watch?v=Fg00LN30Ezg
- Computer Science. (2015.02.21.) Fetch Decode Execute Cycle in more detail-[Video file]. 검색경로 https://www.youtube.com/watch?v=jFDMZpkUWCw
- Tom Scott. (2019.07.30.) The Fetch-Execute Cycle: What's Your Computer Actually Doing?-[Video file]. 검색경로 https://www.youtube.com/watch?v=Z5JC9Ve1sfI
'🖥️ Computer Science > System Programming' 카테고리의 다른 글
[System Programming] Compile Process(Source code -> exe -> process) (11) | 2023.12.04 |
---|---|
[System Programming] CPU Instruction Cycle, Masking (2) | 2023.12.03 |
[System Programming] CPU Architecture (0) | 2023.11.30 |
[System Programming] 컴퓨터는 무엇인가? (1) | 2023.11.29 |