В последнее время я немного читал об обработке исключений и .Net Framework, и это, кажется, запутало меня больше, чем когда я начинал.
В CLR через C # Четвертое дополнение, которое я прочитал:
Также .NET Framework
построен механизм обработки исключений
используя структурированное исключение
Механизм обработки (SEH), предлагаемый
Майкрософт Виндоус. SEH был
обсуждается во многих ресурсах, в том числе
моя собственная книга, Windows через C / C ++, 5-й
редактор (Microsoft Press, 2007), который
содержит три главы, посвященные
SEH.
Теперь, вот где начинается мое замешательство. Если платформа .Net Framework построена с использованием SEH, но используется ли она только для необработанного исключения или она используется сразу же для всей обработки исключений в .NET, если да, то куда вписывается CLR, принимает ли очереди из SEH или он действует сам по себе и использует SEH , если и когда возникает необработанное исключение ? .
Второе Как вписывается переключение контекста из режима Kerrnal в режим пользователя? Я знаю, когда поток создается, он имеет (из CLR через C #)
Блок среды потока (TEB) TEB - это блок памяти, выделенный
а также
инициализируется в пользовательском режиме (адресное пространство, код приложения
может быстро получить доступ).
TEB занимает 1 страницу памяти (4 КБ на процессорах x86 и x64, 8 КБ на
Процессор IA64).
TEB содержит заголовок цепочки обработки исключений потока.
Каждый блок попытки
то, что поток входит, вставляет узел в начало этой цепочки;
узел удален
из цепочки, когда поток существует в блоке try. К тому же,
TEB содержит
данные локального хранилища потока, а также некоторые данные
структуры для использования
Интерфейс графического устройства (GDI) и графика OpenGL.
AS, а также стек режима пользователя и стек режима ядра. Но почему в любой момент должно произойти переключение контекста, поскольку все необходимое для обработки находится в одном потоке?