- 0
- 0
- 约3.18千字
- 约 3页
- 2023-04-27 发布于江苏
- 举报
托管程序的启动过程 (.NETCLR寄宿)
托管程序的启动过程 (.NET CLR 寄宿)
⼤家都知道 C# 等托管语⾔编写的代码都会被编译成托管程序 (*.exe 或 *.dll),这些托管程序 最终都会托管给 CLR (公共语⾔运⾏
时)来执⾏。那么,托管程序的启动过程是怎样的?CLR ⼜是如何寄宿到宿主程序中的?为了回答以上问题,本⽂将⾸先介绍托管程序
的⽣成过程 ;然后介绍托管程序的启动过程,以及该过程中 CLR 的加载流程。
⼀个托管应⽤程序⾸先被操作系统启动,然后由操作系统调⽤ CLR 来托管该程序。那么 .NET 框架到底以什么⽅式让操作系统认识
CLR 并且可以启动它呢?微软实际将 CLR 作为 COM 服务器实现在⼀个 DLL 中,并提供了标准的 COM 接⼝。既然是 COM 服
务,也就意味着普通的⾮托管程序也可以调⽤ CLR 来运⾏托管代码,我们把这种调⽤⽅式叫做寄宿,把调⽤ CLR 的⾮托管程序叫做
宿主。宿主程序不仅可以调⽤ CLR 来执⾏托管程序 ,还可以通过它来进⾏内存管理、垃圾回收管理、策略管理、事件管理以及线程
控制等⾼级管理。
如上图所⽰,托管语⾔编写的源代码⽂件会被编译成托管模块,多个托管模块连同⼀些资源⽂件会被合并成托管程序 。托管程序 通常有
EXE 和 DLL 两类,其中前者 (EXE)能被操作系统直接启动,后者 (DLL)可以被前者调⽤。托管 EXE 被启动后,操作系统会调⽤ CLR
来托管它。CLR 启动后,会创建 AppDomain 来加载并运⾏托管程序 。
托管模块已经是标准的 PE ⽂件了,为了部署和版本管理的⽅便,编译器会将多个托管模块连同相关的资源合并成⼀个 PE ⽂件,合并⽣成的 PE
⽂件被称为程序 。
PE ⽂件的全称是 Portable Executable,意为可移植执⾏体 (⽂件)。常见的 EXE、DLL、OCX、SYS、COM 都是 PE ⽂件,PE ⽂件是微软
Windows 操作系统上的程序⽂件 (可能是间接被执⾏,如 DLL ⽂件)。
托管程序 的⽣成
如上所述,托管程序 的⽣成要经历两个步骤,⾸先是将源代码编译成托管模块,然后再将多个托管模块及资源 (或数据)⽂件合并成程序
。
1. 将源代码编译成托管模块
如上图所⽰,源代码可以由多种托管语⾔编写,然后由相应的编译器编译成统⼀的托管模块。托管模块是标准的 PE ⽂件,其中除了包含中
间语⾔ (IL)代码和元数据 (Metadata)外,还包含⼀些头信息。
PE32 或 PE32+ 头 :标准的 Windows PE ⽂件头,其标记了⽂件运⾏的系统版本、⽂件类型 (GUI\CUI\DLL)、⽣成时间等。
PE32 ⽂件能在 Windows 32 位或 64 位上运⾏,PE32+ ⽂件只能在 64 位版本上运⾏。
CLR 头 :包含了⼀些托管信息,⽐如 CLR 版本、托管模块⼊⼝⽅法的元数据标记,以及模块的强名称等。
元数据 :主要包含两种类型的表,⼀种类型的表描述源代码中定义的类型和成员 ;另⼀种类型的表描述源代码引⽤的类型和成员。
IL 代码 :编译器编译源代码时⽣成的代码,这些代码将在运⾏时被 CLR (JIT) 编译成 CPU 指令。
2. 将托管模块合并成程序
CLR 实际不和模块⼀起⼯作。相反,它是和程序 ⼀起⼯作的。如上图所⽰,程序 是由多个托管模块 (PE ⽂件)和资源 (或数据)⽂件
合并⽽成的单个 PE ⽂件。合并⽣成的 PE ⽂件中包含⼀个名为 “清单 (Manifest)” 的数据块,其描述了构成程序 的⽂件,由程序
中的⽂件实现的公开类型,以及与程序 关联在⼀起的资源或数据⽂件。
默认情况下,编译器会把⽣成的托管模块转为程序 ,即使只有⼀个托管模块。
将托管模块合并为程序 ,主要是⽅便于⽂件部署及版本管理。
托管程序的启动
前⾯介绍了托管程序 (PE ⽂件)的⽣成过程,托管程序 要么是 EXE ⽂件,要么是 DLL ⽂件。Windows 操作系统可以直接启动 EXE
⽂件,我们来看看托管 EXE 的启动过程是怎样的。
CLR 介绍
在介绍托管程序的启动过程之前,我们先来了解⼀下 CLR 。CLR (Common Language
您可能关注的文档
最近下载
- 英雄起源一本通大陆系列是由吧在友qxqy19群雄基础.pdf VIP
- 湘2021G301预制带肋底板混凝土叠合楼板(混凝土肋、钢筋肋、钢管肋)(版本2).docx VIP
- SL352-2020 水工混凝土试验规程.docx VIP
- 2025年中国医疗人工智能行业投资潜力分析及行业发展趋势报告.docx
- SL677-2014 水工混凝土施工规范.docx VIP
- 2024-2034年中国医疗人工智能行业投资潜力分析及行业发展趋势报告.docx
- 湘2021G301预制带肋底板混凝土叠合楼板(混凝土肋、钢筋肋、钢管肋)(版本2).docx VIP
- 电摩知识培训课件图片.ppt VIP
- 平顶山工业职业技术学院《高等数学(D)》2025 - 2026学年第一学期期末试卷.docx VIP
- 110kV变电站专项电气试验及调试方案.doc VIP
原创力文档

文档评论(0)