기타

소스코드 실행과 동작과정

joje* 2024. 4. 11. 18:37

소스코드 실행 시, 
일반적으로 아래와 같은 일련의 과정을 거쳐 시스템이 실행되게 된다.
 
1. 코드 작성: 먼저 프로그래머가 소스 코드를 작성한다. 이 코드는 특정 프로그래밍 언어로 작성. 이 언어는 인간이 이해하기 쉽고 읽을 수 있는 형태이며, 컴퓨터가 이해하기 쉬운 기계어로 추후 변환된다.

2. 컴파일: 소스 코드는 컴파일러라는 특수한 프로그램을 사용하여 기계어로 변환되게 된다. 이 때, 컴파일러는 소스 코드를 분석하고 해당 플랫폼에 맞는 기계어로 번역한다. (컴파일러가 생성한 기계어는 보다 저레벨 언어인 어셈블리 언어로 변환되어 처리되기도 한다.) 

3. 메모리 로드: 컴파일된 코드는 메모리에 로드된다. 

4. CPU 실행: 프로그램이 실행되면 CPU(Central Processing Unit)가 명령어를 읽고 실행하며, 이 명령어는 메모리에 로드된 기계어로 구성되어 있다. CPU는 이 명령어를 하나씩 실행하여 프로그램이 수행해야 하는 작업을 수행하게 된다.

5. 운영 체제 (OS)와의 상호 작용: 프로그램이 운영 체제와 상호 작용하여 필요한 서비스를 요청할 수 있으며, 이러한 서비스에는 파일 액세스, 네트워크 통신, 그래픽 출력 등이 포함된다.

6. 프로그램 종료: 프로그램이 실행을 마치면 운영 체제는 할당된 자원을 해제하고 프로그램을 종료시키게 된다. 종료되는 프로그램이 사용한 메모리와 다른 시스템 자원은 다른 프로그램이 사용할 수 있도록 반환된다.
 
다만, 프로그래밍 언어에 따라 컴파일 방식에 있어 언어별로 차이가 있으며 그 차이는 아래와 같다. 
 

  • C 언어:

  • 코드 작성: 프로그래머가 C 언어로 소스 코드를 작성.
    컴파일: 작성된 C 코드는 컴파일러를 통해 기계어로 번역되고, 이 과정에서 소스 코드가 어셈블리어로 변환되며, 이후 해당 플랫폼에 맞는 기계어로 번역.
    메모리 로드: 컴파일된 기계어 코드는 메모리에 로드.
    CPU 실행: CPU는 기계어 명령어를 읽고 실행하여 프로그램을 수행.

=> C 언어는 명시적인 컴파일 단계를 거쳐 기계어로 변환되어 실행
 

  • Java:

    코드 작성: 프로그래머가 Java로 소스 코드를 작성.
    컴파일: Java 코드는 자바 컴파일러에 의해 바이트 코드(Bytecode)로 컴파일 됨. 바이트 코드는 특정 플랫폼에 종속되지 않으며, JVM(Java Virtual Machine)에서 실행될 수 있는 중간 형태의 코드를 의미한다.
    메모리 로드: 컴파일된 바이트 코드는 JVM에 의해 로드되고 실행.
    CPU 실행: JVM은 바이트 코드를 해석하고 해당 플랫폼에 맞는 기계어로 변환하여 CPU에서 실행.

=> Java는 중간 형태의 바이트 코드를 생성하여 JVM에서 실행
 

  • Python:

    코드 작성: 프로그래머가 Python으로 소스 코드를 작성.
    인터프리트: Python은 소스 코드를 바로 실행하는 인터프리터 언어이다. 즉, 소스 코드는 인터프리터에 의해 한 줄씩 읽혀서 실행되며, 따라서 Python 코드는 컴파일 단계가 없고, 실행 단계에서 바로 해석되어 실행된다.
    CPU 실행: 인터프리터는 코드를 한 줄씩 읽어서 해석하고 CPU에서 실행한다. 인터프리터는 코드를 실행하면서 필요한 메모리 및 CPU 자원을 관리하게 된다.

=> Python은 인터프리터에 의해 소스 코드가 직접 실행