CLR

최정훈·2024년 10월 1일
  • CLR(Common Language Runtime)

    공용 언어 런타임. .NET Framework의 기본이자 .NET Framework의 VM(가상머신) 요소이다.

    JAVA의 VM과 비슷한 역할을 한다. 작성한 소스코드를 OS위에 있는 .NET Framework에서 작동하게 해준다.



  • CLR의 내부 구조

    -Base Class Library Support: CLR은 Base Class Library(BCL)를 지원한다.

    -Thread Support: CLR은 멀티 스레드의 병렬 실행을 관리하기 위한 스레드 지원을 제공한다.

    -COM Marshaller: COM(Component Object Model). 시스템을 이루는 컴포넌트들이 상호통신을 할 수 있도록 하는 메커니즘.

    -Type Checker: CLR내부의 CTS(Common Type System)과 CLS(Common Language Specification)를 사용하여 형식 검사

    -Exception Manager: .NET Language에 상관없이 예외를 처리한다.

    -Security Engine: .NET Framework에서 제공되는 툴을 이용하여 Code, Floder, Machine Level 단위로 보안 사용 권한을 처리한다.

    -Debug Engine: 응용프로그램은 Debug Engine을 통하여 런타임동안 디버그가 가능하다. 이와 관련하여 Code 관리 및 추적에 편한 ICorDebug 인터페이스가 있다.

    -JIT Compiler: 마이크로소프트 중간언어(Microsoft Intermediate Language, MSIL)를 JIT Compiler가 실행되는 컴퓨터 환경에 특정한 기계 코드로 변환한다. 컴파일된 MSIL은 필요한 경우 후속 호출에 사용할 수 있도록 저장된다.

    -Code Manager: .NET Framework에서 개발된 코드인 Managed code를 관리한다. 이는 언어별 컴파일러에 의해서 중간 언어로 변환된 후 JIT Complier에 의해 중간 언어가 기계 코드로 변환된다.

    -Garbage Collector: GC를 사용하여 자동 메모리 관리가 가능하다. 이는 더 이상 필요하지 않은 메모리 공간을 자동으로 해제하여 재할당이 가능하도록 한다.

    -CLR Loader: 다양한 모듈, 리소스, 어셈블리 등은 CLR Loader에 의해 로드된다. 이 로더는 프로그램 초기화 시간이 빠르고 소모되는 자원이 덜하도록, 실제로 필요한 경우 모듈을 온디맨드 방식(요구가 있을 때는 언제든지)으로 로드한다.


  • CLR의 동작원리

    소스코드를 작성하면, C# Complier(Language Complier)가 컴파일하여, IL(Intermediate Language, MSIL)라는 중간 언어로 작성된 실행 파일을 만들어 준다. 마지막으로 사용자가 이 파일을 실행하게 되면, CLR이 IL을 읽어 하드웨어가 이해할 수 있는 NativeCode로 컴파일(JIT Complier를 통해)한 후 실행시킨다.

    CLR이 C#뿐만이 아닌 다른 언어들도 지원하도록 설계되었기 때문에, 두번 컴파일하는 복잡한 과정을 거친다.

    이 방식의 장점은 플랫폼에 최적화된 코드를 만들어 낸다는 것이다. 단점으로는 실행 시에 이루어지는 컴파일 비용의 부담이다.

profile
게임개발자(희망)의 공부일지

0개의 댓글