소프트웨어던 하드웨어던,
우리가 개발자로서 일을 할수 있는 것은
사실 이런 폰 노이만 구조와 같은 이론을
제시한 사람들이 있기 때문이다.
따라서 우리는 개발자로서 초기 컴퓨터 구조를 제시해준
폰 노이만과 그의 동료들에게
머가리를 천번 박아도 모자를 지도 모르겠다.
어쨋든 폰 노이만은 천재로서 세상에 알려져 있다.
그의 업적을 보면,
그 누구도 이에 동의하지 않는 사람은 없을 것이다.
폰 노이만은 아래와 같이 생겼다.
|
폰 노이만 |
하지만 이런 의문이 든다.
폰 노이만이 분명 천재이고,
그가 위대한 업적을 남긴것에 깊이 공감하며,
그 업적에 대해서는 찬사를 보내는 바이지만,
소프트웨어 개발자로서 그를 자세히 알 필요가 있을까?
나는 없다고 생각하기 때문에
딱히 언급하지는 않겠다.
하지만, 컴퓨터를 제외하고도 수학 등의 업적을 남긴 사람이기 때문에
어떻게 생긴 사람인지는 알아야 되며,
폰 노이만은 충분히 그럴 자격이 있는 사람이다.
혹시 알고 싶은 사람을 위해서 아래 위키백과의 링크를 남긴다.
(
https://en.wikipedia.org/wiki/John_von_Neumann)
실제 우리들이 쓰고 있는 컴퓨터 시스템들이
이런 아키텍처로 이루어져 있기 때문에
앞서 우리는
이 폰 노이만 구조를 세상에 제시해준
폰 노이만와 그의 동료들에게 깊은 찬사를 보냈다.
또한 이 자리를 빌어
다시 한번 그에게 찬사를 보내는 바이다.
이 쯤하면 그도 충분히 만족하리라 생각된다.
그럼 이제 우리의 목표인 폰 노이만 구조를 살펴보자.
위와 같은 아키텍처를
폰 노이만 구조(Von Neumann architecture)라고 한다.
물론 이 아키텍처는 폰 노이만과 그의 동료들이
에드박(EDVAC) 보고서의 최초 초안(First Draft of a Report on the EDVAC)에서
서술된 기반으로 만들어진 아키텍처이다.
따라서 사실 폰 노이만이 혼자서 제시한 아키텍처는 아니며,
에드박의 보고서에는 수학적 논증만이 있을 뿐
위와 같은 아키텍처를 실제로 그들이 제시한 것은 아니라고 한다.
어쨋든 나는 현재(2020년)의 컴퓨터 아키텍처와
폰 노이만 아키텍처를 구분하여, 분류 할 것이다.
보기 쉽게 일단 색으로 표시해놨다.
분류는 다음과 같이 하였다.
제어 장치, 산술장치 → CPU(중앙처리장치)
메모리 → RAM, Cache, HDD(SSD)
누산기와 입력, 출력 → 프로그램(소프트웨어)
누산기와 입력, 출력에 대해 조금 오해의 소지가 있을 수 있어서
따로 언급하지만,
산술 장치 안에 있는 누산기는 물론 하드웨어로 구성되어 있다.
하지만, 좀 더 소프트웨어에 대한 이해를 돕기 위해
이런 누산기를 따로 빼서 이를
프로그램으로 취급하겠다.
물론 이를 좀 더 작은 개념에서
함수나
클래스와 같은 것으로 생각해도 무방하다.
그럼 분류를 하였으니 각각 살펴보자.
① 제어 장치, 산술 장치 → CPU(중앙처리장치)
이런 제어 장치와 산술 장치가 합쳐진 것이
현재 컴퓨터의 CPU라고 봐도 무방할 것이다.
따라서 우리는 위의 폰 노이만 아키텍처를 현실의 하드웨어에 대입해보면
|
AMD사의 RYZEN |
위와 같은 AMD사의 RYZEN이라는 모델명의 CPU라고 할 수 있을 것이다.
이런 CPU에서 하는 일은 간단하다.
우리가 컴퓨터를 사용할때의 모든 명령과 계산은 이 CPU를 거친다.
우리는 컴퓨터를 부팅하면 운영체제로 진입할 탠데,
이런 운영체제와 그 운영체제 안에서 이루어지는 대부분의 명령 및 연산은
CPU에서 이루어진다.
② 메모리 → RAM, Cache, HDD(SSD)
폰 노이만 구조에서의 메모리는 모든 저장장치를 말한다.
현재 많은 사람들이 메모리라고 인식하는 것은
아마 RAM일 것이다.
|
RAM |
하지만, 폰 노이만 구조에서의 메모리는 모든 저장장치이기 때문에
하드 디스크라고 불리우는 HDD와 SSD도 포함되며,
Cache도 마찬가지다.
|
Hard Disk Drive(HDD) |
|
Soild State Drive(SSD) |
|
Cache |
심지어 Cache의 경우는 중앙처리장치인 CPU에서도 활용된다.
③ 누산기와 입력 출력 → 프로그램(소프트웨어)
다시 한번 말하지만,
설명의 편의를 위해 소프트웨어 취급 하는 것이다.
이런 소프트웨어는 크게 운영체제나
|
MS사의 Windows 운영체제 |
게임
|
Blizzard사의 WOW |
등의 소프트웨어가 포함될 수 있으며,
작게는 단 하나의 함수와 같은 모듈도 포함된다.
그리고 이런 아키텍처의 부품들(물론 소프트웨어는 제외)은 Mother Borad라는
메인보드에 모두 장착되어져,
|
Mother Board(메인보드) |
폰 노이만 구조 기반의
하나의 컴퓨터로서 기능을 하게 된다.
현대의 컴퓨터 기기라고 불리우는 것은
모두 이런 기반으로 만들어져있다고 해도 과언이 아니다.
현실에서 우리가 자주 볼수 있는 기기들인
데스크톱 컴퓨터, 노트북 컴퓨터와
|
데스크톱 |
|
노트북 |
그리고 최근에 패러다임인 모바일 컴퓨터의 대표 기기인
|
스마트폰 |
스마트폰까지 속 내부를 들여다보면
대개 이런 폰 노이만 구조에 크게 벗어나지 않는다.
이에 따라 우리는 폰 노이만 구조를 조금 더 확장 할 수 있다.
|
폰 노이만 구조의 확장 |
위와 같은 그림으로 확장 할 수 있으며,
소프트웨어 개발자로서 신경써야 할 부분은
보라색 박스 부분 뿐이다.
따라서 컴퓨터 개론에서 추출 할 수 있는
소프트웨어 개발자로서의 학사적 지식인 '부분적 진리'는
저
보라색 박스에 있다고 조심스럽게 결론지을 수 있다.
하지만, 나의 이런 논지에
어떤 사람들은 '나머지도 알고 가면 좋지 않느냐'라는 식으로
반박할지는 모르겠다.
물론 알고 가면 좋을 수 도 있다.
왜냐하면 그런 사람들은
'언젠가는 도움이 될것이다' 라는식의 논지이며,
나도 '언젠가'는 도움이 될지는 모르겠다는 의견에는 동의한다.
하지만 그 '언젠가'가 정확히 언제인지,
어느 시점인지는
그런 이야기를 하는 사람들은 모르는 척 한다.
만약 당신이 미래의 임베디드 개발자나 하드웨어 개발자로
전직한다는 계획을 가지고 있다면,
얼마나 도움이 될지는 알 수 없으나,
알고 있는 것도 괜찮을 것이라 생각한다.
하지만 그렇다고 하더라도
지금 당장 우리는 소프트웨어 개발자로서 일해야 하며,
소프트웨어 개발자로서 알아야 할
컴퓨터 개론의 학사적 지식은 저 부분 뿐이다.
또한 설사 임베디드 개발자나 하드웨어 개발자로 전직하더라도
그 때가서 공부해도 충분히 늦지 않다.
선택과 집중을 할 필요가 있다.
단 한번에 이해의 영역에 도달하기는 매우 힘들다.
물론 어떠한 사람들은 '난 됐는데'라며 이야기 할지는 모르겠으나
내가 됐기 때문에 다른 사람들도 될 것이라는 생각에서
이제는 벗어날 필요가 있다.
이전과 다르게 이미 사회가 고도화 되었고
이에 따라 고도로 분업화 되었기 때문에
내가 할 수 있는 것을 다른 사람들은 못할 수 있다.
만약 그러한 생각이 아니라
단순히 상대를 업신여겨서 자신의 비열함을 만족시키기 위해서 라면
내가 이에 대해서 더 이상 말할 필요는 없을 것 같다.
하지만 정말로 그렇지 않다면
그런 것 들은 필요할 때 마다 탐구라는 이름의 공부하면 되는 것이다.
따라서 소프트웨어 개발자로서 일하고 싶은 우리들은
하드웨어 지식까지 알 필요는 없다고 나는 생각하고 있다.
하지만 그럼에도 더 알고 싶은 사람들은 따로 공부하면 된다.
해야만하는 시기는 존재 하지 않는다.
시중에 학문적인 컴퓨터 개론의 교과서가 많으며
거기에는 그런 사람들을 만족시킬 수 있는 지식들이 많을 것이다.
선택은 각자의 몫이다.