저의 글에 방문해 주셔서 감사합니다. 오늘 써 볼 글의 내용은 CPU의 기본 구조 및 작동 방식과 정보의 단위 그리고 이진수의 대해 다뤄볼 거예요. 그럼 시작해 볼게요!!
0.7 CPU의 기본 구조
CPU의 기본 구조를 알기 전 프로그램이 시작되는 과정에 대해서 알아 볼게요. 우리는 코딩을 하면서 프로그램을 만들어요. 이때 이 프로그램은 보조기억장치에 저장이 됩니다. 그 이유는 저번에도 설명했듯이 주기억장치인 메모리는 컴퓨터에 전원이 꺼지면 안에있던 모든 데이터들이 소멸하죠. 때문에 보조기억장치에 저장을 하는겁니니다. 하지만 CPU는 주기억 장치와 밖에 정보를 주고받을 수 없어요. 따라서 보조기억장치에 있는 프로그램을 주기억장치에 옮겨서 정보를 주고받아요.
우리가 흔히 사용하는 C언어, 파이썬, JAVA 같은 언어는 고수준 프로그래밍 언어로 인간 친화적 언어예요. 즉 우리 사람들이 쉽게 이해하고 사용할 수 있는 언어죠. 이에반해 기계어는 0과1 로만 되어있어 사람이 쉽게 이해할 수 없는 기계친화적 언어에요. 이 중간단계가 바로 어셈블리 언어인데 기계에 좀 더 직접적인 명령을 할 수 있지만 다른 고수준 프로그래밍 언어에 비해 사용하기가 어려워 잘 쓰이지는 않아요.
CPU의 구성 요소들로는 제어장치, 산술 놀리 장치(ALU) 그리고 여러 가지 레지스터들이 있는데 이 레지스터를 통해 여러가지 연산과 정보처리를 할 수 있게 된다. CPU가 어떻게 정보를 처리하는지는 차후 설명하도록 할게요.
0.8 CPU가 일하는 방법
위 그림을 보자. 각각의 명령어들이 주소 100,101 그리고 102에 저장되어 있다. 유추를 해보면 10에 저장된 데이터를 11의 데이터와 함 쳐 12에 저장하라는 말인 것 같다. 얼핏 보면 간단해 보이지만 이 명령어들이 처리되는 과정을 보면 그렇지 않다.
먼저 프로그램 카운터가 CPU가 수행해야 할 다음 명령어의 주소를 나타낸다.
메모리 주소 레지스터에 명령어 주소가 들어간다. 그럼 메모리 데이터 레지스터가 메모리 주소 레지스터가 가리키는 주소로 찾아가서 담겨 있는 데이터를 즉 명령어를 가져온다.
메모리 데이터 레지스터가 가져온 데이터가 명령어인 경우 명령어 레지스터에 해당 명령어 데이터를 쓴다.
명령어 레지스터가 실행되기 전 프로그램 카운터 숫자가 증가한다.
명령어 레지스터에 들어있는 명령어가 제어 장치에 들어가 무슨 내용인지 decode 된다.
decode 결과 주소가 10인 곳에 데이터를 가져오란 것을 알았으므로 메모리 주소를 메모리 주소 레지스터에 입력한다.
해당 주소에 잇는 데이터를 메모리 레지스터로 가져오고 이는 명령어가 아닌 계산에 사용되는 상수 이므로 어큐뮬레이터(accumulator)에 옮겨진다. 이때 어큐뮬레이터는 산술 놀리 장치에서 연산될 때 사용되는 레지스터이다.
다시 101번지에 담겨 있는 명령어를 가져와 100번지 명령어를 다룰 때 처럼 작동한다.
ADD를 하기 위해서는 어큐뮬레이터에 담겨져 있는 수를 산술 논리 장치(ALU)에 담는다.
11번지에 해당하는 데이터가 숫자이므로 어큐뮬레이터에 입력한다.
산술 논리 장치에 4라는 데이터가 들어가 더하기 연산을 하여 7이라는 결과를 내놓고 이를 다시 어큐뮬레이터에 저장시킨다.
메모리 주소 레지스터에 저장시킬 주소를 갔다 놓고 메모리 데이터 레지스터에 어큐뮬레이터에 담겨 있는 7이라는 데이터 값을 12번지에 넣는다.
0.9 정보의 단위
데이터와 정보는 얼핏 보면 같은 말인 것처럼 보이지만 엄밀히 따져보면 정말 다른다. 관찰이나 측정을 통해 얻은 값들을 데이터라 부르고 이를 처리과정을 거쳐야지만 우리가 활용할 수 있는 정보가 되는 것이다.
하나의 cell이 꺼지면 0 켜지면 1이 되듯 이러한 정보의 최소 단위를 비트라고 한다. 그리고 이러한 비트 8개가 모여 1 바이트가 되는데 이는 메모리 주소의 기본 단위가 되고 워드는 16비트가 될 수도 있고 32비트가 될 수도 있다. 이는 전적으로 레지스터가 16비트 레지스터인지 32비트 레지스터 인지에 따라 다르다.
0.10 2진수
2진수는 0과 1이라는 숫자로 수를 설명하고 자릿수를 늘려가는 방식으로 표현해요. 2진수를 어떻게 10진수로 변환하는지는 위 그림이 잘 설명해 주고 있다고 생각돼요.
-5를 표현하기 위해서는 two's complement를 거치면 되는데 이는 5를 2진수로 표현하고 보수를 취합니다. 즉 0을 1로 바꾸고 1을 0으로 바꾼다 그리고 숫자 1을 더한다. 이때 맨 앞에 있는 수가 1이면 음수 0이면 양수입니다. two's complement가 잘 되었는지 확인하기 위해서는 5를 표현한 2진수 표현과 -5를 표현한 이진수를 더하여 0이 되면 돼요. 부호가 있느냐 없느냐에 따라 해당 바이트가 나타내는 수가 다를 수 있으므로 주의할 필요가 있어요.
출처: https://www.inflearn.com/course/following-c#curriculum
홍정모의 따라하며 배우는 C언어 - 인프런 | 강의
'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., - 강의 소개 | 인프런...
www.inflearn.com
'C언어 공부(홍정모의 따라하며 배우는 C언어)' 카테고리의 다른 글
홍정모의 따라하며 배우는 C언어 [2.7~2.10] (0) | 2023.11.15 |
---|---|
홍정모의 따라하며 배우는 C언어 [2.3~2.6] (0) | 2023.11.15 |
홍정모의 따라하며 배우는 C언어[1.8~1.9] (2) | 2023.11.13 |
홍정모의 따라하며 배우는 C언어[0.4~0.6] (0) | 2022.10.03 |
홍정모의 따라하며 배우는 C언어[0.0~0.3] (0) | 2022.02.01 |