관리 메뉴

IT 쟁이

소스코드 탄생에서 실행까지.. (닷넷기반 프로그램 실행 구조) 본문

Microsoft(C#).NET

소스코드 탄생에서 실행까지.. (닷넷기반 프로그램 실행 구조)

클라인STR 2008. 1. 14. 10:44

사용자 삽입 이미지

1. 우리 같은 프로그래머가 열쒸미 컴터 앞에서 삽질을 합니다.
 
2. 프로그래머가 작성한 소스 코드 입니다(C#)
 
3. C# 컴파일러가 소스코드를 컴파일 합니다.
    언어별로 다른 컴파일러가 동작합니다. 여기선 csc.exe 라는 C# 컴파일러 입니다 (VB.NET 의 경우 vbc.exe 가 되겠지요)
 
4. 이렇게 컴파일 되어 파생되는 결과 파일은 exe 또는 dll 파일이 됩니다.
    단, 닷넷에서는 자바의 중간 바이트 코드와 유사하게 MSIL (CIL) 이라는 중간언어로 컴파일 됩니다.
    즉, 바로 실행가능한 파일이 아니라는 말입니다.
    자바의 플랫폼 독립성을 위해 중간 바이트 코드가 필요 했듯 닷넷에서도 플랫폼 독립성과 언어 통합을 위해
    중간단계를 거치게 되는 것입니다.
    참고로 언어 통합이란 닷넷의 장점 중에 하나인데요.. C# 코드이든, VB.NET 코드이든 소스코드는 달라도
    컴파일 되어 파생되는 중간언어(IL코드)는 완전히 동일하게 됩니다.
    이 결과로 각기 다른 언어로 작성한 닷넷 소스라 할 지라도 상호 작용이 가능하게 되는 것입니다.
    또한 이 exe (or dll) 파일에는 소스코드내의 클래스를 설명하는 메타 데이터와 매니페스트정보가 포함됩니다
 
5. 4번에서 만들어진 중간언어는 실제 실행시 실행단계로 넘어 갑니다.
 
6. 이제 부터 그 유명한 CLR 의 영역인데요..
    CLR 은 4번에서 컴파일된 중간코드를 실제로 실행시키기 위한 각종 서비스들의 모음이라 할 수 있습니다.
    다시 말해 닷넷으로 만든 프로그램의 실행환경을 제공하는 것입니다.
   실행을 위해 IL 코드가 CLR로 호스트 될때 제일 처음 CLR 내부의 Class Loader 에 의해 클래스들의 레이아웃 로드와
   메타데이타를 로드하여 중간 여러 과정을 거쳐(타입체크,마샬링등 <- 이과정은 여기서 생략됩니다) 메모리에 로드합니다.
 
7. 메모리에 올라간 어셈블리는 실행되는 컴퓨터가 (플랫폼) 이해(처리) 할 수 있는 명령어(Native Code) , 즉 플랫폼 종속적인
    원시 코드로 컴파일 되는데 , 이때 JIT 라는 컴파일러가 관여 합니다.
    JIT 컴파일러는 jitter(지터)라는 애칭을 가진 컴파일러로써 IL 코드를 특정 플랫폼 기반의 원시코드롤 컴파일을 해주는 놈입니다.
 
8. 7의 과정에서 탄생한 원시코드(Native Code) 입니다.
    Native Code 는 다 아시다 시피 컴퓨터가 처리 할 수 있는 컴퓨터용 코드 입니다.
   
9. jitter 에 의해 컴파일된 Native Code 는 다음번 사용을 위해(재사용) 메모리에 캐싱됩니다.
    따라서 동일한 어셈블리를 실행할때 또 다시 컴파일 하는 단계를 줄임으로써 실행속도의 향상을 꾀합니다.
    즉, 다음번 실행시에는 MSILI 의 컴파일 단계가 생략 됩니다.
 
10. 이제서야 우리는 우리가 작성한 프로그램을 모니터를 통해 눈으로 확인 할 수 있게 되었군요..
 
수고하셨습니다~~

출처  http://mkex.pe.kr/ 

Comments