관리 메뉴

IT 쟁이

.NET Execute Model 본문

ASP.NET/Lecture

.NET Execute Model

클라인STR 2008. 1. 15. 17:26

사용자 삽입 이미지





모든 .NET 언어로 작성된 소스 코드는  컴파일러를 통해서 MSIL 이라는 중간언어로 만들어 진다. 여기까지를 우리는 Compilation 단계라고 부른다. 이 단계의 결과물로는 중간 언어인 MSIL과 그 중간 언어에 대한 여러가지 정보를 가지고 있는 MetaData 라는 것이 생긴다. 중간 언어로 존재한다고 하더라도 우리 눈에 보여지는 이 결과 파일의 확장자는 DLL 이나 EXE 파일은 확장자나 라이브러리  파일은 아니다.  단지 그러한 확장자를 가진 중간언어 일뿐이다. 이러한 중간적인 상태로 존재하던 파일들이 이제 실행시점에 들어가게 되면 CLR 내의 JIT 컴파일러에 의해 다시금 컴파일되고, 그 결과 실제로 실행가능한 플랫폼 기반의 Native Code 가 생성되어지게 된다. 여기까지의 단계를 Execution 단계라고 부른다.

이러한 다소 거추장 스러운 단계는 여러가지 잇점이 있다.언어 독립성, 교차 언어의 상속가능, 플랫폼 기반의 최적화된 코드의 생성등이다. Exception 단계를 관할하는것은 CLR Common Language Runtime이다. CLR은 코드의 실행을 관리한다.

그럼 좀더 구체적인 Execute 모델을 살펴보기로 하자.

사용자 삽입 이미지





먼저 소스코드가 컴파일러와 메타 데이터 엔진에 의해 중간언어인 IL 과 또한 그 IL을 설명하는 메타 데이터로 구성되는 것을 볼 수가 있다. 그렇게 구성되어진 MSIL 은 그 파일과 연결된 다른 어셈블리들이 있을 경우, Linker 라는 것을 통해서, 하나의 EXE 나 DLL 로 만들어지게 되며, 이것이 이전에 말했던 관리 코드이다.

여기서 어셈블리 (Assembly)란?  컴파일된 관리 코드들이 저장되는 단위로써, 기존의 EXE 나 DLL 파일과 비슷하다고 볼 수 있지만, 어셈블리는 이전 EXE, DLL 과는 다르게 자신을 설명하는 메타 데이터를 가지고 있다. 이것이 중요한 차이점이다.


그리고, 하나의 EXE 나 DLL 로써 존재하고 있던 관리 코드들은 실행시가 되면 이제 CLR에 의해서 실행 파일이 되기 위한 다시 한번의 컴파일 과정을 거치기 위한 준비들을 하는데, 그 첫번째가 바로 CLR의 Class Loader 에 의해 클래스의 레이아웃이 잡히고, 로드되는 단계이다. 이 때, Base Class Library 로부터 여러가지 기본적인 클래스들도 같이 로드하는 것을 볼 수 있다.  이렇게 클래스가 로드되면 그것을 Jitter('지터'라고 발음함) 로 컴파일을 하게 되고 그로인해 원시코드는 탄생하게 되는 것이다. 그리고, 즉시 실행을 시작한다. 여기까지가 실행 단계이다.

 

출처 태요의 ASP.NET

Comments