Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекції_СПр.docx
Скачиваний:
37
Добавлен:
21.08.2019
Размер:
947.09 Кб
Скачать
  1. Робота з відеоадаптером.

  2. Структура відеоадаптера.

  3. Особливості функціонування відеоадаптера у текстовому та графічному режимах.

Навчальна мета: Засвоїти основні поняття роботи з відеоадаптерами.

Виховна мета: Допомогти студентам усвідомити вагому роль функціонування відеоадаптера у текстовому та графічному режимах.

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

Мотивація: Мотивацією вивчати даний напрямок у курсі ситемного програмування може стати бажання отримати позицію програміста.

VGA

VGA (англ. VideoGraphicsArray) — стандарт мониторів і відеоадаптерів. Випущений IBM в році для комп'ютерів PS/2 Model 50 і більше старших. VGA був останнім стандартом, якому слідувала більшість виробників відеоадаптерів.

Архітектура відеоадаптера VGA

VGA складається з наступних основних підсистем:

  • Графічний контролер (Graphics Controller), за допомогою якого відбувається обмін даними між центральним процесором і відеопам'яттю. Має можливість виконувати бітові операції над переданими даними.

  • Відеопам'ять (Display Memory), у якій розміщаються дані, відображувані на екрані монітора. 256 кБ DRAM розділені на чотири колірних шари по 64 кБ.

  • Послідовний перетворювач (Serializer або Sequencer) — перетворить дані з відеопам'яті в потік бітів, переданий контролеру атрибутів.

  • Контролер атрибутів (Attribute Controller) — за допомогою палітри перетворить вхідні дані в колірні значення.

  • Синхронізатор (Sequencer) — управляє тимчасовими параметрами відеоадаптера й перемиканням колірних шарів.

  • Контроллер ЕПТ електронно-променевої трубки (CRT Controller) — генерує сигнали синхронізації для ЕПТ.

Текстові режими

У стандартних текстових режимах символи формуються в комірці 9×16 пікселів, можливе використання шрифтів інших розмірів: 8—9 пікселів завширшки й 1—32 піксела у висоту. Розміри самих символів, як правило, менше, тому що частина простору йде на створення зазору між символами. Функція для вибору розміру шрифту в BIOS відділена від функції вибору відеорежиму, що дозволяє використати різні комбінації режимів і шрифтів.

Графічні режими

Відеоадаптер VGA має відеорежим із квадратними пикселами (тобто, на екрані зі співвідношенням сторін 4:3 співвідношення горизонтального й вертикального дозволів було також 4:3). В адаптерів CGA і EGA пікселі були витягнуті по вертикалі.

Перші IBM PC були оснащені відеоадаптером MDA (Monochrome Display Adapter) призначеного для виведення винятково тексту. Незабаром за ним пішов CGA (Color Graphics Adapter)  графічний режим для ігор 320х200 але лише при 4 кольорах. Слідом за ним пішов EGA (Enhanced Graphics Adapter) і приніс кілька нових режимів серед яких найбільш привабливим був 320х200, але вже при цілих 16 кольорах. При цьому досить легко було робити гри з можливістю вибору режиму CGA/EGA – роздільна здатність була тою самою. І от, нарешті, рік 1987 - на світло з'явився VGA (Video Graphics Array) приніс із собою режим 320х200 при неймовірних 256 кольорах. І знову ж, через однакову роздільна здатність, у розроблювачів була можливість, по початку, робити гри з вибором відеорежиму, цього разу EGA/VGA.

Всі ці карти функціонували без яких-небудь драйверів! Стандарт VGA став стандартом-мінімумом для всіх відеокарт. З тих пір будь-яка відеокарта повинна була підтримувати стандарт VGA, якщо вона розраховувала на комерційний успіх. Навіть зараз ми користуємося стандартом VGA до завантаження операційної системи відмінної від MS-DOS.

Принцип роботи відеокарт часів стандарту VGA представлений на малюнку:

