오늘날이야 x86이라는 컴퓨터 아키텍처가 세계를 완전히 평정해 버려서 PC부터 슈퍼컴까지.. 그야말로 모바일만 빼면 다 쓰이는 것 같다. 그리고 인텔은 그 x86이란 걸 최초로 개발한 본가로 너무나 유명하다.

x86은 아주 오랜 세월 동안 하위 호환성을 최대한 유지하면서 아주 점진적으로 진화해 온 아키텍처이다.
1970년대에 8086과 8088이라는 16비트 CPU에서 시작됐는데, 심지어 더 옛날에 8비트 시절의 8080도 x86의 전신 조상이라고 볼 수 있다. 8008이나 4004까지 가면 너무 멀어지는 것 같지만...;;;

이 x86은 1980년대 중반 80386 버전에서 32비트로 확장됐고, 그로부터 20여 년 뒤엔 64비트로도 확장되어 오늘에 이르고 있다. 다만, x86-64는 인텔이 아니라 AMD에서 처음으로 내놓았다는 것이 특이점이다.
이런 주류 라인인 x86 말고 인텔에서 만든 CPU라니, 뭔가 마이크로소프트의 제품 중에서 Windows, Office, Visual Studio가 아닌 계열을 탐방하는 것 같은 느낌인데.. 이런 것들이 있었다. 다들 32비트였다는 공통점이 있다.

1. iAPX 432 (1981)

인텔에서 개발한 최초의 32비트 CPU는 80386이 아니라 바로 이놈이었다.
16비트 x86이 최대한 저가 보급형에 현실 타협 컨셉으로 개발됐으니, 그 다음 32비트 CPU는 큰 포부를 갖고 실험적인 기능을 몽땅 때려박아 보자~~ 이런 목표를 갖고 개발됐던 것 같다.

x86만 해도 명령어가 아주 촘촘하고 내부 구조가 복잡한 CISC 방식이었는데, 얘는 그 이념이 더욱 극대화됐다. 운영체제나 특정 객체지향 언어 vm에서 소프트웨어적으로 담당할 일을 CPU가 회로 차원에서, 길다란 인스트럭션 하나 직통으로 최대한 지원하는 것을 추구했다.

구체적으로는 그 시절에 특수 분야에서 현역으로 쓰이고 있던 Ada 언어와 아주 찰떡궁합을 이루려 했다. 오오~ 그러면 이 CPU를 타겟으로 하는 Ada 컴파일러는 intrinsic 명령이나 구문이 많이 제공됐겠다.

글쎄, 객체지향 언어라면 RTTI 기능이나 가상 함수/메시지 테이블을 뒤지는 기능이 CPU빨로 직통 지원된다면 그건 바람직한 일이겠지만..
그 시절 기술로 CPU 안에 지나치게 많은 기능을 집어넣는 건 부작용을 야기했다.
CPU 내부가 너무 복잡해졌고 제품의 생산 비용도 치솟았다. 그런 주제에 얘는 동시대의 "16비트" 프로세서인 80286보다도 속도가 훨씬 느려졌다.

그나마 이 CPU의 장점을 살릴 수 있게 코드를 잘 생성하는 컴파일러를 개발하는 것도 영 지지부진했다. 단점은 한 트럭인데 장점도 애매하고.. 총체적인 난국이었으며 결국 이 아키텍처는 실패로 끝났다.

이런 홍역을 치렀으니, 인텔에서 1985년 말에 80386은 기존 8086의 구조를 최대한 유지하고 호환성도 살리면서, 정말 바꿔야 하는 부분만 16비트에서 32비트로 확장하는 컨셉으로 만들어졌다.
32에서 64비트로 넘어갈 때 Itanium은 망하고(너무 파격적) AMD64가 살아남았었다(좀 보수적). 그런데 이와 같은 유형의 삽질이.. 옛날에 32비트로 넘어갈 때도 인텔 내부에서 이미 벌어졌다고 볼 수 있다.

2. i960 (1988)

