2022. 7. 1. 11:08ㆍSTUDY/CS
[닷넷 프레임워크의 실행 구조]
CIL(Common Intermediate Language) : 공통 중간 언어로 속칭 'IL코드'라 한다. C# 기준으로 C# 컴파일러가 만들어내는 중간 언어로 '런타임'이 이해할 수 있는 언어다. 뿐만 아니라 모든 닷넷 호환 언어는 IL코드로 컴파일이 가능하다.
- 닷넷 호환 언어 : 어떤 언어의 컴파일러든 결과물로 중간 언어로 생성해 낸다면 CLR이 그것을 실행할 수 있다. 닷넷 호환 언어는 코드의 결과물을 공유하기 때문에 상호 호출이 가능하다. C#에서 F#클래스를 상속받는등
CTS(Common Type System) : 공용 타입 시스템으로 닷넷 호환 언어가 지켜야할 타입의 표준 규격을 정의한것이다. 만약에 새로운 언어를 만든다면 CTS 규약을 만족하는 한도 내에서만 구현할 수 있다. 하지만 모든 CTS규격을 따를 필요는 없다.
- C#에서는 4바이트 정수를 int, VB.NET에서는 Integer라고 하는데 이들은 모두 닷넷의 공용타입인 System.Int32 타입이다
CLS(Common Language Specification) : 공용 언어 사양으로 닷넷 호환 언어가 지켜야할 최소한의 언어 사양이다. 닷넷 호환 언어는 서로 언어의 클래스를 상속 받을 수 있는데 이때 상속 받은 클래스에서는 사용하고 싶은 타입이 구현되어 있지 않을 수 있다. CLS는 다음과 같은 2가지 의미를 가지고 있다.
- 모든 닷넷 호환 언어가 CLS에서 정의한 사양만큼은 구현해야 한다.
- 서로 다른 닷넷 호환 언어끼리 호출할때 CLS를 만족시키도록 작성해야 한다.
CLI(Common Language Infrastructure) : 공용 언어 기반구조로 CTS, CLS, 가상 실행 시스템, 메타데이터등 가장 큰틀에서 동작하는 공개 규약이다. 결국 닷넷 프레임워크는 CLI의 구현체라고 보면 된다.
CLR(Common Language Runime) : 공용 언어 런타임으로 CLI사양을 따르는 가장 대표적인 VM이다. 대표적으로 큰 기능 2가지로는 중간언어를 JIT컴파일러를 이용해 필요한 코드를 기계어로 변환하는 것과 가비지컬렉터다.
- BCL Support : 말 그대로 BCL을 사용할 수 있도록 지원해주는 위함
- Thread Support : 다중 스레드를 관리하기 위함
- Type Checker : CTS, CLS를 사용하여 검사하기 위함
- Security Engine : 형식 안전성, 권한부여등 보안 관리를 위함
- Exception Manager : 예외 처리를 위함
- Debug Engine 디버그를 지원하기 위함
- Garbage Collector : 가비지 컬렉터를 사용하기 위함
- CLR Loader : 어셈블리가 CLR Loader에 의해 로드됨
- JIT(Just In Time) Compiler : CIL을 기계어로 변환하기 위함이며 '프로그램을 실제 실행하는 시점'에 기계어로 번역하는 컴파일 기법
- Pre-JIT Compiler : 전체 코드를 한번에 기계어로 컴파일됨, 애플리케이션 배포시 수행됨
- Normal JIT Compiler : 런타임에 필요한 소스 코드만 JIT 컴파일러에서 처음 호출될때 기계어로 컴파일됨. 그 후 캐싱 되어 다시 호출될 때마다 사용됨
- Econo JIT Compiler : 닷넷 2.0부터는 사용되지 않고 있음, 런타임에 필요한 소스코드만 Econo JIT Compiler에 의해 컴파일되고 더 이상 필요하지 않으 면 제거됨
- Code Manager : Managed code를 관리하기 위함 Managed code는 언어별 컴파일러에 의해 중간언어로 변환 후 JIT Compiler를 통해 기계가 변환됨
(Managed code : 말 그대로 '관리되는 코드'라는 말로 정확하게는 내가 쓰는 언어의 컴파일러가 만든 중간언어를 관리(java의 경우 JVM c#의 경우 CLR)된다는 뜻
Managed code vs Unmanaged code
JVM, .NET등이 설치 되어있어야만 실행이 가능하다. | 빠른 실행 속도를 가진다. |
깔려만 있다면 어떤 OS에서든 작동이 가능하다. | OS 에 직접 컴파일되어 중간언어 생성과정 없이 바로 Binary code를 만든다. |
중간 과정을 거치기 때문에 그만큼 실행속도가 느릴 수 있다. |
'STUDY > CS' 카테고리의 다른 글
어셈블리어에 대한 개념 정리 (0) | 2024.09.28 |
---|---|
객체 지향 프로그래밍이란 (0) | 2022.08.17 |
C# GC(Garbage Collector) 가비지 컬렉터 (0) | 2022.08.17 |
dll, lib (0) | 2022.07.01 |
메모리 구조, 바이트 정렬 (0) | 2022.07.01 |