////
Search
Duplicate

프로세스와 컴파일 과정 - 지명

프로세스

컴퓨터에서 실행되고 있는 프로그램 ex) exe 확장자를 가진 프로그램을 실행하면 프로세스가 된다.
또한 프로그램은 컴파일러가 컴파일하여 컴퓨터가 이해하는 기계어로 번역되는 파일이 되는 것을 의미한다.
C언어 기반의 프로그램은 컴파일을 거쳐야 하지만 파이썬같은 인터프리터 언어는 컴파일 과정 필요 없이 한줄씩 읽어서 실행한다.
Program VS Process Program : - HDD/SDD(disk)의 파일에 저장된 수동 명령 모음 - ex) 크롬 프로그램(chrome.exe)과 같은 실행 파일 Process : - Program이 disk에서 메모리(RAM)로 로드된 후 해당 명령을 실행하는 것(실행 중인 프로그램) - Program으로부터 인스턴스화된 것 - 이후 OS의 CPU 스케줄러에 따라 CPU가 프로세스를 실행시킴 - ex) 크롬 프로그램을 더블클릭하면 크롬 ‘프로세스’가 시작

컴파일

소스 코드를 컴퓨터가 이해할 수 있는 기계어로 변환하는 과정을 말한다.
이 과정은 컴파일러라는 특수한 프로그램에 의해 수행된다.

프로그램의 컴파일 과정

전처리
이 단계에서는 컴파일러가 소스 코드를 직접 처리하기 전에 실행되는 작업들이 포함되어있다.
소스 코드의 주석을 제거하고 #include, #define 등의 헤더 파일을 병합하여 매크로를 치환한다.
컴파일러
전처리 단계를 거친 소스 코드는 컴파일러에 의해 어셈블리어로 변환된다.
이 단계에서는 소스 코드의 문법을 검사하고, 코드의 오류를 찾아낸다.
컴파일러는 각 프로그래밍 언어의 뭄법을 알고 있으며, 이를 기반으로 소스 코드의 유효성을 검사한다.
어셈블러
컴파일 단계에서 생성된 어셈블리어는 어셈블러에 의해 목적 코드(object code)로 변환된다.
링커
이 단계에서는 여러 개의 목적 코드(object code)와 라이브러리를 하나의 실행파일로 합치는 작업이 이루어진다.
각 목적 코드(object code)에서 동일한 심볼을 찾아 연결하고, 필요한 라이브러리를 추가하여 최종적으로 실행 가능한 파일을 생성한다.
정적 라이브러리와 동적 라이브러리
라이브러리란 ?
프로그래밍에서 자주 사용하는 코드를 모아 놓은 것
코드의 재사용성을 높이고 개발 시간을 단축할 수 있다.
정적 라이브러리 (Static Library)
프로그램이 컴파일되는 시점에, 즉 링크 단계에서 실행 파일에 포함된다.
실행 파일의 크기는 커지지만, 라이브러리가 필요한 모든 코드가 실행 파일 안에 있기 때문에 실행 환경에서 라이브러리의 위치를 따로 신경 쓸 필요가 없다.
즉, 실행 파일이 라이브러리와 독립적으로 동작할 수 있다.
동적 라이브러리 (Dynamic Library)
프로그램이 실행되는 시점에 필요한 코드를 로드한다.
실행 파일의 크기는 작아지고, 여러 프로그램이 동일한 라이브러리를 공유할 수 있어 메모리 사용이 효율적이다.
하지만 프로그램 실행 시 라이브러리가 필요한 위치에 있어야 하며, 버전 충돌 문제도 고려해야 한다.