iAPX 432의 실패 이후에 인텔에서 오랜만에 새로 만든 비x86 CPU는 바로 얘였다. 정확히는.. 처음엔 지멘스와 공동 개발을 시작했지만 지멘스 쪽이 프로젝트를 포기하고 중도 이탈하면서 최종 결과물이 인텔 것이 되었다.

i960은 CISC가 아닌 RISC 방식으로 설계됐으며, 애초에 범용 컴퓨터가 아니라 산업용 임베디드 MCU 용도로 만들어졌다. 에, 그러니까 절대적인 성능이 뛰어나지 않더라도 특정 분야 연산만 겁나 잘한다거나, 열악한 환경에서도 퍼지지 않고 끈질기게 잘 돌아가는 것 말이다.
얘는 처음에 군용으로 납품되었으며 초창기 F-22 전투기의 내부에도 들어갔다고 한다. 미군 전투기..?? 거기야말로 오랫동안 Ada 언어를 사용했던 곳이 아닌가? 반면교사 선배격인 iAPX 432가 관심을 가졌던 그 언어 말이다.

i960은 인텔이 만들었던 비x86 CPU 중에서는 가장 성공했다. 범용 컴퓨터가 아닌 덕분에 특정 분야에서 고정된 고인물 수요가 보장되어서 수십 년 동안 생산되고 쓰였다.
얘는 일본 SEGA에서 개발한 버추어 파이터 2의 플랫폼인 MODEL2 기판에 채택되어 쓰이기도 했다.

"게임 크리에이터 열전"이라는 20년 전의 일본 만화에서 '스즈키 유 - 버추어 파이터' 편을 보면, 그 시절 기계로 현란한 3D 그래픽 애니메이션을 구현하기 위해 전투기에 들어가는 CPU까지 구해서 기판을 만들었다는 얘기가 있었는데..
1편 때는 조종사 훈련용 전투기 시뮬레이터에 들어가는 CPU와 GPU를 도입했었다. (MODEL1, NEC V60) 그러다가 MODEL2는 전투기 실물에 들어가는 인텔 i960 CPU가 쓰인 것이다. 그런 차이가 있다~!

3. i860 (1989)

얘는 960과 동시기에 같은 회사의 다른 팀에서 나란히 개발되고 있던 또 다른 32비트 CPU였다. 960보다 숫자가 작지만 960보다 나중에 출시됐다.
얘는 산술· 과학 계산을 빡세게 하는 워크스테이션이나 슈퍼컴을 겨냥하여 FPU를 64비트 스케일로 내장했다. 그리고 명령의 병렬 수행을 여러 모로 의식해서 명령 체계를 RISC를 넘어 VLIW 형태로 설계했다. 사실상 32비트판 Itanium이고 Itanium의 정신적 선배나 마찬가지였다.

하지만 i860은 컴파일러가 특정 분야의 프로그램 한정으로 이 CPU의 특성을 잘 살리는 방향으로 코드를 잘 번역하고 잘 생성해 줘야만 제 성능을 낼 수 있었으며.. 그러기가 쉽지 않았다. 다른 대부분의 상황에서 얘의 성능은 기존 CPU나 동급 경쟁사의 CPU보다 뛰어나지 못했다. 그래서 얘는 얼마 못 가고 실패했다.

인텔은 그래도 이 설계 이념을 버리지 못했다. x86이 당장 현실적으로 상업적으로는 잘나가고 있지만 얘는 레거시 때문에 구조적으로 너무 지저분하긴 했기 때문이다.
그러니 나중에 64비트로 갈아탈 때는 iAPX 432와 i860의 이념을 계승하면서 단점을 보완은 했다고 생각하면서 Itanium을 개발했다. 하지만 Itanium은 실패한 선배의 전철을 거의 그대로 밟으면서 역시 처절하게 실패했다.

그래도 인텔 i960과 i860의 개발진은 훗날 x86 동네에서 Pentium Pro CPU를 개발했다. 멀티미디어 지원에 필요한 병렬화 고속 연산 명령인 MMX를 만들어서 그 이념을 x86에다가 실현해 냈다.

