Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭУМК ОСиСПч3 май.doc
Скачиваний:
8
Добавлен:
03.05.2019
Размер:
1.2 Mб
Скачать

Перечень тем курсового проектировния, и объем в часах

№ пп

Название темы

Объем в часах

1.

Разработка грамматики проблемно-ориентированного языка и транслятора с данного языка на некоторый метаязык.

40

2.

Разработка операционной среды для поддержания многопрограммного режима работы с разделением времени;

3.

Разработка драйверов.

4.

Разработка компонентов для среды визуального программирования.

5.

Разработка распределенных программ, взаимодействующих по принципу клиент-сервер.

*Конкретная тема курсового проекта выдаются преподавателем после обсуждения со студентом.

Учебно-методические материалы по дисциплине

1. Рихтер Дж. CLR via C#. Программирование на платформе Microsoft .NET Framework 2.0 на языке С#. - СПб.: «Питер», 2007. – 656 c.

2. Троелсен Э. Язык программирования С# 2005 и платформа .NET. – М.: ООО «И.Д. Вильямс», 2007. – 1168 с.

3. Прайс Дж., Гандэрлой М. Visual С# . NET. – К.: ВЕК, М.: Энтроп, 2004. – 960 с.

4. Д. А. Сурков, К. А. Сурков, Ю. М. Четырько. Модели утилизации динамической памяти – Мир ПК #01/2008, (Электронный ресурс: http://www.osp.ru/pcworld/2008/01/4794170).

5. [Электронный ресурс] http://msdn.microsoft.com/

6. [Электронный ресурс] http://www.rsdn.ru/

Перечень компьютерных программ, наглядных и других пособий, методических указаний и материалов к техническим средствам обучения

5.1. Операционная система Windows XP, Windows Vista или Windows 7.

5.2. Интегрированная среда программирования Visual Studio 2008.

5.3. Программная документация к среде программирования.

5.4. УМК по предмету «Операционные системы и системное программирование», Часть 3.

5.5. Индивидуально-практические работы выполняются удаленно.

Теоретический раздел Лекции Тема 1. Введение в платформу .Net

История создания и общие принципы платформы .NET

.NET Framework представляет собой программную платформу, которую выпустила компания  Microsoft. Основой платформы является виртуальная машина Common Language Runtime (далее - CRL). Данная виртуальная машина способна выполнять как прикладной программное обеспечение, так и web приложения. Отличительной особенностью .NET Framework является способность выполнять программы, написанные на разных языках программирования.

Программа, написанная языке программирования поддерживаемым платформой .NET Framework, переводится компилятором в низкоуровневый язык Common Intermediate Language (CIL), который затем компилятор переводит в байт-код. Полученный байт-код или исполняется виртуальной машиной CRL или транслируется в исполняемый код для конкретной целевого процессора, при помощи утилиты NGen.exe. При использовании виртуальной машины CLR, встроенный в неё JIT-компилятор «на лету» (just in time — компиляция на лету) преобразует промежуточный байт-код в машинные коды нужного процессора.

Использование виртуальной машины CLR дает следующие преимущества:

  1. Избавляет разработчика от необходимости заботиться об особенностях аппаратной части.

  2. Виртуальная машина CLR также сама заботится о базовой безопасности, управлении памятью и системе исключений.

История развития технологии .NET Framework

Компания Microsoft начала разрабатывать NET Framework в конце 1990-х под именем «Next Generation Windows Services» (NGWS). В 2000 году была выпущена первая бета-версия .NET 1.0. Окончательный релиз .NET 1.0 произошел 1 мая 2002 года.

В таблице 1.1 представлена история выходов различных версий платформы .NET Framework.

Таблица 1.1 История выходов различных версий платформы .NET Framework

Версия

Номер версии

Дата выхода

Visual Studio

По умолчанию в Windows

Нововведения

1.0

1.0.3705.0

1 мая 2002 года

Visual Studio .NET

