CS/OS

Instruction과 레지스터

reko_ 2022. 3. 20. 02:39

Instruction이란??

 

 

우리가 실행하는 컴퓨터 프로그램은 수많은 Instruction의 집합입니다.

 

 

개발자가 프로그래밍 언어로 작성한 코드들은 assembly어로 컴파일 되어 OS로 전달되고, OS는 전달 받은 명령을 한줄 한줄 순서대로 읽으며 그 계산을 CPU의 여러 register에게 맡깁니다.

 

 

메인 메모리에서 CPU에게 처리할 명령의 메모리상 주소를 전달하는 것을 반입이라고 합니다.

 

Register

 

그 과정에서 특수한 역할을 맡는 아래의 레지스터들이 존재합니다. 

 

PC(Program Counter) - 다음에 반입할 명령어의 주소를 저장하고 있습니다. (명령어를 반입할 주소)

 

IR(Instruction Register) - PC에 저장되어 있는 주소에 접근하여 현재 수행할 명령어를 가져와 저장합니다. (반입한 명령어)

 

PSW(Program status word) - 지금 실행되고 있는 프로그램이 OS 커널인지, 사용자 프로그램인지 구분하는 상태 코드를 저장하고 있습니다. 그에 따라 CPU가 접근할 수 있는 데이터의 범주 권한이 달라집니다.

 

MAR(Memory Address Register), MBR(Memory buhher register)

- CPU가 실제 메모리에 접근할 때 쓰이는, 메모리와 CPU 사이 interface 역할을 맡는 레지스터 입니다. 

 

 

이 외의 레지스터들은 보통 CPU에서 메모리 데이터 참조를 최소화하여 데이터 처리의 효율성을 높이는 역할을 합니다.

 

 


Instruction

ISA(Instruction Set Architecture)

OS에서, 위와 같은 레지스터들이 메모리와 어떤 방식으로 데이터를 주고 받는지에 대한 복잡한 단계는 상관하지 않고 프로그램의 명령(instruction)에 따라 바뀌는 레지스터와 메모리의 상태(machine states)만을 바라보는 방식을

ISA(Instruction Set Architecture)라고 합니다.

 

 

예를 들어서 x86 ISA를 사용하는 컴퓨터가 출시되었다면,

x86이 가지는 명령어와 그에 따라 변하는 레지스터 + 메모리의 변화만을 이해하면 ISA 관점에서 그 컴퓨터를 이해하는 것이 됩니다. x86 ISA를 사용하는 다른 컴퓨터가 있다면 그 컴퓨터와 위의 컴퓨터는 동일하다고 볼 수 있습니다.

 

하나의 Instruction

하나의 instruction은 Opcode(연산자)와 Oprand(피연산자)로 구성되어 있습니다.

 

Opcode는 mov, add, jump와 같은 연산 기호로 데이터 처리, 조건문, 메모리에 있는 데이터를 불러오거나 저장, I/O와 통신하는 작업으로 분류할 수 있습니다.

Oprand는 연산할 데이터를 저장하고 있는 메모리 주소가 담겨있습니다.

이 opcode와 oprand가 하나의 instruction에서 차지하는 크기는 ISA마다 각각 다릅니다.

 

 

Instruction 수행

 

 

먼저 MAR, MBR이 메모리에 접근하여 PC 레지스터에 저장되어 있는 주소에서 IR 레지스터로 명령어를 가져오고,

다시 PC 레지스터에 메모리의 다음 명령어 주소를 넣습니다.

여기서 IR에 실행할 명령어를 가져오는 과정을 Fetch라고 합니다.