програми в часи стандарту VGA зверталися до апаратної частини відеокарти прямо

Після 1987 року, наступив "неясний час" SVGA. Поширено оману що SVGA (Super Video Graphics Array) це теж стандарт, однак це не так, через термін "SVGA" позначають всі режими перевищуючі VGA. Нових стандартів не було. У такий спосіб не було чітко певного способу як скажемо працювати в графічному режимі 640х480 при 256 кольорах. Потрібно відзначити, що проблема була не в "залізі", більшість відеокарт як правило могла працювати в такому режимі, а у відсутності стандарту - кожна працювала по своєму. Таким чином, щоб забезпечити такий режим роботи, потрібно було писати свій відеодрайвер для кожної (ну або майже кожної) відеокарти, що більшості розроблювачів було не під силу, та й уникнути проблем сумісності при цьому однаково було дуже складно. Тому дуже багато ігор для MS-DOS по колишньому випускалося під старий добрий VGA режим 320х200х256.

VESA (Video Enhanced Standards Association), ця організація по суті продовжила стандартизацію відеорежимів. Стандарт VESA 1.0, що з'явився на початку 90-х років, обмовляв роботу в дозволах від 640х480 до 1280х1024 при 16 і 256 кольорах, VESA 1.1 додав до цього стандарт для роботи при 15 і 16 бітному кольорі (32K і 64K - HiColor), а VESA 1.2 при більше знайомому нам 24/32 бітних кольорах (16,7M - TrueColor) і ввів ще одину роздільну здатність - 1600х1200.

VESA режими також функціонували без яких-небудь драйверів, однак вимагали наявності VESA BIOS, що втім ніяк не виражалося зовні, тому що реалізовано він був теж на апаратному рівні. Проте стандарти VESA обмежували розроблювачів "заліза" у набагато меншому ступені чим попередні стандарти IBM. Сам стандарт VESA розроблявся таким чином, що будь-яка існуюча карта може бути перероблена в VESA-сумісну за допомогою VESA-драйвера, що завантажує, що заміняє собою VESA BIOS. Однак таких драйверів на практиці практично не існувало. Викликано це було тим, що мінімум до 1994 року потреби в 640х480х256 режимі не було, а до цього часу всі нові розроблювальні карти підтримували як мінімум VESA 1.0 (а більше, як правило, і не було потрібно). До того ж у той час багато хто не те що не бачили, але й не знали, що таке інтернет, тому звично "скачати" як це робиться сьогодні, цей самий VESA-драйвер, навіть якби він вийшов, не вийшло б. Хоча звичайно існували й такі монстри як UniVBE (Universal VESA BIOS Extension)призначені для емуляції VESA на старих відеокартах, але на той час як у них виникала потреба набагато дешевше було придбати повноцінну VESA 1.2 карту, що до того ж була оснащена цілими 2 Мб оперативної пам'яті.

Принцип роботи відеокарти в режимі VESA:

програми в часи стандарту VESA зверталися до апаратної частини відеокарти прямо, правда в рідких випадках був потрібний драйвер-обманка, що емулював для програми карту VESA

Все різноманіття відеорежимів "додрайверної" епохи приведено в таблиці:

Рік

Стандарт

Підтримувані режими

1981

MDA

Текстовий режим, чорно-білий

1981

CGA

MDA; Новий текстовий режим, кольоровий; 320x200x4 кольори; 640x200x2 кольори

1984

EGA

CGA; Поліпшений текстовий режим, кольоровий; 320x200, 640x200, 640x350 при 16 кольорах

1987

VGA

EGA; Новий поліпшений текстовий режим, кольоровий; 640x480x16 квітів; 320x200x256 квітів

1990

VESA 1.0

від 640x480 до 1280x1024 при 16 і 256 кольорах

1993

VESA 1.1

від 640x480 до 1280x1024 при 4, 8, 15, 16-bit кольорах (HiColor)

