프로세스 관리

운영체제에서 말하는 프로세스process는 고유명사이다. 그 의미를 영어 사전에서 찾으면 곤란하다. 유닉스 개발자가 정의한 프로세스는 다음과 같다.

프로세스process란, 이미지image가 실행execution되는 것이다.​14​

위의 정의를 이해하려면 이미지image가 무엇인지 알아야 한다. 이것도 역시 영어 사전에서 의미를 찾으면 안 된다. 유닉스 개발자가 정의한 이미지는 다음과 같다.

이미지란, 컴퓨터 상에서 실행되는 환경을 말한다. 여기에는 코어 이미지, 일반 레지스터값, 사용 중인 파일의 상태, 현재 디렉토리 등과 같은 것이 포함된다. 이미지는 컴퓨터의 현재 상태이다.​14​

이걸 종합하자면 프로세스란, ‘컴퓨터 상에서 실행되는 환경이 실행되는 것’을 말한다. 귀신 씻나락 까먹는 소리같이 들리는 매우 해괴한 표현이다. 사실, 이 정의들은 1974년에 만들어진 것이므로 지금의 시각에서는 부적합할 수도 있겠다. ‘이미지’는, 오늘날 ‘컨텍스트context’라고 부르는 것과 유사하다.


전자식 컴퓨터의 대부분은 폰 노이만 구조를 따른다. 폰 노이만 구조의 특징은, 프로세서가 수행하는 프로그램 코드와 데이터가 모두 메모리에 있어야 한다는 것이다.

아주 초창기의 컴퓨터는 심지어 펀치카드조차도 사용하지 않았다. 기계어로 프로그램이 작성되면 콘솔이라는 계기판에 있는 똑딱이 스위치들을 사용해서 메모리 위에 그 기계어 코드를 한 비트씩 올려주었고, 코드가 모두 메모리에 올라가면 그때야 컴퓨터의 시작 버튼을 눌렀다. 그러면 프로세서는 메모리에서 코드를 가져가 실행했다. 이런 원시적인 방식이 좋았을 리 만무하다. 그래서 자동으로 프로그램을 메모리에 올려주는 방식이 도입되었다. 첫 번째가 펀치카드였다.

펀치카드에 구멍을 뚫어서 프로그램 코드를 표시한 후, 펀치카드를 읽는 기계에 걸어 놓으면 펀치카드에 적힌 기계어 코드들을 메모리 위에 차곡차곡 올려주었다. 이른바 프로그램 로딩program loading이다. 로딩이 끝나면 프로세서는 메모리에서 코드를 읽어 실행한다. 시간이 지나면서 펀치카드는 펀치테이프, 자기테이프, 자기디스크로 진화했지만, 프로그램이 메모리로 로딩된 후에 실행된다는 점에서는 차이가 없었다.

그렇다면 디스크 상에 존재하는 프로그램 코드와 메모리에 로딩되어 있는 프로그램 코드는 동일할까? 반드시 그렇지는 않다. 가장 큰 차이는 ‘동적’으로 생성되는 변수들이다. ‘동적’이라는 말 자체가, 실행과정 중에 생겼다가 없어진다는 의미이다. 스택stack, 힙heap, 액티베이션 레코드activation record 등이 모두 그러하다.

또한, 어떤 소스 프로그램을 컴파일하게 되면, 프로그램 그 자체 외에도 부가적인 정보가 추가될 경우가 있다. 예를 들어 이 파일이 어떤 포맷인지, 어떤 명령어 구조인지 등을 알려주는 정보가 추가될 수 있다. 이것은 메모리 위에 올라갈 필요가 없는 정보이다.

따라서, 메모리에 로딩되어 수행되고 있는 프로그램 코드를 따로 표현해 줄 용어가 필요해졌다. 그것이 프로세스process이다. 프로세스 안에는 프로그램의 기계어 코드 그 자체 외에, 동적으로 사용되는 메모리 공간, 사용 중인 입출력 장치 정보 등이 포함된다.​††​

시분할 시스템은 한 대의 물리적 컴퓨터에서 동시에 여러 개의 프로그램이 수행될 수 있게 해준다. 그런데 이것이 사실은 눈속임이다. 프로세서는 물리적으로 하나의 프로세스만을 처리할 수 있다. 시분할 시스템이라는 말 자체에서 의미하듯이 시간을 쪼개어서 프로세서는 여러 개의 프로세스들을 돌아가면서 조금씩 처리한다. 메모리 용량이 크다면 여러 개의 프로세스들이 모두 한 번에 메모리에 올라갈 수 있겠지만, 현실은 그렇지 못하다. 메모리는 항상 부족하기 마련이다. 그렇기 때문에 시분할 시스템은 지금 당장 프로세서가 처리하는 프로세스가 아닌 프로세스들은 디스크에 잠시 저장해 두었다가 차례가 되면 그것을 디스크에서 메모리로 다시 로딩해서 처리한다. 이것은 프로그램을 처음 실행할 때 메모리로 로딩하는 것과 다르다. 실행 중에 있는 프로세스를, 마치 사진을 찍어 보관하듯이 그대로 디스크에 저장한다. 그러다 보니 메모리에 올라와 있는 프로세스와 디스크에 저장된 프로세스를 구별해서 표현할 필요가 생겼다. 그래서 후자의 경우에 대해 이미지image라는 이름을 붙였다.

프로세스 개념이 유닉스에서 처음 등장한 것은 아니다. 이미 1960년대 초에 시분할 시스템이 개발되면서 등장했으며, 유닉스는 멀틱스에서 사용한 프로세스 개념을 빌려왔다.

1 2 3 4 5 6 7