Проект Singularity: обзор
Авторы: Galen Hunt
James Larus
Martin Abadi
Mark Aiken
Paul Barham
Manuel Fahndrich
Chris Hawblitzel
Orion Hodson
Steven Levi
Nick Murphy
Bjarne Steensgaard
David Tarditi
Ted Wobber
Brian Zill
Microsoft Research
Перевод: Михаил Купаев
RSDN
Источник: RSDN Magazine #5-2005
Опубликовано: 02.03.2006
Версия текста: 1.0
http://research.microsoft.com/os/singularity
Microsoft Research Technical Report MSR-TR-2005-135
1 Введение
ПО исполняется на платформе, которая эволюционировала последние 40 лет и все чаще демонстрирует свой возраст. Эта платформа представляет собой огромное собрание кода – операционных систем, языков программирования, компиляторов, библиотек и т.д. – и аппаратного обеспечения, на котором исполняются программы. С одной стороны, эта платформа – пример огромного успеха как с финансовой, так и с практической точки зрения. Она лежит в основе 179-миллиардной программной индустрии, и вызвала к жизни такие революционные новинки как Internet. С другой стороны, платформа и работающее на ней ПО куда менее надежны и безопасны, чем хотелось бы большинству пользователей (и разработчиков!).
Отчасти проблема заключается в том, что современная платформа недалеко ушла от компьютерных архитектур, операционных систем и языков программирования 1960-70 годов. Среда вычислений тех времен крайне отличалась от современной. Компьютеры были весьма ограничены в скорости и объеме памяти; они использовались только малыми группами технически грамотных и не злонамеренных пользователей; они редко объединялись в сети или общались с физическими устройствами. Сейчас все не так, но современные архитектуры компьютеров, операционные системы и языки программирования недостаточно изменились для того, чтобы отражать фундаментальные изменения в компьютерах и их использовании.
Singularity – исследовательский проект Microsoft Research, который начался с вопроса: на что была бы похожа программная платформа, если спроектировать ее на пустом месте, и во главу угла поставить не производительность, а надежность? Singularity пытается ответить на этот вопрос, опираясь на усовершенствования в языках и средствах программирования. Несмотря на то, что о надежности трудно судить по исследовательскому прототипу, Singularity показывает практичность новых технологий и архитектурных решений, ведущих к созданию множества устойчивых и надежных систем в будущем.
Развивающиеся по экспоненте аппаратные средства обычно являются движущей силой фундаментальных изменений систем и приложений. Программное обеспечение, развивающееся медленнее, редко создает возможности для фундаментальных усовершенствований. Однако программное обеспечение действительно развивается, и его изменение делает возможным – и необходимым – пересмотр старых подходов. Усовершенствования в языках программирования, исполняющих подсистемах и инструментальных средствах анализа программ дают материал для создания архитектур и систем, более надежных и устойчивых, чем существующие в настоящее время:
- Выразительные безопасные языки программирования, такие, как Java и C#. Типобезопасность обеспечивает то, что значение или объект всегда интерпретируется и обрабатывается корректно. Безопасная работа с памятью разрешает программам ссылаться на память только в границах существующих, живых объектов.
- Оптимизирующие компиляторы и высокопроизводительные run-time системы генерируют безопасный код, исполняемый со скоростью, сопоставимой с неуправляемым кодом. Эти компиляторы, в отличие от большинства существующих JIT-компиляторов, выполняют глобальную оптимизацию, уменьшающую перегрузку, порожденную требованиями безопасности. Сборщики мусора в таких системах освобождают память со скоростью, сравнимой с прямым освобождением памяти.
- Методики проверки обеспечивают сквозную безопасность компилятора, скомпилированного кода и системы исполнения. Типизированные промежуточный язык и ассемблер проверяют правильность действий компонентов системы и обеспечивают безопасность языка (language safety), гарантирующую корректность нижележащей системы.
- Четкие, основанные на спецификациях средства поиска дефектов обеспечивают корректность многих аспектов системы.
Языки и средства, поддерживающие перечисленные возможности, в процессе работы выявляют и предотвращают ошибки программирования. Менее исследовано, как эти механизмы способствуют глубоким изменениям в системной архитектуре, которая, в свою очередь, могла бы приблизить достижение такой цели, как устранение дефектов ПО и смягчение их последствий [28].
Эта статья в деталях описывает систему Singularity. Раздел 2 содержит обзор системы и ее новинок. Раздел 3 описывает архитектуру системы Singularity, фокусируясь на ядре, процессах и исполняющей системе языка. Раздел 4 описывает системную поддержку языков программирования. В разделе 5 описывается I/O и система безопасности. Раздел 6 содержит замеры производительности. Раздел 7 описывает работы, связанные с данной. Приложение А содержит список вызовов ABI ядра.
2 Singularity
2.1. Расширяемость
2.2 Абстракция приложения
2.3 Обсуждение
3 Архитектура Singularity
3.1 Доверенная основа (Trusted Base)
3.2 Ядро
3.2.1 Таблица дескрипторов (Handle Table)
3.2.2 Версионность ABI
3.2.3 Планировщик задач (Scheduler)
3.3 Процессы
3.3.1 Управление стеком
3.3.2 Exchange Heap
3.3.3 Потоки
3.4 Сборка мусора
3.4.1 Управление стеком
3.5 Каналы
3.5.1 Реализация канала
3.6 Настраиваемые исполняющие системы
3.7 Обсуждение
4 Поддержка языков программирования
4.1 Контракты каналов
4.2 Конечные точки
4.3 Методы send/receive
4.4 Конструкция Switch-Receive
4.5 Владение
4.6 TRef
4.7 Exchange Heap
4.8 Проверки
4.9 Рефлексия времени компиляции
5 Система Singularity
5.1 Система ввода/вывода
5.2 Конфигурация драйвера
5.2.1 Спецификация
5.2.2 Время компиляции
5.2.3 Время установки
5.2.4 Время исполнения
5.2.5 Отображение в пространство имен
5.3 Сервер имен
5.4 Файловая система
5.4.1 Реализация
5.4.2 Boxwood
5.5 Безопасность
5.5.1 Механизмы времени установки
5.5.2 Динамический контроль доступа
5.5.3 Остальные runtime-механизмы
6 Производительность
6.1 Микротесты
6.2 Тесты дискового ввода/вывода
6.3 Тест SPECweb
6.4 Размеры исполняемых модулей
7 Связанные работы
7.1 Архитектура ОС
7.2 Расширяемость приложений
7.3 Языковая безопасность
7.4 Средства поиска дефектов
8 Заключение
9 Ссылки
- Abadi, M., Birrell, A. and Wobber, T. Access Control in a World of Software Diversity. in Proceedings of the 10th Workshop on Hot Topics in Operating Systems (HotOS X), Santa Fe, NM, 2005.
- Accetta, M., Baron, R., Bolosky, W., Golub, D., Rashid, R., Tevanian, A. and Young, M. A New Kernel Foundation for UNIX Development. in Summer USENIX Conference, Atlanta, GA, 1986, 93-112.
- Association, S.I.I. Packaged Software Industry Revenue and Growth, Software & Information Industry Association, 2004.
- Back, G., Hsieh, W.C. and Lepreau, J. Processes in KaffeOS: Isolation, Resource Management, and Sharing in Java. in Proceedings of the 4th USENIX Symposium on Operating Systems Design & Implementation (OSDI), San Diego, CA, 2000.
- Ball, T. and Rajamani, S.K. The SLAM Project: Debugging System Software via Static Analysis. in Proceedings of POPL 2002: The 29th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, Portland, OR, 2002, 1-3.
- Barnes, F., Jacobsen, C. and Vinter, B. RMoX: A Raw-Metal occam Experiment. in Communicating Process Architectures, IOS Press, Enschede, the Netherlands, 2003, 269-288.
- Barnett, M., Leino, K.R.M. and Schulte, W. The Spec# Programming System: An Overview. in Proceedings of Construction and Analysis of Safe, Secure and Interoperable Smart Devices (CASSIS), Springer Verlag, Marseille, France, 2004.
- Bershad, B.N., Chambers, C., Eggers, S., Maeda, C., McNamee, D., Pardyak, P., Savage, S. and Sirer, E.G. SPIN: An Extensible Microkernel for Application-specific Operating System Services. in Proceedings of the 6th ACM SIGOPS European Workshop, Wadern, Germany, 1994, 68-71.
- Bershad, B.N., Savage, S., Pardyak, P., Sirer, E.G., Fiuczynski, M., Becker, D., Eggers, S. and Chambers, C. Extensibility, Safety and Performance in the SPIN Operating System. in Proceedings of the Fifteenth ACM Symposium on Operating System Principles, Copper Mountain Resort, CO, 1995, 267-284.
- Bush, W.R., Pincus, J.D. and Sielaff, D.J. A Static Analyzer for Finding Dynamic Programming Errors. Software-Practice and Experience, 30 (5), 2000, 775-802.
- Candea, G., Kawamoto, S., Fujiki, Y., Friedman, G. and Fox, A. Microreboot—A Technique for Cheap Recovery. in Proceedings of the Sixth Symposium on Operating Systems Design and Implementation (OSDI '04), San Francisco, CA, 2004, 31-44.
- Chou, A., Yang, J., Chelf, B., Hallem, S. and Engler, D. An Empirical Study of Operating Systems Errors. in Proceedings of the 18th ACM Symposium on Operating Systems Principles (SOSP '01), Alberta, Canada, 2001, 73-88.
- Das, M., Lerner, S. and Seigle, M. ESP: Path-Sensitive Program Verification in Polynomial Time. in Proceedings of the ACM SIGPLAN 2002 Conference on Programming Language Design and Implementation (PLDI '02), Berlin, Germany, 2002, 57-69.
- DeLine, R. and Fahndrich, M. Enforcing High-Level Protocols in Low-Level Software. in Proceedings of the ACM SIGPLAN 2001 Conference on Programming Language Design and Implementation (PLDI '01), Snowbird, UT, 2001, 59-69.
- Dorward, S., Pike, R., Presotto, D.L., Ritchie, D.M., Trickey, H. and Winterbottom, P. The Inferno Operating System. Bell Labs Technical Journal, 2 (1), 1997, 5-18.
- Engler, D., Chelf, B., Chou, A. and Hallem, S. Checking System Rules Using System-Specific, Programmer-Written Compiler Extensions. in Proceedings of the 4th Symposium on Operating Systems Design and International (OSDI 2000), Sand Diego, CA, 2000, 1-16.
- Engler, D.R., Kaashoek, M.F. and O'Toole, J., Jr. Exokernel: an Operating System Architecture for Application-Level Resource Management. in Proceedings of the Fifteenth ACM Symposium on Operating System Principles, Copper Mountain Resort, CO, 1995, 251-266.
- Evans, D., Guttag, J., Horning, J. and Tan, Y.M. LCLint: A Tool for Using Specifications to Check Code. in Proceedings of the ACM SIGSOFT Second Symposium on the Foundations of Software Engineering, New Orleans, LO, 1994.
- Fahndrich, M. and Larus, J.R. Language Support for Fast and Reliable Message Based Communication in Singularity OS. in Submitted to EuroSys2006, 2005.
- Fitzgerald, R., Knoblock, T.B., Ruf, E., Steensgaard, B. and Tarditi, D. Marmot: an Optimizing Compiler for Java. Software-Practice and Experience, 30 (3), 2000, 199-232.
- Fitzgerald, R. and Tarditi, D. The Case for Profile-directed Selection of Garbage Collectors. in Proceedings of the 2nd International Symposium on Memory Management (ISMM '00), Minneapolis, MN, 2000, 111-120.
- Ganger, G.R., Engler, D.R., Kaashoek, M.F., Briceno, H.M., Hunt, R. and Pinckney, T. Fast and Flexible Application-level Networking on Exokernel Systems. ACM Transactions on Computer Systems, 20 (1), 2002, 49-83.
- Goldberg, A. and Robson, D. Smalltalk-80: The Language and Its Implementation. Addison-Wesley, 1983.
- Golm, M., Felser, M., Wawersich, C. and Kleinoeder, J. The JX Operating System. in Proceedings of the USENIX 2002 Annual Conference, Monterey, CA, 2002, 45-58.
- Hartig, H., Hohmuth, M., Liedtke, J. and Schonberg, S. The Performance of m-kernel-based Systems. in Proceedings of the Sixteenth ACM Symposium on Operating Systems Principles (SOSP), Saint Malo, France, 1997, 66-77.
- Hawblitzel, C., Chang, C.-C., Czajkowski, G., Hu, D. and Eicken, T.v. Implementing Multiple Protection Domains in Java. in Proceedings of the 1998 USENIX Annual Technical Conference, New Orleans, LA, 1998, 259-270.
- Hawblitzel, C. and Eicken, T.v. Luna: A Flexible Java Protection System. in Proceedings of the Fifth ACM Symposium on Operating System Design and Implementation (OSDI '02), Boston, MA, 2002, 391-402.
- Hunt, G.C., Larus, J.R., Tarditi, D. and Wobber, T. Broad New OS Research: Challenges and Opportunities. in Proceedings of the 10th Workshop on Hot Topics in Operating Systems (HotOS X), Santa Fe, NM, 2005.
- IFIP. IFIP WG10.4 on Dependable Computing and Fault Tolerance, 2005.
- Jim, T., Morrisett, G., Grossman, D., Hicks, M., Cheney, J. and Wang, Y. Cyclone: A Safe Dialect of C. in Proceedings of the USENIX 2002 Annual Conference, Monterey, CA, 2002, 275-288.
- Johnson, S.C. Lint, a C Program Checker Computer Science Technical Report, AT&T Bell Laboratories, 1978.
- Jones, M.B., Leach, P.J., Draves, R.P. and III, J.S.B. Modular Real-time Resource Management in the Rialto Operating System. in Proceedings of the Fifth Workshop on Hot Topics in Operating Systems (HotOS-V), Orcas Island, WA, 1995, 12-17.
- Lampson, B.W. and Sproull, R.F. An Open Operating System for a Single-user Machine. in Proceedings of the Seventh ACM Symposium on Operating Systems Principles (SOSP), Pacific Grove, CA, 1979, 98-105.
- MacCormick, J., Murphy, N., Najork, M., Thekkath, C.A. and Zhou, L. Boxwood: Abstractions as the Foundation for Storage Infrastructure. in Proceedings of the Sixth Symposium on Operating Systems Design and Implementation (OSDI '04), San Francisco, CA, 2004, 105-120.
- McGraw, G. and Felten, E.M. Java Security: Hostile Applets, Holes, & Antidote. John Wiley and Sons, New York, 1996.
- Morrisett, G., Walker, D., Crary, K. and Glew, N. From System F to Typed Assembly Language. ACM Transactions on Programming Languages and Systems, 21 (3), 1999, 527-568.
- Murphy, B. and Levidow, B. Windows 2000 Dependability. in Proceedings of the IEEE International Conference on Dependable Systems and Networks, New York, NY, 2000.
- Necula, G.C. Proof-Carrying Code. in Proceedings of the 24th ACM Symposium on Principles of Programming Languages, Paris, France, 1997.
- Necula, G.C., McPeak, S. and Weimer, W. CCured: Type-safe Retrofitting of Legacy Code. in Proceedings of POPL 2002: The 29th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, Portland, OR, 2002, 128-139.
- Paul, N. and Evans, D. NET Security: Lessons Learned and Missed from Java. in 20th Annual Computer Security Applications Conference (ACSAC), Tucson, AZ, 2004, 272-281.
- Process, J.C. Application Isolation API Specification Java Specification Request, 2003, JSR-000121.
- Rajamani, S.K. and Rehof, J. Conformance Checking for Models of Asynchronous Message Passing Software. in Proceedings of the International Conference on Computer Aided Verification (CAV 02), Springer, Copenhagen, Denmark, 2002, 166-179.
- Redell, D.D., Dalal, Y.K., Horsley, T.R., Lauer, H.C., Lynch, W.C., McJones, P.R., Murray, H.G. and Purcell, S.C. Pilot: An Operating System for a Personal Computer. Communications of the ACM, 23 (2), 1980, 81-92.
- Saulpaugh, T. and Mirho, C. Inside the JavaOS Operating System. Addison-Wesley, 1999.
- Schneider, F.B. Enforceable Security Policies. ACM Transactions on Information and System Security (TISSEC), 3 (1), 2000, 30
- Seltzer, M.I., Endo, Y., Small, C. and Smith, K.A. Dealing with Disaster: Surviving Misbehaved Kernel Extensions. in Proceedings of the Second USENIX Symposium on Operating Systems Design and Implementation (OSDI 96), Seattle, WA, 1996, 213-227.
- Sreedhar, V.C., Burke, M. and Choi, J.-D. A Framework for Interprocedural Optimization in the Presence of Dynamic Class Loading. in Proceedings of the ACM SIGPLAN '00 Conference on Programming Language Design and Implementation (PLDI 00), Vancouver, BC, 2000, 196-207.
- Swift, M.M., Annamalai, M., Bershad, B.N. and Levy, H.M. Recovering Device Drivers. in Proceedings of the Sixth Symposium on Operating Systems Design and Implementation (OSDI '04), San Francisco, CA, 2004, 1-16.
- Swift, M.M., Bershad, B.N. and Levy, H.M. Improving the Reliability of Commodity Operating Systems. in Proceedings of the 19th ACM Symposium on Operating Systems Principles (SOSP '03), Bolton Landing, NY, 2003, 207-222.
- Swinehart, D.C., Zellweger, P.T., Beach, R.J. and Hagmann, R.B. A Structural View of the Cedar Programming Environment. ACM Transactions on Programming Languages and Systems, 8 (4), 1986, 419-490.
- von Behren, R., Condit, J., Zhou, F., Necula, G.C. and Brewer, E. Capriccio: Scalable Threads for Internet Services. in Proceedings of the Nineteenth ACM Symposium on Operating Systems Principles (SOSP '03), Bolton Landing, NY, 2003, 268281.
- Wahbe, R., Lucco, S., Anderson, T.E. and Graham, S.L. Efficient Software-Based Fault Isolation. in Proceedings of the Fourteenth ACM Symposium on Operating System Principles, Asheville, NC, 1993, 203-216.
- Wang, D.C. and Appel, A.W. Type-preserving Garbage Collectors. in Proceedings of the ACM SIGPLAN 2002 Conference on Programming Language Design and Implementation (PLDI '02), Berlin, Germany, 2002, 166-178.
- Weinreb, D. and Moon, D. Lisp Machine Manuel. Symbolics, Inc, Cambridge, MA, 1981.
- Witchel, E., Cates, J. and Asanovic', K. Mondrian Memory Protection. in Proceedings of the 10th International Conference on Architectural Support for Programming Languages and Operating Systems, San Jose, CA, 2002, 304-316.
Полная версия этой статьи опубликована в журнале
RSDN Magazine
#5-2005. Информацию о журнале можно найти здесь