Creative Commons License

Microsoft .NET

닷넷!시작하기
닷넷! Ver 2.0~
닷넷!스킬업
웹개발
윈폼개발
실용모듈개발
Tip & Tech
하루 한 문법

Microsoft .NET 개발자들을 위한 공간입니다. 기초강의에서 부터 고급 기술 정보 및 팁등을 다루도록 하겠습니다.

.

닷넷!시작하기

Microsoft. NET 을 시작하는 분들을 위한 강좌입니다. 주로 기초적인 내용과 때론 기본적인 내용을 다룹니다

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

작성자 : 박종명
최초 작성일 : 2008-06-27 (금요일)
최종 수정일 : 2008-06-27 (금요일)
조회 수 : 7583

닷넷기반 언어(C#,VB.NET 등)로 작성한 프로그램의 실행 흐름을 살펴 봅니다.

아래는 실행흐름을 개괄적으로 표현한 그림입니다

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. 이제서야 우리는 우리가 작성한 프로그램을 모니터를 통해 눈으로 확인 할 수 있게 되었군요..
 
수고하셨습니다~~

∵Commented by 래리 at 2011-07-08 오후 4:15:03  
오.. 쉽게 정리해 주셨네요~
∵Commented by zeeyou at 2013-10-23 오후 6:00:55  
역시 흐름으로 파악하는게 이해가 빨리 되네요^^ 다시 한번 감사합니다!
∵Commented by JosephMoon at 2014-10-15 오전 12:53:05  
CLR이 자바의 JVM과 비슷한 개념인가요? ^^
이름
비밀번호
홈페이지
WD <- 왼쪽의 문자를 오른쪽 박스에 똑같이 입력해 주세요