Те, кто пережил эпоху раннего развития Web, вспоминая, называют ее "Wild Wild Web". Тогда стандартов не существовало. Не было и графических редакторов. Мы учились всему на собственном опыте, а наши клиенты оплачивали наше обучение. Эти дни канули в Лету.
Web-пространство давно уже стало универсальным носителем информации, а следовательно, работа в нем требует настолько серьезного подхода и тщательного планирования, насколько позволяет бюджет, выделенный клиентом на создание Web-узла. В последние несколько лет требования к Web-дизайну определялись понятием торговая марка. Клиенты требовали, чтобы все, представляющее их на рынке, имело корпоративный вид. В наше время клиенты участвуют в каждом этапе создания узла. Теперь стало недопустимым выплеснуть на клиента совокупность идей, а после погрузиться в автономную работу. Теперь, для того чтобы называться Web-дизайнером, не достаточно просто купить компьютер и установить на нем набор приложений. Причина в том, что процесс создания Web-узлов значительно усложнился, а скорость изменений в нем возросла. Короче говоря, Web-дизайн стал профессией, что привело к разделению процесса создания Web-узла на планирование и реализацию.
Даже более впечатляющим был рост рабочих групп. Когда все было проще и графические Web-броузеры только начинали заявлять о себе, группа разработчиков из одного-двух человек считалась нормой. С ростом электронной коммерции и утверждением Web как главного двигателя продвижения товаров и услуг на рынке техническая и творческая нагрузка на Web-разработчиков стала нарастать. Пропорционально рос и объем работы, так что скоро справляться с ним одному человеку стало не под силу. В современной динамичной среде разработки с четко очерченными рамками бюджета и со строгими сроками такие проекты способны выполнить только высокопроизводительные команды специалистов, способные вписаться в жесткие рамки графика работ.
В настоящее время на персональных компьютерах типа IBM PC используются в основном два класса операционных систем (оба - разработки корпорации Microsoft): однозадачная текстовая система MS-DOS и многозадачная графическая система Windows. Операционная система MS-DOS является системой реального режима; другими словами, она использует только средства процессора 8086, даже если она установлена на компьютере с процессором Pentium. Система Windows - это система защищенного режима; она значительно более полно использует возможности современных процессоров, в частности, многозадачность и расширенное адресное пространство. Разумеется, система Windows не могла бы рабо-тать с процессором 8086, так как в нем не был реализован защищенный режим.
Соответственно двум типам операционных систем, и все программное обеспечение персональных компьютеров подразделяется на два класса: программы, предназначенные для работы под управлением MS-DOS (их часто называют приложениями DOS) и программы, предназначенные для системы Windows (приложения Windows). Естественно, приложения DOS могут работать только в реальном режиме, а приложения Windows - только в защищенном.
Таким образом, выражения "программирование в системе MS-DOS", "программирование в реальном режиме" и "программирование 86-го процессора" фактически являются синонимами. При этом следует подчеркнуть, что хотя процессор 8086, как микросхема, уже давно не используется, его архитектура и система команд целиком вошли в современные процессоры. Лишь относительно небольшое число команд современных процессоров специально предназначены для организации защищенного режима и распознаются процессором, только когда он работает в за щенном режиме. Поэтому изучение языка ассемблера целесообразно начинать с изучения архитектуры процессора 8086 или, точнее, того гипотетического процессора, который как бы объединяет часть архитектур средств современных процессоров, предназначенных для использования в реальном режиме, и соответствующих архитектуре процессора 8086. будем называть этот гипотетический процессор МП 86. Изучению архитектуры и программирования МП 86 посвящены первые три главы.
Деление программ на приложения DOS и приложения Windows исчерпывают вопроса о возможных типах программ. Дело в том, что ряд дополнительных средств, имеющихся в современных процессорах, вполне можно использовать и в реальном режиме (хотя сама операционная система MS-DOS, разработанная еще в эпоху процессора 8088, ими пользуется). К этим средствам относится расширенный состав команд процессоров и, главное, их 32-разрядная архитектура.
Турбо Ассемблер работает на компьютерах семейства IBM PC, включая модели XT, AT и PS/2, а также на полностью совместимых с ними компьютерах. Для работы Турбо Ассемблера требуется операци- онная система MS-DOS (версии 2.0 или более поздняя) и не менее 256К оперативной памяти.
Турбо Ассемблер генерирует инструкции процессоров 8086, 80186, 80286, 80386 и i486, а также инструкции с плавающей точкой для арифметических сопроцессоров 8087, 80287 и 80387. (Подробнее об инструкциях процессором семейства 80х86/80х87 рассказывается в книгах фирмы Intel.)
Почему вас могло бы заинтересовать программирование на языке ассемблера? Cегодня повсюду используются такие языки высокого уровня как Бэйсик, Фортран и Паскаль. Возможно, вы уже знакомы по крайней мере с одним языком высокого уровня. Если вы постоянно пользуютесь персональным компьютером IBM, то вы знаете, что интерпритатор Бэйсика является частью системы. Зачем же возиться еще с одним языком программирования, тем более с таким, который сулит определенные трудности? Очевидно, даже располагая современными могучими языками, вы все еще нуждаетесь в ассемблере из-за его
эффективности и точности.
Говорят, что ассемблер трудно выучить. Любой язык программирования трудно выучить. Легко выучить С или Delphi после Паскаля, потому что они похожи. А попробуйте освоить Lisp, Forth или Prolog, и окажется, что ассемблер в действительности даже проще, чем любой совершенно незнакомый язык программирования.
Говорят, что программы на ассемблере трудно понять. Разумеется, на ассемблере легко написать неудобочитаемую программу... точно так же, как и на любом другом языке! Если вы знаете язык и если автор программы не старался ее запутать, то понять программу будет не сложнее, чем если бы она была написана на Бейсике.
В своей работе я буду использовать:
Ассемблер nasm, который мне очень нравится из-за своей многоплатформенности (есть версии для UNIX, DOS и Windows), поддержкой команд практически всех современных процессоров и многообразием понимаемых форматов.
На Си мы будем писать не много, и для наших целей подойдет практически любой ANSI C компилятор. (ANSI C - это стандарт Си, дорабатывался последний раз в 1989 году, и практически все компиляторы ему соответствуют).
Win32-пpогpаммы выполняются в защищенном pежиме, котоpый доступен начиная с 80286. Hо 80286 тепеpь истоpия. Поэтому мы пpедполагаем, что имеем дело только с 80386 и его потомками. Windows запускает каждую Win32-пpогpамму в отдельном виpтуальном пpостpанстве. Это означает, что каждая Win32 пpогpамма будет иметь 4-х гигабайтовое адpесное пpостpанство.
Hо это вовсе не означает, что каждая пpогpамма имеет 4 гигабайта физической памяти, а только то, что пpогpамма может обpащаться по любому адpесу в этих пpеделах. Windows сделает все необходимое, чтобы сделать память, к котоpой обpащается пpогpамма, "существующей". Конечно, пpогpамма должна пpидеpживаться установленных пpавил, иначе Windows вызовет General Protection Fault. Каждая пpогpамма одна в своем адpесном пpостpанстве, в то вpемя как в Win16 дело обстоит не так. Все Win16-пpогpаммы могут "видеть" дpуг дpуга, что невозможно в Win32. Этот особенность помогает снизить шанс того, что одна пpогpамма запишет что-нибудь повеpх данных или кода дpугой пpогpаммы.
В наши дни многие уже путают компьютерную математику как науку о математических вычислениях и преобразованиях с помощью компьютеров с СКМ Маthematica, созданной фирмой Wolfram Research, Inc. Хотя это и знаменательно само по себе, во избежание такой путаницы мы начнем наш курс с рассказа о том, как зародилась компьютерная математика и как были созданы программные системы компьютерной математики различных классов. Здесь мы также опишем отражение системы Mathematica в мировой сети Интернет.
Для многих неискушенных в математике пользователей не совсем понятно, что делают СКМ, особенно те из них, которые выполняют символьные операции. Поэтому в этом уроке мы впервые познакомимся с особенностями различных систем и оценим их возможности, так сказать, в первом приближении. Некоторые из приведенных примеров лучше повторить в дальнейшем — после изучения основ работы с системой Mathematica. Впрочем, нетерпеливые учащиеся могут попробовать сделать это немедленно! Однако, чтобы запустить систему Mathematica 3 или 4 и начать работу с ней, надо вначале установить систему на жесткий диск вашего ПК. Об этом пойдет речь в конце данного урока.
Cложные приложения не всегда удается эффективно отлаживать под управлением отладчика, чтобы узнать, что пошло не так, как надо Дублирование, а также написание условий, необходимых для отладки, становится зачастую сложной задачей В пространстве имен System: : Diagnostics (Система Диагностика) есть определенные классы, которые помогают оснастить ваше приложение инструментальными средствами
Оснастив приложение необходимыми инструментальными средствами, в процессе отладки и трассировки вы сможете сделать его более устойчивым При этом также проясняется общий шаблон того, как каркас разбивает классы на отдельные задачи (запись вывода, управление выводом, назначение вывода) так, чтобы можно было настроить эти отдельные части, и в остальном полностью полагаться на классы Framework Механика оснащения приложения имеет три аспекта
Классы Trace (Трассировка) и Debug (Отладка) используются для генерации вывода трассировки и отладки Они имеют идентичные методы и свойства, которые позволяют выводить диагностику Однако эти классы не определяют назначение вывода
Классы Listeners (Слушатели) используются для направления вывода на различные устройства, хотя в то же время существует и назначение, принятое по умолчанию
Макроопределения Idef me DEBUG и tfaefine TRACE могут использоваться наряду с макросами lifdef и tendif для включения и отключения документирования Эти макро-флаги могут использоваться для того, чтобы различать отладочные и рабочие конструкции приложения Можно также поставить вывод классов Trace (Трассировка) и Debug (Отладка) в зависимость от значений условных выражений И наконец, можно управлять детализацией вывода, исходя из потребности в информации, с помощью классов BooleanSwitch и TraceSwitch
Декомпозиция отношений проводится, чтобы исключить избыточное дублирование в отношениях. Выделяют два типа декомпозиций отношений: без потерь и с потерями. Декомпозиция без потерь происходит тогда, когда после соединения вновь полученных отношений получается исходное отношение. В ряде случаев невозможно провести декомпозицию без потерь, т.к. простое выделение ФЗ в отдельное отношение не дает желаемого результата.
Известно несколько методик, которые специально разрабатывались для использования на уровне страны, государства в целом, прежде всего в контексте реализации инициатив в области "электронного правительства". Все они вобрали в себя основные принципы и подходы, которые мы рассматривали в контексте методик описания архитектуры предприятия, но с учетом специфики реализации общегосударственных инициатив или достижения определенного уровня централизованной координации внедрения ИКТ в отдельных государственных ведомствах.
Операционные системы распределенных вычислительных систем
Сетевые ОС - машины обладают высокой степенью автономности, общесистемных требований мало. Можно вести диалог с другой ЭВМ, вводить задания в ее очередь пакетных заданий, иметь доступ к удаленным файлам, хотя иерархия директорий может быть разной для разных клиентов. Пример - серверы файлов (многие WS могут не иметь дисков вообще).
Распределенные ОС - единый глобальный межпроцессный коммуникационный механизм, глобальная схема контроля доступа, одинаковое видение файловой системы. Вообще - иллюзия единой ЭВМ.
В условиях стремительно возрастающей роли ИТ-составляющей профессиональный подход к управлению и систематическое обследование информационных технологий (ИТ) по международным стандартам позволяют компенсировать на первый взгляд невидимые, но существенные недостатки в организации производственных процессов. Построение грамотной структуры управления, создание эффективной вертикали принятия решения и системы контроля напрямую зависят от состояния информационных технологий, от их эффективности, производительности, безопасности, надежности и других не менее важных показателей.
Эффективная система управления и контроля над ИТ решает не только внутренние проблемы, но и позволяет повысить инвестиционную привлекательность организации, позиционируя ее для инвестора как "открытую" финансовую систему. С другой стороны достаточно трудно подобрать комплексное решение для таких задач. Одно из решений — внедрение стандарта CobiT, который формализует не только конкретные проекты в сфере ИТ, но и создает то ядро управления и контроля ИТ, вокруг которого выстраиваются производственные процессы организации с максимально возможным уровнем эффективности.
Интерес к программированию постоянно растет. Это связано с развитием и внедрением в повседневную жизнь информационных технологий. Если человек имеет дело с компьютером, то рано или поздно у него возникает желание, а иногда и необходимость, научиться программировать. Среди пользователей персональных компьютеров в настоящее время наиболее популярна операционная система Windows, и естественно, что тот, кто хочет программировать, хочет и писать программы, которые будут работать в Windows.
Несколько лет назад рядовому программисту оставалось только мечтать о создании своих собственных программ, работающих в Windows. Единственным средством разработки был Borland C++ for Windows, явно ориентированный на профессионалов, обладающих серьезными знаниями и опытом. Бурное развитие вычислительной техники, потребность в эффективных средствах разработки программного обеспечения привели к появлению на рынке целого ряда систем программирования, ориентированных на так называемую "быструю разработку", среди которых особо следует отметить Microsoft Visual Basic и Borland Delphi. В основе систем быстрой разработки (RAD-систем, Rapid Application Development — среда быстрой разработки приложений) лежит технология визуального проектирования и событийного программирования, суть которой заключается в том, что среда разработки берет на себя большую часть работы по генерации кода программы, оставляя программисту работу по конструированию диалоговых окон и написанию функций обработки событий. Производительность программиста при использовании RAD систем фантастическая!
Успех и популярность Delphi вызвал желание фирмы Borland распространить методы быстрой разработки на область профессионального программирования, что и привело к появлению Borland C++ Builder.
Рано или поздно в работе сервера любой операционной системы происходят сбои. На этот случай в Windows 2000 включен набор средств для восстановления системы, куда входят: Advanced Options menu (расширенное меню загрузки), Emergency Repair Disk, или ERD (диск аварийного восстановления), и Recovery Console (консоль восстановления). Как правило, пеерчисленных средств бывает достаточно.
В настоящее время одним из перспективных и экономически оправданных подходов к развитию информационной индустрии является создание информационных технологий (ИТ) и реализующих их систем (ИТ-систем) на принципах открытости. Основными свойствам открытых систем являются переносимость (программ, данных, пользовательских окружений), интероперабельность (сетевая взаимосвязь и совместное использование ресурсов и данных компонентами распределенных систем), масштабируемость (эффективность функционирования в широких диапазонах характеристик производительности и ресурсов). Достижимость этих качеств возможна лишь на основе высокого уровня стандартизованности интерфейсов ИТ-систем и поддерживающих их платформ.
Оптимизаторы запросов — наиболее хитроумные, наиболее сложные и наиболее интересные компоненты СУБД. Историю этого направления принято отсчитывать с середины 70-х годов, хотя наверняка исследования проводились и раньше. Пионерские работы, в которых были получены фундаментальные результаты, относящиеся к оптимизации запросов, были выполнены в рамках проектов System R корпорации IBM [1, 2] и Ingres университета Беркли [3]. В System R были заложены основы техники оптимизации запросов на основе оценок стоимости плана выполнения запроса [4]. В университетском проекте Ingres, фактически использовались методы, которые позже стали называть семантической оптимизацией запросов.
В маленькой редакторской заметке невозможно привести обзор подходов к оптимизации запросов в SQL-ориентированных СУБД. Могу порекомендовать собственный обзор [5] (достаточно старый, но остающийся актуальным) и существенно более новый обзор Чаудхари [6]. Здесь же мне бы хотелось отметить некоторые вехи в истории развития методов оптимизации, которые имеют непосредственное отношение к статье Маркла, Лохмана и Рамана.
Биография программы коротка, но изобилует драматическими моментами. Первая версия FreeHand была разработана фирмой Aldus на заре машинной графики — в 1988 году. В области компьютерного дизайна фирма Aldus хорошо известна своими программными продуктами и новаторскими решениями. Достаточно сказать, что ей принадлежит авторство на спецификацию формата TIFF, а самая популярная программа в области настольных издательских систем изначально называлась Aldus Page Maker.
Профессионализм инженеров фирмы проявился и в области векторной графики. Хотя файл программы FreeHand 1 занимал миниатюрный по современным меркам объем (всего лишь пол-мегабайта дискового пространства), это была полноценная графическая программа, получившая признание профессионалов. Программа начала свою карьеру с плавного поступательного развития, когда с разной скоростью росли номера версий, изобразительные возможности, стоимость и потребляемые вычислительные ресурсы. Эволюция закончилась в самом начале 90-х годов на следующих рубежах: версия 4, необходимый объем дискового пространства 3,5 мегабайта, объем оперативной памяти 8 мегабайт и полная поддержка языка PostScript Level 1.
Linux, возможно, является наиболее значительным достижением в области свободно распространяемых программ со времен Space War, или более позднего Emacs. Он превратился в операционную систему для бизнеса, образования и индивидуального программирования. Linux перестал быть системой для фанатиков-программистов, которые часами сидят перед мерцающими экранами (хотя таких и немало). Эта книга поможет вам извлечь из Linux максимальную пользу.
Linux (произносится "лИнукс") принадлежит семейству UNIX-подобных операционных систем, которая может работать на компьютерах Intel 80386 и 80486. Он поддерживает широкий спектр программных пакетов от TeX до X Windows, компиляторов GNU C/C++, протоколов TCP/IP. Это гибкая реализация ОС UNIX, свободно распространяемая под генеральной лицензией GNU (см. приложение E).
Linux может любой 386 или 486 персональный компьютер превратить в рабочую станцию. Он преподнесет всю мощь UNIX к кончикам ваших пальцев. Бизнесмены инсталлируют Linux в сетях машин, используют операционную систему для обработки данных в сфере финансов, медицины, распределенной обработки, в телекоммуникациях и т.д.
Университеты по всему миру применяют Linux в учебных курсах по программированию и проектированию операционных систем. Разумеется, повсеместно программисты-энтузиасты используют Linux дома для программирования, решения своих прикладных задач и всевозможного хакерства.
SADT-модель дает полное, точное и адекватное описание системы, имеющее конкретное назначение. Это назначение, называемое целью модели, вытекает из формального определения модели в SADT:
М есть модель системы S, если М может быть использована для получения ответов на вопросы относительно S с точностью А.
Таким образом, целью модели является получение ответов на некоторую совокупность вопросов. Эти вопросы неявно присутствуют (подразумеваются) в процессе анализа и, следовательно, они руководят созданием модели и направляют его. Это означает, что сама модель должна будет дать ответы на эти вопросы с заданной степенью точности. Если модель отвечает не на все вопросы или ее ответы недостаточно точны, то мы говорим, что модель не достигла своей цели. Определяя модель таким образом, SADT закладывает основы практического моделирования.
Операционная система Windows NT и ее следующий представитель Windows 2000, благодаря своим современным принципам построения, защищенности, гибкости, а также встроенной сетевой поддержке и мощным сетевым возможностям, получила широкое распространение. Поэтому встает насущная проблема реализации систем защиты, которые могли бы встраиваться в ОС Windows NT, расширяя ее возможности и обеспечивая функции защиты сетевой информации.
Отметим сразу, что базовая архитектура ядра ОС Windows NT практически не изменилась при переходе к Windows 2000, поэтому почти все, что описано в этой книге верно как для ОС Windows NT, так и для Windows 2000.
В книге помимо базовых основ написания драйверов, являющихся неотъемлемыми компонентами средств защиты информации, представлена общая и сетевая архитектура ОС Windows NT. Описание архитектуры необходимо для определения предоставляемых возможностей по реализации и встраиванию средств защиты сетевой информации, а также для сравнения возможных способов реализации защиты и определения наиболее предпочтительных способов. Исследование архитектуры ОС Windows NT позволяет определить не только то, как и куда можно встроить средство защиты, но и то, как этому средству предоставить наибольшие возможности со стороны операционной системы, поскольку от этого зависит решение конкретных задач по защите, которые оно сможет реализовать.