Register
프로그램 속 명령어와 데이터는 실행 전후로 반드시 레지스터에 저장 됨.
따라서 레지스터에 저장된 값만 잘 관찰해도 프로그램의 실행 흐름을 파악 가능
상용화된 CPU 속 레지스터들은 CPU 마다 이름, 크기, 종류가 매우 다양함
- 프로그램 카운터 (PC : Program Counter) :
메모리에서 가져올 명령어의 주소
즉, 메모리에서 읽어 들일 명령어의 주소를 저장
이로 인해 프로그램 카운터를 명령어 카운터 (IP: Instruction Pointer)라고 부르는 CPU도 있음
- 메모리 주소 레지스터 (MAR: Memory Address Register) :
메모리의 주소를 저장하는 레지스터
CPU가 읽어 들이고자 하는 주소 값을 주소 버스로 보낼 때 메모리 주소 레지스터를 거침
- 메모리 버퍼 레지스터 ( MBR: Memory Buffer Register / MDR: Memory Data Register)
메모리와 주고 받을 값 (데이터와 명령어) 을 저장하는 레지스터
즉, 메모리에 쓰고 싶은 값이나 메모리로부터 전달받은 값은 메모리 버퍼 레지스터를 거침
- 명령어 레지스터 (IR : Instruction Register) :
해석할 명령어
즉, 방금 메모리에서 읽어 들인 명령어를 저장하는 레지스터
제어장치는 명령어 레지스터 속 명령어를 받아들이고 이를 해석한 뒤 제어 신호를 내보냄
> 순서도 (메모리에 저장된 프로그램의 실행 과정)
01.
CPU로 실행할 프로그램이 1000번지부터 1500번지까지 저장되어 있다고 가정
그리고 1000번지에는 1101(₂) = 13이 저장되어 있다고 가정
02.
프로그램을 처음부터 실행하기 위해 프로그램 카운터에는 1000이 저장
이는 메모리에서 가져올 명령어가 1000번지에 있다는 것을 의미
03.
1000번지를 읽어들이기 위해서 주소 버스로 1000번지를 내보내야 함
이를 위해 메모리 주소 레지스터에 1000이 저장됨
04.
'메모리 읽기' 제어 신호와 메모리 주소 레지스터 값이
제어버스와 주소 버스를 통해 메모리로 보내짐
05.
메모리 1000번지에 저장된 값은 데이터 버스를 통해 메모리 버퍼 레지스터로 전달
프로그램 카운터는 증가되어 다음 명령어를 읽어 들일 준비를 함
06.
메모리 버퍼 레지스터에 저장된 값은 명령어 레지스터로 이동
07.
제어장치는 명령어 레지스터의 명령어를 해석하고 제어 신호를 발생시킴
- 프로그램 카운터 값이 증가했으니 1000번지 명령어 처리가 끝나면
CPU는 다음 명령어(1001번지)를 읽어 들임
이처럼 프로그램 카운터는 지속적으로 증가하며 계속해서 다음 명령어를 읽어 들일 준비를 함
이 과정이 반복되면서 CPU는 프로그램을 차례대로 실행해 나감
결국 CPU가 메모리 속 프로그램을 순차적으로 읽어 들이고 실행해 나갈 수 있는 이유는
CPU 속 프로그램 카운터가 꾸준히 증가하기 때문
- 플래그 레지스터 (Flag register) :
ALU 연산 결과에 따른 플래그를 플래그 레지스터에 저장
연산 결과 또는 CPU 상태에 대한 부가적인 정보를 저장하는 레지스터
- 범용 레지스터 (General purpose register) :
이름 그대로 다양하고 일반적인 상황에서 자유롭게 사용할 수 있는 레지스터
메모리 버퍼 레지스터는 데이터 버스로 주고 받을 값만 저장
메모리 주소 레지스터는 주소 버스로 내보낼 주소값만 저장
반면에 범용 레지스터는 데이터와 주소를 모두 저장
- 스택 포인터 (Stack pointer) : **
스택 주소 지정방식 이라는 주소 지정방식에 사용
프로그램 카운터와 베이스 레지스터는 변위 주소 지정 방식이라는 주소 지정 방식에 사용
스택 주소 지정 방식 : ( 특정 레지스터를 이용한 주소 지정 방식 1 )
스택과 스택 포인터를 이용한 주소 지정 방식
스택은 한쪽 끝이 막혀 있는 통과 같은 저장 공간
그래서 스택은 가장 최근에 저장하는 값부터 꺼낼 수 있음
여기서 스택 포인터란? 스택의 꼭대기를 가리키는 레지스터
즉, 스택 포인터는 스택에 마지막으로 저장한 값의 위치를 저장하는 레지스터
스택 포인터는 스택의 어디까지 데이터가 채워져 있는지에 대한 표시
스택 영역은 메모리 안에 스택처럼 사용할 영역이 정해져 있음
이 영역은 다른 주소 공간과는 다르게 스택처럼 사용하기로 암묵적으로 약속된 영역
> stack (.verb)
1. (깔끔하게 정돈하여) 쌓다[포개다]; 쌓이다, 포개지다
2. (어떤 곳에 물건을 쌓아서) 채우다
변위 주소 지정 방식 : (특정 레지스터를 이용한 주소 지정 방식 2)
변위 주소 지정방식이란? (Displacement addressing mode)
명령어는 연산코드와 오퍼랜드(피연산자)로 이루어짐
오퍼랜드 필드의 값(변위)과 특정 레지스터의 값을 더하여 유효 주소를 얻어내는 주소 지정 방식
변위 주소 지정 방식을 사용하는 명령어는
연산 코드 필드 : 이런 내용을 수행,
레지스터 필드 : 이 레지스터 값과,
오퍼랜드 필드 : 이 주소를 더한 곳에 있는 데이터로,
이때 변위 주소 지정방식은 오퍼랜드 필드의 주소와 어떤 레지스터를 더하는지에 따라
상대 주소 지정방식 / 베이스 주소 지정 방식으로 나뉨
상대 주소 지정 방식 (Relative addressing mode) :
오퍼랜드와 프로그램 카운터의 값을 더하여 유효 주소를 얻는 방식
프로그램 카운터에는 읽어 들일 명령어의 주소가 저장되어 있음
만약 오퍼랜드가 음수, 가령 -3 이었다면 CPU는 읽어 들이기로 한 명령어로부터 '세번 째 이전' 번지로 접근
한마디로 실행하려는 명령어의 세 칸 이전 번지 명령어를 실행하는 것
반면, 오퍼랜드가 양수, 가령 3 이었다면 CPU는 읽어 들이기로 한 명령어의 '세번 째 이후' 번지로 접근
즉, 실행하려는 명령어에서 세 칸 건너뛴 번지를 실행하는 것
상대 주소 지정 방식은 프로그래밍 언어의 if문과 유사하게 모든 코드를 실행하는 것이 아닌
분기하여 특정 주소의 코드를 실행할 때 사용됨
- 베이스 레지스터 주소 지정 방식 (Base-register addressing mode)
오퍼랜드와 베이스 레지스터의 값을 더하여 유효 주소를 얻는 방식
베이스 레지스터 : 기준 주소
오퍼랜드 : 기준 주소로부터 떨어진 거리
베이스 레지스터 속 기준 주소로부터 얼마나 떨어져 있는 주소에 접근 할 것인지를 연산하여 유효 주소를 얻어내는 방식
베이스 레지스터에 200이라는 값이 있고
오퍼랜드가 40이라면
"기준 주소 200번지로부터 40만큼 떨어진 240번지로 접근하라" 명령어
베이스 레지스터에 550이라는 값이 있고
오퍼랜드가 50이라면
" 기준 주소 550번지로부터 50만큼 떨어진 600번지로 접근하라" 명령어
'OS' 카테고리의 다른 글
File-System Permission (0) | 2023.04.20 |
---|---|
Batch Scheduler (0) | 2023.04.20 |
Disk Scheduling (0) | 2023.04.20 |
Process Scheduling (0) | 2023.04.19 |
Page Replacement Algorithms (0) | 2023.04.19 |