CPU 에서 어떤 일이 일어나는지 알아보겠습니다.
이 내용은 Scott CPU 라는 것이며, 현대의 CPU 구조는 다를 수 있습니다.
CPU 구조의 설명을 위한 자료이니 참고하기 바랍니다.
출처:
http://www.youtube.com/watch?v=cNN_tTXABUA&list=PLujhvpOxNl1PncvpZD7mWTIhA1wX0aP2W
마더보드에는 cpu 가 장착되며, 컴퓨터의 컴포넌트 간을 연결해준다
오른쪽에는 RAM 이 있다. Random Access Memory 을 뜻하며, CPU에 의해 수행되는 모든 data 를 가지고 있다
CPU 와 RAM사이에 어떤 동작이 일어나는지 살펴보자
RAM 은 주소와 데이터로 이루어지는데, 주소(회색부분) 을 가지며, 각 주소는 data(흰색부분) 이다
CPU 는 RAM 으로 보통 각각의 데이터를 순서대로 요청하고 처리한다
하지만 순서와 다르게 처리하도록 CPU 가 요청 받을 경우에는 그렇게 할수 있다.
이게 바로 RAM 이라고 부르는 이유이다(Random Access Memory)
즉, Data는 필요하면 랜덤하게 접근될 수 도있고, 순서대로 접근할 수도있다.
컴퓨터가 처음 프로그램을 구동하면, 그것이(프로그램?) 그 프로그램을 받기 위해서 주소를 RAM에 보낸다.
"enable" 이 켜지면, 어떤 데이터가 있던 그것을 cpu 로 가져온다.
그 데이터는 CPU 에서 처리가 된다
그 다음 주소값이 있으면 "enable" 켜지고, 또 다른 데이터를 가져온다
이번에 CPU가 데이터를 RAM에 저장하려고 하는경우에는
"set" 을 켠다.
그럼 새로운 데이터는 기존의 값을 엎어치게된다.
RAM에 데이터는 모두 0,1 로 이루어져있지만, 각기 다른 의미를 가지는 데이터를 가진다.
중요한 의미를 가지는 instruction 이 있다. 이것은 CPU가 어떤 작업을 할지 지시한다.
그리고 , "number" 가 있다.
그 다음에는 "주소" 가 있다. 주소 자체가 데이터인 것이다.
이 주소는 여러가지로 쓰인다. 결과 데이터를 외부장치로 보낼때 주소값으로 쓰인다.(프린터나 모니터..)
그리고 "letter" 가 있다. 글자를 모니터에 표시할때를 생각하면 된다. 글자역시 0,1로 이루어진다.
이 값은 arbitrary 다. 01100001 을 a 로 쓰는 식.
Instruction 에는 "LOAD", "ADD", "STORE", "COMPARE", "JUMP IF", "JUMP" , "OUT", "IN" 등이 있다
프로그래머가 순서대로 진행하지 않고, RAM의 다른 주소로 옮겨갈 때 JUMP instruction 을 쓴다.
외부 장치로 내보낼때는 "OUT", 키보드 같은 외부장치에서 입력받을 때는 "IN" 을 사용한다.
그럼 gussing 게임 프로그램을 생각해보자.
첫번째 데이터에 "LOAD" instruction 이 먼저 있고, 다음 데이터에 숫자 "9" 가 있다.
이에 따라 숫자 9를 메모리에서 로딩해서 cpu 로 가져간다.
그리고 IN, keybord 값에 따라 키보드에서 값을 입력받는다.
그리고 "COMPARE"에 따라 9와 입력값을 비교한다.
두 값이 같지 않으면 계속 반복하고, 같으면 다른 주소로 jump 한다.
이제 CPU 안쪽을 살펴보자
CPU 안에는 Control unit 과 ALU 가 있다.
Control unit 은 선장처럼 모든 걸 관장한다. ALU 는 연산을 담당한다.
더하고, 비교하는 등
input A, B 가 있으며,
Control unit 은 RAM에서 instruction 을 가져온다.
작업의 종류가 ALU 로 전달된다.
그리고 ALU 의 출력쪽에는 register 가 연결되어있다.
이는 RAM과 비슷한 동작을 하는데, 값을 저장하고 꺼낼수 있다.
intruction 이 진행중일 때, 값을 임시로 저장하므로써 CPU 의 속도를 빠르게한다.
Register에도 "set" 이 세팅되지 않으면 값이 저장되지 않는다. RAM과 마찬가지.
그리고 "enable" 이 세팅되어야 register의 값이 밖으로 보내진다. CPU bus 로.
앞에서 마더보드에서 설명했듯이 cpu bus 는 요소간을 연결하는 선들의 집합이다.
그리고, 다른 register 도 버스에 연결되어있다.
이들 register 에는 instruction에 의해서 저장된 값들을 가지고 있다.
네 개의 register 는 값을 저장하는데 쓰인다.
그리고 이 register 의 값은 temporary register 로 저장될 수 있다.
temp register는 "enable"이 없고, "set" 만 있다. 오로지 ALU 로 내보내기만 하기 때문이다.
다른 register랑 충돌하지도 않음.
input A 는 temp register 없이 직접 버스에 연결된다.
그리고 "instruction" 을 받기 위해서 "instruction " register 가 있다.
이 지시는 "type of operation" 을 통해서 ALU 로 전달된다.
그리고 "COMPARE" instruction 이 있을때, flags 가 쓰인다.
A가 크다. 같다. set. 등으로 표시를 할 수 있다.
flag 가 "set"이면 compare를 마치고 다음 지시를 따른다. 가령 jump.
jump if 등을 할 때는 cpu 내부적으로 instruction과 flag 를 같이 사용한다
그리고 또 하나의 중요한 regiser.
'instruction address' register 를 사용하여 다음 instruction 이
RAM의 어떤 주소에서 올게 될지를 알게 된다.
"jump if " instruction 을 받고, flag 가 equal 이면, jump 를 트리거한다.
이 때 jump 를 하게 되면 "instruction address" register 로 다음 데이터 조각(주소) 을 넣는다.
그리고, 해당 주소값은 enable 하게 되면 wire로 신호가 흘러간다.
또 하나 'memory address' register 가 있다.
set 만 있어서, set으로 값을 저장하면 그때 RAM의 주소로 값이 들어간다.
그리고 다음 지시에서 출력을 한다면 외부로 가는 wire를 사용한다.
최근의 cpu 는 초당 이런 작업을 10, 100, ~ billion까지도 하게 된다.
현대의 cpu 는 이런 scott cpu 보다 더 복잡하지만 기본은 구조는 마찬가지라고 보면된다.
크게 보자. 오른쪽 두개는 set, enable wire.
왼쪽 네개는 in, out wire.
위에 8개는 address wire
아래 8개는 data wire 다
다시 확대하면 이 그림이 된다.
이제 CPU동작을 알게되었다.
wire로 전기신호를 보내면서 값을 cpu 와 ram간에 주고받는다.
- 불펌금지 -