1995

VESA 1.2

від 640x480 до 1600x1200 при 4, 8, 15, 16, 24-bit кольорах (TrueColor)

Однак VESA режими після 1995 року стали одним з можливих рішень для реалізації режимів SVGA. Як ви вже напевно догадуєтеся другим стала Windows 95 з її концепцією драйверів.

Драйвери

Отже, ще один спосіб роботи в SVGA режимі для розроблювачів ігор з'явився з виходом Windows 95. Яким же способом обмеження переборювалося тут? Відразу скажу що наявність/відсутність VESA для Windows не мало ні якого значення. Все досить просто - для роботи із графікою в Windows використаються функції ОС, а як відрисовка буде виконана в самій системі вже не ваша проблема. У такий спосіб в Windows програміст взагалі втратився можливості прямо звертатися до відеокарти. Це проблема Windows, що у свою чергу звертається до драйвера.

Властиво концепція драйверів, що з'явилися в Windows 95, не нова. Вони існують на будь-якій серйозної багадозадачній операційній системі. Драйвер це програма керування пристроєм. Драйвер перебуває між пристроєм і операційною системою й забезпечує зв'язок Windows з апаратною частиною відеокарти.

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

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

Однак перший час усе було не так райдужно... По-перше робота в графічному режимі Windows була дуже повільною й реалізувати щось більше динамічне чим відомі "Сапер" і "Косинка" було складно. Пов'язано це було в першу чергу з тим, що найшвидший, прямий доступ до відеопам'яті з Windows був неможливий. Тому застосувати напрацьовані в MS-DOS графічні бібліотеки для роботи в режимах VGA і VESA було не можна. У підсумку нехай і не оптимальні в плані апаратного прискорення гри під VGA/VESA режими MS-DOS були швидшими за апаратну акселерацією під Windows.

Принцип роботи відеокарти в графічному режимі Windows з використанням драйвера:

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

Для рішення цієї проблеми Microsoft у терміновому порядку випускає пакет Direct.

Інтерфейси

Однак перш ніж приступитися до опису Direct  розберемося з тим, що ж таке "інтерфейс". Інтерфейс у самому загальному змісті це деякий стандарт по комунікації. Він може бути як апаратним, наприклад шина USB, що визначає спосіб спілкування між пристроями, так і програмним - визначальний спосіб спілкування між програмами, а також безліч інших інтерфейсів у числі яких і віконний інтерфейс Windows (Windows GUI [Graphical User Interface - графічний інтерфейс користувача]). Існують також інтерфейс прикладного програмування (Application Programming Interface - API) які являє собою інтерфейс між програмістом пишучу програму й можливостями надаваними йому операційною системою. Отож, всі розглянуті в статті інтерфейси є в першу чергу інтерфейсами прикладного програмування. Для того щоб той або інший інтерфейс прикладного програмування з'явився в системі, його функції(бібліотеки підпрограм) повинні бути тим або іншому способу встановлені в системі - в Windows 2000 наприклад за замовчуванням уже встановлені Direct 7.0 і OpenGL. Крім того, засобу розробки програм для даної операційної системи повинні бути оснашены заголовними файлами описывающими ці функції й (опционально) додатковими бібліотеками для полегшення розробки програм. Наприклад Microsoft регулярно випускає свої Direct SDK (Software Development Kit - Набір для розробки програм) для свого інструмента розробки Windows додатків - Microsoft Visual Studio. У свою чергу вже операційна система за допомогою драйвера відеокарти може зв'язати програмні виклики цих функцій додатком (наприклад грою) з її апаратною частиною.

Схематично це можна представити в такий спосіб:

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

Інтерфейс Microsoft Direct

