프로세서와 프로세스의 차이 (processor vs process)

Posted by taeho Tae-Ho
2014.09.05 10:16 운영체제

IT 업종에서 일하면서 가끔 프로세서(processor)와 프로세스(process)를 구별하지 못하는 개발자나 엔지니어들을 종종 보게 됩니다. "그게 그거 아니냐.."거나 "구별할 필요가 있냐"라는 생각을 가진 사람들도 꽤 있습니다. 사실 구별할 줄 몰라도 일하는데 큰 지장은 없는 것이 사실입니다. 하지만 진짜로 비전공자라서...몰라서 구별하지 못하는 것이라면 공부하여 배우면 되지만 전자계산학이나 컴퓨터공학을 전공했음에도 불구하고 구별하지 못한다면... 정말 우리나라의 대학의 전산 관련 전공 계열의 교육과정은 심각한 문제가 있다고 단언하고 싶습니다. 그리고 한발 더 나아가 대학교 4년 동안 도대체 공부 안하고 뭘 한거냐고 따끔하게 혼내주고 싶습니다.


process .vs. processor프로세스와 프로세서



프로세서와 프로세스의 구별


프로세서와 프로세스는 엄연히 다른 존재입니다. 


Processor (프로세서)는 하드웨어적인 측면에서 "컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛"이다.  이는 중앙처리장치(Central Processing Unit)를 뜻하며 폰노이만 아키텍쳐에 의해 만들어졌다면 적어도 하나 이상의 ALU (Arithmetic Logic Unit)와 처리 레지스터(Register)를 내장하고 있어야 한다.


프로세서에 대한 정의입니다. 오래 전 혼자 공부했던 8008과 z80 같은 마이크로프로세서를 떠올리게 하는 정의입니다. 


이런 정의를 충족하는 것에는 매우 여러종류의 프로세서들이 있습니다. 네트워크 장비(라우터, 스위치, IP공유기, 스위칭허브 등)에 포함되어 있는 네트워크 프로세서, 디지털 미디어 기기(MP3, 디지털피아노 등)에 사용되는 DSP(Digital Signal Processor) 등 매우 다양한 종류의 특정 목적에 적합하게 설계된 전용 프로세서들이 있습니다. 반면에 노트북이나 데스크탑 또는 서버에 사용되는 프로세서들은 특정 목적이 아닌 범용(일반적인 다양한 목적)적으로 사용할 수 있는 범용 프로세서입니다.


프로세서는 하드웨어에만 사용되는 용어는 아닙니다. SW적으로도 의미를 가지며 프로세서라고 불리는 프로그램들도 있습니다. 


소프트웨어적으로 프로세서라 함은 데이터 포맷을 변환하는 역할을 수행하는 데이터 프로세싱 시스템(데이터 처리 시스템)을 의미하며 출력 가능한 인쇄물을 생성하는 워드프로세서도 프로세서라 부른다.


조금 애매하긴 합니다만 위의 범주에 포함되는 소프트웨어는 워드프로세서와 컴파일러, 어셈블러 등이 포함됩니다. 프로세서라는 용어의 정의가 명확하게 정의되기 훨씬 이전부터 관습적으로 프로세서라고 부르던 소프트웨어들을 넓은 의미의 프로세서에 포함시켜주는 분위기가 강합니다. 


결론적으로 프로세서는 CPU나 Microprocessor 라는 하드웨어를 말하는 것으로 그 범위가 점점 축소되어 명확해져 가고 있습니다.


반면 프로세스는 말 그대로 "절차(과정)" 입니다. 때문에 스스로 무언가를 처리하지 못합니다. 프로그램은 스스로 실행하면서 데이터를 입력받고 결과를 생성해 내니 "프로세서"라고 불러도 되지 않느냐라고 반문하는 사람도 있었습니다. 하지만 그것은 분명 틀린 논리입니다.



