Програма емуляції роботи командного процесора операційної системи

Автор: Пользователь скрыл имя, 20 Ноября 2012 в 22:41, курсовая работа

Описание работы

Сучасні відкриті операційні системи, такі як Linux або OPENBSD походять від операційної системи UNIX, що з’явилася на початку 1970-х років і зробила величезний вплив на практичні реалізації операційних систем і розвиток всієї області інформаційних технологій. Тому вивчення будь-якою з сучасних UNIX-подібних операційних систем неможливо без розгляду основних ідей, закладених в оригінальний UNIX.

Работа содержит 1 файл

Kyrs.doc

— 446.00 Кб (Скачать)


ВСТУП

 

Еволюція мов програмування, з моменту появи перших обчислювальних машин, що застосовувались для обчислення траєкторії польоту снарядів далекобійної артилерії під час Другої світової війни, була досить драматична. Спочатку програмісти працювали з обмеженим набором примітивних команд, що являли собою машинну мову. Ці команди складалися з довгих стрічок нулів та одиниць. Незабаром був винайдений асемблер, що спроможний перетворювати в машинні команди більш зрозумілі для людини інструкції (наприклад, ADD(додати) або MOV (Перемістити)).

З часом з’явились такі мови високого рівня як BASIC та COBOL. Завдяки цим  мовам з’явилась можливість програмувати, використовуючи логічні конструкції  зі слів та речень, наприклад  Let I = 100. Ці команди перекладались на машинну мову інтерпретаторами та компіляторами.

Мова C++ є структурною мовою програмування. До недавніх пір програми розглядались як послідовність процедур, виконуючих певні дії над даними. Процедура або функція, являє собою набір команд, що виконуються послідовно. Дані були відділені від процедур та головним у програмуванні було прослідкувати, яка функція викликається і які дані при цьому обробляються. Щоб внести ясність в цю потенційно заплутану ситуацію, були розроблені принципи структурного програмування.

Комп’ютерну програму можна представити  складену з набору задач. Будь-яка  задача, яка дуже складна для простого описання, повинна бути поділена на декілька більш мілких зіставлених  задач, це розділення необхідно продовжувати до тих пір, поки задачі не стануть достатньо простими для розуміння.

C++ є мовою програмування загального призначення. Він завжди знаходився в найтіснішому зв'язку з операційною системою Unix, в якій і для якої він і розроблявся, оскільки як сама система, так і більшість працюючих в ній програм написані саме на C++. Проте сама мова не прив'язана жорстко до однієї певної системи або апаратної платформи. І хоча С++ називають “мовою системного програмування”, оскільки на ньому зручно писати компілятори і операційні системи, він такий же зручний і для написання великих прикладних програм в самих різних областях застосування. Мова С++ пропонує широкий асортимент типів. Фундаментальні типи включають символьний, а також цілий і речовинний (з плаваючою крапкою) декількох різних розмірів. Крім того, існує ціла ієрархія похідних типів даних, що створюються за допомогою покажчиків, масивів, структур і об'єднань. З операндів і знаків операцій формуються вирази; будь-який вираз, зокрема привласнення і виклик функції, може бути оператором. Завдяки покажчикам підтримується механізм незалежної адресної арифметики. У мові С++ є всі основні керівники конструкції, необхідні для написання добре структурованої програми: угрупування операторів в блоки, ухвалення рішення по умові (if-else), вибір одного з декількох можливих варіантів (switch), цикли з перевіркою умови завершення на початку (while, for) і в кінці (do), а також примусовий вихід з циклу (break). Функції можуть повертати значення простих типів, структури, об'єднання або покажчики. Будь-яку функцію можна викликати рекурсивно. Локальні змінні функції звичайно є “автоматичними”, тобто створюються при кожному її виклику. Визначення (тіла) функцій не можна вкладати один в одного, проте змінні можна оголошувати в блоково-структурованому стилі. Функції програми на С++ можуть знаходитися в окремих файлах початкового коду, компільованих також окремо. Змінні можуть бути внутрішніми по відношенню до функції, зовнішніми і при цьому видимими тільки в одному файлі коду чи ж видимими у всьому просторі програми. На етапі препроцесорної обробки в тексті програми виконуються макропідстановки, включення додаткових файлів початкового коду і умовна компіляція.

Операційна система – це комплекс взаємозв’язаних програм, який діє як інтерфейс між додатками і користувачами з одного боку і апаратурою комп’ютера з іншого боку. Відповідно до цього визначення операційна система виконує дві основні функції:

  •   надання користувачеві або програмістові замість реальної апаратури розширеної віртуальної машини (яку іноді називають операційне середовище), з якою зручно працювати і яку легко програмувати;
  •   підвищення ефективності використання комп’ютера шляхом раціонального управління його ресурсами відповідно до деяких критеріїв.

