컴퓨터 사용이 일상화된 요즈음 컴퓨터로 하는 일에서도 여러가지 일을 동시다발적으로 하고 싶은 욕구는 늘어나게 마련이다. 이번에는 윈도우가 여러 개의 작업을 동시에 진행하는 멀티태스킹에 대해서 알아보기로 한다.
하나의 컴퓨터에서 여러 개의 작업을 동시에 할 수는 없을까. 멀티태스킹은 복수개의 작업을 동시에 수행할 수 있는 컴퓨터 환경을 말한다. 즉 사용자가 통신프로그램을 이용해 데이터를 다운로드받으면서 동시에 게임을 즐긴다든지 사운드카드를 이용해 음악을 들으면서 그림을 편집한다든지 하는 등의 일이 멀티태스킹의 예가 될 것이다.
이처럼 복수의 작업을 동시에 할 수 있는 것은 CPU 메모리 하드디스크 등의 하드웨어적 자원을 운영체제가 각각의 작업에 적절히 안배할 수 있기 때문에 가능하다. 멀티태스킹을 통해 사용자들이 바라는 것은 하나의 작업을 하는 도중에도 그것을 빠져 나오지 않고 다른 작업을 불러 수행하는 등 컴퓨터를 보다 효율적으로 사용하는 것이다. 즉 사용자가 작업의 가지수나 크기에 제한을 받지 않으면서 일을 하기 위해서는 멀티태스킹이 요구된다.
이를 위해 처음에 도입된 개념이 태스크 스위칭, 즉 교체 작업이었다. 도스셸이나 노턴커맨더 또는 피시셸에서 지원하고 있는 태스크 스위칭은 하나의 작업이 진행중이더라도 그 작업을 완전히 종료하지 않고 잠시 다른 작업을 할 수 있도록 하는 것인데, 유용성에도 불구하고 그다지 알려져 있지는 않다. 다만 어떤 프로그램을 사용하던 중 잠시 도스로 빠져 나가 디스크를 포맷한다든지 파일을 복사한다든지 하는 도스로의 나들이는 사람들이 많이 사용하고 있는 편리한 환경이다.
하지만 태스크 스위칭은 하나의 응용 프로그램과 도스 유틸리티 사이의 작업교체가 아닌, 하나의 응용 프로그램과 다른 응용 프로그램을 동시에 메모리에 띄워놓고 단축키 하나로 이 작업에서 저 작업으로 왔다갔다 할 수 있다는 점에서 '도스 나들이'와는 구별된다.
도스 나들이나 태스크 스위칭과 혼동하기 쉬운 것에 램상주 프로그램(TSR, Terminate and Stay Resident)이라는 것이 있다.
태스크스위칭과 램 상주 프로그램의 작동방식의 차이는 다음과 같다. 태스크스위칭 방식에서는 하나의 프로그램에서 다른 프로그램으로 스위칭했을 때 기존에 운용되던 프로그램은 완전히 막 뒤로 물러가는데 비해 램상주 프로그램에서는 램상주 프로그램이 메모리에 상주하고 있다가 단축키에 의해 호출되면 현재의 프로그램에 나타나 협동직업을 벌이거나 기존의 화면 위에 겹쳐져 나타나 작동하는 것일 뿐 현재의 작업을 완전히 대체하는 것은 아니라는 점이다. 대표적인 램상주 프로그램에는 우리가 자주 사용하는 디스크 캐시 프로그램으로서의 smartdrv.sys, 램 상주형 바이러스백신인 V3RES.exe, 프로그래머들에게 인기 높았던 사이드킥 같은 것들이 있다.
멀티태스킹이 요구하는 메모리 사용방식
비록 태스크스위칭 방식이 램상주 프로그램보다 한단계 발전한 것이긴 하지만 여러가지 면에서 한계가 많다. 우선은 두개의 프로그램을 동시에 띄우자면 상당히 큰 메모리를 필요로 하는데, 메모리 문제에 별다른 해결책이 없어 상용메모리의 640kB의 장벽에서 나가 떨어진다. 결국 컴퓨터에 아무리 많은 메모리가 꽂혀있어도 구닥다리 XT수준에 메모리 사용을 묶어두는 리얼모드(Real Mode)에 머무르고 마는 것이다.
따라서 도스셸이나 노턴 커맨더 혹은 피시툴의 태스크 스위칭 기능의 활용도는 메모리 사용의 제한 때문에 출발부터 심각한 문제를 안고 있는 셈이었다. 이 문제를 해결하기 위해서는 메모리 사용을 640kB 이상으로 늘려야 하고 각각의 프로그램이 메모리에 들어 있을 때 서로가 서로를 침범하지 않도록 보호해주어야 한다. 이를 보호모드(Protedcted Mode)라고 하는데 윈도우에서는 표준모드(Standard Mode)라고도 한다. 보호모드 또는 표준모드의 채택은 윈도우와 여타 태스크스위칭 프로그램의 차이를 가장 잘 드러나게 한다. 윈도우 사용자는 더이상 640kB라는 도스의 메모리 장벽에 걸려 넘어지지 않아도 되는 것이다.
이것은 PC 탄생 이래 소프트웨어 사용면에서 혁명적 사건이라 할 수 있다. 사용자가 4MB나 8MB 혹은 16MB 정도의 메모리를 갖추고 있다면 아무리 복잡하고 덩치 큰 작업이라도 몇개씩 동시에 메모리상에 띄워놓고 번갈아서 직업을 할 수 있다는 것이다. 하지만 보호모드의 채택은 윈도우가 더이상 XT기종에서 사용할 수 없다는 것을 의미한다. 왜냐하면 XT는 1MB 이상의 메모리를 쓸 수 없도록 설계돼 있기 때문이다. 즉 XT는 보호모드를 지원하지 못한다.
물론 윈도우3.0에서는 윈도우를 리얼모드로 실행시킬 수 있었다. 윈도우를 시작할 때 WIN에 리얼모드를 뜻하는 /R옵션을 붙여 WIN/R을 입력하면 리얼모드에서의 윈도우 사용이 가능하다. 하지만 윈도우 3.1에 와서는 더이상 리얼모드를 지원하지 않는다. 현재의 윈도우 실행모드가 어떤 모드인지 윈도우 실행중 알아보려면 프로그램 매니저에 있는 헬프를 선택한 다음 'about program manager'를 선택해서 나타나는 다이얼로그 박스에 적힌 내용을 참조한다.
여기에 32비트 컴퓨터의 등장으로 인해 윈도우가 사용할 수 있는 모드가 하나 더 추가 되었는데 이것이 바로 '가상 86모드'(Virtual 86 Mode)라는 것이다. 윈도우에서는 이를 386확장모드라고 부른다.
시간을 쪼개는 마술 시분할
멀티태스킹이 이루어지기 위해서는 CPU를 적절히 여러개의 프로그램이 동시에 사용할 수 있도록 해야 하는데, CPU가 한개 뿐이므로 두가지 일을 동시에 처리할 수 없지만 시간을 아주 잘게 쪼개서 CPU가 한가지 일을 조금 처리하고 다른 일로 조금 처리해 주고 다시 돌아와서 조금 전에 하던 일을 다시 처리하는 등으로 이 과정을 매우 빨리 하면 두 가지 일을 동시에 하는 것처럼 보인다. 즉 여러 개의 작업이 주메모리 상에서 실행되고 있다면 실제 그들 중 하나의 작업만이 CPU를 할당받을 수 있으므로 컴퓨터의 다른 자원과 마찬가지로 CPU의 점유를 원하는 작업(프로세스)들 간에 적절히 분배해주는 역할을 해야 하는데, 바로 이러한 스케줄링 역할을 하는 것이 운영체제의 스케줄러다.
시분할이 가능한 것은 컴퓨터가 상대적으로 독립된 몇개의 중요 부품으로 이루어져 있으며 이들의 작업 처리속도가 조금씩 다르다는 사실과 관련돼 있다. 즉 CPU 메모리 디스크, 이 셋의 속도를 비교하자면 CPU는 메모리보다 최소 5배 정도 빠르고, 메모리도 디스크에 비해 최소 5배 이상은 빠르다. 이렇게 각각 속도가 다른 구성부품을 사용하다보니 작업속도가 빠른 CPU는 동작이 제일 느린 하드디스크와 보조를 맞추어야 할 때 일을 마치고 놀고 있는 시간이 생기게 된다. 이것이 지나치면 자원의 낭비가 심해지는데, 아무리 빠른 486DX라 하더라도 표준보다 속도가 더 느린 하드디스크를 사용하고, 하드디스크상에서 읽기 쓰기작업을 한다면 이 컴퓨터는 일을 빨리 할 수 없다. 아무리 CPU가 빨라도 하드디스크가 느리므로 하드디스크의 속도에 전체 작업속도가 규정되어 버리기 때문이다.
이런 단점을 해결하기 위해 최근에 로컬 베사 방식이 도입되기는 했지만, 아무튼 CPU를 놀려두지 않고 활용하는 방식이 도입되지 않는다면 자원 낭비는 심할 수밖에 없다. 멀티태스킹은 이러한 CPU의 대기 상황(Idling time)을 적절히 이용해 여러가지 일에 CPU의 작업시간을 분배하는데, 이는 사람이 시간을 쪼개어 사용하는 것과는 많이 다르다. 왜냐 하면 시간을 10분의 1초 내지는 1백분의 1초 단위로 쪼개서 각 작업에 시간을 할당하기 때문이다.
이렇게 시분할 방식을 사용할 때는 현재 CPU가 각각의 작업에 어떤 우선순위를 할당할 수 있다. 즉 시분할을 할 때 동일하게 CPU의 스케줄을 나누는 것이 아니고 중요한 작업에 더 많은 시간을 분배하는 것이 가능하다.
CPU로부터 최우선권을 부여받은 프로그램이나 작업을 표면작업(Foreground Task)이라고 한다. 이에 비해 최우선권을 부여받지 않은 나머지 모든 작업은 이면작업(Background Task)이라 불린다. 표면작업은 진행되는 상황을 화면에서 볼 수 있는 것이다. 하지만 화면에 나타나지 않는다고 그 작업이 중단되는 것은 아니므로 시분할을 이용한 멀티태스킹을 할 때는 주의를 기울일 필요가 있다.
백그라운드와 포그라운드 우선권은 숫자로 적어넣게 되는데, 이 숫자에는 기준이 없고 다만 다음과 같은 원리가 적용된다. 만약 5개의 태스크를 띄우고 있다면 5개의 태스크에 각각 할당된 숫자(사용자 지정)가 모두 더해진다. 그 다음에 각 태스크에 할당된 숫자를 합한 숫자로 나눈 것이 그 태스크에게 할당되는 우선권이다. 물론 여기에서 윈도우 자체가 쓰는 CPU시간은 빼주어야 한다.
가상 86모드 또는 386확장모드
윈도우의 표준 모드에서는 겨우 윈도우용 프로그램의 멀티태스킹만이 가능하다. 즉 윈도우를 고려하지 않고 제작한 도스용 응용 프로그램은 멀티태스킹에서 제외되고 단지 태스크 스위칭만 되는 것이다. 하지만 가상 86모드, 즉 386확장모드에서는 도스용 응용 프로그램의 멀티태스킹까지도 가능하다.
컴퓨터가 보호모드로 운용되기 위해서는 286이상의 CPU가 필요하지만 가상 86모드 또는 386확장모드는 말그대로 386급이상의 CPU를 요구한다. 여기서 중요한 것은 CPU이므로 외부적으로는 16비트 버스를 사용하지만 내부적으로는 32비트버스를 사용하는 386SX 기종에서도 386확장모드로의 운용이 가능하다. 하지만 386확장모드는 반드시 메모리가 2메가 이상 있어야 운용된다.
가상 86모드란 32비트급 CPU를 설계하면서 나온 개념으로, XT급 컴퓨터의 CPU가 8086이었던 것에 연유한다. 따라서 가상 86모드란 하나의 32비트급 CPU가 두개 또는 그 이상의 8086 CPU인 것처럼 동작하는 능력을 말한다. 따라서 이 모드하에서는 몇개의 도스 프로그램이 동시에 메모리에 올라오며 각각 독자적인 작업을 수행할 수 있다. 하지만 가상 86모드하에서 운용되는 도스 프로그램은 윈도우용 응용 프로그램과 달리 도스의 메모리 제한인 64kB의 제한을 받는다.
이와같이 윈도우는 여러개의 작업을 동시에 띄워놓고 작업하는 것을 기본으로 상정하고 있으므로 메모리를 지나치게 요구하는 경향이 있다. 그러나 메모리는 결코 싼 가격이 아니어서 1메가 늘리는데만 해도 몇만원이 소요된다. 윈도우의 메모리는 대식(大食)성이지만 보통의 사용자라면 이러한 윈도우의 메모리에 포만감을 채워주기 힘들다.
이러한 문제를 해결하기 위해 고민끝에 나온 것이 가상메모리(Virtual Memory) 방식이다. 가상메모리란 하드디스크 등에서 일정한 영역을 확보한 후 여기에 마치 메모리인 것처럼 주소를 부여해서 CPU가 부족한 메모리를 보충하는 방식이다. 대개의 32비트급 컴퓨터에는 최소한 10메가 정도의 하드디스크 여유가 있는 것이 보통이므로 이를 다른 프로그램이 접근하지 못하도록 메모리의 교체 영역(이를 스왑파일이라고 한다)으로 규정하면 비록 사용자의 메모리가 작아도 메모리 부족을 겪지는 않을 것이다.
교체파일에는 영구와 임시 두 가지가 있는데 영구는 하드디스크의 일정영역을 항상 스왑파일로 사용하기 위해 윈도우가 종료된 후에도 일반적 파일들이 접근하지 못하도록 읽기전용, 히든(HIDDEN)파일로 처리해 두는 것이고, 이에 비해 임시교체 파일은 윈도우가 종료될 때 사용되었던 교체파일도 지워버리는 것이다. 영구교체 파일을 잡아 두면 하드디스크의 여유공간은 줄어들지만 윈도우를 시작할 때마다 교체파일을 잡기 위해 시간을 지체하는 일이 없으므로 윈도우 시작이 빨라진다. 가상 메모리의 사용, 여기에 윈도우가 성공하게 된 또하나의비결이 있다.
멀티태스킹이나 태스크 스위칭을 하기 위해 알아야 할 사항들
다중작업의 기본인 태스크스위칭부터 알아 보자. 몇개의 프로그램을 실행시키고서 이들 사이를 스위칭하려면 <;ALT>;
이제 효율적인 멀티태스킹을 위해 각 프로그램에 시분할을 하는 방법을 알아보자. 조절관에서 386확장이라는 아이콘을 선택하면 다음과 같은 대화상자가 나오는데 여기서 스케줄링이라고 되어 있는 부분이 바로 시간 할당을 하는 곳이다. 여기에 적힌 숫자를 보는 요령은 다소 복잡할지 모르지만 따지고 보면 그렇게 어려운 것은 아니다. 우선 중요한것은 여기에 적힌 숫자가 절대적인 숫자가 아니라 상대적인 숫자라는 것이다. 즉 포그라운드란에 100을 적었건 50을 적었건 현재 작업을 하나만 하고 있다면 CPU는 모든 시간을 이 작업에만 할당한다. 하지만 동시에 작업하고 있는 서로 다른 두개의 프로그램이 각각 포그라운드에 100씩 할당되어 있다면 각각의 작업에 시간을 2분의 1씩 할당하는 것이다. 따라서 윈도우용 응용 프로그램간에 의미있는 숫자는 진행중인 프로그램의 포그라운드 값을 다 더한 것에서 현재의 작업에 할당돼 있는 수다.
다음으로 포그라운드의 수치만으로 윈도우용 응용 프로그램간에 시분할이 이루어진다. 따라서 도스용 응용 프로그램과 윈도우용 응용 프로그램을 함께 멀티태스킹에 이용하지 않는다면 백그라운드란에 들어가는 수치는 신경 쓸 필요가 없다. 그러면 백그라운드라고 되어있는 난에 들어가는 수치는 무엇일까? 그것은 도스용 응용 프로그램이 포그라운드로 작업할 때 백그라운드로 작업하고 있는 윈도우 응용 프로그램이 할당받는 시분할 비율인 것이다.
'포그라운드로만'이라는 체크상자가 의미하는 것은 윈도우용 응용 프로그램이 활성화되어 있을 때 CPU의 처리시간을 100% 모두 차지하도록 지정하는 것이다.
마지막으로 '최소 시분할'이라는 영역은 한개의 프로그램에 최소한 몇 밀리세컨드(1/1000초)는 할당되어야 한다는 시간의 절대적인 양을 설정해두는 것인데 기본값이 20으로 내정되어 있다.
마지막으로 도스용 프로그램이 포그라운드로 실행될 때 시간 할당은 어떻게 하며 윈도우에서 설정한 단축키와 도스프로그램의 단축키가 충돌할 때는 어떻게 해야 할까? 이러한 작업을 위해 PIF에디터가 존재한다. 필자의 경우 윈도우에서 <;한글>;2.0을 쓸 때 그림이나 도표에서 빠져나오는 <;CTRL>;
자신의 시간을 쪼개듯이 확장모드의 스케줄링을 잘 하면 인쇄 통신, 음악감상 등 몇 가지 작업을 동시에 하나의 컴퓨터에서 처리할 수 있으므로 컴퓨터 이용이 더욱 짜임새 있게 될 것이다.