사실은 마소의 Windows NT라는 것도 맨 처음, 최초로 타겟으로 설정한 아키텍처는 놀랍게도 이 i860이었다고 한다. 마소가 전통적으로 인텔 진영과 사이가 좋기도 했으니.. 하지만 본가이던 i860이 망조가 들고, NT는 처음부터 이식성도 있게 설계되었기 때문에 곧 x86, MIPS 등의 아키텍처로 포팅된 것이다.

나중에 Windows 2000은 NT 버전 5.0 급이었는데, 얘도 64비트용은 Itanium이 정식 출시되기를 기다리면서 대부분의 기간을 DEC Alpha 환경 내지 Itanium 껍데기 시뮬레이터에서 개발됐다고 한다.
하지만 이번에도 인텔 CPU가 통수를 치는 바람에 Win 2000은 사실상 x86 전용으로, WinNT의 역사상 지원 CPU가 가장 적은 버전으로 개발돼 버렸다.

글쎄, 인텔이 구닥다리 X86을 버리려고 1990년대부터 삽질했었다면, 마소는 NT 커널을 버리려고 2000년대 중후반부터 이것저것 실험하고 노력했던 것 같다. 하지만 현실에서는 이 시도 역시 전혀 성공하지 못했다.

  • 과거에 Windows 3.0은 real, standard, enhanced 이렇게 x86 하에서 실행 모드가 다양했다.
  • 그 반면, Windows NT 3~4는 x86, MIPS, PowerPC 등 지원하는 CPU가 다양했다.
  • Windows 2000은 x86 전용이 돼 버렸지만 그 32비트 한계 하에서 PAE나 /3GB 같은 옵션을 제공하면서 메모리를 최대한 많이 뽑아내려고 노력한 흔적이 들어갔다.
  • Windows의 역사상 Itanium을 제대로 지원했던 버전은 XP가 유일했다.

Posted by 사무엘

2026/07/10 08:35 2026/07/10 08:35
, , , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/2449

예전에 했던 말도 있지만.. 암튼 지난 30여 년에 달하는 컴퓨터의 역사를 곱씹어 보는 건 재미있다~!

1. 인텔 CPU

(1) 인텔 8086은 유구한 x86 시대의 서막을 연 기념비적인 16비트 CPU이다(1978). 나중에 출시된 8088은(1979) 거기에서 외부 데이터 버스만 8비트로 낮춰서 성능을 약간 디버프 했지만 가격도 낮췄다.
80186의 존재감은 비행기에서 보잉 717의 존재감과 아주 비슷하게 듣보잡이다. -_-;; 애초에 PC보다는 임베디드용으로 만들어진 8086의 변종이었다.

(2) 80286의 제일 큰 존재 의의는 보호 모드의 첫 지원이지만.. 이게 많이 부족하고 불완전해서 역시 듣보잡으로 묻혔다. CPU로서 80286은 그냥 클럭 속도 더 빨라진 8086이나 다름없고, 현실적으론 컴퓨터 완성품으로서 AT (286 기반)가 XT (8088 기반)보다 나아진 점이 훨씬 더 많이 와 닿곤 했다. 2HD 고밀도 디스켓, 배터리 기반 시계, 키보드 속도 조절 등..
그에 비해 101키 키보드, VGA 컬러 그래픽이나 하드디스크는 XT에도 일단 장착 가능은 했던 구성요소이다.

(3) 80386은 드디어 32비트 CPU이다. 32비트 정도는 돼야 어지간히 큰 정수라든가 부동소수점을 원활히 표현할 수 있고, 메모리 주소 공간도 넉넉히 확보해서 보호 모드 가상 메모리 같은 것도 구현할 수 있다.
오리지널 DX는 외부 데이터 버스와 메모리 주소 버스도 모두 32비트인 반면, 염가 다운그레이드 에디션으로 나중에 출시된 SX는 이게 각각 16비트, 24비트였다. 과거 8086과 8088의 관계와 거의 동일하다.

