- •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.2. Обчислювальні машини
Обчислювальна машина це автоматизована лічильна машина, створена для підвищення швидкості обробки арифметичних та інших математичних операцій. Обчислювальні машини є апаратною реалізацією скінченних автоматів. Вони можуть бути цифровими або аналоговими.
Цифрова машина це система, яка працює на числовій дискретній основі так, що число формально задається в середині системи.
Будь-яка аналогова система має істотно неперервну основу, числа задаються фізичними величинами (промінь світла, струм тощо).
Для ілюстрації основної відмінності між цифровим і аналоговим принципом обробки інформації розглянемо класичний приклад з музичними інструментами. Баян можна назвати дискретною системою, тому що в ній довільну фіксовану ноту можна або грати, або ні, бо кожна нота (клавіша) дискретно відділена від наступної. Скрипка ж буде аналоговою системою, оскільки на скрипці висота тону може змінюватися безперервно.
Відомо, що довільну аналогову машину теоретично можна апроксимувати деякою цифровою. Проте на практиці виникають труднощі реалізації. Наприклад, спроба імітації роботи людського мозку приводить до природних обмежень, пов’язаних з пам’яттю та часом.
Цифрові обчислювальні машини (ЦОМ) можна поділити на певні класи відповідно до організації загальних принципів обчислень. Наприклад, можна виділити одноадресні, двоадресні, n-адресні обчислювальні машини. Ця відмінність ґрунтується на різниці в числі адрес у командних словах обчислювальної машини. Іншим прикладом поділу є два великі класи ЦОМ: послідовні та паралельні. Цей поділ використовує такий критерій: ЦОМ можуть виконувати одночасно одну або кілька операцій.
Загальну схему ЦОМ ілюструє рис. 2.2.
Слід зазначити, що не всі блоки, зображені на рисунку, присутні в усіх типах ЦОМ, але ця схема є найзагальнішою.
Пам’ять обчислювальної машини зберігає список команд (програму) обробки даних і самі дані (набір чисел), які оброблятимуться цими операціями (командами).
Керуючий пристрій визначає, які ж операції пересилатимуть числа в арифметичний пристрій для виконання необхідних операцій. Після виконання цих операцій дані повертаються в запам’ятовуючий пристрій.
Команди
слід записувати у пристрій запам’ятовування
у вигляді машинних «слів», що задають
в числовому вигляді. Числа, які машина
обробляє, мають бути заданими у вигляді
машинних слів. Інакше кажучи, машинні
слова задають команди і дані.
Проведіть аналогії загальної схеми функціонування ЕОМ із загальною схемою функціонування деякого виробничого комплексу.
Різні обчислювальні машини можуть використовувати різні коди для задання команд: десятковий, двійковий, вісімковий, шістнадцятковий тощо. Детально на цих кодах не зупинятимемося, тільки зазначимо, що довільне слово, число можна закодувати послідовністю двійкового коду 0 і 1.
Для того щоб реалізувати певні дії, які слід застосовувати до даних, що знаходяться в пристрої запам’ятовування, ми повинні мати можливість вказувати процесору, які ж конкретні команди він має виконати над цими даними.
Як ілюстрацію такого принципу розглянемо умовну триадресну обчислювальну машину, тобто машину, в якій командне слово містить три адреси: адреси двох чисел, що обробляються, і адресу, куди заносять результат обробки. Припустимо, ми вибрали таке кодування арифметичних операцій для триадресної машини: додавання (01), віднімання (02), множення (03), ділення (04), умовний перехід (05), завантаження (06), друк (07).
Розглянемо таку просту арифметичну задачу. Нехай потрібно перемножити числа 2 і 3, потім відняти 1 та надрукувати результат. Перше, що слід зробити, розмістити числа 2, 3, 1 у вільних регістрах пам’яті. Нехай такими будуть регістри з номерами 500, 501, 502. Для позначення цієї дії використаємо запис 06/500(2), 06/501(3), 06/502(1). Для триадресної машини команди мають таку структуру:
І /A1/A2/A3,
де І код команди, А1, А2, А3 адреси регістрів.
Тоді для реалізації нашої задачі потрібно написати програму:
03/500/501/500
02/500/502/503
07/503
Одноадресна
і двохадресна машини працюють за іншим
принципом.
У них використовується
пристрій накопичувального типу, який
називають суматором. У таких машинах
команди заносять усі числа обробки
в
суматор. Є спеціальні команди, які
повертають числа із суматора у загальну
пам’ять.
Для кращого зберігання операндів і операцій в пам’яті обчислювальної машини Ньюел у 1961 р. запропонував використовувати списки. Базовим елементом списку є елемент, зображений на рис. 2.3.
Список
можна використати для «зв’язування»
різних елементів пам’яті,
які «фізично» містяться в непослідовних
фрагментах пам’яті ЦОМ. Так вираз
можна описати
списком, зображеним на рис. 2.4.
Є
ще один тип обчислювальних пристроїв,
який стоїть трішки виокремлено
– це нейрокомп’ютер. З початку створення
обчислювальних пристроїв спеціалісти
намагалися створити такий пристрій,
який би моделював роботу мозку людини.
Оскільки в ньому головну роль виконує
нейрон, можна знайти ключ до моделювання
розумової діяльності людини
в моделюванні роботи нейрону мозку. Для
багатьох цілей нейрон
можна
розглядати як елемент з певним критичним
значенням. Це означає,
що він або ж дає на виході деяку постійну
величину, якщо сума його входів досягає
певного значення, або ж залишається
пасивним.
Мак-Каллок і Піттс довели, що будь-яку обчислювальну функцію можна реалізувати за допомогою спеціально організованої мережі ідеальних нейронів, логічні властивості яких з високою вірогідністю можна приписати реальному нейрону. Ця мережа матиме наступні вади. По-перше, проблема полягає в тому, чи можна знайти якийсь розумний принцип реорганізації мережі, який давав би змогу випадково об’єднаній спочатку групі ідеальних нейронів самоорганізовуватись в «обчислювальний пристрій», здатний розв’язувати довільну задачу. По-друге, потрібно використовувати велику кількість нейронів. Так, модель роботи мозку мурашки потребує використання близько 20 000 нейронів, що на практиці реалізувати неможливо.
Нейрокомп’ютер – програмно-технічна система (спеціалізована ЕОМ), що реалізує деяку формальну модель природної мережі нейронів. Про важливість розвитку цього напряму свідчить і те, що в основу побудови обчислювальних пристроїв п’ятого покоління покладено ідею паралельної обробки інформації в нейроноподібних системах. Незважаючи на те, що один електричний процесор працює в тисячі разів швидше, ніж його нейронний еквівалент у мозку, мережі нейронів розв’язують багато задач (особливо нечислових) в тисячі разів швидше, ніж електронний процесор.
Причина цього в наступному:
1) характер взаємозв’язків між нейронами дає змогу робити розв’язання багатьох задач, а також реалізацію різних функцій – у паралельний спосіб;
2) у нейронній мережі пам’ять не локалізована в одному місці (як в послідовних машинах), а розподілена по всій структурі; у біологічних системах пам’ять реалізується підсиленням або послабленням зв’язків між нейронами, а не зберіганням двійкових символів;
3) біологічні мережі реагують не на всі, а тільки на визначені зовнішні подразнення; кожен нейрон виступає як елемент прийняття рішення і елемент зберігання інформації; перевага такої структури – «життєздатність» (вихід з ладу декількох нейронів не спричинює значної зміни даних, що зберігаються, або руйнування всієї системи);
4) можливість адресації за вмістом є ще однією важливою характеристикою систем з розподіленою пам’яттю (кожен елемент відшукують за його вмістом, а не зберігають в комірці пам’яті з визначеним номером).
В
основу зв’язків у нейрокомп’ютерах
покладено асоціативний принцип.
Асоціативні зв’язки пронизують все
мислення людини. Наприклад, результат
операції
у нас є в пам’яті, і ми кожного разу його
не обчислюємо, на противагу комп’ютеру.
Існує думка, що процеси мислення є не
що інше як розповсюдження певного
збудження, як деяка ланцюгова реакція.
Навіть найпримітивніші процеси навчання
принципово залежать від послідовності
подій у часі. Це й закладено в природу
нейронних систем. Тому їм притаманне
реагування тільки на жорстко визначене
зовнішнє подразнення. Наприклад, домашні
тварини «навчаються» ігнорувати повторні
несуттєві зовнішні подразнення («цокання»
годинника), але посилюють сприйняття
подразнень, які можуть мати серйозні
наслідки (звук гальм автомобіля).
Тому майбутнє – за комп’ютерами, які ґрунтуються на аналізі зв’язків, а не обробці символів. М. Мінський говорив, якщо комп’ютер має діяти подібно до мозку, тоді і його конструкція має бути також подібною до мозку.
Моделі нейронних мереж і схеми з адресацією за змістом мають і недоліки. Внаслідок нефіксованої організації вони можуть плутати різні об’єкти. Це аналогічно звиканню, посиленню чуттєвості до асоціацій, які лежать в основі психологічних особливостей людини. Інакше кажучи, довільний комп’ютер, що претендує на «розумність», повинен мати такі особливості.
Як було зазначено раніше, існує безліч мов програмування, які полегшують запис алгоритму розв’язання задачі. Для того щоб відповідні програми було виконано на конкретній машині, їх слід перевести в мову автокоду цієї машини. Для цього використовують інтерпретатори, асемблери і компілятори.
Робота інтерпретатора ґрунтується на тому, що для задання кожної операції в машині використовують особистий символ, так що увесь набір операцій програми можна задати простими символами. Вони інтерпретуються і послідовно обробляються машиною.
Асемблер застосовують до мов програмування, які дуже близькі до мови автокоду. Програму повністю перекладають з асемблерної мови в мову автокоду, а потім засилають на виконання.
Компілятори відрізняються від асемблерів тільки тим, що одне слово може позначати набір операцій мови машинних команд.
Слово комп’ютер походить від англійського слова to compute, яке означає «здійснювати обчислення». Інша назва комп’ютерів електронні обчислювальні машини. Вона підкреслює два ключових аспекти. По-перше, комп’ютер це сукупність апаратних засобів, призначених для обчислень і перетворення інформації. По-друге, основними елементами комп’ютерів є електронні прилади.
Комп’ютер здійснює обчислення та інші інформаційні перетворення за допомогою програм, тобто певних послідовностей інструкцій. Можна вважати, що за допомогою програм здійснюється керування апаратними засобами комп’ютера.
Найпростіші засоби для виконання простих арифметичних операцій були відомі людям у глибоку давнину. Перші механічні пристрої (арифмометри) створено в середині ХVII ст. Паскалем і Лейбніцом. У XIX ст. Чарльз Беббідж уперше сформулював ідею створення універсальної обчислювальної машини. Він розробив детальний проект, який не був закінчений через відсутність необхідної технічної бази.
Значний внесок у розробку принципів функціонування комп’ютерів зробив Алан Тьюринг, який у 1937 р. описав гіпотетичну машину з універсальними можливостями. Ця машина Тьюринга, яку можна розглядати як одну з можливих формалізацій поняття «алгоритм», стала теоретичною основою сучасних комп’ютерів. Перша електронно-обчислювальна машина ENIAC створена у 1943–46 рр. Дж. У. Моклі та Дж. П. Екертом з Пенсільванського університету. Величезний внесок у розвиток обчислювальної техніки зроблено працею Дж. фон Неймана. Початок серійного виробництва ЕОМ пов’язують зі створенням у 1951 р. ЕОМ UNIVAC. Роботи над створенням першої вітчизняної ЕОМ МЕЛМ (малої електронної лічильної машини) були розпочаті в Інституті електротехніки АН УРСР у 1947–1948 рр. в м. Києві групою науковців під керівництвом С. О. Лебєдєва. У 1951 р. машину було прийнято до експлуатації.
Як подальші віхи в розвитку обчислювальної техніки можна відзначити такі: поява операційних систем; виникнення мов програмування високого рівня; розвиток мережних технологій і масове розповсюдження персональних комп’ютерів.
Комп’ютери можна класифікувати за різними критеріями. Основним з них є ступінь універсальності. Комп’ютери бувають спеціалізовані, призначені для виконання окремих задач, і універсальні. Універсальну машину можна визначити як машину, що в принципі може розв’язувати будь-яку задачу, для якої існує алгоритм виконання, або як машину, здатну реалізувати будь-який алгоритм. Надалі розглядатимемо лише цифрові універсальні машини, і якщо не буде явно вказано інше, під словом комп’ютер ми розумітимемо саме такі машини.
Універсальний цифровий комп’ютер може реалізувати будь-який алгоритм. Інформація, яку обробляє комп’ютер, зберігається в його пам’яті у вигляді послідовності нулів та одиниць. Пам’ять складається з електронних схем, кожна з яких може перебувати в одному з двох стійких станів, один з них беруть за 0, а інший за 1. Мінімальною одиницею інформації є біт. Біт один двійковий розряд, за допомогою якого можна закодувати одне з двох можливих значень: 0 або 1.
Зрозуміло, що для виконання обчислень цифровий комп’ютер повинен мати у своєму складі засоби, що дають змогу виконувати операції над двійковими розрядами, тобто реалізовувати булеві функції. Булевою називається функція, аргументи і результат якої можуть набувати одне з двох можливих значень: 0 або 1.
Цифрові універсальні комп’ютери можна класифікувати за потужністю. Виділяють такі основні групи цих комп’ютерів.
Суперкомп’ютери. Для них характерна наявність великої (десятки, сотні або тисячі) кількості процесорів, які сумісно розв’язують ту чи іншу задачу, тим чи іншим способом взаємодіючи між собою; у цьому разі забезпечується дуже висока сумарна потужність. Типове призначення виконання надскладних розрахунків. Найпростіші суперкомп’ютери можна використовувати як корпоративні мережні сервери. У цьому разі їх називають майнфреймами. Як приклади суперкомп’ютерів можна навести IBM System/390, T/9000, RS/6000. Ще більшу потужність забезпечують суперкомп’ютери фірм Intel, Fujitsu, Hitachi, Cray-SGI. Одна із останніх розробок Intel об’єднує 9200 процесорів Pentium Pro, займає площу 160 м2 і має масу 40 т. Пристрій для охолодження важить 272 т. Оперативна пам’ять становить 573 ГБ, швидкодія понад трильйон операцій за секунду.
ЕОМ класу міні займають проміжне положення між великими ЕОМ і персональними комп’ютерами. Мають невелику кількість процесорів (від 1 до 8–12) та порівняно невеликі розміри і невисоку ціну. Використовуються як професійні робочі станції або як корпоративні мережні сервери.
Персональні комп’ютери. Їх можна визначити як комп’ютери, призначені для індивідуального користування. Поділяють їх на настільні та портативні. Останнім часом з’явився новий клас персональні помічники, такі як Psion виробництва компанії Sharp, Newton Messag Pad фірми Apple Computer, Omni Go фірми Hewlett-Packard. Це мобільні комп’ютери, мініатюрні за розміром (300–4000 г), з порівняно невеликою оперативною пам’яттю (1–2 МБ) та малою тактовою частотою (7–9 МГц).
