프로세스
•
컴퓨터에서 실행되고 있는 프로그램
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)
◦
프로그램이 실행되는 시점에 필요한 코드를 로드한다.
◦
실행 파일의 크기는 작아지고, 여러 프로그램이 동일한 라이브러리를 공유할 수 있어 메모리 사용이 효율적이다.
◦
하지만 프로그램 실행 시 라이브러리가 필요한 위치에 있어야 하며, 버전 충돌 문제도 고려해야 한다.