(4) 80486도 DX와 SX 구분이 있었는데, 이때는 단순히 부동소수점 코프로세서가 기본 내장된 게 DX이고, 안 그런 게 SX였다. 거기에다 486은 DX조차도 클럭 속도를 더 끌어올린 DX2, DX4 이런 구분이 있었다.
이때 'VESA 로컬 버스' 규격 갖고 많이 떠들곤 했다. 천상 486 전용 규격으로 쓰이다 말았지만..
그리고 캐시 메모리라는 게 들어가기도 하고.. 486이 386에 비해 많이 발전하긴 했었다.
1990년대 중반, 486? 펜티엄쯤부터 컴퓨터 본체의 모양이 모니터 아래에 가로로 놓는 게 아니라 모니터 옆에 세로로 놓는 형태로 슬슬 바뀌어 정착했다.

(5) 펜티엄은.. 외부 데이터 버스가 CPU의 레지스터보다도 더 큰 64비트로 확장됐다. 물론 그렇다고 펜티엄이 아키텍처 차원에서 64비트 CPU인 건 아니었다.
인텔 셀러론의 초창기 버전은 펜티엄 2에서 L2 캐시 메모리가 없는 보급 염가판이었다. 그런데 이게 아예 전혀 없으니까 성능이 너무 떨어져서 나중에는 캐시가 약간이나마 장착되기도 했다.

이렇듯, 컴퓨터의 성능에는 클럭만 영향을 끼치는 게 아님을 알 수 있다.
그리고 한때는 옵션으로 주어졌던 요소들이 나중엔 다 기본으로 포함돼 들어가고 다른 새로운 기능이 옵션으로 도입된다.

2. Windows 운영체제

  • Windows 3.0은 MDI 창, VGA와 본격적인 컬러 지원을 위한 장치 독립 비트맵(DIB), WinHelp(!!!) 같은 획기적인 기능을 도입했고, 3.1에서는 OLE, 트루타입 글꼴, 공용 대화상자를 도입함으로써 현대의 Windows 근간을 닦았다.
  • 거기에다 Windows 3.0은 386 확장 모드라는 걸 도입해서 80386 이상 CPU에서 지원되는 보호 모드 멀티태스킹 기능을 일부 사용하기도 했다. 하지만 앱이 전반적으로 돌아가는 건 다 16비트 기반이다.
  • Windows NT는 저렇게 도스 진흙탕인 기존 Windows와는 달리, 미래를 바라보며 개발됐다. DEC Alpha라는 64비트 CPU용 에디션이 있기도 했으나.. 이때는 컴퓨터의 메모리도 4GB보다 훨씬 모자랐고 Windows 역시 그냥 32비트 모드로 동작했다고 한다. 포인터 8바이트니 INTPTR이니 그런 거 없었다는 뜻..

그렇기 때문에 Windows의 역사상 최초의 진정한 64비트 프로그래밍을 개막한 아키텍처는 IA64였다.
그 전 20세기의 NT4 시절에는 DEC Alpha뿐만 아니라 PowerPC네 MIPS네 여러 자잘한 아키텍처를 지원하다가 말았고, 2000년대부터는 x64와 ARM64가 살아남았으니 2000년대 초가 중대한 전환점이었다.

허나, 그 전환점의 중심에 서 있던 IA64는 좋은 타이밍을 날리고 장렬히 자폭했다... =_=;; 사실은 IA64가 채택했던 VLIW라는 설계 방식부터가 성능 대비 단점과 위험 부담도 너무 큰 방식었다. 마치 자동차 엔진에서 통상적인 왕복 엔진이 아니라 로터리 엔진처럼 말이다.
이런 사연으로 인해 Windows 2000은 NT 계열의 개발 역사상 전무후무하게 오로지 x86 전용으로만 출시되는 이변이 벌어졌었다. 무슨 9x처럼 말이다.

  • Windows 98은 마우스 휠과 멀티모니터를 최초로 공식 지원하기 시작했다.
  • Windows 2000/ME에서는 일부 마우스의 옆구리에 달려 있는 추가 버튼을 L, R 말고 X-button이라는 이름으로 최초로 지원하기 시작했다. 아마 전통적인 상하 스크롤 말고 좌우 스크롤 휠도?
  • Windows 7은 SSD와 멀티터치 디스플레이를 최초로 공식 지원하기 시작했다.

