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