Ідея Direct була проста - надати розроблювачам низкоуровневый доступ до апаратного забезпечення (у нашому випадку до відеокарти), у стилі MS-DOS, у незалежному від кінцевого пристрою виді, тобто зберігши всі переваги "драйверного" підходу. У першу чергу DirectDraw і Direct3D (два графічних інтерфейси Direct)були націлені на досягнення максимально високої швидкості роботи із графікою й на забезпечення максимальної сумісності. При цьому вони також надавали масу додаткових високорівневих функцій графіки, що полегшували створення, і анімації. Для забезпечення сумісності всі базові функції були продубльовані програмною емуляцією, таким чином, навіть якщо пристрій не міг виконувати яку-небудь функцію, вона эмулировалась програмно.

Схема роботи Direct3D, частини Direct інтерфейсу призначеного для створення 3D графіки, представлена на малюнку:

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

Інтерфейс Direct з'явився незабаром після виходу Windows 95, і після цього всі операційні системи починаючи з Windows 95 OSR 2 несли в себе на борті ту або іншу версію інтерфейсу Direct. Також разом з Direct в Windows 95 OSR 2 з'явилася підтримка графічного інтерфейсу OpenGL і це не випадково. Інтерфейс Direct принципово складається із двох незалежних частин:

  • Низькорівневої,працюючої з апаратною частиною;

  • Високорівневої, працюючої із програмними викликами.

Така організація дозволяє легко розширювати другу частину не міняючи або мінімально міняючи першу, крім того, перша частина може бути використання для "прикручування" до неї інших інтерфейсів. Наприклад вищезгаданий OpenGL в Windows функціонує саме так, тобто поверх Direct. Багато хто з вас повинне бути пам'ятають появившиеся саме в OSR 2 тривимірні хоронителі екрана написані з використанням OpenGL.

Інтерфейс OpenGL

OpenGL це промисловий стандарт інтерфейсу для 2D і 3D графіки розроблений на початку 80-х років фирмой Silicon Graphics. На відміну від Glide, OpenGL є відкритим, так що будь-яка фірма при бажанні може вмонтувати його підтримку у свою операційну систему або відеокарту. На відміну від Direct існуючому тільки у світі Windows, OpenGL існує майже на всіх системах, у такий спосіб перенос OpenGL гри на різні платформи було відносно простим. OpenGL як і Direct передбачав режим програмної емуляції. Взагалі ж коли OpenGL з'являвся він і був чисто програмним, його основною метою було створення зручного інтерфейсу для створення реалістичної 2D/3D графіки, а ідея про його апаратне прискорення виникла вже пізніше.

Принципових розходжень у принципі роботу між Direct3D і OpenGL немає:

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

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

На відміну від Direct де тон у плані розширення можливостей задає Microsoft і градація можливостей карт здійснюється за версією Direct, те в OpenGL розширення додаються розроблювачами "заліза" і реалізуються у власні ж драйверах, а вже програміст вирішує використати їх чи ні. Причому рішення це може вибиратися по ходу як наприклад стиск текстур. У такий спосіб якщо дві Direct 8 сумісні відеокарти будуть виглядати рівними для режиму Direct3D, те в області розширень OpenGL ці ж відеокарти можуть розрізнятися набагато більш істотно.

І знову драйвери

Повернемося до драйверів і глянемо, що ж із себе представляє Windows драйвер сучасного 3D-акселераора, якими по праву можуть уважатися й всі карти фірми NVIDIA. Отже типовий драйвер складається із чотирьох частин:

  • драйвер відповідальний за найнижчий рівень комунікацій з відеокартою;

  • драйвер для роботи з інтерфейсом Direct3D;

  • драйвер для роботи з інтерфейсом OpenGL;

  • все інше, що включає в себе всілякі засоби настроювання режимів роботи відеокарти.

Контрольні запитання:

  1. VGA

  2. Архітектура відеоадаптера VGA

  3. Текстові режими

  4. Графічні режими

  5. Інтерфейс Microsoft Direct

  6. Інтерфейс OpenGL

Лекція 20 «Диски та файли операційної системи»