Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Домены приложений

Безопасность

Механизм безопасности.NET превосходит механизмы безопасности, предоставляемые Windows, поскольку обеспечивает защиту на уровне кода, в то время как Windows на самом деле обеспечивает только безопасность на уровне ролей. Безопасность, основанная на ролях (role-based security), базируется на идентификации учетной записи, под которой работает процесс (т.е., кто запускает процесс и владеет им). Безопасность на уровне кода, с другой стороны, основана на том, что именно делает код, и насколько ему можно доверять. Благодаря строгой типизации IL, CLR может инспектировать код перед его запуском с тем, чтобы определить необходимые полномочия безопасности..NET также предлагает механизм, с помощью которого код может заблаговременно запросить необходимые для работы привилегии. Важность безопасности, основанной на коде (code-based security), в том, что она снижает риск, связанный с кодом сомнительного происхождения (такого, каким может быть код, загруженный из Интернета). Например, даже если код выполняется от имени учетной записи администратора, остается возможность с помощью защиты уровня кода указать, что данному коду не разрешено выполнять действия определенного рода, которые обычно разрешены привилегированному пользователю (администратору), например, чтение и запись переменных среды, чтение и запись реестра или доступ к средствам рефлексии.NET

Домены приложений (application domains) — важное нововведение.NET, предназначенное для снижения накладных расходов, связанных с запуском приложений, которые должны быть изолированы друг от друга, но при этом нуждаются во взаимодействии между собой. Классический пример этого — приложения веб-сервера, которые могут совместно отвечать на множество запросов браузеров, а потому должны, вероятно, иметь экземпляры компонента, ответственного за параллельное обслуживание таких запросов.

Во времена, предшествовавшие появлению.NET, приходилось выбирать между тем, чтобы позволить этим экземплярам разделять один и тот же процесс (в результате рискуя прекращением работы всего веб-сайта в случае возникновения проблем с одним выполняющимся экземпляром), и изолированием этих экземпляров в отдельных процессах, что приводило к росту накладных расходов и снижению производительности.

Хотя процессы удобны для обеспечения безопасности, все же они имеют серьезный недостаток, связанный с производительностью. Часто бывает так, что множество процессов работают вместе и потому нуждаются во взаимодействии друг с другом. Очевидный пример этого — когда процесс обращается к СОМ-компоненту, который является исполняемым, а потому запускает свой собственный процесс. То же случается в СОМ, когда используется "заместитель" (surrogate). Поскольку процесс не может разделить память с другими, должен быть применен сложный процесс маршализации для копирования данных между процессами. В результате ощутимо страдает производительность. Если нужно, чтобы компоненты работали вместе без снижения производительности, то следует использовать компоненты, основанные на DLL, чтобы все работало в одном адресном пространстве, подвергаясь риску, что один плохо себя ведущий компонент разрушит все остальные.

Домены приложений спроектированы как способ разделения компонентов без сопутствующих проблем снижения производительности, связанных с передачей данных между процессами. Идея заключается в том, что каждый процесс разделяется на несколько доменов приложений. Каждый домен приложения приблизительно соответствует отдельному приложению, и каждый поток выполнения запускается в определенном домене.

Если разные исполняемые программы запускаются в одном пространстве процесса, то вполне понятно, что они могут легко разделять общие данные, потому что теоретически в состоянии напрямую видеть данные друг друга. Однако, хотя такая возможность существует в принципе, CLR обеспечивает, чтобы это не случалось на практике. Для этого CLR инспектирует код каждого работающего приложения, гарантируя, что код не выйдет за пределы области своих собственных данных. На первый взгляд этот трюк кажется почти невозможным — в конце концов, как можно узнать, что собирается делать программа, до того, как она будет запущена?

На самом деле, обычно это сделать можно, благодаря строгой защите типов IL. В большинстве случаев, если только код не применяет небезопасных средств, таких как указатели, то используемые им типы данных гарантируют, что не произойдет никаких неправильных обращений к памяти.

<== предыдущая лекция | следующая лекция ==>
Поддержка объектной ориентации и интерфейсов | Параллельное программирование
Поделиться с друзьями:


Дата добавления: 2014-01-04; Просмотров: 255; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.009 сек.