Сучасні відкриті операційні системи, такі як Linux або OPENBSD походять від операційної системи UNIX, що з’явилася на початку 1970-х років і зробила величезний вплив на практичні реалізації операційних систем і розвиток всієї області інформаційних технологій. Тому вивчення будь-якою з сучасних UNIX-подібних операційних систем неможливо без розгляду основних ідей, закладених в оригінальний UNIX.

Всі сучасні комп’ютерні системи побудовані по трьом принципам Джона фон Неймана: програмного управління, однорідності пам’яті і адресності. Ці принципи можна розкрити таким чином: програма, що складається з набору команд, і початкові дані зберігаються в загальній пам’яті, кожен осередок якої має свою адресу (набір всіх адрес, до яких може звертатися програма, називається адресним простором); кожна команда разом з даними вибирається з пам’яті і виконується процесором, вибір команди здійснюється за допомогою спеціального лічильника команд, який містить в собі адресу виконуваної в даний момент команди; команди розташовані в пам’яті один за одним, за рахунок чого організовується послідовна вибірка з пам’яті ланцюжка команд.

На підставі цього  можна виділити три основні структурні елементи комп’ютера:

  1. процесор – здійснює контроль за діями комп’ютера, а також виконує функцію обробки даних згідно програмі. У сучасних системах може бути один і більше центральних процесорів;
  2. основна пам’ять – у ній зберігаються програми і дані. Як правило є тимчасовою (інформація зберігається, поки подається живлення);
  3. пристрої вводу-виводу – служать для передачі даних між комп’ютером і зовнішнім оточенням, що складається з периферійних пристроїв, до числа яких входять зовнішня пам’ять, комунікаційне устаткування, термінали.

У сучасних операційних системах кожен процес володіє своїм власним адресним простором, так що не може завдати шкоди пам’яті інших процесів.

Загальна  архітектура операційної системи

Операційна система  виконує безліч функцій, які зазвичай групуються відповідно до виду ресурсу, яким управляє операційна система, або із специфічним завданням, застосовним до всіх видів ресурсів. Можна виділити наступні функції сучасної багатозадачної операційної системи: управління процесами, управління пам’яттю, управління файлами і зовнішніми пристроями, захист даних і адміністрування, інтерфейс прикладного програмування, призначений для користувача інтерфейс.

Найбільш загальним  підходом до структуризації операційної  системи є її розділення всіх її модулів на дві групи:

  • ядро – модулі, що виконують основні функції операційної системи, вирішальні внутрісистемні завдання організації обчислювального процесу, такі як перемикання контексту, управління пам’яттю, обробка переривань, робота із зовнішніми пристроями і тому подібне;
  • компоненти, що реалізовують додаткові функції операційної    системи – службові програми, або утиліти.

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

Архітектура MS DOS

Архітектура MS DOS показана на рисунку 1. Можна говорити про те, що системне програмне забезпечення складається з двох рівнів. Нижній рівень складає Базова Система Вводу-Виводу (BIOS), що зберігається в ПЗП. Другий рівень складає власне MS DOS. (Можна сказати, що BIOS є компонентом апаратної частини , але подальші ОС на платформі Intel-pentium майже не використовують функції BIOS). Системні виклики реалізовані в програмних перериваннях. Всього можливі 256 типів (код) переривань. З них переривання з 16-річнимі кодами від 0 до F зарезервовані за апаратурою, переривання з кодами від 10 до 1f – звернення до BIOS, переривання з кодами від 20 до 3f – звернення до MS DOS. Мабуть, спочатку передбачалося, що безпосередньо працювати з апаратурою буде тільки BIOS, MS DOS звертатиметься до BIOS для виконання операцій на апаратурі, а додатки – тільки до MS DOS. Проте в подальших версіях MS DOS перехоплює все більше функцій BIOS. Додаткам доступні не тільки будь-які звернення до MS DOS і до BIOS, але і такі команди, які в інших системах є привілейованими, наприклад, команди вводу-виводу, отже, додатки мають доступ до апаратури в обхід ОС і BIOS.

Рисунок 1- Архітектура MS DOS

Оскільки MS DOS спроектована як однозадачна система, засоби взаємодії процесів в ній майже не передбачаються. Для взаємодії резидентних програм застосовуються переривання: резидентна програма перехоплює обробку переривання з певним номером. У специфікаціях MS DOS передбачено два переривання, які можна використовувати для цієї мети (2d, 2f), проте, багато застосувань використовують для цього «незайняті» переривання з номерами, великими 3f.

