Курсак СПОС

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКНІ
Факультет:
КН
Кафедра:
Інформаційних систем та мереж (ІСМ)

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

Рік:
2010
Тип роботи:
Курсова робота
Предмет:
Системне програмування та операційні системи
Група:
КН

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

Міністерство освіти і науки України Національний університет “Львівська політехніка” Кафедра “Інформаційні системи та мережі” КУРСОВА РОБОТА з дисципліни “Системне програмування та операційні системи” на тему: “Керування процесами та потоками для реалізації операцій над множинами” Львів-2010 Завдання на курсову роботу з дисципліни "Системне програмування та операційні системи" студенту групи КН-25 ЗМIСТ ЗАВДАННЯ ТА КАЛЕНДАРНИЙ ПЛАН ЙОГО ВИКОНАННЯ 1 Провести аналiтичний огляд лiтератури по заданій темi. 26.02  2 Методи та засоби розв’язання задачі 26.03   3 Написати програми для виконання таких основних операцій над множинами натуральних чисел, як об’єднання, різниця, перетин, перевірка входження елемента у множину, порівняння множин, ввід та вивід елементів множин. Вимоги до програми: 1)Програмна реалізація повинна складатися з трьох частин: Програма на мові Intel Assembler для планування резидентних процесів під керуванням MS DOS. Програма повинна складатись з менеджера, який керує спеціалізованими резидентними процесами для: введення даних; реалізації операцій перетворення даних; виведення результатів обчислень. Кількість резидентних процесів визначається функціональними особливостями розв’язування задачі. Передбачити можливість перевірки наявності та вивантаження резидентів з оперативної пам’яті. Програма на мові С/С++ для планування потоків під керуванням Windows або Linux. Потоки мають виконувати дії, ідентичні діям резидентних процесів MS DOS. Одно процесорна програма на асемблері або С/С++ для контрольної перевірки правильності обчислень. 2) Програма повинна мати інтерфейс для вибору режимів її роботи; інтерфейс може бути реалізований мовами С/С++; керування режимами роботи програми виконати за клавіатури та миші. 30.04  4 Пiдготувати вхiднi данi для контрольного прикладу. 14.05  5 Оформити записку до курсової роботи згiдно вимог Мiжнародних стандартiв, дотримуючись такого змiсту: - вступ; - формулювання задачі; - методи та засоби розв’язування задачі; - алгоритми розв'язування задачі; - опис програми - технологія програмування, виконання та відлагодження програми; - інструкція користувачеві - контрольний приклад та результати роботи програми; - висновки; - література; - додатки 28.05  ЗАВДАННЯ ПРИЙНЯТО ДО ВИКОНАННЯ: ____________13.02.2010 пiдпис студента Керівник роботи: _______________/Кравець П.О./ Зміст Вступ.....................................................................................................................4 1.Формулювання задачі......................................................................................5 2. Методи та засоби розв’язування задачі.........................................................7 3. Алгоритм розв’язування задачі....................................................................14 4. Опис програми...............................................................................................15 5. Технологія програмування, відлагодження та виконання.........................19 6. Інструкція користувачеві..............................................................................21 7. Контрольний приклад та аналіз результатів..............................................23 Висновки............................................................................................................27 Список літератури.............................................................................................28 Додаток А. Текст програми..............................................................................29 Додаток Б. Текст програми на мові Сі з потоками………………………….41 Додаток В. Текст однопотокової програми на мові Сі…….…..…….…......45 Вступ Метою курсової роботи є закріплення теоретичних знань та практичних навичок системного програмування, набутих під час вивчення дисципліни “Системне програмування та операційні системи”. У процесі виконання курсової роботи студенти повинен самостійно навчитися працювати з літературою, розробляти алгоритми керування ресурсами комп’ютера, здійснювати їх програмну реалізацію та від лагодження за допомогою сучасних обчислювальних систем. Проблема в тому, що практично ніде не немає стандартних засобів для роботи з множинами. Тому програмістам доводиться самим вибирати засоби для роботи з множинами, самим реалізовувати операції над ними. Ця проблема є дуже актуальною, адже множини займають важливе місце у житті людей, що мають справу з дискретною математикою. Саме тому головною метою цієї курсової роботи було написання програм для виконання таких основних операцій над множинами натуральних чисел, як об’єднання, різниця, перетин, перевірка входження елемента у множину, порівняння множин, ввід та вивід елементів множин. Формулювання задачі Назва та галузь розробки Темою курсової роботи є “Керування процесами та потоками для реалізації операцій над множинами”. Програма призначена для виконання таких основних операцій над множинами натуральних чисел, як об’єднання, різниця, перетин, перевірка входження елемента у множину, порівняння множин, ввід та вивід елементів множин. Підстава для розробки Множина є сукупністю різних об’єктів, які можуть або самі бути множинами, або бути неділимими елементами. Підставою для розробки даних програм є те, що практично ніде немає стандартних засобів для роботи з множинами. Тому програмістам доводиться самим вибирати засоби для роботи з множинами, самим реалізовувати операції над ними. Ця проблема є дуже актуальною, адже множини займають важливе місце у житті людей, що мають справу з дискретною математикою. Призначення розробки Програма на мові асемблера призначена для виконання таких основних операцій над множинами натуральних чисел, як об’єднання, різниця, перетин, перевірка входження елемента у множину, ввід та вивід елементів множин. Багатопотокова програма на мові Ci призначена роботи в багатопоточному режимі для виконання таких основних операцій над множинами натуральних чисел, як об’єднання, різниця, перетин, перевірка входження елемента у множину, ввід та вивід елементів множин. Однопотокова програма на мові Сі для перевірки правильності результату попередніх програм. Вимоги до програми Вимоги до програми на мові асемблера Вхідні дані: для роботи програми ви повинні ввести множини та елемент для перевірки належності його до однієї з множин. Також для виклику резидентних процедур необхідно натиснути відповідну клавішу. Вимоги до апаратного забезпечення: будь-який комп’ютер з процесором не раніше 80386, 64Кб ОЗП, близько 100 Кб вільної пам’яті для збереження програми, клавіатура. Вимоги до встановленого ПЗ: встановлена ОС MS DOS, чи емулятор MS DOS, для компіляції необхідно будь-який компілятор (TASM, MASM, FASM чи будь-який інший), та редагувальник зв’язків (TLINK чи інший). Також необхідний текстовий редактор для редагування коду та відлагоджувальник для відлагодження програми. Вимоги до програми на мові Сі Вхідні дані: для роботи програми ви повинні ввести ввести множини та елемент для перевірки належності його до однієї з множин. Вимоги до апаратного забезпечення: будь-який комп’ютер з процесором не раніше 80386, 2 Мб ОЗП, близько 5 Мб вільної пам’яті для збереження програми, клавіатура, мишка Вимоги до встановленого ПЗ: встановлена ОС Windows, середовище програмування C++Builder 2010 та відповідні бібліотеки. Вимоги до складу і параметрів технічних засобів обчислювальної системи, зовнішніх пристроїв Проект має нормально працювати на комп'ютерах IBM PC із процесорами і8086. Програма потребує оперативної пам'яті не більше 2 Мб, до цього треба додати пам'ять, яку займає операційна система MS DOS чи WINDOWS. Для виконання програми необхідні клавіатура та мишка. Методи та засоби розв’язування задачі Потік даних в телекомунікаціях і програмуванні — це послідовність кодованих когерентних сигналів (пакетів даних) в цифровій формі, яка використовується, щоб передавати або отримати інформацію це знаходиться в передачі. У електроніці і комп'ютерній архітектурі, потік даних визначає, протягом якого часу який елемент даних може увійти або залишити систему. Часто потік даних бачиться, як альтернатива потоку команд, відтоді, як фон-нейманівська машина управляється потоком команд — тоді як його альтернатива, антимашина, управляється потоком даних. В програмуванні з потоком даних часто асоціюється потік — абстракція, яка використовується для читання чи запису файлів, сокетів тощо в єдиній манері. Потоки є зручним уніфікованим програмним інтерфейсом для читання чи запису файлів (в тому числі спеціальних і, зокрема, пов'язаних із пристроями), сокетів і передачі даних між процесами. Підтримка потоків включена в більшості мов програмування і ледве чи не в усі сучасні операційні системи. При запуску процесу йому надаються так звані стандартні потоки. Можливість перенаправлення потоків дозволяє пов'язувати різні програми, і додає системі гнучкість. Багатопотоковість - властивість платформи (наприклад, операційної системи, JVM і т. д.) або програми, що полягає в тому, що процес, породжений в операційній системі, може складатися з декількох потоків, які виконуються «паралельно», тобто без встановленого порядку в часі . При виконанні деяких завдань таке розділення може досягти більш ефективного використання ресурсів обчислювальної машини. Такі потоки називають також потоками виконання (від англ. Thread of execution); іноді називають «нитками» (буквальний переклад англ. Thread) або неформально «тред». Суттю багатопоточності є квазізадачність на рівні одного виконуваного процесу, тобто всі потоки виконуються в адресному просторі процесу. Крім цього, всі потоки процесу мають не тільки загальний адресний простір, але і загальні дескриптори файлів. Виконувати процес має як мінімум один (головний) потік. Багатопотоковість не слід плутати ні з багатозадачністю, ні з багатопроцесорністю, незважаючи на те, що операційні системи, які реалізують багатозадачність, як правило реалізують і багатопоточність. До достоїнств багатопоточності в програмуванні можна віднести наступне: Спрощення програми в деяких випадках, за рахунок використання загального адресного простору. Менші щодо процесу часові витрати на створення потоку. Підвищення продуктивності процесу за рахунок розпаралелювання процесорних обчислень і операцій введення / виводу. Типи реалізації потоків Потік в просторі користувача. Кожен процес має таблицю потоків, аналогічну таблиці процесів ядра. Переваги і недоліки цього типу наступні: Плюси: Можливість реалізації на ядрі не підтримує багатопоточність Більш швидке перемикання, створення і завершення потоків Процес може мати власний алгоритм планування. Недоліки: Відсутність переривання по таймеру усередині одного процесу При використанні блокуючого системного запиту для процесу всі його потоки блокуються. Складність реалізації Потік в просторі ядра. Поряд з таблицею процесів в просторі ядра є таблиця потоків. «Волокна» (fibers). Кілька потоків режиму користувача, виконуються в одному потоці режиму ядра. Потік простору ядра споживає помітні ресурси, в першу чергу фізичну пам'ять і діапазон адрес режиму ядра, для стека режиму ядра. Тому було введено поняття «волокна» - полегшеного потоку, що виконується виключно в режимі користувача. У кожного потоку може бути декілька «волокон». Взаємодія потоків У багатопотоковому середовищі часто виникають проблеми, пов'язані з використанням паралельно виконуваними потоками одних і тих самих даних або пристроїв. Для вирішення подібних проблем використовуються такі методи взаємодії потоків, як взаємовиключення (мьютекс), семафори, критичні секції і події. Взаємовиключення (mutex, мьютекс) - це об'єкт синхронізації, який встановлюється в особливий сигнальний стан, коли не зайнятий яким-небудь потоком. Тільки один потік володіє цим об'єктом у будь-який момент часу, звідси і назва таких об'єктів (від англійського mutually exclusive access - взаємно виключає доступ) - одночасний доступ до загального ресурсу виключається. Після всіх необхідних дій мьютекс звільняється, надаючи іншим потокам доступ до загального ресурсу. Семафори представляють собою доступні ресурси, які можуть бути придбані декількома потоками в один і той же час, поки пул ресурсів не спорожніє. Тоді додаткові потоки повинні чекати, поки необхідна кількість ресурсів не буде знову є. Семафори дуже ефективні, оскільки вони дозволяють одночасний доступ до ресурсів. Події. Об'єкт, який зберігає в собі 1 біт інформації «просигналізував чи ні», над яким визначені операції «просигналізувати», «скинути в непросигналізований стан» і «чекати». Очікування на просигналізовану подію є відсутність операції з негайним продовженням виконання потоку. Очікування на непросигналізовану подію призводить до припинення виконання потоку до тих пір, поки інший потік (або ж друга фаза обробника переривання в ядрі ОС) не просигналізує подію. Можливо очікування кількох подій в режимах «будь-якого» або «всіх». Можливо також створення події, автоматично скидається в непросигналізований стан після пробудження першого ж - і єдиного - що чекає потоку (такий об'єкт використовується як основа для реалізації об'єкта «критична секція»). Активно використовуються в MS Windows, як в режимі користувача, так і в режимі ядра. Критичні секції забезпечують синхронізацію подібно мьютекса за винятком того, що об'єкти, що представляють критичні секції, доступні в межах одного процесу. Події, мьютекс і семафори також можна використовувати в однопроцессном додатку, проте реалізації критичних секцій в деяких ОС, забезпечують більш швидкий і більш ефективний механізм взаємно що виключає синхронізації - операції «отримати» і «звільнити »на критичні секції оптимізовані для випадку єдиного потоку (відсутності конкуренції) з метою уникнути будь-яких провідних в ядро ОС системних викликів. Подібно мютекса об'єкт, що представляє критичну секцію, може використовуватися тільки одним потоком в даний момент часу, що робить їх вкрай корисними при розмежуванні доступу до загальних ресурсів. Умовні змінні (condvars). Схожі з подіями, але не є об'єктами, що займають пам'ять - використовується тільки адресу змінної, поняття «вміст змінної» не існує, як умовної змінної може використовуватися адресу довільного об'єкта. На відміну від подій, встановлення умовної змінної у просигналізований стан не тягне за собою ніяких наслідків у разі, якщо на даний момент немає потоків, які чекають на змінної. Установка події в аналогічному випадку спричиняє за собою запам'ятовування стану «просигналізування» всередині самої події, після чого наступні потоки, які бажають чекати події, продовжують здійснювати негайно без зупинки. Для повноцінного використання такого об'єкта необхідна також операція «звільнити mutex і чекати умовну змінну атомарному». Резидентна програма (або TSR-програма, від англ. Terminate and Stay Resident - «виконатися і залишитися резидентною») - в операційній системі MS-DOS програма, яка повернула управління в оболонці операційної системи (command.com), або надбудові над операційною системою (Norton Commander і т. п.), але залишилася в оперативній пам'яті персонального комп'ютера. Резидентна програма активізується кожен раз при виникненні переривання, вектор якого ця програма змінила на адресу однієї зі своїх процедур. При роботі з MS-DOS резидентні програми широко використовувалися для досягнення різних цілей (наприклад, русифікатори клавіатури, програми доступу до локальної мережі, менеджери відкладеної друку, віруси). За способом ініціалізації і виклику операційною системою резидентні програми необхідно відрізняти від «справжніх» драйверів MS-DOS, що вбудовуються операційною системою в своє ядро під час завантаження. В епоху багатозадачних ОС резидентними іноді називають програми, завантажені постійно і працюють у фоновому режимі. Але застосування цього терміна некоректно по відношенню до багатозадачності ОС. Мультиплексорне переривання INT 2Dh Мультиплексорне переривання INT 2Dh використовується для організації роботи з резидентними процесами згідно специфікації AMIS (альтернативна специфікація мультиплексорного переривання). Вхід: АН = ідентифікатор програми AL = 00: перевірка наявності у пам’яті AL = 01: отримати адресу точки входу AL = 02: деінсталяція резидентної програми AL = 03: запит на активацію (для «спливаючих програм») AL = 04: отримати список перехоплених переривань AL = 05: отримати список перехоплених клавіш AL = 06: отримати інформацію про драйвер (для драйверів пристроїв) AL = 07 – 0Fh — зарезервовано для AMIS AL = 1Fh – 0FFh — власні значення для кожної програми Вихід: AL = 00h, якщо функція не підтримується. Функції для роботи з перериваннями Функція DOS 35h — прочитати адресу оброблювача переривання Вхід: АН = 35h; AL = номер переривання Вихід: ВХ = зміщення ES = сегмент Функція DOS 25h — встановити адресу оброблювача переривання Вхід: АН = 25h; AL = номер переривання DS:DX = адреса оброблювача Зміна векторів переривань є критичною секцією коду при виникненні апаратних переривань. Перед зміною векторів необхідно заборонити опрацювання переривань командою cli, а після зміни – дозволити такі переривання командою sti. Функція DOS 34h: Визначити адресу прапорця зайнятості DOS Вхід: АН = 34h Вихід: ES:BX = адреса однобайтного прапорця зайнятості DOS ES:BX – 1 = адреса однобайтного прапорця критичної помилки DOS Якщо обидва прапорці дорівнюють нулеві, можна вільно користуватися функціями DOS. Якщо прапорець критичної помилки не нуль, ніякими функціями DOS користуватися не можна. Якщо прапорець зайнятості DOS не нуль, можна користуватися тільки функціями 01h – 0Ch, а щоб скористатися якою-небудь іншою функцією необхідно відкласти дії доти, поки DOS не звільниться. Для цього необхідно зберегти номер функції і параметри у змінних та встановити оброблювач переривання 8h або 1Ch. Цей оброблювач буде при кожнім виклику перевіряти прапорці зайнятості і, якщо DOS звільнилася, він викличе функцію з номером і параметрами, залишеними в змінних у пам'яті. Деякі функції BIOS теж не підтримують повторного входження. Зокрема, цим відрізняються оброблювачі програмних переривань 5, 8, 9, 0Bh, 0Ch, 0Dh, 0Eh, 10h, 13h, 14h, 16h, 17h. Для використання цих функцій необхідно створити прапорець самостійно. Функція DOS 31h: Залишити програму резидентною (exe та com) Вхід: АН = 31h AL =код завершення DX = розмір пам’яті у параграфах (1 параграф=16байтів), необхідної для збереження резидентної програми. Переривання 27h: Залишити програму резидентною (com) Вхід: АН = 27h DX = адреса першого байта після резидентної частини програми. Трактується як зміщення від PSP. Сегментна адреса PSP знаходиться у регістрах DS або ES після запуску програми. Алгоритм розв’язання задачі Усі три програми працюють за однаковим алгоритмом: 1) Введення даних; 2) Виклик функцій (процедур) знаходження об’єднання множин; 3) Виклик функцій (процедур) знаходження перетину множин; 4) Виклик функцій (процедур) знаходження різниці множин; 5) Виклик функцій (процедур) перевірки входження елемента у множину; 6) Виведення результату. Графічна схема алгоритму:  Рис. 3.1. Блок-схема головної функції Опис програми 4.1. Програма на асемблері Назва програми – casm.com Призначення програми – обчислення виразу з використанням резидентних процесів. Мови програмування на яких написана програма – асемблер. Як відомо, програми, які написані на мові Асемблер відрізняються високою ефективністю, мінімальним об’ємом і максимальною швидкістю дій. Ця властивість зумовила широке використання мови Асемблер в тих випадках, коли швидкість роботи програми і використовувана нею пам’ять мають вирішальне значення. Деякі класи програм (наприклад, програми драйверів пристроїв, які відрізняються жорсткою структурою) вимагають для свого виконання обов’язкове використання мови Асемблер. З іншої сторони, оскільки сучасні системи програмування дозволяють об’єднувати в одну виконувану програму фрагменти написані на різних мовах, широко практикується установка комбінованих програм, в яких основна частина програми написана на мові високого рівня, а найбільш критичні ділянки – на мові Асемблер. Може використовуватись і оборотній метод, коли в програму на мові Асемблер вставляють фрагменти для виконання відносно важких логічних або математичних перетворювань, написаних на мові високого рівня. Такий метод застосовується при розробці драйверів. Процедури на мові Сі, які включають текст драйвера полегшують програмування і відлагодження драйвера і прискорюють процес його розробки. Однак, крім споживчих якостей, мова Асемблер має ще значну методичну цінність. Мова Асемблера надає унікальну можливість вивчення машини на „низькому рівні”, освоєння того, що і як вміє робити апаратура комп’ютера і що вносить в його роботу операційна система. Знайомство з внутрішніми можливостями комп’ютера надзвичайно корисно для програміста, який працює на мовах PASCAL або Сі, так як дозволяє побачити за формалізмом у мовах високого рівня ті реальні процеси, які будуть протікати в системі для виконання прикладної програми і більш свідомо підійти до розробки структури програми і її конкретних алгоритмів. Мова Асемблер, так як люба друга мова програмування, містить багато прикладних засобів, які дозволяють в ряді випадків прискорити і полегшити процес програмування і розширити можливості створюваних програм. Професійна робота на мові Асемблер надає детальне знайомство зі всіма цими засобами. Чим краще користувач володіє технікою програмування на мові Асемблер, тим більш ефективніші будуть його програми. Однак не менш важливим являється і друга сторона питання – освоєння особливостей використання мови для реалізації апаратних і програмних можливостей комп’ютера. Логічна структура програми: Програма складається з процедур: Perevirka – процедура перевірки наявності елемента в множині; Objednannya – процедура об’єднання двох множин; Peretyn – процедура перетину двох множин; Riznucya – процедура різниці двох множин. Вимоги до апаратного забезпечення: будь-який комп’ютер з процесором не раніше 80386, 64Кб ОЗП, близько 100 Кб вільної пам’яті для збереження програми, клавіатура. Вимоги до встановленого ПЗ: встановлена ОС MS DOS, чи емулятор MS DOS, для компіляції необхідно будь-який компілятор (TASM, MASM, FASM чи будь-який інший), та редагувальник зв’язків (TLINK чи інший). Також необхідний текстовий редактор для редагування коду та відлагоджувальник для відлагодження програми. 4.2. Програма на мові Сі Назва програми – File1.exe Призначення програми – обчислення виразу використовуючи потоки. Мови програмування на яких написана програма – Сі: Мова Сі є мовою середнього рівня, яка одночасно враховує системні особливості комп’ютера та є потужною алгоритмічною мовою, сама мова Сі не містить засобів для роботи з потоками, але відповідні ОС додають до неї ці можливості, отже Сі є гнучкою мовою. За даними 2010 року Сі знову повернулась на перше місце по кількості написаного коду, що значить що Сі дуже потужна мова, яка не поступається вже скільки років новим мовам програмування. DWORD WINAPI output(LPVOID lpParam) – функція потоку для виведення даних; DWORD WINAPI peretyn(LPVOID lpParam) - функція потоку для обчислення перетину двох множин; DWORD WINAPI suma(LPVOID lpParam) - функція потоку для обчислення об’єднання двох множин; DWORD WINAPI riz(LPVOID lpParam) - функція потоку для обчислення різниці двох множин; DWORD WINAPI porivn(LPVOID lpParam) - функція потоку для порівняння двох множин; DWORD WINAPI perevirka(LPVOID lpParam) - функція потоку для перевірки входження елемента у множину. Змінні: int count1,count2,count3; int a[MAX],b[MAX],s[MAX]={0},per[MAX]={0},r[MAX]={0}; HANDLE hThreadPer; HANDLE hThread[4]; Бібліотеки: #include <stdio.h> - бібліотека вводу-виводу. #include <conio.h> - консольний ввід-вивід. #include <tchar.h> - для роботи з константами. Вхідні дані: для роботи програми ви повинні ввести дві множини та елемент, який хочуть перевірити на належність до певної множини; Вимоги до апаратного забезпечення: будь-який комп’ютер з процесором не раніше 80386, 2 Мб ОЗП, близько 100 Мб вільної пам’яті для збереження програми, клавіатура, мишка Вимоги до встановленого ПЗ: встановлена ОС Windows, середовище програмування С++Builder 2010 та відповідні бібліотеки. Технологія програмування , виконання та відлагодження програми Технологія програмування: Для створення програми я використав структурний підхід, тобто програма складається з функцій чи процедур, які утворюють певну структуру. По-перше у створенні програми були написані власне процедури які обчислюють значення виразу на мові Сі та Асемблері. Відразу я перевірив дієздатність і правильність виконання програми. По-друге відбулось написання потоків на мові Сі, перевірка результату шляхом порівняння з одно поточною програмою. По-третє відбулось написання обробників переривань в асемблерній програмі. А по-четверте – завершення асемблерної програми. Технологія відлагодження: Відлагодження програми на мові Сі я виконував в інтегрованому середовищі С++Builder 2010, за допомогою покрокового виконання програми та додавання відстежу вальних змінних за допомогою меню Watches. Відлагодження асемблерної програми виконував за допомогою програми Turbo debugger, і покрокового виконання програми з відслідковуванням вмістимого регістрів та змінних. При непередбачуваній зміні значення регістру чи змінної проводив аналіз поведінки програм і виправляв помилки. Типові помилки, які були виявлені під час роботи з асемблерною програмою, були: неправильно вказані адреси в пам’яті, неправильно вказані переходи, неправильно описані змінні. Технологія виконання: Для перетворення асемблерної програми в об’єктний код необхідно скористатись компілятором TASM з такими параметрами: TASM.EXE /zi casm.asm, , casm.lst >1.txt Файл лістингу потрібен для легшого відстежування помилок, результати компіляції перенаправляються в текстовий файл для зручнішого перегляду. Отриманий об’єктний файл необхідно перетворити у виконавчий код за допомогою програми TLINK.EXE, зауважимо, що наша програма є програмою типу COM, отже редагування зв’язків потрібно провести так. TLINK.EXE /t casm >2.txt Ключ /t необхідний для того щоб редагувальник зв’язків створив COM-програму. Запускати програму необхідно з командної стрічки Щоб вивантажити програму з пам’яті потрібно запустити її з ключем /u. Програму на мові Сі необхідно компілювати за допомогою С++Builder 2010. Запускати програму можна з під ОС Windows, вона запуститься в вікні MS DOS. Інструкція користувачеві Програми на мові Сі. Для роботи з програмою необхідно запустити їх або з командного рядка, або просто запустити exe-файл програми з-під Windows. З’явиться вікно з пропозицією ввести множини та елемент для перевірки належності його до однієї з множин. Після натиснення клавіші Enter, користувач отримає результати виконання роботи.  Рис.6.1 – Вікно програми на мові Сі. 6.2. Програма на мові асемблера Програму на мові асемблера обов’язково запускати з командного рядка, інакше ви не зможете від слідкувати результати її роботи. При запуску програми ви аналогічно отримаєте запрошення на ввід результатів, після чого програма завершиться і почне працювати як резидентна. Тепер для керування програмою слід використовувати цифрові клавіші. – перевірка входження елемента у множину 2– об’єднання множин 3 - перетин множин 4 – різниця множин  Рис 6.2. Вікно з асемблерною програмою Контрольний приклад та аналіз результатів Контрольний приклад запускався на трьох програмах з однаковими вхідними значеннями: Множина А [3,4,5,8] Множина В [2,4,7] Елемент для перевірки =5. Результати виконання програм:  Рис 7.1. Програма на мові Сі без потоків  Рис 7.2. Програма на мові Сі з потоками  Рис 7.3. Програма на асемблері Результати виконання програми на мові Сі повністю відповідають вимогам, програми працюють коректно і швидко, не потребують багато ресурсів. Програма має труднощі з виводом через те, що DOS не звільняє прапорці зайнятості і не має можливості користуватися функціями виводу. Але програма все-одно працює коректно, результати можна переглянути в регістрах процесора за допомогою TD.exe. Після виконання усіх трьох програм можна побачити, що їх результати співпадають. Отже, усі три програми працюють коректно. Висновок Під час виконання курсової роботи я закріпив теоретичні знання та практичні навички системного програмування, набуті під час вивчення дисципліни “Системне програмування та операційні системи”. У процесі виконання курсової роботи я самостійно навчився працювати з літературою, розробляти алгоритми керування ресурсами комп’ютера, здійснювати їх програмну реалізацію та відлагодження за допомогою сучасних обчислювальних систем. Під час виконання курсової роботи я написав три програми для виконання таких основних операцій над множинами натуральних чисел, як об’єднання, різниця, перетин, перевірка входження елемента у множину, ввід та вивід елементів множин. Список використаної літератури Кравець П.О. – Системне програмування та операційні системи. Методичні вказівки до курсової роботи - Львів,2008. Зубков С.В. – Ассемблер для DOS, Windows, Unix. – СПб,1999. Джонсон М. Харт – Системное програмирование в среде Windows- Москва, 2005. В.Н.Пильщиков – Програмирование на языке ассемблера IBM PC – Москва,1999. В. И. Юров – Assembler.2-е издание. – СПб,2003. Додаток А. Текст програми на мові асемблера ;Курсова робота з дисципліни "Системне програмування та операційні системи" ;Студента групи КН-25 Вагапова Руслана .model tiny .code .386 org 2Ch envseg dw ? org 80h cmd_len db ? ;довжина командного рядка cmd_line db ? ;командний рядок org 100h start: LOCALS JUMPS jmp initialize hw_reset9: retf int09h_handler proc far ;процедура оброник переривання від клавіатури jmp short actual_int09h_handler old_int09h dd ? dw 424Bh db 00h jmp short hw_reset9 db 7 dup (0) actual_int09h_handler: pushf call dword ptr cs:old_int09h pusha push ds push es push 0040h pop ds mov di,word ptr ds:001Ah cmp di,word ptr ds:001Ch je exit_09h_handler ;якщо буфер пустий - стрибок на вихід mov ax,word ptr [di] ;преревірка натиснутої клавіші cmp ah,02h jne proc_two call perevirka ;виклик процедури mov word ptr ds:001Ch,di pusha cli ;виведення повідомлення mov ah,03h int 10h mov ax, cs mov es, ax mov bp, offset msgOne mov cx, 23 mov ax, 1300h mov bl, 00000111b int 10h mov ax, 0200h mov bh, 0 mov dl, 0 inc dh int 10h sti popa jmp exit_09h_handler proc_two: mov ax,word ptr [di] cmp ah,03h jne proc_three call objednannya mov word ptr ds:001Ch,di pusha cli mov ah,03h int 10h mov ax, cs mov es, ax mov bp, offset msgTwo mov cx, 23 mov ax, 1300h mov bl, 00000111b int 10h mov ax, 0200h mov bh, 0 mov dl, 0 inc dh int 10h sti popa jmp exit_09h_handler proc_three: mov ax,word ptr [di] cmp ah,04h jne proc_four call peretyn mov word ptr ds:001Ch,di pusha cli mov ah,03h int 10h mov ax, cs mov es, ax mov bp, offset msgThree mov cx, 25 mov ax, 1300h mov bl, 00000111b int 10h mov ax, 0200h mov bh, 0 mov dl, 0 inc dh int 10h sti popa jmp exit_09h_handler proc_four: mov ax,word ptr [di] cmp ah,05h jne exit_09h_handler call riznucya mov word ptr ds:001Ch,di pusha cli mov ah,03h int 10h mov ax, cs mov es, ax mov bp, offset msgFour mov cx, 27 mov ax, 1300h mov bl, 00000111b int 10h mov ax, 0200h mov bh, 0 mov dl, 0 inc dh int 10h exit_09h_handler: pop es pop ds popa iret ; Дані які використовує процедура k dw 5 m1 db 3,4,5,8 m2 db 2,4,7 M db ? P db ? R db ? per db 0 msgOne db '1',13,10 msgTwo db '2',13,10 msgThree db '3',13,10 msgFour db '3',13,10 YesMessage DB 'element is in set',13,10,'$' NoMessage DB 'element is not in set',13,10,'$' perevirka proc near pusha mov ax,4 mov bh,8 div bh mov bl,
Антиботан аватар за замовчуванням

16.05.2013 18:05-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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