내가 작성한 닷넷 실행파일에서 CLR은 어디에 있을까?

b son·2023년 9월 4일
0

의문

널널한 개발자님의 자바 JVM의 간단한 구조 영상을 보던 중 문득 의문이 하나 생겼다.
가상머신이 메모리 관리를 수행하고 각종 OS Api를 대신 호출을 하는 등 많은 일을 하는데 해당 작업들을 수행하는 코드들은 컴파일 될 때 내 파일에 생기는 건가? 아니면 내 코드가 실행될 때 가상머신도 같이 실행되어서 가상머신 쪽 함수를 호출하는 형식으로 구현이 된건가? 궁금해졌다.

닷넷은 다른 곳에..

간단히 구글링한 결과
윈도우 기준으로 닷넷으로 작성된 PE파일을 실행시키면 운영체제가 mscoree.dll을 호출함으로 CLR이 초기화되고 내가 작성한 코드들이 로드되어 실행이 된다고 한다.

dotnet파일 실행 -> 운영체제가 적합한 CLR를 실행 -> CLR가 내 코드를 실행

게임 엔진을 다루어 보았다면 게임엔진이 내 코드를 실행시켜주는 것과 유사하다고 본다.

대략적인 계층구조:

| 내코드 |
| dotnet |
| 운영체제 |
| 하드웨어 |

내 코드가 실행이 되려면, 운영체제가 프로세서에 내 프로세스를 할당해주어야 하며 닷넷이 내 코드를 실행시켜줘야 내코드가 실행된다.

필요에 따라 내 코드를 실행 중단 시킬 수 있음 (예를 들면 GC?)

결론

내 코드가 컴파일 된 영역에는 닷넷 관련 로직은 없지만 내 코드를 실행 시킬때 운영체제가 닷넷부터 실행시킨다. 이는 내 코드와 닷넷이 동시에 실행되는 구조라기 보단 내 코드가 닷넷에 포함되는 구조임.
(브라우저, 유니티, 언리얼, node.js같은 것과 유사한 것 같다.)

무지한 영역

윈도우 구조(dll, PE)와 플랫폼 언어(C#, JAVA 등)이 아닌 네이티브 언어로 작성 된 실행파일(PE파일)의 실행 과정

닷넷 프로그램 실행과정이 컴파일 전략(JIT, AOT)에 따라 차이가 있는가?

C언어 또한 CRT(C 런타임)이 main문을 호출해 주는데 CRT 또한 프레임워크인가?

참고 자료

https://www.youtube.com/watch?v=a-3hfuQqKYY&ab_channel=%EB%84%90%EB%84%90%ED%95%9C%EA%B0%9C%EB%B0%9C%EC%9E%90TV
http://www.csharpstudy.com/DevNote/Article/20
https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=oidoman&logNo=90160134036

profile
함께 성장하는 개발자

0개의 댓글