컴퓨터 프로그램이라는 단어가 있고 프로세스라는 단어가 있다.
컴퓨터를 좀 다뤄봤다면 어디서 들어본 말 같은데 정확하게 뭔지 모르겠다.
다른 전문 분야도 마찬가지지만 컴퓨터에는 용어가 많다. 기술적인 용어도 있고 마케팅을 위한 용어도 있다.
그중에는 과거에 소수의 컴퓨터 공학자들이 사용하던 용어를 일반에서 사용하는 경우도 있다.
'어플, 앱' 이란 단어도 그 하나인데 응용프로그램인 Application 의 줄임말로
'할인혜택을 누리기 위해서 어플을 다운로드 받아주세요~'
'앱을 깔면 이벤트에 참여하실 수 있습니다~'
처럼 최신의 마케팅 용어로 쓰인다. 이런 용어들은 불과 십년 남짓 전에는 대중들이 전혀 모르는 용어였다.
그러니까 IT용어의 상당수가 외계어 같이 들리더라도 걱정할 필요가 없다. 결국은 사람이 만드는 것인데 그 용어를 만든 과학자조차 다른 과학자들과 소통을 하기 위해 만든 것이다. IT용어는 컴퓨터가 세상에 처음 나온 20세기 이후에 많이 생겼다. 그 전까지 오랜 인류 역사속에서 컴퓨터라는 개념 자체가 없었다. 불과 100여년도 안되는 짧은 기간에 과학자들이 컴퓨터의 용어를 부랴부랴 만들었다. 짧은 기간동안에 과학자로써 아주 많은 일을 한 것이다.
중국이 화약을 발명한 것에 11세기 이고 제대로된 화력의 무기가 등장한 것은 15세기다. 미사일 같은 현대적 무기는 20세기에 등장한 것과 비교하면 컴퓨터의 발전속도는 믿기 힘든 수준이다.
아래 유튜브 영상은 1958년부터 2020년 현재까지의 비디오 게임의 발전 과정을 보여준다. 컴퓨터 발전이 얼마나 빨리 진행되었는지를 보여주는 단적인 예다. 점을 움직이던게 58년이었는데 지금은 현실처럼 느껴지는 VR 게임을 평범한 가정집에서 하고 있다. 이런 상태로 우리는 다시 과거로 돌아가 살라고 하면 못살것이다.
Evolution of Video Game Graphics 1958-2020 [4K] - YouTube
이러니 우리가 새로운 용어와 개념에 혼동스러운 것은 당연한 것이다.
새로운 용어의 낯설음에 집중하지 말고 의식의 흐름에 따라가는 것이 이 용어들에 친숙해지는 하나의 방법이다. 우리의 뇌가 새로운 정보를 해석하는 것은 받아들이는 사람의 마인드가 따라야 한다. 좀 뇌를 말랑말랑하게 풀어줄 필요가 있다.
이 포스팅에서는 컴퓨터의 프로세스에 대한 내용을 의식의 흐름을 따라 기록해둔다. 프로세스라는 주제에 대하여는 한번 다뤄볼 생각이었는데 여력이 되면 나중에 내용을 더 추가할 수 있을 것이다.
컴퓨터 프로그램을 다운로드 해서 실행을 시키면 프로세스가 된다. 즉 프로그램은 정적인 것 프로세스가 되어서 실행시키기 위한 데이터와 정보 자체를 의미하고 프로세스는 실제 프로그램이 메모리에 올라와서 CPU의 제어를 하고 있는 상태를 말한다.
'프로그램이 다운되었어요' 같이 일상에서는 프로그램과 프로세스를 혼용해서 사용한다. 프로그램과 프로세스의 차이는 실행중인가 아닌가로 알면 충분하다. TV의 프로그램도 비슷한데 방송 스케줄을 짤 때는 프로그램이라 하고 실제 방송을 하고 있으면 본방송, 라이브 방송, 재방송 등의 용어를 쓰지 라이브 프로그램, 본 프로그램 이라고 말하지 않는다. 실제 지금 방송하고 있는 것과 아닌 것은 여러가지로 큰 차이가 있다.
프로세스가 올라가는 것은 메모리다. 보통 우리가 아는 메모리, 삼성전자 RAM은 프로그램이 실행되는 공간이다. RAM 은 Random Access Memory 의 약자로 말 그대로 상황에 따라 랜덤하게 접근이 가능한 메모리라는 말이다. 이 메모리는 컴퓨터의 전원을 꺼버리면 내용이 사라지는 휘발성 저장 공간이다. 컴퓨터를 끄기 전에 작업한 내용을 저장하는 곳은 하드디스크다. (HDD, SSD) SSD 가 발달하면서 최근에는 시끄럽고 무거운 HDD 디스크를 대체하려는 움직임이 보이긴 하는데 아직까지 가성비 측면에서 자기식 하드디스크가 좋다.
* 프로세스는 프로그램을 하드디스크에서 꺼내와서 메모리에 올려놓은 다음 실행한다.
저장공간에 대하여 이야기할 때 RAM 과 HDD/SDD 도 혼용해서 사용하긴 하는데 정확하게 RAM 은 메모리, HDD/SDD는 저장장치라고 분류한다. 둘 다 저장을 한다는 의미는 같다. 단지 PC를 끄면 저장한 내용이 날아가는 volatile 휘발성 메모리가 RAM이고 HDD/SDD는 영구적으로 보존한다. 그러면 하드디스크를 쓰면 되지 왜 메모리를 쓰느냐? 이론적으로 메모리의 속도는 하드디스크 보다 10만배 정도 빠르다고 한다.
(그 차이는 시스템 환경에 따라 다르지만 최근 SSD에서 좁혀지고 있다.)
항상 컴퓨터 자원을 이야기할 때 tradeoff 라는 부분이 있다. 일상의 용어로 바꾸면 가성비가 좀 비슷할 것 같은데 컴퓨터 시스템에는 돈을 많이 투자해도 한계 효용이 늘어나지 않는 부분이 있다. 컴퓨터 업계의 수요와 공급이 만나서 서로 조절하다 보니 현재의 컴퓨터 구조가 만들어진 것이다. 컴퓨터를 제작하는데 가성비를 따지지 않았다면 일반 가정집에서 쉽게 보기 어려웠을 것이다. 역사속 컴퓨터 보급에 기여한 것은 유명한 IT기업들이다. IBM, APPLE. DELL 이런 회사들이 처음으로 컴퓨터를 사는 사람들에게 PC를 팔았다. 한국에서도 IBM-PC가 80년대에 소개가 된 것으로 알고 있다. 80년에 PC를 사용했다면 벌써 40주년이다...
[이 주일의 역사] IBM PC 첫 등장(1981.8.12.) - 부산일보 (busan.com)
*40년전에 이 기사를 쓰신 기자님께 리스펙트합니다.
*40년전에 MS사는 벤처기업이었고 지금 빌게이츠의 자산은 100조가 넘는다.
컴퓨터 기술은 역사가 짧아서 그런지 다른 분야보다 유독 꼬여있는 것들이 많다고 생각한다. 그럴 때는 역사를 찾아보는 것이 의외로 빠른 답을 줄 때가 있다. IBM이나 MS나 둘다 벤처기업이 컴퓨터를 보급했던 40년 전의 상황을 생각해보면 어떻게든 많이 팔기 위해서 노력했을 것이다. 가성비를 따지지 않았을 수가 없다.
사람의 뇌에 비교하면 인간도 단기 기억 능력과 장기 기억 저장소가 다르다고 한다. 벼락치기로 시험을 잘 본 사람들이 몇주가 지나면 시험에 출제된 내용을 기억 못하는 것과 같은 이치다. 컴퓨터도 단기와 장기로 기억장치를 구분 시킨 것이다. 그 조건을 가르는 것은 PC에 전원이 들어오고 있느닞 여부에 달려 있다.
컴퓨터는 사람하고 다르게 사고할 것 같은데 그렇지가 않다. 인간이 창조한 것이기 때문에 인간의 사고를 닮을 수 밖에 없다. 애시당초 컴퓨터를 왜 만들었냐고 물으면 인간의 생각(사고)을 대신 하기 위해서이다 라고 답할 수 있다. 처음에는 수학문제나 계산을 하는 것에서 출발했지만 지금 흐름을 타고 있는 인공지능이나 빅데이터 분석능력 등은 인간이 하는 일 자체를 대체하도록 개발하고 있다. 인간의 힘든일을 대신 해주기 때문에 매우 잘된일이고 또 한편으로 몹시 무서운 일이다. 일자리를 대체한다는 것은 곧 해고를 의미하고 해고당한 사람들은 이 사회에서 제대로 살아가기 어렵기 때문이다.
이대로 가다간 컴퓨터 인공지능이 인간을 대체하는게 아닌가하는 두려움은 공상과학영화를 통해서 한번쯤 느껴봤을 것이다. 필자의 관점은 진짜로 기계가 인간을 대체할지는 아직은 모르겠지만 모든 컴퓨터 기술은 결국 사람의 머리에서 나오고 사람의 손을 거쳐서 만드는 것이다. 기계가 인간을 대체하는 것도 AI에게 해고당해 사람이 무쓸모가 되는 것도 인간이 만든 것일 뿐이다. 미래가 무서우면 부단히 미래지향적 지식을 쌓고 IT기술을 연마해야 한다.
다음은 프로그램이 실행되는 과정이다.
- 프로그램이 시작되면 운영체제가 새로운 프로세스를 만들고 저장장치(HDD)에서 메모리로 데이터를 가져온다. 이 때 가져오는게 아니라 복사해서 가져온다. 즉 현재 메모리에 복사본 한부가 올라와있고 HDD에 한부가 들어있다고 보면 된다. 이것을 담당하는 프로그램을 Loader 로더 라고 한다.
- 이제 모든 준비가 끝났다. 운영체제는 CPU에게 제어권을 넘긴다. PC (프로그램 카운터)가 CPU에게 전달되고 IR (기계어 코드)를 실행시킨다.
CPU가 프로세스를 처리하는 방식은 그리 간단하지 않은데 CPU안에는 레지스터라고 하는 또다른 메모리가 있다. CPU의 작업대라고 볼 수 있다. 이 작업대에는 레지스터라고 불리는 몇가지 기능이 있다.
-> PC : Program Counter 다음 명령어의 주소를 가지고 있다. 명령을 하나 실행하면 숫자를 증가시켜 다음 명령어로 진행한다.
-> IR: Instruction Register 명령어 레지스터, 기계어가 들어있다. 이 기계어가 CPU에 들어가면 명령어가 실행된다.
-> SP: Stack Pointer, 스택 프레임으로 매개변수와 지역변수를 저장하는 공간이다. 운영체제와 응용프로그램들에서 스택을 많이 사용한다.
-> GPR General Purpose Registers : 범용 레지스터, 다목적 사용을 위한 범용 레지스터 저장 공간이다. CPU가 연산을 하는 등 여러가지 작업을 할 수 있다.
-> Flag Register : 플레그 레지스터는 CPU의 상태에 대한 정보를 가지고 있다. 보통은 이전의 작업에대한 결과값을 가지고 있어서 CPU를 제어할 수 있다.
CPU에는 instruction cycle 명령어 싸이클이 있다. Fetch - Decode - Execute 의 과정을 무한 반복하면서 운영체제에서 오는 모든 요청을 처리한다.
-> Fetch - 메모리에서 코드를 가져와서 명령어 레지스터에 입력한다.
-> Decode - CPU의 제어장치(Control Unit)가 명령어를 해석해서 CPU로 보낸다.
-> Excute - 계산을 시작한다.
CPU에는 제조사가 만든 Instruction Set 이 존재하는데 직접적으로 CPU에서 실행하는 명령어도 있고 복잡한 명령어들은 해석기(decode)를 거쳐야 한다. 인텔은 IA-32 아키텍처라는 명령어 세트를 사용하고 있다. 소프트웨어 개발자들이 사용할 수 있는 가장 저수준(low level) 단계의 CPU 명령어라고 보면 될 것 같다.
Instruction Set Architecture (intel.com)
CPU를 조작하는 좋은 방법은 어셈블리어를 사용하는 것이다. 어셈블리어는 직접적으로 CPU의 레지스터에 접근할 수 있기 때문에 각 레지스터의 상태를 상펴 보면 현재 CPU가 어떤 상태인지 정확히 알 수 있다.
CPU의 작동에 관한 설명은 어느 책이나 비슷하다.이해가 어려운 사람은 실습을 통해서 공부하는게 이해도가 빠를 수 있다.