1.1

1.1.4322.573

1 апреля 2003 года

Visual Studio .NET 2003

Windows Server 2003

2.0

2.0.50727.42

11 июля 2005 года

Visual Studio 2005

  • Поддержка обобщённых (generic) классов;

  • Поддержка анонимных методов;

  • Полная поддержка 64-битных платформ х64 и IA-64;

3.0

3.0.4506.30

6 ноября 2006 года

Visual Studio 2005 + расширения

Windows Vista, Windows Server 2008

  • Windows Presentation Foundation (WPF) — презентационная графическая подсистема, использующая XAML;

  • Windows Communication Foundation (WCF);

  • Windows Workflow Foundation (WF);

  • Windows CardSpace.

3.5

3.5.21022.8

9 ноября 2007 года

Visual Studio 2008

Windows 7, Windows Server 2008 R2

  • C# 3.0 и VB.NET 9.0;

  • Язык LINQ и провайдеры LINQ to Objects, LINQ to XML и LINQ to SQL;

  • ASP.NET AJAX включён в поставку;

  • Расширена функциональность WF и WCF;

  • Добавлено пространство имён System.CodeDom

4.0

4.0.30319.1

12 апреля 2010 года

Visual Studio 2010

  • Parallel Extensions — PLINQ (Parallel LINQ) и Task Parallel Library, предназначенные для упрощения программирования для многопроцессорных и распределённых систем;

  • Полная поддержка  IronPython, IronRuby и F#;

  • Поддержка подмножеств .NET Framework и ASP.NET в варианте «Server Core»;

  • Поддержка Code Contracts;

  • Средства моделирования Oslo и язык программирования M, предназначенный для создания предметно-ориентированных языков и моделей

Сравнительная характеристика технологий .NET и Java

  1. Технология Java изначально разрабатывалась для встраивания в переносимые устройства, и лишь потом была преобразована для переносимого ПО в настольных компьютерах, позднее для серверного ПО. .Net – сразу для настольных компьютеров и серверов.

  2. Обе технологии используют понятие промежуточного кода (для Java – Java-байт код, .Net – IL)

  3. Обе среды используют автоматическое управление памятью.

  4. Обе среды используют средства безопасности и контроля, которые позволяют использовать в Internet.

Основное преимущество .Net – более высокая продуктивность во всех сферах (более высокая производительность программного кода).

Более высокоуровневый промежуточный язык. Промежуточный Java-байт код был разработан для создания виртуальных Java-машин. Java-байт код является упрощением всех команд процессора, а модель виртуальной Java-машины – пересечение всех архитектур. В виртуальной Java-машине ограничено количество ресурсов (их 4):

  • на стек;

  • на динамическую память;

  • на текущую исполняемую инструкцию;

  • вспомогательный регистр.

Промежуточный язык IL среды .Net принципиально был разработан не для интерпретации, а для динамической компиляции.

В Java нет деления на размерные типы и ссылочные, а в .Net – есть. Следовательно, для платформы Java стек организован следующим образом: все элементы стека имеют фиксированный размер (8 байт). При этом в этом элементе хранится признак типа (либо это число, либо это указатель), или само значение, или ссылка на объект. Из-за этого при передаче параметров возьмет в качестве параметра функцию рисования прямоугольника (принимает две точки). Элементом стека такой объект быть не может, этот объект выделяется в динамической памяти (heap).

Передача Point в .Net: Point в .Net является не ссылочным типом, а размерным. Следовательно, он может передаваться следующим образом:

Но если объект достаточно большой, его выгодней передавать через указатели (как в Java).

void DrawPoint (Point p1, Point p2)

{

Point temp = new Point (p1);

}

Тогда мы имеем следующее представление:

Для Java

Для NET

