DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Використання семафорів і мютексів для реалізації доступу до спільних ресурсів системи

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
КН
Кафедра:
Кафедра електронних обчислювальних машин

Інформація про роботу

Рік:
2013
Тип роботи:
Лабораторна робота
Предмет:
АМО
Група:
КН-31
Коротко про документ

Про що ця робота

У роботі досліджено використання семафорів і мютексів для управління доступом задач до спільних ресурсів. Здійснено програмну реалізацію та збір статистичних даних часу доступу.

У роботі розглядаються

  • Семафори
  • Мютекси
  • Системи реального часу
  • Спільні ресурси
  • Синхронізація задач
  • Програмна реалізація

Зміст і розділи

  1. Мета роботи
  2. Теоретичні відомості
  3. Програмна реалізація
  4. Результати виконання
  5. Висновок
Для кого:Студенти технічних спеціальностей вищих навчальних закладів
Викладачі:Бачинський Р.В.

Ключові поняття

мютексспільний ресурссистема реального часузадачастатистичні данічас доступусинхронізаціяпрограмний код

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України Національний університет “Львівська політехніка” Кафедра ЕОМ Лабораторна робота №4 з диципліни: «Програмовані системи реального часу» на тему: «Використання семафорів і мютексів для реалізації доступу до спільних ресурсів системи.» Мета роботи: навчитись використовувати семафори і мютекси для реалізації доступу до спільних ресурсів системи. Теоретичні відомості Розробити програму, в якій декілька задач імітують доступ до деякого спільного ресурсу використовуючи семафори та м’ютекси. Кожна із задач захоплює ресурс на випадковий інтервал часу із наперед заданого діапазону , який є однаковим для всіх задач. Якщо ресурс є недоступний протягом часу , то надсилається повідомлення про помилку. Окрім задач, які саму імітують використання ресурсу, існує додаткова задача, яка виводить повідомлення про те, яка із задач отримала спільний ресурс і повідомлення про помилку, якщо вибраний ресурс не був доступний в межах заданого інтервалу часу. Окрім виводу повідомлень про використання певних ресурсів, додаткова задача здійснює збір статистичних даних про мінімальний, середній і максимальний час доступу до ресурсу для кожної із задач. Виконати дві реалізації програми – використовуючи семафори та використовуючи м’ютекси для реалізації доступу до спільного ресурсу. Порівняти отримані результати для часу доступу із використанням механізму семафорів і механізму м’ютексів. Пояснити відмінності в отриманих часових параметрах. Програмна реалізація static void TaskStartCreateTasks (void) { INT8U i; for (i = 0; i < N_TASKS; i++) { /* Create N_TASKS identical tasks */ TaskData[i] = '0' + i; /* Each task will display its own letter */ OSTaskCreate(Task, (void *)&TaskData[i], &TaskStk[i][TASK_STK_SIZE - 1], i+10 ); } OSTaskCreate(StatisticTask,NULL,&StatisticTaskStk[TASK_STK_SIZE - 1],StatisticPrio); } /******************************** TASKS ********************************/ void Task (void *parg) { INT8U r; INT8U err1,err2; struct QStruct *elem; randomize(); for (;;) { OSSemPend(RandomSem, T3, &err1); elem=(struct QStruct *)OSQPend(QFree,0,&err2); elem->ErrCode=err1; elem->NumTask= (INT8U )(*(char *)parg - '0'); elem->Time = 0; if (err1 == OS_NO_ERR) { r =(INT8U)random(T2-T1); elem->Time = r; OSTimeDly(r); r=0; OSSemPost(RandomSem); } OSQPost(QNFree,(void *)elem); } } void StatisticTask (void *parg) { INT8U i; INT8U err; char str[5]; struct QStruct *elem; struct Times{ INT8U TMin; INT8U TMax; INT8U T; } MasTime[N_TASKS] = {175,0,0, 45,0,0, 255,0,0} ; for (;;) { elem=(struct QStruct *)OSQPend(QNFree,0,&err); OSQPost(QFree,(void *)elem); MasTime[elem->NumTask].T = elem->Time; if (MasTime[elem->NumTask].T>MasTime[elem->NumTask].TMax) MasTime[elem->NumTask].TMax = MasTime[elem->NumTask].T; if ((MasTime[elem->NumTask].T<MasTime[elem->NumTask].TMin)&&(MasTime[elem->NumTask].T!=0)) MasTime[elem->NumTask].TMin = MasTime[elem->NumTask].T; PC_DispChar(3,elem->NumTask+10, elem->NumTask+'1', DISP_FGND_YELLOW + DISP_BGND_BLUE); PC_DispStr(10,elem->NumTask+10," ", DISP_FGND_YELLOW + DISP_BGND_GREEN); PC_DispStr(10,elem->NumTask+10,itoa(MasTime[elem->NumTask].T,str,5), DISP_FGND_YELLOW + DISP_BGND_BLUE); OSTimeDly(10); } } Результати виконання  Висновок: Під час виконання даної лабораторної роботи я навчився використовувати семафори і мютекси для реалізації доступу до спільних ресурсів системи процесора.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!