- •1.2. Алгоритм
- •1.3. Предмет науки програмування
- •1.4. Застосування мов програмування
- •1.5. Стандартизація мов програмування
- •1.6. Середовище розробки
- •1.7. Тестування і верифікація програм
- •Лекція 2. Алгоритми і обчислення
- •2.1. Алгоритми
- •2.2. Обчислювальні машини
- •2.3. Основи фон-нейманівської архітектури
- •Лекція 3. Парадигми програмування
- •3.1. Базові парадигми програмування
- •Процедурне програмування
- •Абстрактна семантика процедурних програм.
- •Денотаційна семантика.
- •Операційна семантика
- •Структурність і модульність
- •3. 3. Модульне програмування
- •3.4. Об’єктно-орієнтовне програмування
- •3.5. Функціональне програмування
- •3.6. Логічне програмування
- •3.6. Алгебраїчна парадигма
- •Висновок
- •Лекція 4. Огляд основних мов програмування
- •4.1. Мова Picmkalkul Конрада Цузе
- •4.1.1. Історичні передумови
- •4.1.2. Огляд мови
- •4.2. Мінімальне програмування на апаратному рівні: псевдокоди
- •4.2.1. Мова Short Code
- •4.2.2. Система Speedcoding
- •4.2.3. Система "компіляції" univac
- •4.2.4. Суміжна робота
- •4.3. Комп'ютер ibm 704 і мова fortran
- •4.3.1. Історична ретроспектива
- •4.3.2. Процес розробки
- •4.3.3. Огляд мови fortran I
- •4.3.4. Огляд мови fortran II
- •4.3.5. Мови fortran IV, fortran 77 і fortran 90
- •4.4. Функціональне програмування: мова lisp
- •4.4.1. Витоки робіт в області штучного інтелекту та обробка списків
- •4.4.2. Процес розробки мови lisp
- •4.4.3. Огляд мови
- •4.4.5. Два нащадки мови lisp
- •4.4.6. Споріднені мови
- •4.5. Перший крок до удосконалення: мова algol 60
- •4.5.1. Історична ретроспектива
- •4.5.2. Початкова стадія розробки
- •4.5.3. Огляд мови algol 58
- •4.5.4. Прийняття звіту про мову algol 58
- •4.5.5. Процес розробки мови algol 60
- •4.5.6. Огляд мови algol 60
- •4.5.7. Оцінка мови algol 60
- •Лекція 5. Трансляція і формальні граматики
- •5.1. Транслятори
- •5.2. Процес трансляції
- •5.3. Формальні граматики. Нбф-граматика
- •Лекція 6. Java - мова ооп
- •6.2. Основні властивості програм і перші приклади
- •6.3. Арифметичні і побітові оператори мови Java
2.3. Основи фон-нейманівської архітектури
Значна частина сучасних комп’ютерів функціонує за принципами, сформульованими в середині 1940-х рр. Дж. фон Нейманом. Він виділив пристрої, які мають входити до складу комп’ютера: керуючий; арифметико-логічний; оперативну пам’ять; зовнішню пам’ять (зовнішні запам’ятовуючі пристрої, зовнішні носії інформації); введення; виведення.
Роботу універсальної фон-нейманівської ЕОМ у найзагальніших рисах можна описати так.
Програми та дані, що зберігаються на зовнішніх носіях, вводять за допомогою пристроїв введення і пересилають до оперативної пам’яті. Обчислення здійснюють арифметико-логічним пристроєм. Інформацію, що є в оперативній пам’яті, за потреби передають до арифметико-логічного пристрою для обробки; проміжні результати обчислень знову передають в оперативну пам’ять. Результати роботи обчислювальної машини виводять на зовнішні носії за допомогою пристроїв виведення. Всі операції в ЕОМ здійснюють під управлінням керуючого пристрою.
Можна також виділити такі характерні риси фон-нейманівської архітектури: двійкова система числення; лінійна організація пам’яті, тобто пам’ять фон-нейманівського комп’ютера складається з послідовності однотипних комірок; будь-яка програма має вільний доступ до пам’яті за адресою; програма є послідовністю елементарних команд.
Елементарна команда це команда, яку розуміє процесор і яку він може виконати безпосередньо. Після реалізації певної команди він починає виконувати наступну. У сучасних комп’ютерах арифметико-логічний і керуючий пристрої об’єднані в один, що називають центральним процесором.
Фон-нейманівська архітектура має багато «вузьких місць». Уже наприкінці 1950-х рр. намітилися тенденції відходу від фон-нейманівської архітектури. Зокрема, ці тенденції були пов’язані з розвитком багатопроцесорних систем. Нині можна вважати, що класична фон-нейманівська архітектура в основному вичерпала свої можливості.
Типовий центральний процесор фон-нейманівського комп’ютера має таку структуру. Регістри процесора використовують для тимчасового зберігання даних. В одному регістрі можна зберігати 2–4 байти інформації. Кількість розрядів, або бітів, в одному регістрі називають його розрядністю. Регістр адреси пам’яті містить адресу комірки пам’яті, з якої або в яку слід переслати дані. Регістр даних пам’яті містить дані, що мають бути зчитані в оперативну пам’ять. Програмний лічильник містить адресу комірки пам’яті, в якій зберігається команда, що виконується. Регістр команд містить команду, яку слід виконувати.
Типовий цикл виконання команди складається з трьох кроків: вибірки, декодування, безпосереднього виконання. На початку вибору чергової команди в програмному лічильнику міститься її адреса. Цю адресу пересилають до регістра адреси, а керуючий пристрій надсилає до оперативної пам’яті сигнал зчитування. Інформацію, зчитану з оперативної пам’яті, пересилають з пам’яті в регістр даних пам’яті, а звідти в регістр команд. Аналогічним способом зчитують операнди команди.
Декодування це перетворення двійкових кодів команд та операндів на послідовність електричних імпульсів, необхідних для виконання команд апаратними засобами. Типовим є мікропрограмне декодування, у разі якого процес декодування визначається мікрокодом. Мікрокод сукупність правил, що визначають, яка послідовність імпульсів потрібна для виконання тієї чи іншої команди процесора. Цей мікрокод зберігається безпосередньо в процесорі. Його можна розглядати як програму, але програму ще більш низького рівня, ніж машинний код. Він є недоступним ні для користувачів, ні для програмістів, і є прерогативою розробників процесорів. Нарешті, на етапі безпосереднього виконання декодована команда реалізується апаратними засобами.
Робота усіх складових частин процесора синхронізується за допомогою електричних тактових імпульсів, що з певною частотою генерує керуючий пристрій. Час між двома імпульсами називають тактом. Одну команду можна виконати за один або декілька тактів. Тактовою частотою називають кількість тактів, що генеруються за 1 с. Від цієї характеристики істотно залежить швидкодія процесора.
Обмін даними між процесором та оперативною пам’яттю здійснюється через шину пам’яті. Фізично шина складається з певної кількості провідників. Через один провідник можна одночасно передати один біт інформації. Кількість таких провідників називають розрядністю шини. Один провідник інколи називають лінією. Шина пам’яті складається з двох частин: шина даних, адресна шина. Шину даних використовують для передачі даних, адресну шину для передачі адреси.
Важливим для сучасних процесорів є поняття переривання. Переривання сигнал, який надходить від якогось пристрою та змушує центральний процесор призупинити виконання програми і зайнятися обробкою переривання.
