The matter is how it can be , not how it is now

O2, 엔지니어링 season2

하드웨어, 컴퓨터, 소프트웨어, 제품

sstrato 2024. 1. 10. 23:46
728x90

하드웨어, 

설킷(circuit)으로 구성된 아이들을 하드웨어라고 부른다. 기술시간이나 아날로그 회로 시간에 배운 그 아이들. 저항, 인덕턴스, 커패시터 등으로 구성된 뭐 그런것들. 그리고 이걸 해석하려면 웨이브 이퀘이션 , 편미분등을 알아야 한다. 그리고 맥스웰 방정식까지…. 넘어가자.

전형적인 RLC서킷

디지털 회로는 우리가 알고 있는 그 논리 게이트들의 연속이다. 그리고 이것이 컴퓨터라는 전자장치를 이루는 기본이 된다. 아래의 그림에서 보이는 XNOR 게이트가 컴퓨터의 기본 원리이다 컨트롤 비트와 데이터 비트의 조합에 따라서 X값의 출력이 결정된다.

XNOR게이트

양자 컴퓨팅도 양자(quantum)상태( 입자이자 파동인 미세영역, 플랑크 상수를 운동량으로 나눈값 물질파의 파장이 물체의 크기보다  큰 경상태,  즉 속도나 질량이 아주 아주 작은 구간)를 활용해서 자기장의 방향과 양자 꼬임 상태를 통해서 이런 XNOR 회로를 만들어 붙여서 계산하는 전자 장치이다. 

 

컴퓨터 

컴퓨터라는 전자장치는 하드웨어 변경없이 일반적 명령어 집합인 프로그램을 실행할 수 있어야 한다. 프로그램을 받아들이고 이것을 컴퓨터가 실행 할 수 있는 명령어로 바꾸어 실행시킬 수 있어야 한다. 프로그램을 메모리에 로딩 시켜서 실행할 수 있도록 만든것(제네럴 로딩)이 컴퓨터와 다른 전자장치 하드웨어를 나누는 기준이 되었다. 그리고  물리적으로 컴퓨터를 구성하는 부품들을 사람들은 하드웨어라고 부르기로 했다. 그리고 그 외의 것을 소프트웨어라고 부르기로 했다. 

 

 

소프트웨어 

제네럴 로딩을 실현하기 위해서 컴퓨터라는 전자장치에 새로운 하드웨어(부품)이 필요했다. 바로 메모리와 버스 그리고 cpu. (그리고 우리가 알고 있는 x86이란 이름은 사실 인텔의 제품군을 의미하는 단어다. 즉 인텔이 만든 제품명이다).  이렇게 하드웨어가 갖추어지고 나서, 대개의 경우 버스를 기준으로 cpu ram i/o disk가 연결되어 있는 것을 폰 노이만 구조 의 컴퓨터라고 , 이것들을 연결하기 위한 명령어 세트를 동시에 한꺼번에 만들 필요가 있었다.

 

11100011101000000111000000000100 

이란 ARM code는 숫자 4를 특정 레지스터에 옮기란 명령어다. 이 동작을 하려면 이 코드가 돌아가는 하드웨어 시스템을 정확하게 이해해야한다.  사람이 이걸 다 알 순 없잖아. 그래서 최대한 사람이 쉽게 이해하기 위해서 만들어낸게 이런 명령어가 들어가 있는 어셈블리 언어다. 

mov r7, #4 이런 식으로 말이다. 

int a =  4 --> 11100011101000000111000000000100 형태로 최종적으로 이렇게 만드는 것을 사람들은 컴파일링 이라고 부르기로 했다. Int a = 4 같은 텍스트의 집합을 소프트웨어라고 부르고 있다. 

디지털 서킷 —> 컴퓨터 —> 컴퓨터명령어 —> 어셈블러 —> 고차원 언어 >>> 소프트웨어 

소프트웨어 아래에서 일어나는 최소 5가지 이상의 영역들을 사람들은 이제 하드웨어라고 생각하려고 한다. 컴퓨터 명령어, 어셈블러 들은 하드웨어랑 똑같이 딱 정해진 대로 움직여야 하기 때문이다. 그래서 정말 하드웨어라고 생각한다. 그리고 소프트웨어는 늘 언제가 소프트 한 그 무언가 라고 생각한다. 

소프트웨어는 소프트 하지 않다. 

잘 알려진 오해다. 소프트웨어가 소프트하다는 것.  아니다

1) 소프트웨어는 변경에 전혀 소프트하지 않다. 

소프트웨어를 변경한다고 생각해보자. 바로 돌 수 있을까? 아니면 하드웨어에 구멍을 뚫는것 같은 정도의 변경을 소프트웨어에 한다고 해보자 바로 구멍을 여러군대에 걸쳐서 만들 수 있을까? 그리고 그런 변경이 과연 장애를 만들진 않을까? 

2) 소프트웨어는 하드웨어 변경에 전혀 소프트하지 않다. 

잠깐 이야길 했지만 x86에서 잘 돌던걸 ARM 또는 크레이 슈퍼컴퓨터에서 돌린다고 생각해보자. 내가 위에서 언급한 소프트웨어 아래에 있는 또는 감춰저 있는 저 영역때문에 거의 못돌린다. 

3) 소프트웨어는 구현 및 설계에 전혀 소프트하지 않다. 

정말로 소프트웨어가 소프트하게 설계가 가능한가? 연필로 그림을 그리듯 가능한가? 구현은 어떤데? 결국 성능 기능 유지보수 외관 생각하다보면 구현도 맘대로 안된다. 하드웨어 성능이 달리는걸 느껴보거나 오에스나 펌웨어 컴파일러가 오동작하는것도 느껴보다 보면 내 맘 같이 동작하지 않는다. 그래도 소프트하다고 믿나?

 

몇가지 예를 더 들려고 했지만, 그건 직접 생각해보자. 어쨌든 컴퓨터가 그러하게 구조가 만들어져 있으니,  

 

그래서 난 소프트웨어란 단어 자체가 싫다. 원래 하드웨어의 반대개념으로 탄생된 단어 인데, 하드웨어라는 물리적 한계를 지워버려서 그렇다. 그리고 하드웨어를 별개로만 생각하도록 분리시키는 단어라서 싫다. 

 

제품 

그래서 난 예전부터 하드웨어/소프트웨어같은 구분시키고 고립시키는 단어 대신 디지털 제품이란 단어를 좋아한다(아마 내 주위에 아는 사람들은 내가 그런걸 다 알거다). 뭔가 통합적으로 생각하게 하고, 전체적으로 보게 만들고, 용처와 쓸모를 다 생각하게 만들어서 그렇다. 그리도 디지털이란 단어를 굳이 붙이는 이유는 결국은 디지털 설킷을 생각하게 만들고 본래의 허상에 가까운 모습(계속 까다 보면 게이트 밖에 나오지 않는다, 또는 0 1 만 나오고)을 깨우치게 해줘서 그렇다. 

 

 

728x90