금융 경제 보험 정보
컴퓨터 구조의 가장 low 레벨 본문
C++ 를 공부하다 보니 포인터에서 메모리 구조와 저장 주소라는 개념이 나온다.
이 부분을 개념적으로 이해해보고 싶어서 파고들다 보니 결국 가장 깊숙한 심해에 본질적으로 무엇이 있는가? 라는 쓸데없는 호기심이....생겼다 그래서 이해한 내용을 정리해 본다.
우리가 컴퓨터 프로그램을 짤 때 가장 기본적인 덥셈하는 컴퓨터 프로그램을 만들었다고 생각해보자. 예를 들어서 2+3 = 이라는 것을 실행하면 5라는 값이 나온다.
그럼 컴퓨터는 이 2와 3 그리고 덧셈이라는 것을 어떻게 이해하고 어디에 저장하는 것일까?
컴퓨터는 모든 것들을 0과 1의 이진법으로만 이해한다. 그래서 컴퓨터에게는 2는 인간의 2가 아니라 0과 1의 조합이고 3도 0과 1의 조합이다. 그런데 여기서 잠깐! 이진법이라는 것도 결국 숫자의 데이터이지 않는가? 그럼 가장 최초의 1과 0은 또 어떻게 만들어진것인가? 라는 의문이 들었다.
0과 1의 더 low레벨은 결국 전압? 이라고 해야하나 결국 전기 자극의 형태이다. 전기 전압의 정도에 따라서 0과 1이 약속 되어 있는 것이다. CPU에는 이런 전기작을 이해하는? 반도체가 있고 여기에 약속된 명령에 따라 전기자극이 진행되는 것을 1과 0의 형태로 변환되는 것이다.
그래서 CPU가 직접 처리하는 모든 데이터와 명령어들은 사실 RAM에 일시적으로 저장되어 있는 전압의 형태이다. 숫자를 처리한다는 것보다는 전압의 형태를 처리한다고 볼 수 있다.
그래서 본질적으로 우리가 코드를 작성할 때, 명령어 파트와 데이터 파트로 나뉘는데 그런데 가장 low레벨의 기계어 단계에서는 이 두 단계를 분류하는 것도 큰 의미가 없다 왜냐면 이것또한 전압의 형태이기 때문이다.
그럼 컴퓨터가 데이터를 0과 1로 저장하는 건 알겠는데 그럼 실행의 단계에 있는 명령어는 도대체 어떻게 처리되는 것일까? 이것역시 전기의 형태로 진행이 된다. Sum이라는 형태의 명령어를 나타내는 전기전압 형태를 약속해 두고 Sum형태의 전기 자극이 오게 되면 거기에 상응하는 형태로 데이터의 전기 형태를 변형하는 것이다. 여기서 logic에 해당되는 and, or, xor 역시 전기의 1과 0을 약속한 형태로 진행이 된다.
그래서 컴퓨터의 가장 본질적인 low 레벨은 결국 약속된 전기형태를 조작하고 저장하는 형태라고 이해할 수 있다.
정리하면
- CPU는 먼저 메모리(RAM)에서 "Sum" 명령어를 읽어온다. 이 명령어는 이진법형태의 전기신호로 이미 표현이 되어 있다.
- 그런다음 CPU는 이 전기신호의 약속된 명령어를 해석하고, 이 해석하는 과정에서 함께 붙어있는 데이터를 메모리에서 불러온다. 이 데이터들 역시 이진법 형태의 전기신호로 표현이 되어 있다
- 이렇게 가져온 데이터는 CPU 내부의 산술논리 단위(ALU)로 전단되어 덧셈 연산이 수행된다. 이 연산은 트렌지스터가 전기 신호를 조작하는 방식으로 이뤄진다
- 연산 결과는 다시 이진법 형태의 전기 신호로 표현되며, CPU 내부의 레지스터에 저장이 된다.
이런과정에서 보면 결국 게임 프로그래밍을 한다는 것은 결국 전기 신호를 끊임없이 조작하는 그런 것이구나.....뭔가 현타가.ㅋㅋㅋ