아울러,

  • USB 메모리를 별도의 드라이버 설치 없이 자체적으로 인식하기 시작한 건 2000/ME부터다.
  • XP/Vista 어느 때쯤부터 이제 와이파이도 별도의 프로그램/드라이버 설치 없이 자체적으로 잡기 시작했다.
    무슨 프로그램 띄워서 모뎀 전화를 걸어서 인터넷 접속하고, 그 뒤부터 연결 시간이 올라가던 게 1990년대 말쯤 일이었는데.. 참 격세지감이다.

3. 하드웨어의 발전 양상

성능 증가

  • 1990년대 동안은 클럭 속도가 뻥튀기 하듯 폭증했다.
  • 1990년대 후반부터는 메모리 양이 폭증했다. Windows 95~98 사이 말이다.
  • 2000년대 이후부터는 무선 인터넷 네트웍 속도가 폭증해 왔다.

64비트화

  • 워크스테이션/슈퍼컴 쪽은 모르겠고, 개인과 가정 레벨에서는 1990년대 말에 게임기부터 가장 먼저 64비트 CPU를 도입했다. 내 기억으로 닌텐도64..;;
  • PC는 2000년대 초에 IA64가 대차게 망하는 바람에 한 타이밍을 완전히 놓쳤고, 2000년대 중반쯤 램 용량이 실제로 4GB를 넘긴 뒤에야 64비트가 대중화됐다. Windows 2000/XP가 아니라 Vista/7 타이밍이다.
  • 스마트폰 업계는 2010년대 중반쯤에 슬슬 64비트로 전환이 시작돼서 2010년대 말엔 32비트 앱에 대한 지원을 끊네 마네 하는 상태가 된 것 같다.

오늘날 경전철이라고 해서 협궤를 쓰는 게 아니듯, 주머니에 넣어 다니는 작은 모바일 컴퓨터라고 해서 16/32비트 따위를 쓰지는 않는다. 커다란 화면에다 현란한 천연색 3D 그래픽과 고화질 동영상을 찍으려면 64비트 고성능 CPU는 필수이다. 물론 고성능 CPU는 전기도 많이 먹으니 고성능 배터리도 필수..

4. 그래픽

(1) 그래픽 가속이라고 하니까 게임용 3차원 그래픽 렌더링이라든가 동영상 코덱 같은 것만 떠올리기 쉬운데.. 사실은 2D 기반의 통상적인 GUI 구현을 위해서도 작은 수준의 하드웨어 가속이 오래 전부터 쓰여 왔다.
마우스 포인터라든가(깜빡이지 않는 것, 마우스 포인터 자취 표시, 포인터 주변의 그림자).. 화면 스크롤도 다 가속의 결과물이다. CPU 연산 기반으로 도트를 옮기는 수작업이 아니다.

(2) Windows의 그래픽 API (GDI)는 너무 범용적이고 장치 독립적으로 만들어졌다 보니, 당장 화면에 그려지는 픽셀 도트 값을 알아 내거나 색깔 바꾸기, 메모리 내용을 그대로 비트맵으로 간주해서 뿌리기 같은 간단한 작업조차도 오버헤드가 크고 일이 쉽지 않았다.
비디오 메모리에다 숫자 하나만 쓰면 끝날 일을 뭐 펜을 만들고 브러시를 만들고 DC에다 select시키고.. 운영체제 차원에서 직통 접근을 허용하지 않았던 것이다.

그러던 것이 Windows 3.0에서 DIB가 도입됐고, Windows 95 내지 NT 3.5에서 CreateDIBSection 계열 함수가 추가됨으로써.. 메모리 내용을 비트맵으로 그대로 뿌리는 일은 그럭저럭 가능해졌다. 옛날 WinG가 제공했던 기능도 다 이런 것들이었다. ‘비트맵 고속 전송’
다른 3D 가속 같은 거 전혀 없이 이거 하나만으로 Windows에서 Doom을 포팅하고 돌릴 수 있게 됐다.;;

Doom은 3D 전용 가속 기능이 없이 CPU와 초보적인 그래픽 가속만으로 만들어진 마지막 3D FPS였던 셈이다.
이거 마치 인어공주가 CG 없이 100% 셀 애니로만 만들어진 마지막 디즈니 애니인 것과 비슷한 느낌이다.