Командний процесор MS DOS – програма COMMAND.COM – забезпечує виконання команд і утиліт, пов’язаних з управлінням файловою системою, виконанням програм, управлінням параметрами оточення. Забезпечується також перенаправлення стандартного вводу-виводу і конвеєрне виконання команд. COMMAND.COM – процесор командного рядка, повсюдно MS DOS використовується з повноекранними оболонками, найбільш популярна з яких – Norton Commander.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1 АНАЛІЗ ТЕХНІЧНОГО ЗАВДАННЯ

 

В даному курсовому проекті я розробила програму емуляції роботи командного процесора операційної системи. Спочатку я створюю нескінченний інтерактивний цикл (головну «суперпетлю»),  призначений для того щоб користувач міг вводити команди за допомогою клавіатури. Також моя програма містить модуль аналізу команди користувача і модулі команд (згідно варіанту 1 – 3 на мові С++ і 4 на Assembler):

split – розділити текстовий файл на дві частини;

mem – виведення на  екран зайняте (вільне) місце пам’яті;

dir – виведення на екран вміст поточного каталогу;

path – вказує поточне місце знаходження програми.

Крім вищезазначених команд дана програма містить ще дві  команди, а саме help та exit. За допомогою цих команд можна отримати довідку про саму програму або за допомогою команди exit коректно завершити свою роботу. Якщо в даному циклі не буде передбачений вихід за допомогою команди exit, то з нього буде можливо вийти лише аварійно.

Дані команди повинні  вводитися правильно і в певній послідовності. Кожна з команд, реалізована в даному варіанті, має такий параметр /?, за яким надається довідка про дану команду. Це дозволяє користувачу, який вперше користується даною програмою дізнатись про правильність користування командами.

 

 

 

 

 

 

 

 

2 ТЕОРЕТИЧНА ЧАСТИНА

 

2.1 Опис принципів роботи, системні ресурси та функції необхідні для створення програми

Функція – це сукупність оголошень і операторів, звичайно призначена для вирішення певного завдання. Кожна функція повинна мати ім’я, яке використовується для її оголошення, визначення і виклику. У будь-якій програмі на С++ повинна бути функція з ім’ям main (головна функція), саме з цієї функції, в якому б місці програми вона не знаходилася, починається виконання програми.

При виклику функції  їй за допомогою аргументів (формальних параметрів) можуть бути передані деякі  значення (фактичні параметри), використовувані  під час виконання функції. Функція може повертати деяке (одне !) значення. Це значення, яке повертається і є результат виконання функції, який при виконанні програми підставляється в точку виклику функції, де б цей виклик не зустрівся. Допускається також використовувати функції що не мають аргументів і функції що не повертають ніяких значень. Дія таких функцій може полягати, наприклад, в зміні значень деяких змінних, виведення на друк деяких текстів і т.п..

З використанням функцій в мові С++ зв’язані три поняття – визначення функції (опис дій, що виконуються функцією), оголошення функції (завдання форми звернення до функції) і виклик функції.

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

У мові С++ немає вимоги, щоб визначення функції обов’язково передувало її виклику. Визначення функцій, які використовуються можуть слідувати за визначенням функції main, перед ним, або знаходиться в іншому файлі.

Проте для того, щоб компілятор міг здійснити перевірку відповідності типів фактичних параметрів, які передаються типам формальних параметрів до виклику функції потрібно помістити оголошення (прототип) функції.

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

У програмах на мові С++ широко використовуються, так звані, бібліотечні функції, тобто функції заздалегідь розроблені і записані в бібліотеки. Прототипи бібліотечних функцій знаходяться в спеціальних заголовних файлах, що поставляються разом з бібліотеками у складі систем програмування, і включаються в програму за допомогою директиви #include.

Якщо оголошення функції  не задане, то за умовчанням будується  прототип функції на основі аналізу першого посилання на функцію, будь то виклик функції або визначення. Проте такий прототип не завжди узгоджується з подальшим визначенням або викликом функції. Рекомендується завжди задавати прототип функції. Це дозволить компілятору або видавати діагностичні повідомлення, при неправильному використанні функції, або коректним чином регулювати невідповідність аргументів встановлюване при виконанні програми.

Оголошення параметрів функції при її визначенні може бути виконано в так званому «старому стилі», при якому в дужках після імені функції слідують тільки імена параметрів, а після дужок оголошення типів параметрів.

Информация о работе Програма емуляції роботи командного процесора операційної системи