Апаратура програмне забезпечення та мікропрограми

[ виправити ] текст може містити помилки, будь ласка перевіряйте перш ніж використовувати.

скачати

Апаратура, програмне забезпечення та мікропрограми
Весь свій час, здоров'я і стан я приніс у жертву бажанням завершити створення цих машин для обчислень. Я відхилив також ряд пропозицій, що обіцяли для мене великі особисті вигоди. Однак, незважаючи на мою відмову від усіх цих вигод з метою вдосконалення машини, яка має майже інтелектуальною потужністю, і після того як я витратив з мого власного стану більше грошей, ніж уряд Англії виділив на цю машину (причому тільки на початку робіт), я не отримав ні подяки за мої праці, ні навіть тих почестей і нагород, які, як правило, дістаються людям, які присвятили себе суто науковим дослідженням ...
Якщо б робота, на яку я затратив так багато часу і душевних сил, була тільки перемогою над звичайними технічними труднощами або просто курйозом, або якби були сумніви в доцільності та корисності подібних машин, то можна було б у якійсь мірі зрозуміти і виправдати таке ставлення, а проте я дозволю собі стверджувати, що ні один гідний поваги мате тик ніколи не ризикне публічно висловити думку, що подібна машина, якщо вона буде зроблена, виявиться марною, - і що не одна людина, відомий як грамотний інженер, не ризикне оголосити побудова подібних машин недоцільним.
Я вважаю, що в той час, коли серйозною перешкодою на шляху прогресу фізичних наук стають величезні обсяги інтелектуального і ручної праці, необхідного для подальшого просування, а саме полегшити цю працю і покликана аналітична машина, застосування машин як помічників у виконанні найбільш складних і трудомістких обчислень не можна більше вважати проблемою, негідною уваги країни. І дійсно, немає ніяких причин, що не дозволяють економити працю розумовий, подібно фізичному, завдяки використанню машин.
Чарльз Беббідж Уривок з книги «Життя філософа»
Елементи, з яких будуються комп'ютери, стають все більш малими, вони виходять за межі можливостей звичайних мікроскопів - в нескінченні простору світу молекул.
Крістофер Еванс
Програми - це посередники між користувачем і машиною.
Гарлен Д. Міллс
Мікропрограмування - це реалізація імовірно розумних систем шляхом інтерпретації на нерозумних машинах!
Р. Ф. Розін
Мікропрограмування неефективного алгоритму не робить його ефективним,
Закон Роше

2.1 Вступ
2.2 Апаратура
2.2.1 Розшарування пам'яті
2.2.2 Регістр переміщення
2.2.3 Переривання і опитування станів
2.2.4 Буферизація
2.2.5 Периферійні пристрої
2.2.6 Захист пам'яті
2.2.7 Таймери та години
2.2.8 Робота в режимі он-лайн і автономний режим (оф-лайн), периферійні процесори
2.2.9 Канали вводу-виводу
2.2.10 Захоплення циклу
2.2.11 Відносна адресація
2.2.12 Режим завдання, режим супервізора, привілейовані команди
2.2.13 Віртуальна пам'ять
2.2.14 Мультипроцесорна обробка
2.2.15 Прямий доступ до пам'яті
2.2.16 конвейеризация
2.2.17 Ієрархія пам'яті
2.3 Програмне забезпечення
2.3.1 Програмування на машинному мовою
2.3.2 Асемблер і Макропорцесори
2.3.3 Компілятори
2.3.4 Системи керування введенням-виведенням (IOCS)
2.3.5 спулінг
2.3.6 Процедурно-орієнтовані і проблемно-орієнтовані мови
2.3.7 Швидкі компілятори без оптимізації і оптимізують компілятори
2.3.8 Інтерпретатори
2.3.9 Абсолютні і переміщують завантажувачі
2.3.10 Зв'язуючі завантажувачі і редактори зв'язків
2.4 Мікропрограми
2.4.1 Горизонтальний і вертикальний мікрокод
2.4.2 Вибір функцій для мікропрограмного реалізації
2.4.3 Емуляція
2.4.4 Мікродіагностіка
2.4.5 Спеціалізовані комп'ютери
2.4.6 мікропрограмна підтримка
2.4.7 мікропрограмування і операційні системи
2.4.8 Приклад мікропрограмування

