소스 코드 작성 및 컴파일
- 개발자는 C, Java, Python 등의 고급 프로그래밍 언어로 소스 코드를 작성합니다. 이 코드는 사람이 이해할 수 있는 형태로 작성되어 있습니다.
- 소스 코드는 컴파일러에 의해 기계어(또는 중간 언어)로 번역됩니다. 컴파일 과정에서는 코드 최적화, 오류 검사 등이 수행되며, 실행 가능한 프로그램(실행 파일)을 생성합니다. 일부 언어(예: Java)에서는 바이트코드와 같은 중간 형태로 컴파일되어, 가상 머신에서 실행될 수 있습니다.
링킹
- 컴파일된 코드는 필요한 라이브러리나 다른 모듈과 함께 링킹됩니다. 정적 링킹은 컴파일 시간에 외부 코드나 라이브러리를 실행 파일에 포함시키며, 동적 링킹은 프로그램이 실행될 때 필요한 코드를 불러오는 방식입니다.
- 최종적으로, 링킹 과정을 거쳐 완전한 실행 파일이 생성됩니다.
실행 파일 로딩
- 사용자가 프로그램을 실행시키면, 운영 시스템은 실행 파일을 메모리로 로드합니다. 이 과정에서 운영 시스템은 파일 시스템에서 실행 파일을 찾아 메모리에 적재합니다.
프로세스 생성
- 메모리에 로드된 실행 파일은 프로세스로 생성됩니다. 프로세스는 실행 중인 프로그램의 인스턴스로, 고유한 메모리 공간(코드, 데이터, 스택 등)과 운영 시스템 자원(파일 핸들, 스레드 등)을 할당받습니다.
- 운영 시스템은 프로세스를 관리하며, CPU 스케줄링을 통해 프로세스가 실행될 수 있도록 합니다.
실행
- 프로세스가 CPU 시간을 할당받으면, 프로세스의 코드가 실행됩니다. 이때 명령어 실행 사이클(Fetch, Decode, Execute 등)이 반복되며, 프로그램의 로직에 따라 처리가 수행됩니다.
- 프로그램 실행 도중에는 메모리 접근, 입출력 작업, 네트워크 통신 등 다양한 시스템 호출이 이루어질 수 있습니다.
종료
- 프로그램이 완료되면, 운영 시스템은 프로세스를 종료시키고, 사용했던 자원을 회수합니다. 프로세스 종료는 정상 종료, 사용자에 의한 강제 종료, 오류로 인한 비정상 종료 등 여러 방식으로 이루어질 수 있습니다.
이 과정을 통해 고급 언어로 작성된 소스 코드는 컴퓨터에서 실행될 수 있는 프로세스로 변환되어, 실제 작업을 수행하게 됩니다.
※ 자바는 전처리기 제공하지 않음.
컴파일러 언어
- 전체 번역
- 실행 프로그램을 생성하는 번역기 역할
- 실행은 개발자가 직접 따로 해야함
- 디버깅 작업이 쉬워 오류 찾기 쉬움
- ex) C, C++, C#, Java, Rust, Go ...
스크립트 언어
- 한줄씩 즉시 번역 및 실행 역할
- 번역과 실행 동시에 진행
- 실행하기 전까진 컴파일 언어에 비해 오류 인지 시점이 늦다.
- ex) JavaScript, HTML, ActionScript, SQL, Python, Ruby ...
참고링크:
'컴퓨터구조' 카테고리의 다른 글
[컴퓨터구조] 하드웨어 종류 및 CPU 구성 (1) | 2024.07.30 |
---|