(3) 하긴, 옛날에는 그래픽 파일의 압축이라는 것도 원시적인 run-length 방식이 고작이었다. 더 빡세게 압축된 GIF나 PNG 파일 하나 열려면 386급 이상 컴퓨터가 필요했고, 디코딩도 훨씬 더 오래 걸렸었다. 하물며 JPG는 뭐 말할 것도 없고..
동영상조차도 1990년대 초중반에 Video for Windows 이러면서 나돌던 AVI는 쌩 run-length 압축인 게 많았다. 화질이나 압축률은 완전 허접 수준이었다.

WinAMP로 486/펜티엄 급 Windows 95 PC에서 128kbps짜리 mp3을 하나 재생하면 CPU 사용률이 10~20%까지 치솟았는데.. 이 역시 아련한 추억이다.
지금 우리가 전화기로도 당연하게 감상하는 디지털 멀티미디어 데이터들이 불과 2~30년 전에는 이렇게 가볍게 다뤄지던 물건이 전혀 아니었다. 그나마 가볍게 다루려면 기술 수준이 더 낮은 아날로그 매체만으로 만족해야 했다.;;

5. 나머지

(1) 64비트와 멀티코어는 서로 다른 별개의 분야이지만 거의 같은 시기에 태동해서 동시에 도입됐다(Core 2 Duo). plug & play와 USB하고 비슷한 관계인 것 같다. Win95/98 시절엔 USB 없이 직렬 포트에다가 프린터나 스캐너를 연결하고는 "새 하드웨어 발견.." 이러기도 했었다는 것 기억 나시는가? =_=;;
아울러, 모니터가 와이드 화면이 대세가 된 것도 2000년대 중반쯤으로 64비트니 멀티코어니 하던 때와 시기가 아주 비슷하다.;;

(2) 2000년대 초중반, 사운드 카드가 '인텔 사운드맥스'인지 뭔지 아무튼 메인보드에 내장돼 들어갔다. 그래픽 카드도 어지간히 까다로운 게임을 하는 게 아니라 기본 기능은 그냥 메인보드 내장으로 퉁쳐졌다.

(3) 요즘 노트북이나 스마트폰은 너무 얇아져서 뭔가를 꽂는 단자조차 너무 간소화되는 것 같다. 이건 개인적으로 좀 불편하게 느낀다.;;
가령, 구형 맥북은 큼직한 USB-A를 바로 꽂을 수 있지만 요즘 맥북은 그렇지 않고 C형만 꽂을 수 있다. 그리고 구형 갤럭시는 컴터용 이어폰을 바로 꽂을 수 있는 반면, 요즘 갤럭시는 그렇지 못하다.

(4) 범용적인 컴퓨터 말고 다른 기계들의 사정은 어떨까?
가정용 게임기, 업소용 오락기.. 이 둘도 차이가 있을 것 같고 내비게이션, 노래방 기계, 그리고 VR 게임기에 쓰이는 컴퓨터도 평범한 가정용 CPU 기반은 아닐 것 같은데.. 심지어 x86 계열이 아닐지도..??
요즘은 폰에 밀려서 디지털 카메라라는 물건이 많이 도태했지만, 그래도 부팅이 엄청 빨리 되는 것과 zoom이(= 렌즈빨) 더 뛰어난 건 디카만의 독자적인 장점이다. 그런 기기를 프로그래밍 하는 건 아무래도 임베디드 영역이지 싶다.

Posted by 사무엘

2024/03/02 08:35 2024/03/02 08:35
, , ,
Response
No Trackback , No Comment
RSS :
http://moogi.new21.org/tc/rss/response/2270


블로그 이미지

그런즉 이제 애호박, 단호박, 늙은호박 이 셋은 항상 있으나, 그 중에 제일은 늙은호박이니라.

- 사무엘

Archives

Authors

  1. 사무엘

Calendar

«   2026/07   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

Site Stats

Total hits:
3915653
Today:
788
Yesterday:
320