실행
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
실행은 프로그램이 운영 체제와 런타임 라이브러리의 지원을 받아 컴퓨터에서 작동하는 과정을 의미한다. 실행 환경은 컴퓨터 주변 장치 조작으로부터 프로그램을 분리하여 추상적인 서비스를 제공하며, 멀티태스킹 운영 체제에서는 컨텍스트 스위칭을 통해 여러 프로세스를 관리한다. 프로그램은 소스 코드 작성, 컴파일, 링크 과정을 거쳐 실행 파일로 생성되며, 운영 체제에 의해 메모리에 로드되어 실행된다. 런타임은 프로그램의 최종 단계로, 기계어로 코드가 실행되는 시점을 말하며, 런타임 오류는 실행 중에 감지된다. 런타임 시스템은 메모리 관리, 변수 접근, 운영 체제와의 인터페이스 등을 담당하며, 예외 처리는 런타임 오류를 처리하는 언어 기능 중 하나이다. 명령어 사이클은 CPU가 명령을 처리하는 사이클로, 인출, 해독, 실행 단계를 거치며, 인터프리터는 프로그램을 직접 실행하는 시스템이고, 가상 머신은 컴퓨터 시스템을 가상화하는 기술이다.
더 읽어볼만한 페이지
- 컴퓨터 용어 - 중앙 처리 장치
중앙 처리 장치(CPU)는 컴퓨터 시스템의 핵심 부품으로, 프로그램 명령어를 해석하고 실행하여 데이터를 처리하는 장치이다. - 컴퓨터 용어 - 운영체제 서비스 관리
| 실행 | |
|---|---|
| 프로그램 실행 | |
| 프로그램 실행 | 컴퓨터가 컴퓨터 프로그램의 명령어를 실행하는 과정이다. |
| 개요 | |
| 실행 주체 | 컴퓨터 |
| 실행 대상 | 컴퓨터 프로그램의 명령어 |
| 실행 과정 | 명령어 인출 (Fetch) 명령어 해석 (Decode) 명령어 실행 (Execute) 결과 저장 (Store) |
| 실행 환경 | |
| 런타임 시스템 | 프로그램 실행을 지원하는 환경 |
| 운영체제 | 프로그램 실행을 위한 기본적인 자원 제공 |
| 실행 방법 | |
| 컴파일 | 소스 코드를 기계어로 번역하여 실행 파일을 생성 |
| 인터프리터 | 소스 코드를 한 줄씩 해석하며 실행 |
| 같이 보기 | |
| 관련 개념 | 컴파일 인터프리터 가상 머신 운영체제 런타임 시스템 |
2. 실행 환경 (Execution Context)
대부분의 프로그램은 운영 체제와 런타임 라이브러리의 지원을 받아 실행된다. 이러한 지원 환경은 더 일반적이고 추상적인 서비스를 제공하여 프로그램 개발을 용이하게 한다. 프로그램은 보통 실행 시점에 사용 가능한 자원에 대한 가정을 포함한다. 대부분의 프로그램은 멀티태스킹 운영 체제와 런타임 라이브러리 내에서 실행되며, 이는 컴퓨터 자체에서 직접 제공하지 않는 중요한 서비스를 제공한다. 예를 들어, 이러한 지원 환경은 프로그램이 컴퓨터 주변 장치를 직접 조작하지 않아도 되도록 더 일반적이고 추상적인 서비스를 제공한다.[3]
2. 1. 컨텍스트 스위칭 (Context Switching)
프로그램과 인터럽트 핸들러가 간섭 없이 작동하고 동일한 하드웨어 메모리를 공유하며 I/O 시스템에 접근하려면, 단일 CPU/MCU를 가진 디지털 시스템에서 실행되는 멀티태스킹 운영체제에서 실행 중인 프로세스의 데이터(메모리 페이지 주소, 레지스터 등)를 추적하고 중단되기 전 상태로 저장하고 복구할 수 있는 일종의 소프트웨어 및 하드웨어 기능이 필요하다. 이는 컨텍스트 스위칭을 통해 달성된다.[3][4] 실행 중인 프로그램에는 종종 프로세스 컨텍스트 식별자(PCID)가 할당된다.리눅스 기반 운영체제에서, 컨텍스트 전환을 구현하기 위해 레지스터에 저장된 데이터 세트는 일반적으로 메모리의 프로세스 디스크립터에 저장된다.[3] PCID도 사용된다.
3. 실행 과정 (Process)
프로그램을 실행하려면 소스 코드를 작성해야 한다. 이 코드는 컴파일 시간에 컴파일되고, 링크 시간에 정적으로 연결되어 실행 파일이 만들어진다. 만들어진 실행 파일은 운영 체제에 의해 호출된다. 운영 체제는 프로그램을 메모리에 로드하고(로드 시간), 동적 연결을 수행한 후, 프로그램의 진입점으로 제어를 이동시켜 실행을 시작한다. 이 모든 단계는 운영 체제의 응용 프로그램 이진 인터페이스에 따라 달라진다. 실행이 시작되면 프로그램은 실행 시간에 들어간다. 프로그램은 정상적으로 종료되거나 충돌로 인해 종료될 때까지 실행된다.
3. 1. 실행 파일 (Executable)
'''실행 코드''', '''실행 파일''', 또는 '''실행 프로그램'''은 때때로 단순히 '''실행 파일''' 또는 '''이진 파일'''이라고도 하며, 컴퓨터가 "인코딩된 명령어에 따라 표시된 작업을 수행하도록" 하기 위한 명령어와 데이터 목록이다.[1] 이는 의미를 갖기 위해 프로그램에 의해 해석 (파싱)되어야 하는 데이터 파일과는 대조적이다.정확한 해석은 사용에 따라 다르다. "명령어"는 전통적으로 물리적 CPU에 대한 기계어 명령어를 의미한다.[2] 일부 맥락에서는 스크립팅 명령어 (예: 바이트코드)를 포함하는 파일도 실행 파일로 간주될 수 있다.
4. 런타임 (Runtime)
'''런타임'''(''Runtime'') 또는 '''실행 시간'''은 컴퓨터 프로그램이 중앙 처리 장치(CPU)에서 기계어로 실행되는 프로그램 수명 주기 단계를 의미한다. 즉, 프로그램이 실행되는 단계를 말한다.
런타임 오류는 프로그램 실행 이후 또는 실행 중에 감지되는 반면, 컴파일 시간 오류는 프로그램 실행 전에 컴파일러에 의해 감지된다. 타입 검사, 레지스터 할당, 코드 생성 등은 일반적으로 컴파일 시간에 수행되지만, 특정 언어와 컴파일러에 따라 런타임에 수행될 수도 있다.
0으로 나누기 오류, 도메인 오류, 배열 첨자 범위 초과 오류, 산술 언더플로우 오류, 여러 유형의 언더플로우 및 오버플로우 오류 등 다양한 런타임 오류가 존재하며, 이는 특정 프로그래밍 언어에 따라 다르게 처리된다.
대부분의 프로그램은 운영 체제와 런타임 라이브러리의 지원을 통해 실행된다. 이러한 지원 환경은 더 일반적이고 추상적인 서비스를 제공하면서 프로그램을 컴퓨터 주변 기기의 조작으로부터 분리하는 역할을 한다.
4. 1. 런타임 시스템 (Runtime System)
'''런타임 시스템'''은 '''런타임 환경'''이라고도 불리며, 주로 실행 모델의 일부를 구현한다. 대부분의 프로그래밍 언어는 프로그램이 실행되는 환경을 제공하는 일종의 런타임 시스템을 가지고 있다. 이 환경은 응용 프로그램 메모리의 관리, 프로그램이 변수에 접근하는 방법, 절차 간 매개변수를 전달하는 메커니즘, 운영 체제와의 인터페이스 등 여러 문제를 다룰 수 있다. 컴파일러는 정확한 코드를 생성하기 위해 특정 런타임 시스템에 따라 가정을 한다. 일반적으로 런타임 시스템은 스택과 힙을 설정하고 관리하는 데 어느 정도 책임을 지며, 가비지 수집, 스레드 또는 언어에 내장된 기타 동적 기능과 같은 기능을 포함할 수 있다.실행이 이루어지는 환경은 매우 중요하다. 프로그램에는 통상적으로 실행 시 사용 가능한 리소스에 관한 암묵적 및 명시적인 가정 (동작의 전제 조건)이 있다. 대부분의 프로그램은 운영 체제와, 컴퓨터 자체가 제공하지 않는 중요한 서비스를 제공하는 런타임 라이브러리의 지원 환경에서 실행된다.
4. 2. 구현 세부 사항 (Implementation details)
프로그램이 실행될 때, 우선 로더가 필요한 메모리 설정을 수행하고, 프로그램이 필요로 하는 모든 동적으로 연결된 라이브러리와 연결한 다음, 프로그램의 진입점부터 실행이 시작된다. 일부 경우에는 언어 또는 구현에 따라 이러한 작업이 언어 런타임에 의해 수행되도록 하지만, 이는 일반적인 소비자 운영 체제에서 주류 언어에서는 드문 경우이다.일부 프로그램 디버깅은 런타임에만 수행될 수 있거나, 런타임에서 수행될 때 더 효율적이거나 정확하다.[1] 논리 오류와 배열 범위 검사가 그 예이다.[1] 이러한 이유로, 일부 프로그래밍 버그는 정교한 컴파일 시간 검사 및 사전 릴리스 테스트에도 불구하고 실제 데이터가 있는 운영 환경에서 프로그램이 테스트될 때까지 발견되지 않기도 한다.[1] 이 경우 최종 사용자는 "런타임 오류" 메시지를 받게 될 수 있다.[1]
4. 3. 애플리케이션 오류 (예외) (Application errors (exceptions))
예외 처리는 런타임 오류를 처리하도록 설계된 언어 기능 중 하나이다. 예외 처리가 없는 언어에서 필요한 인라인 오류 검사의 양 없이, 완전히 예상치 못한 상황과 예측 가능한 오류 또는 특이한 결과를 포착하는 구조화된 방법을 제공한다.[1] 런타임 엔진의 최근 발전으로 자동화된 예외 처리가 가능해졌으며, 이는 관심 있는 모든 예외에 대한 "근본 원인" 디버그 정보를 제공한다.[1] 자동화된 예외 처리는 소스 코드와 독립적으로 런타임 엔진에 특수 소프트웨어 제품을 부착하여 구현된다.[1]5. 명령어 사이클 (Instruction Cycle)
'''명령어 사이클'''(또는 '''인출-해독-실행 사이클''', 간단히 '''인출-실행 사이클''')은 중앙 처리 장치(CPU)가 부팅부터 컴퓨터가 종료될 때까지 명령을 처리하기 위해 따르는 사이클이다. 이 사이클은 인출 단계, 해독 단계, 실행 단계의 세 가지 주요 단계로 구성된다.[5]
단순한 CPU에서는 명령어 사이클이 순차적으로 실행되며, 각 명령어는 다음 명령어가 시작되기 전에 처리된다. 대부분의 최신 CPU에서는 명령어 사이클이 동시 컴퓨팅으로 실행되며, 종종 병렬 컴퓨팅을 통해 명령어 파이프라인으로 실행된다. 이전 명령어가 완료되기 전에 다음 명령어가 처리되기 시작하는데, 이는 사이클이 별도의 단계로 나뉘기 때문에 가능하다.[5]
6. 인터프리터 (Interpreter)
인터프리터는 프로그램을 직접 실행하는 시스템이다. 이는 실행 전에 프로그램을 다른 언어로 변환하는 언어 번역기와 대조된다. 인터프리터는 실행 시에 프로그램의 명령을 해석하여 지시대로 실행한다. 이는 프로그램을 한 언어에서 다른 언어로 변환하는 컴파일러와는 대조적이다. 컴파일러는 소스를 사람이 읽을 수 있는 고수준 언어에서 프로세서가 직접 실행할 수 있는 고속의 저수준 언어(네이티브 머신 코드)로 변환한다. 프로그램은 한 번 컴파일하면 이후 여러 번 저수준 언어로 실행할 수 있는데, 이는 소스 언어를 실행 시에 해석하는 인터프리터와 비교하여 컴파일러에 큰 장점이 있다. 그 대신, 컴파일러의 경우 개발에 걸리는 시간이 길어진다. 경우에 따라서는 변경된 파일만 재컴파일하는 것으로 끝나는 경우도 있다. 그 후, 실행 파일을 다시 링크해야 하며, 변경 내용에 따라서는 실행 파일을 처음부터 다시 구축해야 한다. 컴퓨터와 컴파일러가 빨라짐에 따라, 이것은 그렇게 큰 과제가 되지 않았다. 또한, 사용자에게는 개발에 걸리는 시간보다 최종 제품의 실행 속도가 중요하다.[1]
7. 가상 머신 (Virtual Machine)
'''가상 머신'''(VM)은 컴퓨터 시스템을 가상화하거나 에뮬레이션하는 것이다. 가상 머신은 컴퓨터 아키텍처를 기반으로 실제 컴퓨터의 기능을 제공한다. 구현에는 특수 하드웨어, 소프트웨어 또는 그 조합이 포함될 수 있다.
가상 머신은 기능에 따라 다음과 같이 구성된다.
- '''시스템 가상 머신'''(전체 가상화 VM이라고도 함)은 실제 머신을 대체한다. 전체 운영 체제를 실행하는 데 필요한 기능을 제공한다. 하이퍼바이저는 네이티브 코드를 사용하여 하드웨어를 공유하고 관리하므로 서로 격리되어 있지만 동일한 물리적 머신에 존재하는 여러 환경을 허용한다. 최신 하이퍼바이저는 주로 호스트 CPU의 하드웨어 지원 가상화, 가상화 관련 하드웨어를 사용한다.
- '''프로세스 가상 머신'''은 플랫폼 독립적인 환경에서 컴퓨터 프로그램을 실행하도록 설계되었다.
QEMU 및 비디오 게임 콘솔 에뮬레이터와 같은 일부 가상 머신 에뮬레이터는 다른 시스템 아키텍처를 에뮬레이션(또는 "가상적으로 모방")하도록 설계되어 다른 CPU 또는 아키텍처용으로 작성된 소프트웨어 애플리케이션 및 운영 체제를 실행할 수 있다. OS 수준 가상화를 통해 커널 (운영 체제)을 통해 컴퓨터의 리소스를 분할할 수 있다. 용어는 보편적으로 상호 교환이 가능하지 않다.
참조
[1]
웹사이트
executable
http://www.merriam-w[...]
Merriam-Webster
2008-07-19
[2]
웹사이트
Machine Instructions
https://www.geeksfor[...]
2019-09-18
[3]
서적
Understanding the Linux Kernel
https://www.worldcat[...]
O'Reilly
2005
[4]
웹사이트
Difference between Swapping and Context Switching
https://www.geeksfor[...]
2022-08-10
[5]
웹사이트
Pipelining
https://cs.stanford.[...]
2019-06-26
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com