OS의 세계는 우리가 세밀하게 알지는 못하지만 어떤 하드웨어를 사용하든지 꼭 필요한 요소라는 것을 알게 되었습니다. OS가 지금은 더욱 발전을 하고 있지만 1990년 대 당시에도 OS가 발전하는 방법에 대한 기사가 있었습니다. DOS와 윈도우즈가 공존하던 시대에서 윈도우즈로 표준화가 일어나기 직전의 상황이었습니다. 그러면 OS의 발전은 어떻게 일어났는지 한 번 살펴보겠습니다.
1987년 4월 미국에서 발표된 32비트 PC용 OS인 OS/2는 IBM의 컴퓨터 비즈니스 전략 그 자체로 MS-DOS와 마찬가지로 IBM-PC/AT와 IBM-PS/2용으로 개발되었으며 다른 컴퓨터 업체는 IBM의 뒤를 쫓는 형태로 OS/2에 대응하고 있다. PS/2에는 모델 30과 50과 60 혹은 80 등이 있는데 모델 30은 CPU에 8086을 사용했으며 모델 50과 60은 80286을 사용했고 모델 80은 80386을 사용했다. 즉 모델 80은 IBM 최초의 32비트 PC인 것이다. 이들 PS/2에 맞춰 발표된 OS는 PC-DOS 3.3과 MS OS/2이다. PC-DOS 3.3은 IBM-PC/XT/AT 등에 사용되던 PC-DOS 3.1의 상위 버전으로 MS-DOS 버전 3.3에 해당한다. 이것에 대해 마이크로 소프트와 IBM이 공동 개발한 OS/2는 전혀 새로운 개념의 OS로 80286 프로텍트 모드에 대응한 싱글 유저 멀티태스크의 OS이다.
OS/2에는 확장판인 IBM OS/2와 기본판인 마이크로소프트 OS/2가 있다. 하지만 IBM과 마이크로소프트 양사가 OS/2를 공동 개발했다 해도 이것은 IBM의 전략에 기초한 IBM을 위한 OS이다. OS/2는 80286이 갖고 있는 특유의 기능을 100% 살린 OS로 CPU에 80286 또는 80386을 사용한 PC에서만 사용할 수 있다. 따라서 OS/2를 사용하기 위해선 기본적으로 다음과 같은 것이 필요하다.
OS/2를 위한 준비물
램 용량 2.6메가바이트
OS/2는 대용량 메모리를 지원하는 OS로 이것을 사용하려면 메인 메모리 640 킬로바이트에 더해 2메가바이트의 램이 필요하다. 이러한 램은 램 디스크 전용 램에서는 필요 없는 것으로 보호모드에서만 필요하다.
하드디스크 20메가바이트
20메가바이트의 하드디스크는 필수적인 것은 아니지만 OS/2를 충분히 사용하기 위해선 필요하다. OS/2만으로 20메가바이트를 사용하는 것이 좋으므로 MS-DOS와 같은 다른 OS를 함께 사용할 경우 40메가바이트 정도의 하드디스크를 사용하는 편이 바람직하다.
고용량의 램과 하드디스크가 필요한 이유
2개의 동작모드 때문이다. 앞에서 OS/2는 2.6메가바이트 이상의 램이 필요하다고 언급했는데 OS/2에서는 이 메모리를 640킬로바이트와 2메가 바이트라는 식으로 2개로 나누어 사용한다. 물론 512킬로바이트와 2.1메가바이트로 나누어 사용할 수도 있지만 기존에 있던 램을 640킬로바이트 이하와 증설된 램을 2메가바이트 이상으로 나누어 사용하게 된다. 여기서 640킬로바이트 이하를 MS-DOS 호환 모드로 사용하고 2메가바이트 이상을 OS/2 모드로 부른다. 즉 OS/2에는 2개의 동작 모드가 있다는 뜻이다.
MS-DOS 호환모드는 PC나 CPU 또는 장래의 OS가 과도기에 전 세대와 호환성이 있는 모드를 준비하여 편의를 도모하고 있는 것과 마찬가지로 OS/2에도 MS-DOS와 호환성이 있는 모드를 준비하고 있다. 그것을 MS-DOS 호환 모드 혹은 MS-DOS 호환박스라 한다. OS/2 모드는 OS/2의 위력을 발휘할 수 있는 모드로 OS/2가 본격적으로 보급될 때를 대비하여 이 모드 만으로 사용할 수 있도록 되어 있다. OS/2 모드에서는 예를 들면 1메가바이트와 2메가 바이트라는 종래에는 생각할 수 없는 대용량 프로그램을 작성할 수 있다.
OS/2의 특징
OS/2에서는 멀티태스크가 가능해서 몇 개의 프로그램을 병행하여 실행시킬 수 있다. 단 MS-DOS용 프로그램은 1개밖에 실행시킬 수 없다. 따라서 이 모드에서는 멀티태스크가 지원되지 않는다. 하지만 OS/2용 프로그램에서는 멀티태스크여서 여러 프로그램을 실행할 수 있다. 또한 MS-DOS용 프로그램 1개와 OS/2용 프로그램 여러 개는 멀티태스크가 가능하다.
OS/2 본래의 모드인 OS/2 모드는 MS-DOS에 비해서는 어떻게 다를까? 파일 호환에 있어서 OS/2 모드에서도 파일 취급은 종래와 같아 데이터 디스크나 파일을 함께 사용할 수 있다. 하지만 기존 프로그램은 실행되지 않는다. 기존에 만들어진 MS-DOS용 프로그램은 OS/2 모드에서는 절대로 실행되지 않는다. 그 이유 가운데 가장 두드러진 것은 펑션 콜의 방법이다. OS/2 모드와 MS-DOS 모드 프로그램의 호환성은 없지만 OS/2나 MS-DOS 어느 쪽에서도 사용할 수 있는 소프트웨어를 만들 수 있다. 그 방법은 대단히 간단해 우선 양쪽 모드용 프로그램을 만들어 놓고 파일 상에서는 1개의 프로그램으로 종합하면 된다. OS/2의 프로그램 파일 헤더는 양쪽 모드에서 사용할 수 있는 구조로 되어 있어 실행 시 모드에 따라 각각의 부분을 로드하고 실행할 수 있게 된다. 이 외에 실행 루틴의 대부분을 공용으로 해놓고 펑션 콜을 행하는 시점에서 INT 21H로 할지 FAR CALL로 할지를 나누는 방법도 있다. OS/2 외부 명령의 대부분은 OS/2 모드에서도 MS-DOS 모드에서도 사용할 수 있도록 되어 있다. 또한 실행파일 이름은 EXE와 COM으로 같고 이 외에 배치 파일인 CMD 등을 사용할 수 있다. CMD 형식은 배치 파일의 서브 루틴을 호출하는 등 BAT보다도 기능이 강화되었다. 그리고 내부 커맨드에 대해서는 MS-DOS에 대해 상위 호환성이 있다.
프로텍트 모드에서 동작
OS/2 모드는 80286과 80386 CPU 프로텍트 모드에서 실행된다. 이것에 대해 MS-DOS는 리얼 모드라는 동작 모드에서 실행된다. 프로텍트 모드와 리얼 모드의 차이는 첫째 세그먼트의 차이이다. I/O 조작은 불가능하고 다른 OS/2와의 호환성은 뛰어나다. 그리고 가상 기억을 지원해서 디스크 장치를 일반 메모리인 것처럼 사용할 수 있는 기능이다. 이 가상기억은 다음과 같이 실현한다. 우선 OS/2 모드의 프로그램이 새로 실행되거나 이미 실행되고 있는 프로그램이 추가 메모리가 필요하다고 하자. 그러면 실제 램 중 용량이 남아 있으면 그것을 사용할 수 있다. 그러나 남아 있는 용량이 없을 때는 가장 먼저 확보된 메모리를 버리고 빈 메모리를 확보하여 그것을 사용한다. 이때 단지 먼저 확보된 메모리를 버리면 문제가 발생하므로 데이터일 경우에는 내용을 디스크에 저장한다. 또 프로그램일 경우에는 그대로 버리고 다시 필요할 때는 원래의 프로그램 파일에서 메모리로 읽어 오는 처리방법을 사용한다.
DLL이란 OS/2 모드의 프로그램을 만들려면 DLL이라는 개념이 필요하다. DLL은 Dynamic Link Library의 약자로 구조하고 역할 모두 컴파일러 언어의 런타임 패키지에 있는 LIB 파일과 유사하다. 즉 서브 루틴 패키지라는 뜻이다. OS/2에는 키보드나 화면 등 목적에 따른 10여 종류의 DLL 파일이 있어 펑션 콜은 INT 21H 대신에 이 DLL을 호출함으로써 해결된다. OS/2는 마우스 또는 그래픽에 대해서도 화면이나 키보드와 같은 순서로 이용할 수 있다.
DLL의 호출방법은 LIB의 경우와 매우 비슷하다. 예를 들어 키보드에서 문자열 입력이라면 KdbStrinin이라는 이름이므로 처음에 이것을 extern 선언한다. 이때 NEAR가 아닌 FAR라는 수식어를 붙인다. 사실 이 내용은 초보자에게는 조금 어렵지만 문자열을 저장하는 어드레스나 문자 수 등의 파라미터를 스택에 저장하고서 CALL KbdStringIn을 실행하면 문자열은 지정 장소에 저장되어 AX 레지스터에 실패인 지 성공인 지를 나타내는 결과가 돌아온다. 대부분 C나 파스칼 순서와 마찬가지여서 OS/2를 고급 언어 지향 인터페이스라 부르기도 한다.
OS의 세밀한 부분들은 역시 일반적인 유저들이 이해하기에는 조금 어려운 측면이 많은 것 같습니다. 이렇게 기초적인 내용임에도 불구하고 몰라도 사용할 수 있도록 만들어진 OS는 정말 잘 만들어져 있다는 것에 위안을 삼아야 할 것 같습니다. 앞으로도 OS의 세밀한 구조에 대해서 더 살펴보도록 하겠습니다.