프로그램
A sequence of instructions written to perform a specified task with a computer.
— 폰 노만 식 컴퓨터 아키텍처에서 규정한, 메모리에 상주하여 CPU에 의해 처리되는 지시어 세트의 공식 학술적 정수
더블클릭하는 순간 화면에 뿅 나타나 작동하는 문명의 이기이자, 정작 내 컴퓨터의 가벼운 RAM 용량을 야금야금 좀먹으며 팬 소음을 유발하는 주범. 사실상 사용자는 300MB짜리 앱을 다운로드했다고 생각하지만, 그 밑바닥에서는 수억 번의 CPU 연산이 매초마다 피 터지게 돌아가고 있는 혹사의 증거(...)
1. 개요
컴퓨터가 특정한 목적(문서 작성, 게임, 인공지능 분석 등)의 작업을 정교하게 수행할 수 있도록 약속된 명령어들을 이진수 기계어 형태로 정적 빌드하여 영구 저장 장치에 저장해 둔 독립적인 소프트웨어 조각. 보관 상태일 때는 단순한 '정적 파일'에 불과하지만, 더블클릭이나 터미널 실행 명령을 내리는 순간 메모리에 적재되어 살아 숨 쉬는 활성 상태인 프로세스(Process)로 변환되어 가동된다.
2. 정적 파일에서 동적 프로세스로의 환골탈태
프로그램은 평소에는 하드디스크나 SSD 같은 보조 기억 장치 안에 단순한 0과 1의 이진 텍스트 데이터 덩어리로 얌전히 누워있다. 하지만 사용자가 실행(더블클릭 등)을 가동하는 순간, 운영체제(OS)는 이 이진 파일 데이터를 읽어들여 깡통 컴퓨터의 임시 메모리(RAM) 영역에 정교하게 구역을 나누어 적재한다. 이 메모리에 로딩되어 실행 중인 살아있는 프로그램의 생명체 단위를 컴퓨터 과학에서는 프로세스(Process)라고 부른다. 프로세스로 탈태한 프로그램은 비로소 CPU의 통제를 받으며 비동기 연산을 마구 처리하게 된다.1
3. 폰 노만 구조와 프로그램 내장식 아키텍처
고대 계산기 시절에는 다른 프로그램을 돌리려면 컴퓨터 내부의 전선을 손수 한 땀 한 땀 새로 뽑아서 하드웨어 배선을 땜질 조립해야 했다.(...) 이 무지막지한 하드웨어 물리 노가다를 단숨에 격파한 영웅이 바로 수학자 존 폰 노만의 '프로그램 내장식(Stored-Program) 아키텍처'이다. 명령어들의 뭉치인 소프트웨어 프로그램을 영구 저장장치에 파일로 저장해 두고, 실행할 때만 메모리에 올려서 스위칭해 읽는 현대 컴퓨터의 뼈대를 창조한 혁명적 이론이다. 이로 인해 인류는 단 한 대의 하드웨어 컴퓨터 위에서 게임도 하고 코딩도 할 수 있는 자유로운 범용 운영체제 축복을 맞이하게 되었다.
4. 관련 밈 및 드립
4.1. 내 로컬 컴퓨터에서는 완벽히 도는데?
개발자가 신나게 완성하여 고객사 배포 서버에 올린 프로그램이 구동하자마자 예외 런타임 버그를 뿜으며 사망했을 때, 전 세계 백엔드/프론트엔드 개발자들이 일제히 합창하는 유구한 책임 회피성 자조 드립이다. 이들은 '내 개인 노트북(로컬)에서는 60FPS 속도로 매끄럽게 잘 돌았으니, 이건 배포 서버 OS 환경과 클라우드 네이티브 세팅의 잘못이지 내 코드가 파멸 구조를 가졌을 리 없다'며 애써 현실을 부정하곤 한다.(...)
5. 여담
- 프로그램과 프로세스, 그리고 스레드: 주니어들이 단골로 혼동하는 컴퓨터 과학 핵심 삼총사이다. 쉽게 말해 프로그램은 '하드에 누워있는 설계 도서 파일', 프로세스는 '메모리에 살아 움직이는 실행 중인 공장', 스레드(process-and-thread)는 '그 공장 안에서 실질적으로 기계를 돌리는 일꾼 손목 노동자'에 해당한다.
- 최초의 소프트웨어 참사: 1962년 미국의 금성 탐사선 마리너 1호가 우주로 발사된 지 단 293초 만에 궤도를 이탈해 자폭 파괴당한 원인은, 유서 깊은 포트란(Fortran) 컴파일러 프로그램 내부의 사소한 하이픈 한 글자(
-) 오타 때문이었다. 단 1글자의 프로그램 코딩 구멍이 수천억 원짜리 우주선 폭사 엔딩을 낳은 비극적인 역사이다. - 메모리 누수의 유령: 프로그램이 메모리에 적재되어 돌아갈 때, 다 쓴 메모리 조각을 반환하지 않고 계속 움켜쥐는 고질적 에러 현상을 '메모리 누수(garbage-collection)'라 부른다. 이 누수 유령이 방치된 프로그램은 가동 시간이 길어질수록 RAM을 야금야금 갉아먹다가 끝내 시스템 전체를 프리징 폭사시킨다.
6. 관련 문서
각주
-
실제로 모던 OS는 여러 프로세스가 하나의 RAM 영역을 침범해 해킹하는 참사를 막기 위해, 가상의 논리적 메모리 벽을 세우는 '가상 메모리(Virtual Memory)' 하드웨어 보호 기법을 엄격히 동원해 보안을 수리하고 있다. ↩