2.1 Вступ
У цьому розділі ми коротко розглянемо, що таке апаратура, програмне забезпечення та програмного забезпечення. Всі вони грають важливу роль з точки зору функціонування обчислювальних машин та управління ними. Апаратні засоби - це пристрої обчислювальної машини; її процесори, пристрої пам'яті і пристрої введення-виведення, а також засоби прийому-передачі даних. Програмне забезпечення - це програми, що містять команди на машинній мові і дані, які відповідним чином інтерпретуються апаратурою машини. В якості прикладів деяких поширених видів програмних засобів можна навести компілятори, асемблери, завантажувачі, редактори зв'язків, що зв'язують завантажувачі, прикладні програми користувача, системи управління базами даних, системи прийому - передачі даних і операційні системи. Мікропрограми-це мікрокодірованние програми, що здійснюються безпосередньо з керуючої пам'яті дуже високої швидкодії. Найбільш часто використовувані об'єктні програми, занесені в постійну пам'ять (постійні запам'ятовувальні пристрої і програмовані ПЗУ), також іноді називають мікропрограмним забезпеченням. Про мікропрограмування і його важливу роль для сучасних машинних архітектур та операційних систем йде мова в останньому розділі цієї глави.
2.2 Апаратура
У декількох наступних розділах розглядаються різні види апаратних засобів, які мають важливе значення з точки зору роботи операційних систем. Читач, якому потрібні більш докладні відомості про апаратуру, може звернутися до таких книг-підручників з архітектури комп'ютерів, як (Ва80), (1182) і (Le80).
2.2.1 Розшарування пам'яті
Метод розшарування пам'яті (інтерлівінгом) застосовується для збільшення швидкості доступу до основної (оперативної) пам'яті. У звичайному випадку під час звернення до якоїсь однієї з комірок модуля основної пам'яті ніякі інші звернення до пам'яті проводитися не можуть. При розриві пам'яті сусідні за адресами осередку розміщуються у різних модулях пам'яті, так що з'являється можливість виробляти кілька звернень одночасно. Наприклад, при розшаруванні на два напрямки осередку з непарними адресами опиняються в одному модулі пам'яті, а з парними - в іншому. При простих послідовних зверненнях до основної пам'яті осередку вибираються по черзі. Таким чином, розшарування пам'яті дозволяє звертатися одразу до кількох клітинок, оскільки вони відносяться до різних модулів пам'яті.
2.2.2 Регістр переміщення
Регістр переміщення забезпечує можливість динамічного (переміщення програм у пам'яті. У регістр переміщення заноситься базовий адресу програми, що зберігається в основній пам'яті. Вміст регістра переміщення додається до кожного зазначеного у виконуваній програмі адресою. Завдяки цьому користувач може писати програму так, як якщо б вона починалася з нульової комірки пам'яті. Під час виконання програми всі виконавчі адреси звернень формуються з використанням регістра переміщення - і завдяки цьому програма може реально розміщуватися в пам'яті зовсім не в тих місцях, які вона повинна була б займати згідно адресами, вказаними при трансляції.
2.2.3 Переривання і опитування станів
Одним із способів, що дозволяють деякому пристрою перевірити стан іншого, незалежно пристрою, є опитування; наприклад, перший пристрій може періодично перевіряти, чи знаходиться другий пристрій в певному стані, і якщо ні, то продовжувати свою роботу. Опитування може бути пов'язаний з високими накладними витратами.
Переривання дають можливість одного пристрою негайно привернути увагу іншого пристрою, з тим щоб перше могло повідомити про зміну свого стану. Стан пристрою, робота якого переривається, має бути збережено, тільки після цього можна проводити обробку даного переривання. Після завершення обробки переривання стан перерваного пристрої відновлюється, з тим щоб можна було продовжити роботу. Переривання докладно обговорюються в гл. 3.
2.2.4 Буферизація
Буфер - це область основної пам'яті, призначена для проміжного зберігання даних при виконанні операцій введення-. виводу. Швидкість виконання операції введення-виведення залежить від багатьох факторів, пов'язаних з характеристиками апаратури введення-виведення, однак у звичайному випадку введення-виведення виробляється не синхронно з роботою процесора. При введенні, наприклад, дані містяться в буфер засобами каналу введення-виведення; після занесення даних в буфер процесор отримує можливість доступу до цих даних.
При введенні з простою буферизацією канал розміщує дані в буфер, процесор обробляє ці дані, канал поміщає такі дані і т. д. У той час, коли канал заносить дані, обробка цих даних проводитися не може, а під час обробки даних не можна заносити додаткові дані . Метод подвійної буферизації дозволяє поєднувати виконання операції введення-виведення з обробкою даних; коли канал заносить дані в один буфер, процесор може обробляти дані іншого буфера. А коли процесор закінчує обробку даних одного буфера, канал буде заносити нові дані знову в перший буфер. Таке почергове використання буферів іноді називають буферизацією з перемиканням («критичної» буферизацією). Обмін даними між каналами і процесорами буде розглянуто нижче.
2.2.5 Периферійні пристрої
Периферійні (зовнішні запам'ятовуючі) пристрої дозволяють / зберігати величезні обсяги інформації поза основної пам'яті комп'ютера. Стрічкопротяжні пристрої є в принципі послідовними пристроями, які передбачають читання і запис даних на довгій магнітній стрічці. Стрічки можуть мати довжину до 1100 м при намотуванні на 30-см касети. Інформація може фіксуватися на стрічці з різними плотностями запису. Для перших стрічкопротяжних пристроїв щільність запису становила вісім символів на міліметр довжини стрічки, потім стандартної стала щільність запису 22 симв / мм, потім 32 симв / мм, потім 64 симв / мм, а в даний час - 250 симв / мм. Пристрої нових поколінь безумовно будуть мати ще більші щільності запису.
Найважливішим пристроєм зовнішньої пам'яті з точки зору операційних систем є, мабуть, накопичувач на магнітних дисках. Накопичувачі на магнітних дисках - це пристрої прямого доступу, вони дозволяють звертатися до окремих елементів даних, не вимагаючи послідовного перегляду всіх елементів даних, що зберігаються на диску. Перші дискові накопичувачі могли зберігати по кілька мільйонів символів. Ємність пам'яті кожного з сучасних накопичувачів може досягати мільярда символів. У найближчому майбутньому мають бути створені накопичувачі ще більшої ємності. Робота дискових накопичувачів і їх роль для операційних систем описані в гл. 12 і 13.
2.2.6 Захист пам'яті
Захист пам'яті - важлива умова для нормальної роботи Многоабонентскіе обчислювальних систем (систем колективного користування). Захист пам'яті обмежує діапазон адрес, до яких дозволяється звертатися програмі. Захист пам'яті для програми, що займає безперервний блок комірок пам'яті, можна реалізувати за допомогою так званих граничних регістрів, де вказуються старший і молодший адреси цього блоку пам'яті. При виконанні програми всі адреси звернення до пам'яті контролюються, щоб переконатися в тому, що вони знаходяться в проміжку між адресами, зазначеними в граничних регістрах. Захист пам'яті можна реалізувати також за допомогою ключів захисту пам'яті, що відносяться до певних галузей основної пам'яті; програмі дозволяється звернення до комірок пам'яті тільки тих областей, ключі яких збігаються з ключем даної програми.
2.2.7 Таймери та години
Інтервальний таймер - ефективний спосіб запобігання / монополізації процесора одним з користувачів в Многоабонентскіе системах. Після закінчення заданого інтервалу часу таймер генерує сигнал переривання для залучення уваги процесора; по цьому сигналу процесор може переключитися на обслуговування іншого користувача.
Годинники істинного часу дають можливість комп'ютера стежити за реальним календарним часом з точністю до мільйонних часток секунди, а при необхідності навіть точніше.
2.2.8 Робота в режимі он-лайн і автономний режим (оф-лайн), периферійні процесори
Деякі периферійні пристрої володіють можливістю працювати або в режимі он-лайн, коли вони безпосередньо пов'язані з центральним процесором, або в автономному режимі (оф-лайн), коли ними керують контролери, не пов'язані з центральною обчислювальною машиною. Автономні контролери привабливі тим, що вони дозволяють управляти периферійними пристроями, не завантажуючи при цьому безпосередньо процесор. За допомогою автономних пристроїв часто виконуються такі операції, як введення даних з перфокарт на магнітну стрічку, висновок даних зі стрічки на карти і зі стрічки на друк.
У 1959 р. фірма IBM анонсувала свою «малу» обчислювальну машину 1401 (яка потім стала найбільш популярною обчислювальною машиною свого часу). Модель 1401 була функціонально закінченої обчислювальною системою, яка передбачає роботу з великим набором традиційних зовнішніх пристроїв. Цікаво відзначити, що одним з найбільш відомих застосувань моделі 1401 стало автономне виконання операцій введення-виведення для більш великих машин. Комп'ютер, що працює в такому режимі, називається процесором введення-виведення, або автономним комп'ютером-сателітом.
2.2.9 Канали вводу-виводу
У перших комп'ютерах із зростанням необхідних обсягів обчислень, особливо в умовах обробки економічних даних, вузьким місцем, як правило, опинявся введення-виведення. Під час виконання операцій введення-виведення процесори були зайняті управлінням пристроями введення-виведення. У деяких машинах в кожен конкретний момент часу могла виконуватися лише одна операція вводу-виводу. Важливим кроком для вирішення цієї проблеми є розробка каналів введення-виведення. "Канал вводу-виводу - це спеціалізований процесор, призначений для керування введенням-виведенням незалежно від основного процесора обчислювальної машини. Канал має можливість прямого доступу до основної пам'яті для запису або вибірки інформації.
У перших машинах взаємодія між процесорами і каналами здійснювалося за допомогою процесорних команд типу
· Умовний перехід (якщо канал зайнятий виконанням операції);
· Очікування (поки не закінчиться виконання команди каналу);
· Запис (вмісту керуючих регістрів каналу в основну пам'ять для подальшого опитування процесором).
У сучасних машинах з управлінням у перериваннях процесор виконує команду «почати введення-виведення» (SIO), щоб ініціювати передачу даних введення-виведення по каналу; після закінчення операції введення-виведення канал видає сигнал переривання по завершенню операції введення-виведення, що повідомляє процесор про цю подію.
Істинне значення каналів полягає в тому, що вони дозволяють значно збільшити паралелізм роботи апаратури комп'ютера і звільняють процесор від переважної частини навантаження, пов'язаної з управлінням введенням-виводом.
Для високошвидкісного обміну даними між зовнішніми пристроями та основною пам'яттю використовується селекторний канал. Селекторні канали мають тільки по одному підканалів і можуть обслуговувати у кожний момент часу тільки один пристрій.
Мультиплексні канали мають багато подканалов; вони можуть працювати відразу з багатьма потоками даних в режимі чергування. Байт-мультиплексний канал забезпечує режим чергування байтів при одночасному обслуговуванні ряду таких повільних зовнішніх пристроїв, як термінали, перфокарткового пристрої введення-виведення, принтери, а також низькошвидкісні лінії передачі даних. Блок-мультиплексний канал при обмінах в режимі чергування блоків може обслуговувати кілька таких високошвидкісних пристроїв, як лазерні принтери і дискові накопичувачі.
2.2.10 Захоплення циклу
Вузьке місце, де може виникнути конфліктна ситуація між каналами і процесором, - це доступ до основної пам'яті. Оскільки в кожний конкретний момент часу може здійснюватися тільки одна операція звернення (до деякого модулю основної пам'яті) і оскільки каналах і процесору може одночасно бути необхідними звернення до основної пам'яті, в звичайному випадку пріоритет тут надається каналах. Це називається захопленням циклу пам'яті; канал буквально захоплює, або «краде» цикли звертання до пам'яті у процесора. Каналам потрібно лише невеликий відсоток загального числа циклів пам'яті, а надання їм пріоритету в цьому сенсі дозволяє забезпечити краще використання пристроїв введення-виведення. Подібний підхід прийнятий і в сучасних операційних системах; планувальники, що входять до складу операційної системи, як правило, віддають пріоритет програмами з великим об'ємом введення-виведення по відношенню до програм з великим об'ємом обчислень.
2.2.11 Відносна адресація
Коли потреба у збільшенні обсягів основної пам'яті стала очевидною, архітектури комп'ютерів були модифіковані для роботи з дуже великим діапазоном адрес. Машина, розрахована на роботу з пам'яттю ємністю 16 Мбайт (1 Мбайт - це 1 048 576 байт), повинна мати 24-розрядні адреси. Включення таких довгих адрес у формат кожної команди навіть для машини з одноадресних командами варто було б дуже дорого, не кажучи вже про машини з багатоадресних командами. Тому для забезпечення роботи з дуже великими адресними просторами в машинах почали застосовувати адресацію типу база + зсув, або відносну адресацію, при якій всі адреси програми підсумовуються з вмістом базового регістра. Подібне рішення має те додаткову перевагу, що програми стають переміщуваними, або позиційно-незалежними ; це властивість програм має особливо важливе значення для Многоабонентскіе систем, в яких одну і ту ж програму може виявитися необхідним розміщувати в різних місцях основною пам'яті при кожному завантаженні.
2.2.12 Режим завдання, режим супервізора, привілейовані команди
В обчислювальних машинах, як правило, передбачається кілька різних режимів роботи. Динамічний вибір режиму дозволяє краще організувати захист програм і даних. У звичайному випадку, коли машина знаходиться в конкретному режимі, працююча програма може виконувати тільки деяка підмножина команд. Зокрема, якщо говорити про програми користувача, то підмножина команд, які користувач може вживати в режимі завдання, не дозволяє, наприклад, безпосередньо здійснювати операції введення-виведення; якщо програмі користувача дозволити виконання будь-яких операцій введення-виведення, вона могла б вивести головний список паролів системи, роздрукувати інформацію будь-якого іншого користувача або взагалі зіпсувати операційну систему. Операційній системі зазвичай присвоюється статус самого повноважного користувача і працює вона в режимі супервізора; вона має доступ до всіх команд, передбаченим у машині. Для більшості сучасних обчислювальних машин такого поділу на два режими - завдання та супервізора - цілком достатньо. Однак у випадку машин з високими вимогами щодо захисту від несанкціонованого доступу бажано мати більше двох режимів. Завдяки цьому можна забезпечити більш високий ступінь деталізації захисту. Завдяки цьому можна також надавати доступ за принципом мінімуму привілеїв:. Кожному конкретному користувачу слід надавати мінімально можливий пріоритет і право доступу тільки до тих ресурсів,, які йому дійсно необхідні для виконання передбачених завдань.
Цікаво відзначити, що в процесі розвитку комп'ютерних архітектур виявилася тенденція до збільшення кількості привілейованих команд, т. е. команд, які не можуть виконуватися в режимі завдання. Це є свідченням певної тенденції до реалізації більшого числа функцій операційних систем апаратними засобами. Деякі мікропроцесори вже мають цілі операційні системи, реалізовані мікропрограмне, в багатьох випадках значна частина функцій операційної системи реалізується в апаратурі.
2.2.13 Віртуальна пам'ять
Системи віртуальної пам'яті дають можливість вказувати в програмах адреси, яким не обов'язково відповідають фізичні адреси основної пам'яті. Віртуальні адреси, що видаються працюючими програмами, за допомогою апаратних засобів динамічно (тобто під час виконання програми) перетворюються на адреси команд і даних, що зберігаються в основній пам'яті. Системи віртуальної пам'яті дозволяють програмам працювати з адресними просторами набагато більшого розміру, ніж адресний простір основної пам'яті. Вони дають користувачам можливість створювати програми, незалежні (здебільшого) від обмежень основної пам'яті, і дозволяють забезпечити роботу Многоабонентскіе t систем з загальними ресурсами.
У системах віртуальної пам'яті застосовуються такі методи, як сторінкова організація (що передбачає обмін між основною і зовнішньою пам'яттю блоками даних фіксованого розміру) і сегментація (яка передбачає поділ програм і даних на логічні компоненти, звані сегментами, що спрощує управління доступом і колективне використання). Ці методи іноді реалізуються порізно, а іноді в комбінації. Системи віртуальної пам'яті розглядаються в гл. 8 і 9.
2.2.14 Мультипроцесорна обробка
У мультипроцесорних машинах кілька процесорів працюють із загальною основною пам'яттю і однією операційною системою. При мультипроцессорной роботі виникає небезпека конфліктних ситуацій певних типів, яких не буває в однопроцесорних машинах. Тут необхідно забезпечити координований упорядкований доступ до кожної загальної комірці пам'яті, з тим щоб два процесора не могли змінювати її вміст одночасно - і в результаті, можливо, псувати його. Подібна координація необхідна також і у випадку, коли один процесор намагається змінити вміст клітинки, яку хоче прочитати інший процесор. Більш докладно ці проблеми обговорюються в гл. І. У гл.21 при описі операційної системи MVS, обраної в якості одного з прикладів для ілюстрації, пояснюється, яким чином реалізується мультипроцесорний режим у великих машинах фірми IBM. Упорядкування доступу необхідно також і для однопроцесорних машин. Докладно ця проблема розглядається в гл. 3, 4 і 5.
2.2.15 Прямий доступ до пам'яті
Одним із способів досягнення високої продуктивності обчислювальних машин є мінімізація кількості переривань, що відбуваються в процесі виконання програми. Розроблений для цього спосіб прямого доступу до пам'яті (ПДП) вимагає лише одного переривання на кожен блок символів, які передаються під час операції введення-виведення. Завдяки цьому обмін даними виробляється значно швидше, ніж у випадку, коли процесор переривається при передачі кожного символу.
Після початку операції введення-виведення символи передаються в основну пам'ять за принципом захоплення циклу - канал захоплює шину зв'язку процесора з основною пам'яттю на короткий час передачі одного символу, після чого процесор продовжує роботу.
Коли зовнішній пристрій виявляється готовим до передачі чергового символу блоку, воно «перериває» процесор. Однак у випадку ПДП стан процесора запам'ятовувати не потрібно, оскільки передача одного символу означає для процесора швидше затримку, або призупинення, ніж звичайне переривання. Символ передається в основну пам'ять під управлінням спеціальних апаратних засобів, а після завершення передачі процесор відновлює роботу.
ПДП-це засіб підвищення продуктивності, особливо необхідний для систем, в яких виконуються дуже великі обсяги операцій введення-виведення. Апаратні засоби, що забезпечують захоплення циклів пам'яті і керування пристроями введення-виведення в режимі ПДП, називаються каналом прямого доступу до пам'яті.
2.2.16 конвейеризация
Конвейеризация - це апаратний спосіб, який застосовується у високопродуктивних обчислювальних машинах з метою використання певних типів паралелізму для підвищення ефективності обробки команд. Спрощено структуру конвеєрного процесора можна уявити дуже схожою на технологічну лінію виробничого підприємства; на конвеєрі процесора на різних стадіях виконання одночасно можуть перебувати
кілька команд. Таке поєднання вимагає дещо більшого обсягу апаратури, проте дозволяє істотно скоротити загальний час виконання послідовності команд.
2.2.17 Ієрархія пам'яті
Сучасні обчислювальні машини містять кілька видів пам'яті, в тому числі основну (первинну, оперативну), зовнішню (вторинну, масову) і кеш-пам'ять. В основній пам'яті повинні розміщатися команди і дані, до яких буде звертатися працююча програма. Зовнішня пам'ять - це магнітні стрічки, диски, карти та інші носії, призначені для зберігання інформації, яка з часом буде записана в основну пам'ять. Кеш-пам'ять - це буферна пам'ять дуже високої швидкодії, призначена для підвищення швидкості виконання працюючих програм; для програм користувача ця пам'ять, як правило, «прозора». В обчислювальних машинах, оснащених кеш-пам'яттю, поточна частина програми поміщається в кешпамять, що дозволяє виконувати її набагато швидше, ніж якщо б вона перебувала в основній пам'яті. Всі ці види пам'яті створюють єдину ієрархію пам'яті; перехід за рівнями цієї ієрархії від кеш-пам'яті до основної і потім до зовнішньої пам'яті супроводжується зменшенням вартості та швидкості і збільшенням ємності пам'яті. Пам'ять, як правило, поділяється на байти (символи) або слова (що складаються з постійної кількості байтів). Кожна комірка пам'яті має свою адресу; безліч адрес, доступних програмі, називається адресним простором.
2.3 Програмне забезпечення
Програмне забезпечення - це програми, які містять команди і дані і визначають для апаратних засобів алгоритми розв'язання задач. Існує дуже багато різних мов програмування.
2.3.1 Програмування на машинному мовою
Машинний мова - це мова програмування, безпосередньо сприйманий комп'ютером. Кожна команда машинної мови інтерпретується апаратурою, яка виконує зазначені функції. Команди машинного мови в принципі є досить примітивними. Тільки відповідне об'єднання цих команд в програми на машинній мові дає можливість описувати досить серйозні алгоритми. Набори команд машинної мови сучасних комп'ютерів часто включають деякі дуже ефективні можливості (див, наприклад, опис мінікомп'ютерів VAX в гол. 19).
Кажуть, що машинна мова є машинно-залежним: програма, написана на машинній мові комп'ютера одного типу, як правило, не може виконуватися на комп'ютері іншого типу, якщо його машинний мова не ідентичний машинному мови першого комп'ютера (або не є розширенням по відношенню до цього мови). Ще однією ознакою машинної, або апаратної, залежності є характер самих команд: у командах машинної мови вказуються найменування конкретних регістрів комп'ютера і передбачається обробка даних в тій фізичній формі, в якій вони існують в цьому комп'ютері. Більшість перших комп'ютерів програмувались безпосередньо на машинній мові, а в даний час на машинній мові пишеться лише дуже невелике число програм.
2.3.2 Асемблер і Макропорцесори
Програмування на машинному мові вимагає дуже багато часу і значною кількістю помилок. Тому були розроблені мови ассемблерного типу, що дозволяють підвищити швидкість процесу програмування і зменшити кількість помилок кодування. Замість чисел, використовуваних при написанні програм на машинних мовах, у мовах ассемблерного типу застосовуються змістовні мнемонічні скорочення і слова природної мови. Однак комп'ютери не можуть безпосередньо сприйняти програму на мові асемблера, тому її необхідно спочатку перевести на машинну мову. Такий переклад здійснюється за допомогою програми-транслятора, званої асемблером.
Мови ассемблерного типу також є машинно-залежними. Їхні команди прямо і однозначно відповідають командам програми на машинній мові. Щоб прискорити процес кодування програми на мові асемблера, були розроблені і включені в асемблери так звані Макропорцесори. Програміст пише макрокоманду як вказівка ​​необхідності виконати дію, що описується кількома командами на мові асемблера. Коли макропроцесор під час трансляції програми читає макрокоманду, він виробляє макрорасшіренія - тобто генерує ряд команд мови асемблера, що відповідають даної макрокоманді, Таким чином, процес програмування значно прискорюється, оскільки програмісту доводиться писати менше число команд для визначення того ж самого алгоритму.
2.3.3 Компілятори
Тенденція до підвищення обчислювальної потужності команд призвела до розробки деяких дуже ефективних Макропорцесори і макромов, що спрощують програмування на мові асемблера. Однак розвиток асемблерів шляхом введення Макропорцесори не вирішує проблеми машинної залежності. У зв'язку з цим були розроблені мови високого рівня.
Мови високого рівня відкривають можливість машинно-незалежного програмування. Більшості користувачів комп'ютер потрібен тільки як засіб реалізації прикладних систем. Мови високого рівня дозволяють користувачам займатися переважно завданнями, специфічними для їх конкретних прикладних областей, не вникаючи в особливості застосовуваних ними машин. Завдяки цьому істотно підвищується швидкість процесу програмування, забезпечується обмін програмами між машинами різних типів, і в людей з'являється можливість розробляти ефективні прикладні системи, не витрачаючи часу і сил на повне вивчення внутрішньої структури машини.
Переклад з мов високого рівня на машинну мову здійснюється за допомогою програм, званих компіляторами. Компілятори і асемблери мають загальну назву «. Транслятори». Написана користувачем програма, яка в процесі трансляції надходить на вхід транслятора, називається вихідною програмою, а програма на машинній мові, що генерується транслятором, називається об'єктним кодом або вихідний (цільової) програмою.

2.3.4 Система управління введенням-виводом (IOCS)
Детальні канальні програми, необхідні для керування введенням-виводом, і різні підпрограми для координації роботи каналів та процесорів є досить складними. Створення супервизорного програми, яка враховує всі складності виконання операцій введення-виведення, звільняє прикладного програміста від необхідності самому писати подібні програми. Така супервизорного програма носить назву системи керування введенням-виведенням (IOCS).
У 50-х роках користувачі зазвичай включали вихідний код IOCS в свої програми на мові асемблера. Пакет IOCS, вже написаний і налагоджений, фактично ассембліровался щоразу заново як частину кожної індивідуальної програми, що призводило до значного збільшення часу трансляції. Тому на багатьох машинах, як правило, використовувалися готові, заздалегідь ассемблірованние програми IOCS. Програміст, що працює на мові асемблера, писав оператори з посиланнями на місця розташування ключових програм у готовому коді IOCS.
Ще одна проблема використання концепції IOCS була пов'язана з тим, що повний пакет програм IOCS часто займав значну частку основної пам'яті, залишаючи мало місця для коду прикладних програм користувача. Тому деякі користувачі займали в пам'яті місце не потрібних їм модулів пакета IOCS своїми програмами. Інші користувачі розробляли свої власні, більш компактні пакети. Проте врешті-решт користувачі зрозуміли, що саме раціональне - це надати системі IOCS можливість виконувати всі функції з управління введенням-виведенням, і були просто змушені збільшувати обсяги (дорогої) основної пам'яті своїх обчислювальних машин. Такий підхід став по суті стандартним - і операційні системи почали включати все більше і більше машинно-орієнтованих програм, так що розробники прикладних систем змогли сконцентрувати свої зусилля на створенні програм прикладного характеру. Це призвело до того, що операційним системам потрібні були великі ємності основної пам'яті. На щастя, вартість пристроїв основної пам'яті постійно знижується.
2.3.5 спулінг
При спулінг (введенні-виведенні з буферизацією) посередником між працюючою програмою і низькошвидкісних пристроєм, що забезпечує введення-виведення даних для цієї програми, стає автоматичний пристрій, наприклад дисковий накопичувач. Замість висновку рядків даних безпосередньо, скажімо, на порядково друкуючий пристрій програма записує їх на диск. Завдяки цьому поточна програма може швидше завершитися, з тим щоб інші програми могли швидше почати працювати. А записані на диск рядка даних можна, роздрукувати пізніше, коли звільниться принтер. Для цієї процедури назву «спулінг» дуже підходить, оскільки вона нагадує намотування нитки на котушку, з тим щоб її можна було при необхідності розмотати.
2.3.6 Процедурно-орієнтовані і проблемно-орієнтовані мови
Мови високого рівня бувають або процедурно-орієнтованими, або проблемно-орієнтованими. Процедурно-орієнтовані мови високого рівня - це універсальні мови програмування, які можна використовувати для вирішення найрізноманітніших завдань. Проблемно-орієнтовані мови призначаються спеціально для вирішення завдань конкретних типів. Такі мови, як Паскаль, Кобол, Фортран, Бейсик та ПЛ / 1 зазвичай вважаються процедурно-орієнтованими, а такі мови, як GPSS (мова моделювання) та SPSS (мова для виконання статистичних обчислень), - проблемно-орієнтованими. 1)
2.3.7 Швидкі компілятори без оптимізації і оптимізують компілятори
Коли програми розробляються і налагоджуються, компіляції виробляються часто, а виконуються програми зазвичай недовго - поки не виявиться чергова помилка. У цих умовах цілком прийнятні швидкі компілятори без оптимізації. Вони дозволяють швидко отримати об'єктну програму, однак її код може виявитися абсолютно неефективним з точки зору як займаної пам'яті, так і швидкості виконання. Після того як програма налагоджена й готова для виробничої експлуатації, за допомогою оптимизирующего компілятора для неї генерується ефективний машинний код. Оптимізуючий компілятор працює набагато повільніше, проте забезпечує отримання об'єктного коду дуже високої якості.
У 70-х роках панувала думка про те, що хороший програміст, який працює на мові асемблера, може створити набагато кращий код програми, ніж оптимізуючий компілятор, В даний час оптимізують компілятори настільки ефективні, що генерується ними код за якістю не поступається або навіть перевершує код , створений висококваліфікованим програмістом на мові асемблера. Завдяки цьому програми, які повинні бути виключно ефективними (наприклад, операційні системи), більше не доводиться писати на мові асемблера. Сьогодні великі операційні системи в більшості випадків пишуться на мовах високого рівня і за допомогою оптимізують компіляторів дуже високої якості транслюються в ефективний машинний код.
2.3.8 Інтерпретатори
Існує один цікавий і розповсюджений вид трансляторів, інтерпретатори, які не генерують об'єктну програму, а фактично забезпечують безпосереднє виконання вихідної програми. Інтерпретатори особливо поширені в системах проектування програм, де програми йдуть, як правило, лише невеликий час до моменту виявлення чергової помилки. Інтерпретатори поширені також у сфері персональних комп'ютерів. Вони вільні від накладних витрат, властивих ассемблирования або компіляції. Однак виконання програми в режимі інтерпретації йде повільно в порівнянні з скомпільовані кодом, оскільки інтерпретаторам треба транслювати кожну команду при кожному її виконанні.
2.3.9 Абсолютні і переміщують завантажувачі
Програми для виконання повинні розміщуватися в основній пам'яті. Розподіл команд та елементів даних по конкретних осередкам основної пам'яті є винятково важливим завданням. Вирішення цього завдання іноді здійснює сам користувач, іноді транслятор, іноді системна програма, яка називається завантажувачем, а іноді - операційна система. Зіставлення команд та елементів даних з конкретними елементами пам'яті називається прив'язкою до пам'яті. При програмуванні на машинній мові прив'язка до пам'яті проводиться в момент кодування. Вже давно спостерігається тенденція відкладати прив'язку програми до пам'яті на якомога пізніший термін, і в сучасних системах віртуальної пам'яті прив'язка здійснюється динамічно в процесі виконання програми. Відстрочка прив'язки програми до пам'яті забезпечує збільшення гнучкості як для користувача, так і для системи, однак це пов'язано з істотним підвищенням складності трансляторів, завантажувачів, апаратних засобів і операційних систем.
Завантажувач - це системна програма, яка розміщує команди і дані програми в осередках основної пам'яті. Абсолютний завантажувач розміщує ці елементи саме в ті осередки, адреси яких вказано в програмі на машинній мові. Переміщає завантажувач може завантажувати програму в різні місця основної пам'яті в залежності, наприклад , від наявності вільного ділянки основної пам'яті в момент завантаження (зване часом завантаження).
2.3.10 Зв'язуючі завантажувачі і редактори зв'язків
У перших обчислювальних машинах програміст писав на машинній мові програму, яка містила всі команди, необхідні для вирішення конкретного завдання. Навіть складні і в певному сенсі небезпечні процедури керування введенням-виведенням в кожній програмі на машинній мові доводилося кодувати вручну.
В даний час програми користувача найчастіше містять лише незначну частину команд і даних, необхідних для вирішення поставленого завдання. У складі системного програмного забезпечення поставляються великі бібліотеки підпрограм, так що програміст, якому необхідно виконувати певні стандартні операції, може скористатися для цього готовими підпрограмами. Зокрема, операції вводу-виводу зазвичай виконуються підпрограмами, що знаходяться поза програмою користувача. Тому програму на машинній мові, отриману в результаті трансляції, доводиться, як правило, комбінувати з іншими програмами на машинній мові, щоб сформувати необхідний виконуваний модуль. Цю процедуру об'єднання програм виконують зв'язують завантажувачі і редактори зв'язків до початку виконання програми.
Зв'язуючий завантажувач під час завантаження об'єднує необхідні програми і завантажує їх безпосередньо в основну пам'ять. Редактор зв'язків також здійснює подібне об'єднання програм, проте він створює завантажувальний модуль, який записується в зовнішню пам'ять для майбутнього використання. Редактор зв'язків відіграє особливо важливу роль для виробничих систем; коли програму необхідно виконувати, її завантажувальний модуль, сформований за допомогою редактора зв'язків, може бути завантажений негайно - без накладних витрат часу (часто дуже великих) на повторне об'єднання окремих частин програми.
2.4 Мікропрограми
Прийнято вважати, що автором концепції мікропрограмування є професор Моріс Уїлкс. У своїй статті в 1951 р. (Wi 51) він запропонував принципи, які лягли в основу сучасних методів мікропрограмування. Проте початок реального впровадження мікропрограмування пов'язано з появою System/360 в середині 60-х років. Протягом 60-х років виробники комп'ютерів застосовували мікропрограмування для реалізації наборів команд машинної мови (Ні 70).
В кінці 60-х - початку 70-х років з'явилося динамічне мікропрограмування, що передбачає можливість легкої завантаження нових мікропрограмних модулів в керуючу пам'ять, що служить для виконання мікропрограм. Завдяки цьому стало можливим динамічно і часто міняти набори команд обчислювальної машини. І зараз вже нікого не здивує, якщо в мультипрограмних системах нових поколінь будуть передбачатися можливість надання різних наборів команд різним користувачам, з тим щоб в процесі перемикання процесора з програми на програму можна було також здійснювати перехід з одного набору машинних команд на інший, необхідний наступного користувачеві .
Мікропрограмування вводить додатковий рівень засобів програмування, нижележащий по відношенню до машинного мови комп'ютера, і тим самим воно дозволяє визначати конкретні команди машинної мови. Подібні можливості є невід'ємною частиною архітектури сучасних комп'ютерів і мають величезне значення з точки зору забезпечення високих швидкісних характеристик і захисту операційних систем.
Мікропрограми розміщуються в спеціальній керуючої пам'яті дуже високої швидкодії. Вони складаються з індивідуальних мікрокоманд, які набагато більш елементарні за своєю природою і більш розосереджені по функціях, ніж звичайні команди машинної мови. У комп'ютерах, де набір команд машинної мови реалізується за допомогою мікропрограмування, кожній команді машинного мови відповідає ціла і,. Можливо, велика мікропрограма, / Тим самим відразу ж стає очевидним, що мікропрограмування виявиться ефективним тільки в тому випадку, якщо керуюча пам'ять буде володіти набагато більшу швидкодію; ніж основна.
2.4.1 Горизонтальний і вертикальний мікрокод
Команди мікрокоду можна розділити на горизонтальні і вертикальні. Виконання вертикальних мікрокоманд дуже схоже на виконання звичайних команд машинної мови. Типова вертикальна мікрокоманда задає пересилання одного або декількох елементів даних між регістрами.
Горизонтальний мікрокод діє зовсім по-іншому. Кожна його команда містить набагато більше число біт, оскільки може задавати паралельну операцію пересилання даних для багатьох і навіть всіх регістрів даних пристрою керування. Горизонтальні мікрокоманд є більш потужними, ніж вертикальні, однак може виявитися, що відповідні мікропрограми набагато складніше кодувати й налагоджувати.
2.4.2 Вибір функцій для мікропрограмного реалізації
Для розробника дуже важливо правильно вирішити, які саме функції обчислювальної машини реалізувати за допомогою мікрокоду. Мікрокод надає реальну можливість підвищити швидкодію обчислювальної машини. Реалізуючи часто використовувані послідовності команд мікропрограмне, а не звичайним програмним способом, розробники добиваються істотного підвищення показників швидкодії. Читачам, які будуть знайомитися з функціями операційних систем у міру опрацювання цієї книги, рекомендується ретельно аналізувати, для реалізації яких з цих функцій може бути ефективно використаний мікрокод.
2.4.3 Емуляція
Емуляція - метод, що дозволяє зробити одну обчислювальну машину функціональним еквівалентом іншої. Набір команд машинної мови емульованого комп'ютера мікропрограмміруется на емулює комп'ютері - і завдяки цьому програми, представлені на машинному мові першого комп'ютера, можуть безпосередньо виконуватися на другому. Фірми-розробники комп'ютерів широко застосовують емуляцію при впровадженні нових машин, і користувачі, прив'язані до старих комп'ютерів, отримують, наприклад, можливість без будь-яких змін виконувати свої раніше налагоджені програми на нових машинах. Тим самим процес переходу з машини на машину стає менш складним і хворобливим.
2.4.4 Мікродіагностіка
Мікропрограми значно тісніше пов'язані з апаратурою, ніж програми, написані на машинній мові. Завдяки цьому з'являється можливість в набагато більш широких масштабах здійснювати контроль і виправлення помилок, причому виконувати ці операції з більшим ступенем деталізації. В деякі машини вводяться кошти мікродіагностікі, «переплітаються» з командами програм на машинній мові. Це дозволяє уникнути багатьох потенційних проблем і підвищити надійність роботи машини.
2.4.5 Спеціалізовані комп'ютери
Оскільки розробка, виробництво і організація збуту обчислювальної машини обходиться дорого, фірми-виробники зосереджують свої зусилля зазвичай на випуску машин та устатковання загального призначення. Величезні капітальні вкладення, без яких неможливе створення нової машини, вимагають великих обсягів збуту, оскільки тільки в цьому випадку можна буде відшкодувати витрати і отримати необхідні прибутку. Тому промислові фірми зазвичай намагаються не виготовляти спеціалізованих, єдиних у своєму роді машин; цим займаються університети, в яких подібні машини створюються головним чином для виконання наукових досліджень.
У зв'язку з цим користувачам комп'ютерів доводиться вирішувати проблему спеціалізації своїх машин стосовно до власних конкретним вимогам; така спеціалізація традиційно здійснюється за допомогою відповідного програмного забезпечення. Апаратура машини являє собою певну універсальну середовище для виконання системних програм, за допомогою яких машина пристосовується до конкретних потреб користувачів.
У деяких машинах подібну спеціалізацію користувачі можуть здійснювати за допомогою мікрокоду. При цьому вони можуть або застосувати мікрокод, що поставляється фірмою-виробником, або написати власний мікрокод; зараз широко поширені обидва ці підходи.
2.4.6 мікропрограмна підтримка
Фірми-виробники найчастіше за окремим замовленням поставляють факультативні мікрокодовие засоби, що забезпечують підвищення продуктивності обчислювальних машин. Фірмі IBM вдалося досить успішно зробити це для своїх комп'ютерів сімейства System/370 в рамках операційної системи VM (див. гл. 22). Як буде показано при описі цієї операційної системи в гол. 22, вона реалізує концепцію багатьох віртуальних машин завдяки ефективному використанню механізму переривань. Для цього ряд найбільш часто використовуваних програм обробки переривань реалізується мікрокодом; така мікропрограмна підтримка дозволяє досягти суттєвого підвищення швидкісних характеристик.
2.4.7 мікропрограмування і операційні системи
До числа найбільш часто виконуваних послідовностей команд в більшості обчислювальних машин належать певні частини операційної системи. Наприклад, в системі з діалогової обробкою транзакцій є механізм диспетчирування, що забезпечує вибір черговий одиниці роботи, яку повинен буде виконувати процесор; оскільки подібний механізм диспетчирування може діяти сотні разів на секунду, він повинен працювати дуже ефективно, і одним із способів зробити його більш високошвидкісним і ефективним є саме мікрокодовая реалізація.
До числа функцій, найчастіше реалізуються за допомогою мікрокоду, належать такі:
· Обробка переривань;
· Управління різними типами структур даних;
· Примітиви синхронізації, координуючі доступ до загальних даних та інших ресурсів;
· Операції обробки частин слова, що дозволяють ефективно виконувати маніпуляції з бітами;
· Перемикання контексту, тобто швидкі перемикання процесора з програми на програму в Многоабонентскіе системі;
· Послідовності виклику процедур і повернення.
Реалізація функцій операційних систем за допомогою мікрокоду дозволяє підвищити ефективність і швидкісні характеристики, знизити витрати на розробку програм і забезпечити більш надійний захист систем (див. гл. 17).
Читачам, що бажають більш детально познайомитися з застосуванням мікропрограмування в операційних системах, рекомендується звернутися до робіт (Br77), (Bu81) і (So75).
2.4.8 Приклад мікропрограмування
У цьому розділі розглядається невелика гіпотетична мікропрограмміруемая обчислювальна машина. Наша мета полягає в тому, щоб спробувати передати певні нюанси мікропрограмування і, зокрема, показати, яким чином воно може використовуватися для реалізації набору команд машинної мови комп'ютера. В основу цього розділу покладено приклад, який представили Роше і Адамі в своїй відмінній статті для тих, хто вивчає мікропрограмування (Ra80).
Простий гіпотетичний невеликий комп'ютер ITSIAC має набір команд машинної мови, показаний на рис. 2.1.
Комп'ютер ITSIAC має накопичує регістр-акумулятор АКК, який бере участь у виконанні всіх арифметичних операцій. Кожна команда машинного мови містить два поля
Команда
Опис
ADD (Скласти)
АКК (АКК + (А)
SUB (Відняти)
АКК (АКК - (А)
LOAD (Завантажити)
АКК ((А)
STORE (Записати)
(А) (АКК
BRANCH (Перехід)
Перехід на А
COND BRANCH (Умовний перехід)
Якщо АКК = 0, то перехід на А
по 8 біт - код операції (КОП) і адреса пам'яті А. До складу процесора входить арифметико-логічний пристрій (АЛП) для виконання деяких арифметичних дій. Регістри комп'ютера ITSIAC та їх функції показані на рис. 2.2.
Регістр
Функція
АКК
Акумулятор. Цей накопичує регістр бере участь у виконанні всіх арифметичних операцій. При виконанні кожної арифметичної операції один з операндів має перебувати в акумуляторі, а інший - в основній пам'яті.
РАКОП
Регістр адреси команди основної пам'яті. Цей регістр вказує клітинку основної пам'яті, де знаходиться наступна команда машинної мови, що підлягає виконанню.
РАП
Регістр адреси пам'яті. Цей регістр бере участь у всіх зверненнях до основної пам'яті. Він містить адресу комірки пам'яті, до якої виробляється звернення для читання або запису.
РДП
Регістр даних пам'яті. Цей регістр також бере участь у всіх зверненнях до основної пам'яті. Він містить дані, які записуються, або приймає дані, які зчитуються з комірки основної пам'яті, зазначеної в РАП.
РР
Робочий регістр. Цей регістр використовується для виділення поля адреси (8 біт праворуч) машинної команди, що зберігається в регістрі РДП, щоб його можна було помістити в РАП (в машині пряма пересилання даних з РДП в РАП неможлива).
РАКУП
Регістр адреси команд керуючої пам'яті. Цей регістр вказує адресу наступної мікрокоманди (у керуючої пам'яті), що підлягає виконанню.
РМК
Регістр мікрокоманди. Цей реєстр містить поточну виконувану мікрокоманду.
Машина ITSIAC працює наступним чином. Перш за все в керуючу пам'ять завантажується мікропрограма. Команда машинної мови декодується, і управління передається відповідній підпрограмі мікропрограми для її інтерпретації. Кожна команда мікропрограми займає одну клітинку керуючої пам'яті. Регістр адреси команди керуючої пам'яті РАКУП вказує на наступну виконувану мікрокоманду. Ця мікрокоманда вибирається з керуючої пам'яті і поміщається в регістр мікрокоманд РМК.
Потім вміст регістра РАКУП збільшується на 1 (тепер він вказує на наступну виконувану мікрокоманду), і весь процес повторюється. Мікропрограма приймає з регістра адреси команди основної пам'яті РАКОП адресу осередку, де зберігається наступна команда машинної мови, що підлягає інтерпретації. Після інтерпретації чергової команди машинної мови мікропрограма змінює вміст регістру РАКОП - тепер він вказує на клітинку основної пам'яті, де зберігається наступна виконувана команда машинної мови.
Декодовані мікрокоманд безпосередньо відповідають тим елементарних операцій, які можуть виконуватися апаратними засобами; вони набагато простіше, ніж команди машинного я зика
Межрегістровие передачі (РЕГ - це АКК, РАКОП або РР):
РДП ¬ РЕГ
РЕГ ¬ РДП
РАП ¬ РДП
Операції з основною пам'яттю:
READ (читання осередку основної пам'яті в РДП)
WRITE (запис РДП в клітинку основної пам'яті)
Операції керування послідовністю:
РАКУП ¬ РАКУП +1 (звичайний випадок)
РАКУП ¬ декодований РДП
РАКУП ¬ константа
SKIP (перескок, тобто додаток 2 до РАКУП, якщо АКК = 0; в іншому випадку додається 1)
Операції з участю акумулятора:
АКК ¬ АКК + РЕГ
АКК ¬ АКК - РЕГ
АКК ¬ РЕГ
РЕГ ¬ АКК
АКК ¬ РЕГ + 1
З перерахованих мікрооперацій складаються послідовності, які реалізують команди машинного мови нашої простої машини. Мікропрограма, що виконує команди машинної мови, показана на рис. 2.4. Виконання мікропрограми починається з клітинки 00, з підпрограми, яка вибирає таку виконувану команду машинної мови.
Розглянута машина з мікропрограмного управлінням працює наступним чином. Спочатку регістр РАКУП встановлюється в нуль і тим самим вказує на мікрокод підпрограми, що здійснює вибірку команди машинної мови. Наступна команда машинної мови для виконання вибирається з осередку, адреса якої знаходиться в РАКОП. Завантаження цієї команди з основної
Вибір команди:
(00) РАП ¬ РАКОП
(01) READ
(02) РАКУП ¬ декодований РДП
ADD:
(10) АКК ¬ РАКОП 4 - 1
(11) РАКОП ¬ АКК
(12) РР ¬ РДП
(13) РАП ¬ РР
(14) READ
(15) РР ¬ РДП
(16) АКК ¬ АКК + РР
(17) РАКУП ¬ 0
SUB:
(20) АКК ¬ РАКОП + 1
(21) РАКОП ¬ АКК
(22) РР ¬ РДП
(23) РАП ¬ РР
(24) READ
(25) РР ¬ РДП
(26) АКК ¬ АКК - РР
(27) РАКУП ¬ 0
LOAD:
(30) АКК ¬ РАКОП + 1
(31) РАКОП ¬ АКК
(32) РР ¬ РДП
(33) РАП ¬ РР
(34) READ
(35) РР ¬ РДП
(36) АКК ¬ РР
(37) РАКУП ¬ 0
STORE:
(40) АКК ¬ РАКОП + 1
(41) РАКОП ¬ АКК
(42) РР ¬ РДП
(43) РАП ¬ РР
(44) РДП ¬ АКК
(45) WRITE
(46) РАКУП ¬ 0
BRANCH:
(50) РАКОП ¬ РДП
(51) РАКУП ¬ 0
COND BRANCH:
(60) SKIP
(61) РАКУП ¬ 0
(62) РАКОП ¬ РДП
(63) РАКУП ¬ 0
пам'яті в регістр РДП здійснюється по команді читання READ. Команда
РАКУП (декодований РДП
встановлює в РАКУП адресу відповідної мікрокодірованние підпрограми керуючої пам'яті для інтерпретації даної команди машинної мови; при цьому просто аналізується код операції і здійснюється як би табличний пошук з використанням коду операції в якості ключа пошуку. Наступний мікрокомандний цикл викликає передачу управління на мікрокод підпрограми.
Якщо, наприклад, що інтерпретується машинна команда має вигляд
ADD 50
то потрібно вміст чарунки 50 основної пам'яті скласти з вмістом акумулятора. Розглянемо мікрокод, який виконує цю операцію.
(10) АКК ¬ РАКОП + 1
(11) РАКОП ¬ АКК
(12) РР ¬ РДП
(13) РАП ¬ РР
(14) READ
(15) РР ¬ РДП
(16) АКК ¬ АКК + РР
(17) РАКУП ¬ 0
Мікрокоманд (10) і (11) забезпечують установку в РАКОП адреси наступної по порядку осередку основної пам'яті. Мікрокоманд (12) і (13) виділяють адресу основної пам'яті команди, що знаходиться в РДП, і передають його в РАП. (Дві мікрокоманд з використанням РР для цього необхідні знову-таки тому, що машина не дозволяє проводити безпосередню передачу вмісту РДП в РАП.) Після виконання мікрокоманд (13) у РАП виявляється адресу чарунки 50. Команда читання READ (14) викликає завантаження вмісту клітинки, зазначеної в РАП, до реєстру РДП. За командою (15) ці дані заносяться в РР, а по команді (16) - підсумовуються з вмістом акумулятора. Команда (17) встановлює в РАКУП нульової адресу підпрограми вибірки мікрокоманд, так що наступний мікрокомандний цикл почне процес вибірки наступної команди машинної мови для виконання.

Висновок
Апаратура - це пристрої обчислювальної машини. Програмне забезпечення складають команди, що інтерпретуються апаратурою, а мікропрограми включають мікрокодірованние команди, що розміщуються в високошвидкісний керуючої пам'яті.
Розшарування пам'яті забезпечує можливість одночасного доступу до послідовним осередкам основної пам'яті, оскільки осередки з сусідніми адресами розміщуються, до різних модулях пам'яті. Механізм переривань грає важливу роль для режимів роботи, при яких багато операцій можуть виконуватися асинхронно, але в певних випадках вимагають синхронізації. Буферизація з кількома буферами дозволяє ефективно поєднувати операції введення-виведення з обчисленнями.
Спулінг (введення-виведення з буферизацією) дозволяє відокремити працюючу програму від низькошвидкісних пристроїв введення-виведення, таких, як принтери і пристрої введення даних з перфокарт. При спулінг введення-виведення даних для програми здійснюється за допомогою високошвидкісного зовнішнього запам'ятовуючого пристрою, наприклад накопичувача на магнітних дисках, а фактичне читання або роздруківка даних проводиться в той час, коли пристрої введення перфокарт та принтери вільні. Для ізоляції користувачів один від одного в Многоабонентскіе системах необхідно передбачати захист пам'яті; захист можна реалізовувати кількома різними способами, в тому числі за допомогою граничних регістрів або ключів захисту.
Застосування стандартного інтерфейсу введення-виведення істотно спрощує підключення до машини нових зовнішніх пристроїв. Зовнішні пристрої можуть працювати під безпосереднім управлінням центрального процесора в режимі он-лайн, або автономно (оф-лайн), під управлінням окремих контролерів, незалежних від процесора. Функціонально закінчені обчислювальні машини, які виконують операції введення даних з перфокарт на магнітну стрічку, виведення даних з магнітної стрічки на друк і т. д. для більш великих машин, називаються процесорами введення-виведення, або комп'ютерами-сателітами.
Канал - спеціалізована обчислювальна машина для виконання операцій введення-виведення без участі центрального процесора. Для координації взаємодії між центральним процесором і каналом застосовується, як правило, спосіб регулярного опитування або механізм переривань. Найбільш відомі типи каналів - це селекторні, байт-мультиплексні і блок-мультиплексні канали.
Система управління введенням-виводом (IOCS) - це пакет програм, призначення якого полягає в тому, щоб звільнити користувача від необхідності детального управління введенням-виводом. Пакети IOCS є важливою частиною сучасних операційних систем.
Метод відносної адресації дає можливість працювати з дуже великим адресним простором без необхідності збільшувати розмір машинного слова; під час виконання програми всі адреси формуються шляхом додавання зміщення до вмісту базового регістра. Завдяки цьому спрощується також переміщення програм по пам'яті.
Наявність в машині декількох режимів роботи забезпечує захист програм і даних. У режимі супервізора можуть виконуватися будь-які команди (включаючи привілейовані), а в режимі завдання - тільки непривілейованих. Ці режими визначають
кордон між можливостями користувача і можливостями операційної системи. У деяких машинах передбачаються більше двох подібних режимів роботи.
Системи віртуальної пам'яті в звичайному випадку дають можливість програмам працювати з набагато більш широким діапазоном адрес, ніж адресний простір наявної основної пам'яті. Це дозволяє звільнити програміста від обмежень, пов'язаних з ємністю основної пам'яті.
Метод прямого доступу до пам'яті виключає необхідність переривати роботу центрального процесора при передачі кожного байта блоку даних під час виконання операцій введення-виведення - в цьому випадку потрібно тільки один сигнал переривання, що виробляється при завершенні передачі всього блоку. Кожен символ записується в основну пам'ять і читається з неї із захопленням циклу пам'яті - тут каналу надається пріоритет, оскільки центральний процесор може й почекати.
У архітектурах комп'ютерів високої швидкодії застосовуються конвеєри, які дозволяють поєднувати роботу декількох команд, у кожний конкретний момент часу знаходяться на різних стадіях виконання.
У сучасних обчислювальних машинах реалізується ієрархічна структура пам'яті, що включає кеш-пам'ять, основну (первинну, оперативну) пам'ять і зовнішню (вторинну, масову) пам'ять; при переході з рівня на рівень ієрархії в зазначеному порядку ємності пам'яті збільшуються, а вартість у розрахунку на байт зменшується.
Програмне забезпечення - це програми, які складаються з команд, які інтерпретуються апаратними засобами; команди визначають алгоритми, що забезпечують рішення завдань. Програми для комп'ютера можна писати на машинній мові, мові асемблера або мовами високого рівня. Програмісти рідко працюють безпосередньо на машинних мовах - програми в машинних кодах генеруються за допомогою асемблерів та компіляторів. Макропорцесори дають можливість програмістам, що працюють на мові асемблера, писати дії, які породжують багато команд на мові асемблера. Компілятори забезпечують трансляцію програм, написаних на мовах високого рівня, на машинну мову. Інтерпретатори безпосередньо виконують вихідні програми, не генеруючи при цьому об'єктні модулі.
Процедурно-орієнтовані мови є універсальними, а проблемно-орієнтовані мови спеціалізуються для ефективного вирішення завдань визначених класів. Компілятори без оптимізації працюють швидко, проте генерують-відносно неефективні коди; оптимізують компілятори дозволяють отримувати ефективні коди, але працюють набагато повільніше, ніж без оптимізації.
Абсолютні завантажувачі здійснюють завантаження програм в конкретні осередку, адреси яких зазначаються при компіляції; переміщують завантажувачі можуть розміщувати програми в різних вільних ділянках пам'яті. Прив'язка програми до пам'яті за абсолютними адресами здійснюється під час трансляції, а прив'язка переміщуються програм - під час завантаження або навіть під час виконання.
Зв'язуючі завантажувачі об'єднують окремі блоки програми, створюючи єдиний модуль, готовий до виконання; цей виконуваний модуль розміщується в основній пам'яті. Редактори зв'язків також здійснюють об'єднання програм, однак сформований ними готовий до виконання модуль записується в зовнішню пам'ять для подальшого використання.
Мікропрограмування - це написання програм, які управляють елементарними операціями апаратури; мікропрограмування грає виключно важливу роль у сучасних архітектурах комп'ютерів і операційних системах. Динамічне мікропрограмування передбачає можливість простого завантаження нових мікропрограм у керуючу пам'ять для безпосереднього виконання.
Команди вертикального мікрокоду дуже схожі на команди машинної мови; типова вертикальна мікрокоманда вказує, що необхідно виконати певну операцію з певними даними. Горизонтальний мікрокод містить команди з більш широкими можливостями - вони дозволяють задавати одночасне виконання багатьох операцій над багатьма елементами даних.
Мікропрограмування найчастіше застосовується при емуляції, дозволяючи зробити один комп'ютер функціональним еквівалентом іншого комп'ютера. Емуляція особливо необхідна і корисна в тих випадках, коли користувачам доводиться переводити свої програми з машини на машину.
Мікропрограмування дозволяє реалізувати мікродіагностіку, тобто контроль помилок з набагато більшим ступенем деталізації, ніж це можливо для команд машинної мови.
Завдяки мікропрограмування можна спеціалізувати комп'ютер стосовно до вимог конкретних користувачів. Постачальники комп'ютерів зазвичай пропонують факультативні кошти мікропрограмного підтримки, що дозволяють підвищити швидкісні характеристики; реалізація часто виконуваних послідовностей команд за допомогою мікрокоду скорочує час їх виконання. Багато функцій операційних систем в сучасних обчислювальних машинах реалізуються не звичайними програмами, а мікропрограмами, і завдяки цьому, як правило, забезпечується більш висока швидкість виконання та більш надійний захист.

Термінологія
абсолютний завантажувач (absolute loader)
автономний режим (оф-лайн) (off-line)
адресний простір (діапазон адрес) (address space)
апаратура, апаратні засоби (hardware)
асемблер (assembler)
базовий регістр, регістр бази (base register)
байт-мультиплексний канал (byte-multiplex or channel)
бібліотека підпрограм (subroutine library)
блок-мультиплексний канал (block-multiplexor channel)
швидкий компілятор без оптимізації (quick-and-dirty compiler)
буфер (buffer)
буферизація з перемиканням («триггерная» буферизація) (flip-flop buffering)
вертикальний мікрокод (vertical microcode)
віртуальна пам'ять (virtual storage)
зовнішня (вторинна, масова)
пам'ять (secondary storage)
час завантаження (load time)
вхідний, фронтальний процесор (front end processor)
вихідна, цільова програма (target program)
горизонтальний мікрокод (horizontal microcode)
готова, заздалегідь ассемблірованная IOCS (divassembled IOCS)
граничні регістри (bounds registers)
подвійна буферизація (double buffering)
двохадресна команди (two-address instructions)
завантажувальний модуль, модуль завантаження (load module)
завантажувач (loader)
захоплення циклу (пам'яті) (cycle stealing)
захист пам'яті (storage protection)
ієрархія пам'яті (storage hierarchy)
інтервальний таймер (interval timer)
інтерпретатор (interdivter)
інтерфейс вводу-виводу (I / O interface)
вихідна програма (source program)
канал (channel)
канал прямого доступу до пам'яті (DMA channel)
ключі захисту пам'яті (storage protect keys)
компілятори (compilers)
конвейеризация (pipelining)
контролер пристроїв введення-виведення (I / O device controller)
координований (упорядкований) доступ (sequentialization of access)
кеш-пам'ять (cache storage)
макрокоманда (macro instruction)
макропроцесор (macro processor)
макрорасшіренія (macro expansion)
машинно-залежний (machine-dependent)
машинно-незалежний (machine-independent)
машинний мова (machine language)
мікродіагностіка (microdiagnostics)
мікрокод (microcode)
мікрокоманда (microinstruction)
мікропрограма (microprogram)
мікропрограмування (microprogramming)
мікропрограмна підтримка (microcode assists)
мікропрограмне забезпечення (firmware)
мультиплексні канали (multiplexor channels)
мультипроцесорна обробка (multiprocessing)
об'єднання програм (program combination)
об'єктна програма (object program)
одноадресних команди (single-address instructions)
опитування (регулярний, упорядкований) (polling)
оптимізуючий компілятор (optimizing compiler)
основна (первинна, оперативна) пам'ять (primary storage)
відносна адресація, адресація «база + зсув» (base-plus-displacement addressing)
переміщувана (позиційно-незалежна) програма (location-independent program)
переміщає завантажувач (relocating loader)
щільність запису (recording density)
подканал (subchannel)
послідовне зовнішній пристрій (sequential device)
переривання по завершенню (операції) введення-виведення (I / O completion interrupt)
переривання (interrupts)
привілейовані команди (privileged instructions)
прив'язка (програми до пам'яті) (binding)
принцип мінімуму привілеїв (при наданні доступу до ресурсів та інформації) (principle of least privilege)
проблемно-орієнтований (problem-oriented)
програмне забезпечення (software)
проста (одиночна) буферизація (single buffering)
процедурно-орієнтована (procedure-oriented)
процесор вводу-виводу (stand-alone processor)
процесор-сателіт (satellite processor)
прямий доступ до пам'яті (ПДП) (Direct Memory Access, DMA)
розшарування пам'яті (інтерлівінгом) (storage interleaving)
регістр переміщення (relocation register)
редактор зв'язків (linkage editor)
режим завдання (користувача) (problem state)
режим виконання програм (execution states)
режим супервізора (supervisor state)
режим он-лайн (on-line)
зв'язуючий завантажувач (linking loader)
сегментація (segmentation)
селекторний канал (selector channel)
спулінг (введення-виведення з буферизацією) (spooling)
стандартний інтерфейс вводу-виводу (standard I / O interface)
ступінь (глибина) деталізації захисту (granularity of protection)
сторінкова організація пам'яті (paging)
система управління введенням-виводом (input-output control system IOCS)
транслятор (translator)
трехадресние команди (three-address instruction)
керуюча пам'ять (control storage)
пристрій прямого (безпосереднього) доступу (direct access device)
годинник істинного (реального, календарного) часу (time-of-day clock)
емулятор (emulator)
емуляція (emulation)
мова асемблера, мова ассемблерного типу (assembly language)
DMA
IOCS

Вправи
2.1 Вкажіть відмінності між апаратурою, програмним забезпеченням і мікропрограмами.
2.2 Поясніть, в чому полягає концепція розшарування пам'яті.
2.3 Що таке подвійна буферизація? Докладно опишіть, яким чином могла б працювати схема потрійний буферизації. За яких умов могла б бути доцільною потрійна буферизація?
2.4 Що таке спулінг? Як повинна працювати система вхідного спулінга, призначена для читання перфокарт з пристрою введення?
2.5 Поясніть, що таке «прямий доступ до пам'яті» і «захоплення циклу».
2.6 Опишіть кілька способів реалізації захисту пам'яті.
2.7 Опишіть два різні способи організації взаємодії між центральним процесором і каналом.
2.8 Наведіть кілька причин, що зумовили появу концепції відносної адресації.
2.9 Зіставте принцип мінімуму привілеїв з такими концепціями, як режим завдання, режим супервізора і привілейовані команди.
2.10 Вкажіть відмінності між селекторними, байт-мультиплексний та блок-мультиплексний каналами.
2.11 Вкажіть відмінності між машинною мовою, мовою асемблера і мовами високого рівня.
2.12 Що таке макропроцесор?
2.13 Вкажіть відмінності між проблемно-орієнтованими і процедурно-орієнтованими мовами.
2.14 За яких обставин доцільно використовувати швидкий компілятор без оптимізації? Коли слід застосовувати оптимізуючий компілятор?
2.15 Чим інтерпретатори відрізняються від асемблерів і компіляторів? Коли більш доцільно використовувати інтерпретатор, ніж компілятор?
2.16 Вкажіть подібності та відмінності абсолютних завантажувачів і переміщають завантажувачів.
2.17 Що таке «прив'язка програми до пам'яті»? Чому і в користувача і у системи з'являються більш гнучкі можливості, якщо прив'язку програм до пам'яті виконувати як можна пізніше?
2.18 Чим редактори зв'язків відрізняються від зв'язують завантажувачів?
2.19 Що таке мікропрограмування? Чому термін «мікропрограмне забезпечення» доречний для позначення мікрокоду, резидентно розміщається в керуючій пам'яті?
2.20 Вкажіть відмінності між горизонтальним і вертикальним мікрокодом.
2.21 Які фактори можуть вплинути на рішення розробника вибрати ті чи інші функції для реалізації за допомогою мікрокоду?
2.22 Що таке емуляція? Чому мікропрограмування грає особливо важливу роль при побудові емуляторів?
2.23 Поясніть, яким чином може бути використано мікропрограмування для спеціалізації комп'ютера. Чому це може забезпечити високу ефективність?
2.24 Поясніть, чому розуміння особливостей мікропрограмування має таке велике значення для розробників операційних систем.
Вправи для прикладу мікропрограмування (п. 2.4.8)
2.25 Напишіть для комп'ютера ITSIAC програму на машинній мові, яка буде підсумовувати числа, що зберігаються в комірках з 50 по 99, і поміщати результат в клітинку 100. Прослідкуйте виконання цієї програми в режимі інтерпретації за допомогою вбудованого комп'ютера ITSIAC, наведеної в тексті.
2.26 Напишіть на мові високого рівня програму для моделювання роботи комп'ютера ITSIAC. Для моделювання основної пам'яті використовуйте матрицю з 256 елементів. Кожне слово пам'яті має довжину 16 біт. Різні регістри, в тому числі АКК, РАКОП, РАП, РДП, РР, РАКУП і РМК, уявіть за допомогою змінних. Для реалізації кожної мікрооперації використовуйте оператори мови високого рівня. Наприклад, складання вмісту робочого регістра РР і акумулятора АКК можна здійснити за допомогою оператора на мові Паскаль
АКК: = АКК + РР
Введіть додаткову команду зупину HALT, що забезпечує роздруківку вмісту всіх регістрів і всіх елементів пам'яті комп'ютера ITSIAC, а потім завершального повідомлення «EOJ» (кінець завдання). На своїй моделі комп'ютера ITSIAC виконайте програму, яку ви написали в упр. 2.25.

Література
(Ва80)
Baer J. b., Computer Systems Architecture, Rockville, Md.i Computer Science Press, 1980.
(Be81)
Belady LA, Parmelee RP, Scalzi CA, "The IBM History of Memory Management Technology", IBM J. Res. Develop., Vol. 25, No 5, September 1981, pp. 491-503.
(Br77)
Brown GE, et al., "Operating System Enhancement through Firmware". SIGMICRO Newsletter, Vol. 8, September 1977, pp. 119-133.
(Bs81)
Bashe CJ, Buchholtz W., Hawkins GV, Ingram JJ, Rochester N., "The Architecture of IBM's Early Computers", IBM J. Res. Develop., Vol. 25, No. 5, September 1981, pp. 363-375.
(Bu81)
Bucci G., Neri G., Baldassarri F., "MP80: A Microprogrammed CPU with a Microcoded Operating System Kernel", Computer, October 1981, pp. 81-90.
(Ca80)
Campbell-Kelley M., "Programming the EDSAC". Annals of the History of Computing, Vol. 2, 1980, pp. 7-36.
(Da78)
Davidson S., Shriver BD, "An Overview of Firmware Engineering", Computer, May 1978, pp. 21-31.
(1182)
Iliffe J. K-, Advanced Computer Design, Englewood Cliffs, NJs Prentice-Hall, 1982.
(Ka73)
Kaplan K. R-, Winder RO, "Cache-Based Computer Systems", Computer. Vol. 6, No. 3, 1973, pp. 30-36.
(Ko77)
Kogge PM, "The Microprogramming of Pipelined Processors", Proa, Fourth Annual Symposium on Computer Architecture, March 1977, pp. 63-69.
(Le80)
Levy HM, Eckhouse RH, Jr., Computer Programming and Architecture: The VAX-ll, Bedford, Mass.: Digital Press, Digital Equipment Corporation, 1980.
(Lo80)
Love HH, Jr. "The Highly Parallel Supercomputers: Definitions, Applications, and Predictions", Proc. NCC, 1980, pp. 181-190.
(Ma75)
Mallach EG, "Emulator Architecture", Computer, Vol. 8, August 1975, pp. 24-32.
(Pa81)
Padegs A, "System/360 and Beyond", IBM J. Res. Develop., Vol. 25, No. 5, September 1981, pp. 377-390.
(Ph80)
Phelps В. Є., "Early Electronic Computer Developments at IBM", Annals of the History of Computing, Vol. 2, 1980, pp. 253-267.
(Po81)
Pohm AV, Smay TA, "Computer Memory Systems", Computer, October 1981, pp. 93-110.
(Ra76)
Rauscher TG, Agrawala AK, "Developing Application-Oriented Computer Architectures on General-Purpose Microprogrammable Machines", Proc. of 1976 NCC, Montvale, NJ: AFIPS Press, pp. 715-722.
(Ra78)
Rauscher TG, Agrawala AK, "Dynamic Problem-Oriented Redefinition of Computer Architecture via Microprogramming", IEEE Trans, on Computers, Vol. C-27, November 1978, pp. 1006-1014.
(Ra80)
Rauscher TG, Adams PN, "Microprogramming: A Tutorial and Survey of Recent Developments", IEEE Trans, on Computers, Vol. C-29, No. 1, January 1980, pp. 2-20.
(So75)
Sockut GH, "Firmware / Hardware Support for Operating Systems; Principles and Selected History", SIGMICRO Newsletter, Vol. 6, December 1975, pp. 17-26.
(St81)
Stankovic JA, "The Types and Interactions of Vertical Migrations of Functions ma Multilevel Interdivtive System", IEEE Trans, on Com. ' puters, Vol. C-30, No. 7, July 1981, pp. 505-513.
(Tu65)
Tucker SG, "Emulation of Large Systems", С ACM, Vol. 8, 1965, pp. 753-761.
(Wi51)
Wilkes MV, The Best Way to Design on Automatic Calculating Machine, Report of the Manchester University Computer Inaugural Conference, Electrical Engineering Department of Manchester University, Manchester, England, July, 1951, pp. 16 - 18. Reprinted in Earl E. Swartzlander, 'Jr. (Ed.), Computer Design Development - Principal Papers, Rochelle Park, NJ: Hayden Book Co., 1976, pp. 266-270.
(Wi69)
Wilkes MV, "The Growth of Interest in Microprogramming: A Literature Survey", Comput. Surveys, Vol. 1, No. 3, September 1969, pp. 139 - 145.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Книга
154.2кб. | скачати


Схожі роботи:
Програмне забезпечення ПК Cистемне програмне забезпечення
Програмне забезпечення ПК
Програмне забезпечення ПК 2
Програмне забезпечення
Програмне забезпечення
Прикладне програмне забезпечення
Системне програмне забезпечення
Системне програмне забезпечення
Системне програмне забезпечення С
© Усі права захищені
написати до нас