- •Тема 1.
- •Понятия вычислительного процесса и Ресурса
- •Процессы и треды
- •Независимые и взаимодействующие вычислительные процессы
- •Прерывания.
- •Файловая система ntfs (New Technology File System)
- •Интерфейс прикладного программирования
- •Реализация функций api на уровне ос
- •Реализация функций api на уровне системы программирования
- •Реализация функций api с помощью внешних библиотек
- •Платформенно-независимый интерфейс posix
- •Семафорные примитивы Дейкстры
- •Мьютексы
- •Мониторы Хоара
- •Почтовые ящики
- •Конвейеры
- •Организация очереди на массиве
- •Очереди сообщений
- •Понятие тупиковой ситуации при выполнении параллельных вычислительных процессов
- •Студенты, не защитившие лабораторные работы, к сдаче зачетной единицы не допускаются
- •Общие сведения
- •Удаление элемента из списка.
- •Теоретическая часть (в популярном для студентов стиле).
- •0030:4012 (Всё шестнадцатиричное)
- •Выделение памяти.
- •(Каждый блок представляет байт)
- •Чтобы узнать, что происходит в памяти, при размещении и извлечении значений в стеке, см. На рисунок ниже:
- •Регистр eax почти всегда используется для хранения результата процедуры.
- •Строки.
- •Заполнение данными.
- •Все команды перехода имеют один операнд: смещение для перехода.
- •Организация циклов.
- •Имеются также другие формы:
- •Xor (не или) устанавливает бит результата в 1, если бит источника отличается от бита приемника. Not инвертирует бит источника.
- •Подпрограммы.
- •Структуры.
- •Упрощённый вызов api функций в tasm.
- •А вот и операторы, которые вы можете использовать:
- •Пример: команды ror (циклический сдвиг вправо)
- •Стековые операции.
Студенты, не защитившие лабораторные работы, к сдаче зачетной единицы не допускаются
Лабораторная работа № 1
Цель: Реализовать сортировку статистических данных (одномерный массив) на языке Object Pascal в среде Borland Delphi 6 согласно индивидуальному заданию (по подгруппам). Опираемся на знания, полученные на первом курсе, дисциплина «Информатика». Дополнительно информацию можно найти тут:
http://citforum.ru/programming/theory/sorting/sorting1.shtml
http://codingrus.ru/readarticle.php?article_id=2140
http://ru.wikipedia.org/wiki/%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82 %D0%BC %D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%800/oD0%BE%D0%B2%D0% BA%D0%B8
Лабораторная работа № 2
Цель: Получить практические навыки работы с динамическими переменными и динамическими структурами данных на примере связных списков (необходимую теоретическую часть привожу здесь).
Общие сведения
Для работы с динамическими структурами данных используются указатели. Указатели представляют собой специальный тип данных. Они принимают значения, равные адресам размещения в оперативной памяти соответствующих динамических переменных.
Списком называется структура данных, каждый элемент которой посредством указателя связывается со следующим элементом. На самый первый элемент (голову списка) имеется отдельный указатель.
Из определения следует, что каждый элемент списка содержит поле данных (оно может иметь сложную структуру) и поле ссылки на следующий элемент. После ссылки последнего элемента должно содержать пустой указатель (nil).
Число элементов связанного списка может расти или уменьшаться в зависимости от того, сколько данных мы хотим хранить в нем. Чтобы добавить новый элемент в список, необходимо:
Получить память для него;
Поместить туда информацию;
Добавить элемент в конец списка (или начало).
Элемент списка состоит из разнотипных частей (хранимая информация и указатель), и его
естественно представить записью. Перед описанием самой записи описывают указатель на нее:
Type { описание списка из целых чисел } PList = ATList; TList = record Inf : Integer;
Примеры
Создание списка.
Задача. Сформировать список, содержащий целые числа 3, 5, 1, 9.
Определим запись типа TList с полями, содержащими характеристики данных - значения очередного элемента и адреса следующего за ним элемента PList = ATList; TList = record Data : Integer; Next : PList; end;
Чтобы список существовал, надо определить указатель на его начало. Опишем переменные. Var
Next
: PList; end;
xA.Data
:= 5; { значение этого элемента }
xA.Next := nil;
{следующего значения нет }
пй
Head
Продолжим формирование списка, для этого нужно добавить элемент в конец списка. Введем вспомогательную переменную указательного типа, которая будет хранить адрес последнего элемента списка: x := Head; {сейчас последний элемент списка совпадает с его началом}
New(xA.Next); { выделим области памяти для следующего (2-го) элемента и поместим его адрес в адресную часть предыдущего (1 -го) элемента }
x := xA.Next ; { переменная x принимает значение адреса выделенной области. Таким образом осуществляется переход к следующему (2-ому) элементу списка }
Остальные числа заносятся аналогично: New(xA.Next); { выделим области памяти для следующего элемента } x := xA.Next ; { переход к следующему (3-му) элементу списка } xA.Data := 1; { значение этого элемента } xA.Next := nil; {следующего значения нет } New(xA.Next); { выделим области памяти для следующего элемента } x := xA.Next ; { переход к следующему (4-му) элементу списка } xA.Data := 9; { значение этого элемента } xA.Next := nil; {следующего значения нет }
Замечание. Как видно из примера, отличным является только создание первого (Head) элемента - головы списка. Все остальные действия полностью аналогичны и их естественно выполнять в цикле.
Присоединение нового элемента к голове списка производится аналогично: New(x);
{ ввод значения элемента xA.Data := ... } xA.Next := Head; Head := x;
В этом случае последний введенный элемент окажется в списке первым, а первый - последним. Просмотр списка.
Просмотр элементов списка осуществляется последовательно, начиная с его начала. Указатель List последовательно ссылается на первый, второй и т. д. элементы списка до тех пор, пока весь список не будет пройден. При этом с каждым элементом списка выполняется некоторая операция- например, печать элемента. Начальное значение List - адрес первого элемента списка (Head). Digit - значение удаляемого элемента.
List := Head;
While ListA.Next <> nil do begin WriteLn(ListA.Data);
List := ListA.Next; { переход к следующему элементу; аналог для массива i:=i+1 } end;