실행

The process of a computer carrying out the instructions of a computer program.

— 전산학 표준 아카이브에서 정의한, CPU 레지스터에 연산 코드가 적재되어 기계적인 논리 게이트가 전자기적으로 스위칭하는 실시간 구동 과정

정지 상태의 조용한 소프트웨어 설계 코드에 생명의 전기를 불어넣어 살아 움직이게 만드는 고수준의 물리적 전자기 변환 쇼핑. 하지만 잘못 짜인 코드를 실행하는 순간 무한 루프에 빠져 CPU 온도계를 90도 돌파하게 만들고 로컬 노트북 비행기 이륙 팬 소음을 발발시키는 공포의 스위치(...)

1. 개요

보조 저장장치에 안전하게 누워있던 정적인 프로그램 파일 데이터를 운영체제(OS) 커널의 지휘하에 컴퓨터 핵심 메모리(RAM) 영역에 순식간에 복사 로딩하고, 하드웨어 중앙처리장치(CPU)가 매 클럭 주기(Clock Cycle)에 맞춰 명령 코드를 인출(Fetch)하고 해독(Decode)하여 실시간 전자기 논리 게이트 연산을 수행하게 만드는 동적 가동 상태를 뜻한다.

2. CPU의 무한한 회전목마: Fetch-Decode-Execute 사이클

프로그램의 실질적 실행은 CPU가 쉬지 않고 초당 수십억 번 맹렬하게 도는 '인출-해독-실행(Fetch-Decode-Execute) 사이클'의 결실이다. CPU 내부의 프로그램 카운터(PC) 레지스터가 다음 실행할 기계어 명령어가 적힌 메모리 주소를 가리키면, CPU는 그 데이터를 가져와(Fetch) 제어 장치에게 넘겨준다. 제어 장치는 이 이진수 데이터가 덧셈 명령어인지, 메모리 이동 명령어인지 문법을 칼같이 해석한(Decode) 뒤, 연산 장치(ALU)에게 전자기 신호를 쏴 연산 명령을 최종 집행한다(Execute). 이 유구한 기계적 회전목마가 초당 수십억 번 반복되며 브라우저가 열리고 3D 그래픽 게임 화면이 쫀쫀하게 그려지게 되는 것이다.

3. 동기 실행(Synchronous)과 비동기 실행(Asynchronous)

실무 개발 아키텍처 세계관에서 주니어들을 괴롭히는 최대 동작 패러다임이 바로 동기식 실행비동기식 실행의 대조 구도이다.

  • 동기 실행(Synchronous): 앞선 작업이 완전히 끝나 리턴값을 돌려줄 때까지 다음 코드 라인 실행을 꽉 틀어막고 대기하는 정직한 직렬식 일꾼 동작이다. 예측이 쉽고 단순하지만 대용량 파일 복사나 네트워크 통신 시 시스템 전체를 꽁꽁 얼어붙게 만드는 단점이 존재한다.
  • 비동기 실행(Asynchronous): 무겁고 기나긴 작업(네트워크 요청 등)을 뒤편의 백그라운드 일꾼에게 던져버리고, 결과가 오든 말든 앞장서서 즉시 다음 코드 라인을 맹렬히 해석 질주하는 날렵한 동작이다. 비동기 자바스크립트의 정수이며, 시스템 렉을 획기적으로 낮춰주지만 코드 실행 순서가 뒤죽박죽 꼬여 예외 처리가 극도로 어렵다는 딜레마를 동반한다.(...)

4. 관련 밈 및 드립

4.1. 무지성 Run 버튼 연타 주술

내가 짠 자바스크립트나 자바 소스코드에 아무런 영양가 있는 디버깅 수정도 가하지 않은 채, 단지 화면의 실행(Run / Play) 버튼만 연속 5번 기적을 갈망하며 다다닥 기우제식 연타를 갈겨보는 주니어 코더 특유의 영적 주술 행위이다. 이들은 '단 한 줄도 고치지 않았지만 컴퓨터 시스템이 오작동을 깊이 뉘우치고 이번 실행에서는 얌전히 60FPS 네이티브 기적으로 잘 돌려줄 것'이라는 기상천외한 미신을 믿곤 한다.(...)

5. 여담

  • 실행 권한의 철저함 (chmod +x): 리눅스(linux)나 유닉스 터미널 환경에서 내가 고심해 코딩한 멋진 셸 스크립트 텍스트 파일(.sh)을 구동하기 위해 엔터를 쳐도 Permission Denied 에러창을 내뿜으며 전면 실행을 거부당한다. 이는 OS 커널이 이 텍스트 파일을 단순 문서로 취급하고 기계어로 가동하는 것을 엄격히 보안 방어하고 있기 때문이다. 이때 침착하게 터미널에 chmod +x 파일명 명령을 갈겨 '실행 권한(+x)' 자물쇠를 정밀하게 장착해 주어야 비로소 컴퓨터는 실행을 수용해 준다.
  • 무한 로프에 빠진 CPU의 등대: 프로그램 실행 도중 종료 조건이 꼬여 무한 루프(while(true))에 빠지면, CPU의 한 코어 점유율이 즉각 100%를 돌파하며 컴퓨터가 손난로로 불타오른다. OS 커널은 이를 방지하기 위해 강제로 프로세스를 살해하거나 스케줄링 순서에서 끌어내려 시스템이 통째로 셧다운 참사에 직면하는 것을 원천 방어한다.
  • JIT 컴파일러의 실시간 번역: 현대 자바나 모던 브라우저 V8 엔진(v8-engine)은 코드를 한 줄 한 줄 느리게 통역 실행하는 인터프리터의 약점을 보완하기 위해, 자주 실행되는 핫스폿(Hotspot) 코드 구역을 감지하는 순간 즉석에서 통째로 깡통 기계어로 순식간에 구워버리는 JIT(Just-In-Time) 컴파일 기술을 채택해 실행 가속 엔진을 달고 달린다.

6. 관련 문서