본문 바로가기
운영체제

CPU 명령 실행 과정

by LaTale 2020. 3. 29.

우선 들어가기에 앞서 특수 목적의 레지스터들을 먼저 알아보고 가겠다.

표로 정리하면 위와 같다.


TR을 제외한 레지스터들은 다른 어떠한 레지스터들도 해당 레지스터의 일을 하지 않고, 해당 레지스터들은 오로지 그 일만 한다.


AR과 PC는 주소만 저장하기 때문에 12bit면 충분하다.[각주:1]


이외에도 INPR, OUTR 등도 있지만 여기선 다루지 않는다.



CPU의 Data Unit이다.


하나하나 살펴보자면 우선 굵은 테두리 선은 버스이다.

버스에 연결된 MUX는 멀티플렉서를 의미하며 3bit으로 1~7번 라인을 의미한다.


AR과 PC는 12bit이기에 비교적 작은 사각형임을 확인할 수 있다.


Address는 AR이 가지고 있기에 AR과 Memory는 Address 라인으로 연결되어 있다.


각 레지스터들엔 LD(Load), INR(Increment), CLR(Clear)가 있는데 의미는 다음과 같다.

 - LD : 0이면 BUS의 데이터들이 들어오지 않는다. 반대로 1이면 들어온다.

 - INR : 1이되면 값이 1 증가한다.

 - CLR : 1이 되면 레지스터의 값이 0이 된다.


단 IR은 변경되면 안될 명령어를 다루는 레지스터이기에 LD만 존재한다.


Adder & Logic은 ALU를 뜻한다. 

ALU에는 오직 AC와 DR만이 들어갈 수 있으며 E는 오버플로우를 알려주는 플립플롭이다.


이정도면 얼추 다 본거 같고 추후 예시에서 보다 정확한 사용법을 알아보도록 하겠다.



CPU의 Control Unit이다. (IR에 있다.)


이거도 하나하나 살펴보도록 하자.


우선 첫 비트는 I비트이며 I비트 플립플롭으로 이동한다.

이는 Direct mode인지 Indirect mode인지 판별하는 역할을 한다.


다음 3비트는 opcode[각주:2]이며 디코더로 이동한다.

디코더에서는 input값에 따라 Dx 회선을 1로 만들어준다. 즉, input값에 맞는 회선을 제외하곤 모두 0이다.


4비트 SC는 하나의 Clock에 하나의 명령이 실행될 수 있도록 타이밍을 맞추는 역할을 한다.

4비트이기에 0~15까지 존재하며 T 회선 역시 T0 ~ T15까지 있다.

얘 역시 디코더에서 input값에 맞춰 Tx 회선을 조절해준다.

INR과 CLR을 이용해 1씩 증가시키다 16이 되면 0으로 돌아간다.


나머지 12비트는 주소를 뜻한다.


명령어에는 3종류의 Set이 있지만 이 곳에서는 I비트, opcode, address로 이루어진 Memory Reference Instruction만 본다.



예시와 함께 CPU에 명령이 들어왔을 때의 과정을 하나하나 짚어보도록 하겠다.


1. 명령어를 가져온다.

PC에 있는 명령어를 AR로 가져와야 한다. 

Data Unit을 보면 알 수 있듯이 PC는 2이다. 

따라서 MUX를 010으로 설정하고, AR의 LD를 1로 설정한다.

T0 : AR <- PC


AR에 저장되어 있는 주소값을 이용해 Memory에서 가져와 IR에 넣어야한다.

Address 라인을 통해 Memory[AR]을 얻어 IR에 주면 된다.

마찬가지로 Data Unit을 보면 Memory는 7이다.

따라서 MUX를 111로 설정하고, IR의 LD를 1로 설정한다.

또 다음 명령을 위해 PC는 +1 해준다.

T1 : IR <- M[AR] , PC <- PC + 1


여기서 2가지 명령이 동시에 실행될 수 있는 이유는 PC + 1은 BUS를 사용하지 않기 때문이다. 

즉 하나의 T당 한 번의 BUS만을 이용함을 알 수 있다.

T에서 PC + 1을 하지 않는 이유는 PC의 값을 가져오기 때문이다.

값의 보장을 위해서이며 Race Problem 또는 Race Condition이라고 한다.


2. 디코딩

IR에서 명령어를 해석한다.

Control Unit에 대해 이미 살펴봤다.

똑같은 방식으로 해석하면 된다.

Address 부분은 AR로 넘겨주어야 하므로 MUX는 101으로 AR의 LD는 1로 설정한다.

T: I <- IR(15) , D0 ~ D<- Decode IR(12~14) , AR <- IR(0~11)


3. 유효 주소 지정

위 디코딩에서 I비트와 D7에 따라서 4종류로 나뉜다.

D7 = 0, I = 0 일 때 Do Nothing(Direct Addressing)

D7 = 0, I = 1 일 때 AR <- M[AR](Indirect Addressing)

(Direct는 address of data를 뜻하며 Indirect는 address of address of data를 뜻한다.)

D7 = 1 일 때는 레지스터 참조 명령과 I/O 명령인데 위에서 살펴보지 않겠다고 한 2종류의 명령어 Set이다.

T3 은 4종류로 나뉘는데 AR <- M[AR] 이라 가정한다.


4. 데이터 가져오기 (if MRI), 실행 및 저장

우선 MRI는 명령어 Set중 Memory Reference Instruction이다.

명령어에 따라서 다르지만 ADD 라고 가정한다면

T은 DR <- M[AR]

T5 은 AC <- AC ^ DR 이 되겠다.

물론 LDA 라면

T4 은 AC <- M[AR] 로 끝날 수도 있다.



끝나긴 했는데 조금 더 써져있어서 그냥 여기에 같이 올린다.


위 과정의 앞 과정이다.


컴퓨터에서 프로그램을 더블클릭하면

1. OS는 HDD에서 파일을 찾는다.

2. OS는 메모리의 빈 공간을 찾는다.

3. OS는 PC에 프로그램의 첫번째 명령어의 주소를 로드한다.


진짜 끝 !! 


3~4번 과정은 수업 시간에 안해서 틀릴 수도 있다.

졸려서 글이 좀 어수선한거 같다..

  1. 아래에서도 나오겠지만 i bit와 opcode가 없기 때문이다. [본문으로]
  2. AND, ADD 등의 명령어 [본문으로]

'운영체제' 카테고리의 다른 글

OS Structure, Hardware Protection  (0) 2020.07.07
메모리  (0) 2020.07.06
interrupt의 도착 이후  (0) 2020.04.13
OS의 가동 및 interrupt  (0) 2020.04.06
컴퓨터 시스템의 구성 요소  (1) 2020.03.24