프로세스는 특정 목적을 수행하기 위해 나열된 작업의 목록이라고 생각하여야 합니다. 즉 프로그램이죠. 컴퓨터에서 프로그램은 프로그래밍 언어로 작성된 작업 수행 과정일 분입니다.프로그래머가 작성한 소스코드와 소스코드가 컴파일되어 기계어로 번역된 바이너리파일도 그저 작업 과정이 기록된 파일일 뿐입니다.


작업의 과정이 파일로 저장되어 있으면 그것을 "프로그램"이라고 부르고 메모리에 적재되어 실행 중 이거나 실행 대기 중일 땐 "프로세스"라고 구별하여 부를 뿐입니다. 즉 프로세스는 "메모리에 적재되어 프로세서에 의해 실행중인 프로그램" 이라고정의하는 것이 정확할 것입니다.


"프로세서에 의해 실행 중인 프로그램"의 의미를 이해해야 한다.


이 의미를 이해하려면 CPU의 동작 원리를 이해해야 합니다. CPU는 엄청나게 복잡한 현대 전자공학의 정수라 할 수 있습니다. 저는 중학교(?) 시절 오락실에서 본 8bit MSX 호환 컴퓨터에 푹 빠져 고등학교를 졸업하자 마자 Microprocessor를 혼자 공부했습니다. 혼자 공부하다 보니 분명 한계는 있었지만 CPU의 동작 원리에 대해 이해하는 좋은 계기가 됐었습니다. 


컴퓨터가 프로그램을 실행하는 과정은 매우 복잡하지만 프로세서와 프로세스를 구별하기 위해 가장 중요한 부분은 다음과 같은 순서를 이해하는 것입니다.


1. 사용자가 단축 아이콘 혹은 명령행에서 프로그램을 실행한다.

2. 파일로 저장되어 있던 프로그램은 메모리(램)에 로더(Loader)에 의해 적재(load)되고 처음으로 실행해야 할 기계어 코드가 저장된 메모리의 주소를 CPU의 명령주소(IP : Instruction Pointer) 레지스터에 저장한다.

3. 프로세서(CPU)는 IP 레지스터가 가리키는 메모리의 주소에서 (처음으로) 실행할 명령어를 인출(메모리에서 CPU로 가져오는)하여 명령 레지스터(IR : Instruction Register)에 저장한다.

4. IR에 저장된 명령을 실행하고 IP에 다음번에 실행할 명령어가 있는 주소를 저장한다.

5. 3~4를 프로그램의 끝까지 반복한다.


위의 과정이 프로그램이 실행되는 과정입니다. 사실 실제로는 백 배는 더 복잡한 과정이 있고 레지스터도 다양하며 계산할 것도 많지만 이 정도만 확실하게 이해하고 그 과정을 조금 더 스스로 공부해보면 충분합니다. 


즉, 프로세스는 CPU 입장에서 봤을 땐 파일로 저장된 프로그램이 디스크에서 메모리로 읽어들인, 즉 장소와 포맷만 바뀌었을 뿐 스스로 실행되는 살아있는(?) 것이라고 보기는 어렵습니다. 프로세스는 그저 CPU가 실행할 과정과 실행 시 참조할 데이터를 메모리(램)에 적재해 둔것에 지나지 않는다는 거죠. 즉 프로세스는 프로세서가 실행할 명령어와 데이터목록을 메모리에 읽어들인 것에 지나지 않는다 라는 것이죠.


결국 프로세스와 프로세서를 정확하게 구별하지 못하는 이유는 파일로 저장된 프로그램이 메모리에 적재(load)되고 CPU(프로세서)에 의해 프로세스에 명시된 명령어를 순서대로 CPU로 불러와 실행되는 과정을 정확하게 이해하고 있지 못하기 때문입니다.

신고
이 댓글을 비밀 댓글로
  1. 덕분에 프로세서와 프로세스의 구별에 대해
    알게되었습니다.^^
    행복한 금요일 보내세요!
  2. 하드웨어와 절차의 구분 설명을 잘해주셨네요.
    저도 개발자 이지만 이런부분을 대강대강 알고있는 부분이네요.
    좋은 정보 감사합니다.