Студопедия

КАТЕГОРИИ:


Архитектура-(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)

Синхронизация




Может быть двух видов:

1. Данные передаются по значению

2. По фронту (отловил сам факт изменения, а как оно изменилось – не важно)

По очереди сообщений мы воспринимали по фронту (сообщение пришло), и по значению (сообщение пришло с данными)

Проблема: лёгкость программирования и быстродействие, пока взаимодействуют две программы. Когда много процессов взаимодействуют, у нас возникает:

· Процессы синхронизируются друг с другом по четко оговоренной схеме (первый-второй)

· Процессы синхронизируются в режиме конкуренции

Жду события (тебе пора начинать работать, узнаю об этом по фронту) – действую – генерирую событие (запускает следующего, а я перехожу в режим ожидания)

Параллелизма нет, есть псевдопараллелизм, потому что всё идет по шагам.

В результате программы становятся сложными, трудно отлаживаемыми.

Программное обеспечение SolidWorks. При выполнении некоторых действий программа открывает 65 потоков, но нагрузка на 1 процессор.

Режим конкурирующего программирования более правильный. У нас есть потоки, которые конкурируют за некоторый виртуальный ресурс (не обязательно выражен физически). Виртуальным ресурсом есть возможность поработать над ресурсом в одиночку.

Потоки

Проблемы:

· Как можно это запрограммировать (техническая)

· Могу ли я его запрограммировать неправильно и к чему это проведет (научная)?

o Я неправильно запрограммировал доступ и оба процесса считают, что объект занят и никто не получает доступ

o Я неправильно запрограммировал доступ и оба процесса считают, что объект свободен и оба получают доступ

o Я так запрограммировал, что доступ к нему получает только один процесс, который до ресурса добрался первым, будет использовать его, пока ему не надоест.

У меня есть в разделяемой памяти переменная флаг = 0

Sharememory: int flag = 0;
//0 – свободная, 1 – занята
while(1)
{
while(flag)
{
flag = 1;
действие
flag = 0;
}
}

Если я таким образом запрограммирую два процесса, то на самом деле это неправильно запрограммированная конкуренция. Мы оставили 4 машинные команды и очень маленькая вероятность того, что вторая переменная сможет перехватить.

На одноядерных машинах эта вероятность уходит вообще (каждые 10000 машинных команд)

Ещё возможна проблема, когда ресурс не один, а их два. Когда ресурса два, то программы должны устанавливать два раза конкуренцию. Когда он получает оба ресурса, он выполняет свои действия. Но весело получается, когда одна программа захватила один ресурс (х), а другая программа (у). Каждый процесс забирает ресурс и не отдаёт его и получается клинч (два процесса забрали ресурсы и не отдают никому, помогает только перезагрузка).

Необходимо обнаружить клинч на стадии проектирования


 

Решения проблемы:

1. Псевдопараллелизм.

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

3. Методы, основанные на понимании глубинной сути задачи (для каждого класса задач есть своя оптимизация).

У нас есть некоторые объекты, которые обладают некоторыми свойствами.
Есть книги, в которых есть рассказы. Но книги разные и рассказы разные, а иногда рассказы повторяются, иногда не повторяются. Мы хотим пойти в поход и взять полное собрание О. Генри. Надо собрать не просто рюкзак, а самый лёгкий рюкзак.

Юра: А вы знали, что после прорыва канализации над дата-центром, можно вызвать спецов IBM, которые будут тряпочками протирать гавно с серверов?

Чепелев: Если надо, они его языком будут слизывать, но это дороже.

while(flag!= some)
{
flag = ”stop”;
...
flag = “some”;
}

Языки высокого уровня – это математическая модель, из нее генерируется исходный код. Не стоит воспринимать язык высокого уровня как исходный код.

xxx: mov ax, flag
mov bx, some
cmp ax,bx
jne xxx
mov cx, stop
mov flag, cx
...
mov cx, some
mov flag, cx

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

Если у нас две программы работают в конкурирующем режиме и выполняют этот блок кода и одна переменная вошла в ступор, вторая начинает отрабатывать и перетирает flag, а значения остались старые, то программа №1 больше не анализирует данные и работает со старыми.

Общие переменные категорически не рекомендуются!

Лабораторная работа №3 (задание)

1. Мысленно проанализировать текст программы, найти все косяки лабораторной работы №1 и описать их

a. У нас есть два писателя и один читатель и два писателя работают одновременно

b. Один читатель и один писатель

2. Найти алгоритм Петерсона для двух конкурентов (в Википедии правила Петтерсона, но не алгоритм) и внедрить в свою программу

3. Выучить теорию Петерсона (как выглядел бы алгоритм Петерсона на троих)




Поделиться с друзьями:


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


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



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




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