Среда Java является многоязыковой, .Net - полиязыковой. Это обеспечивается благодаря тому, что в .Net стандартизирован промежуточный язык IL; в .Net разработана общая система типов (CTS), стандартизированы базовые и структурные типы данных, стандартизированы представления данных. Существует стандарт CLS (Common Language Specification) – набор правил, типов данных для межъязыковых вызовов (для доступа к программам, написанных на многих языках). Согласно CLS, программы могут обмениваться только ограниченным набором данных (если целые числа, то только знаковые).

CLS – исполняющая система (вызывает динамический компилятор, базовую библиотеку, сборщик мусора). В Java нет межъязыкового взаимодействия.

Отличия в организации взаимодействия с подпрограммами, написанными на Assembler целевого процессора (на С, С++, Assembler). В Java это организуется так: виртуальная Java-машина предоставляет API JNI-набор процедур прикладного программирования, который получает, например, по символическому имени адрес процедур, находит по имени какой-то объект или адрес параметра на стеке по его имени. Требуется специальное программирование, чтобы организовать вызов dll-библиотеки из программы, написанной на Java. Этот вызов работает медленно.

В .Net это решено по-другому: средства вызова разных процедур встроены в саму вызывающую систему, преобразование параметров осуществляется автоматически. Вызов из dll-библиотеки происходит быстрее.

Промежуточный язык IL и байт-код Java

По определению байт-код Java  (byte-code), — машинно-независимый код низкого уровня, создаваемый транслятором и исполняемый виртуальной машиной Java. Большинство инструкций байт-кода эквивалентны одной или нескольким командам ассемблера. Перед исполнением байт-код транслируется в машинный код «на лету» - с помощью JIT-компиляции.

Байт-код называется так, потому что длина каждого кода операции — один байт, но длина кода команды различна. Каждая инструкция представляет собой однобайтовый код операции от 0 до 255, за которым следуют такие параметры, как регистры или адреса памяти. Это в типичном случае, но спецификация байт-кода значительно различается в разных языках.

В код на промежуточном языке CIL (ранее он назывался - Microsoft Intermediate Language или MSIL или IL) переводится код программ, написанных на языках высокого уровня поддерживаемых платформой .NET Framework. Данный код не зависит от системного и аппаратного обеспечения, на котором выполняется платформа .NET. В дальнейшем, в процессе выполнения приложения данный IL-код на лету (при помощи JIT компилятора) преобразуется в машинно-зависимый код, который в последствии и выполняется.

Язык CIL по синтаксису и мнемонике напоминает язык ассемблера. Его можно рассматривать как ассемблер виртуальной машины .NET. В то же время язык CIL содержит некоторые достаточно высокоуровневые конструкции, повышающие его уровень по сравнению с ассемблером для любой реально существующей машины, и писать код непосредственно на CIL легче, чем на ассемблере для реальных машин. Поэтому его можно рассматривать как своеобразный «высокоуровневый ассемблер».

Описание выполнения:

  1. 3 – объявляется статическая функция main с атрибутом cil (common intermediate language), managed – код может инспектироваться во время работы;

  2. entrypoint – точка входа в функцию;

  3. maxstack – сколько элементов стека будет использоваться;

  4. ldstr – загружает на стек (исполняющие системы Java и .Net являются стековыми) указатель на строку;

  5. вызывается функция WriteLine для вывода этой строки на экран;

  6. ret – выход из процедуры.

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

Пример на языке С#:

Объявление класса:

public class Test

{

public static int Add(int a, int n)

{

return a + b;

}

}

Вызов метода Add класса Test:

int sum = Test.Add(4, 5);

Отображение на IL-языке:

Объявление класса:

.class public Test

{

.method public static int32 Add(int32, int32) cil managed

{

.maxstack 2 // используем в стеке 2 элемента

ldarg.0 // загружаем первый аргумент

ldarg.1 // загружаем второй аргумент

add // складываем их

ret // возвращаем результат

}

}

Вызов метода Add класса Test:

ldc.i4.4

ldc.i4.5

call int32 Test::Add(int32, int32)

stloc