반응형
사용자 삽입 이미지
사용자 삽입 이미지


1970년대 IBM에서는 S/360의 뒤를 잊는 S/370이라는 메인프레임 컴퓨터를 시판했다.
현재 PC의 근간이 되는 구조를 가진 컴퓨터로서..
 
이때 처음 가상메모리 개념을 도입했다고 한다.
컴퓨터 크기는 큰 방 하나를 메울 정도 이고..
지금 이 컴퓨터를 보려면 서울에 국립 무슨 박물관 가라고 하던데...
 
어쨌든.. 이 컴퓨터가 중요한 이유는 현재 PC의 레지스터리구조라던가 메모리 구조등 모든 것이..
이 컴퓨터로부터 파생되었다는 것이다.
 
그래서 지금도 S/370의 어셈블리 랭귀지를 가르침으로서
컴퓨터의 동작원리를 가리치는 곳이 많다고 한다.
 
라는게... 나이드신 교수님들의 설명이다. 음 과연..
뭐 확실한 건.. 이 녀석 구조가 ARM 프로세서랑 유사하다.
 
전에 심심해서 ARM 단기코스 교육 받으러 간적이 있었는데 그때.. 보니..
거의 유사했다. 그래서 거의 놀면서 들을 수 있었다.
 
어쨌든.. 이제 사라진 이 컴퓨터를 만들어 보자.
 
이 컴퓨터는 입력을 천공카드로 받는다고 한다.
그래서 프로그래밍 시트에 코드를 적어서 뚫어서 입력으로 넣는다. 헐..
 
그렇게 만들수는 없으니까.. 일단 구조를 파악하고..
입력은 TEXT 파일로..
 
자 컴퓨터라면 기계어 명령을 받아서 그것을 처리해서 그 결과를 보여줄 수 있어야 할 거다.
하지만 기계어로 코딩할 수 있는가? 재주 좋은 분들이라면 몰라도..
난 한줄이상 기계어로 코딩 못한다.
 
그럼 최소한 컴파일러는 없더라도.. 어셈블러 정도는 탑재해야 할거다.
그리고 간단한 매크로를 처리할 수 있는 매크로 프로세서도 전처리로 넣어주는게 예의아닌가.. ?
 
난 예의가 있으니까.. 넣어주기로 결정..
하지만 문제는 시간.. 과제도 해야하고.. 학교도 다녀야 하고.. 내 공부도 해야하고..
만화도 봐야하고.. 게임도 해야하고.. 교수님한테 혼도 나야하고.. 여자도 좀 만나봐야겠기에..
이럴 시간이 없었다. 그당시엔.. 지금은 시간 많다.
" 저는 시간이 많아요. 웃을때까지. 쭉쭉쭉 쭉쭉쭉" ㅡㅡ;;
 
그래서 방학이되면 틈틈히 교수님께 체크 받으면 만들어갔다.
가장 큰 문제는 자료가 없다는 것!
 
당시 배우던 시스템 프로그래밍 책 외에는 자료가 단 하나도 없었다.
도서관에 누렇게 빛바랜 책이 두어권 있었다.
서베이했지만.. 논문 다운로드 불가.. 그시절엔 그걸 어떻게 하면 다운 받을 수 있는지도 모르고..
 
그렇게 그렇게 시간만 끌면서 하나하나 만들어갔다.
 
가장 먼저 만든 것이 M6 매크로 프로세서
전처리로 이녀석을 탑재하기로 했다.
 
매크로 프로세스는 문자 입력을 단순 반복을 통해서 처리해주는 녀석이라서..
걍 잘 만들어주면 된다.
M6 매크로 완성 장착!
 
잊지말자.. 입력은 S/370 어셈블리 소스코드..
전처리 된 것을 .. 이제 어셈으로 기계어로 바꿔줘야 한다.
 
그렇다면.. 필요한 것은 S/370 어셈블러
뚝딱뚝딱.. 처음에 명령어들이 제대로 나와 있지 않아서 찾느라 고생하고..
이해를 잘못해서 잘못짜고..
완전 엉망진창이었다.
 
고치고 고치고.. 결국 완성..
기계어로 주루룩 출력..
 
이제 만들 녀석은... 링커..
소스 파일은 한개가 아니다.
 
헬로씨 만들거도 아니고... 소스 파일이 하나만 있을리가 없다.
소스 파일이 여러개고 여러개라면 ... Extern 으로 선언된 녀석도 있을 것이고..
 
여튼 통합해줄 링커가 필요하다.
철컹.. 만들어서 장착..
 
이제 진짜 진짜 마지막..
가장 핵심 Interpreter 가 등장할 차례..
 
이제 완성된 기계어 코드를 읽어서
할당된 메모리에 올리고
 
그 메모리에서 PC가 가르키는 부분을 읽어서 명령어 레지스터에 명령어 넣고..
명령어 분석해서.. 데이터 읽어들이고..
그걸 ALU가 처리하고. .등등등...
 
이러한 작업을 할 우리의 S/370 컴퓨터가 있어야 한다.
그 녀석이 위에 보이는 인터프리터..
 
매크로 프로세서나 어셈블러, 링커까지는 유닉스상에서 작성하는 바람에..
콘솔모드용 프로그램이었는데..
 
인터프리터는 걍 윈도우용으로 만들어봤다.
물론 유닉스에서 짠 것도 윈도우 콘솔에서 돌아가도록 다 바꿨지..
 
인터프리터 내부에 Arithmetic 연산을 처리할때.. 이 부분은
객기 부린다고 인라인 어셈으로 짰었다...
왜 그랫지? ㅡㅡ; 그냥 그러고 싶었다..
 
여튼 그렇게 뚝딱뚝딱 해서 이 녀석 완성..
레지스터 상태라던가 메모리 상태.. 결과 윈도우.. 입력 기계어.. 현재 동작 상태..
등을 보여준다..
 
생긴건 저래도 저게 S/370 프로그램이다.
 
그럼 정리해 보면..
 
1. 입력 (S/370 어셈블리 코드)
2. M6 매크로 프로세서가 전처리
3. S/370 어셈블러가 기계어로 번역
4. 링커가 통합
5. 인터프리터가 기계어를 수행
6. 출력 (어셈블리 코드가 수행된 결과 출력)
 
S/370에서 여러 파일로 된 제대로 된 코드를 구하질 못해서 책에 나온 입력 수 5개에 적당한 값을 곱해서
출력하는 예제 소스를 이용해서 테스트 해봤다.
 
물론 인터프리터가 S/370의 전체 명령을 지원하는 건 아니다.
지원하는 건 전체 명령의 70%정도..
나머지 명령을 쓰는 예제도 드물고.. 명령어의 제대로 된 형태도 안나와 있어서..
 
실제 시스템 소프트웨어 책에서 소개하는 건 50%도 안된다.
그나마 다른 책에서 찾아서 많이 끼워넣은거다. ㅡㅡ;
 
여튼 이렇게 수행이 된다.
이걸 다 합쳐서 하나의 IDE로 만들어 줘야 하는데..
급 귀차니즘 발동.. 하기 싫다.
윈도우 디지인 다시하기도 싫고..
 
어쨌든.. 지금은 이때랑 많이 다른 일을 하고 있지만..
모르는 걸 찾아보고 해결하려고 노력한다는 점은 비슷한 거 같다.
 
하는 동안 정말 재미있었던거 같다.
컴퓨터 시스템 쪽으로 대학원 찾아서 갈까라고 심각하게 고민할 정도로..
 
하지만 뭐든.. 난 너무 어중간해서... ^^;



written by chamcham



반응형

+ Recent posts