49268 (666202), страница 2

Файл №666202 49268 (Технології віртуалізації: вчора, сьогодні, завтра) 2 страница49268 (666202) страница 22016-07-31СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Схема 3. Віртуальна пам'ять

Як це робиться на практиці? Вся доступна процесору фізична оперативна пам'ять розбивається на невеликі шматочки розміром 4 Кбайт або 4 Мбайт - «сторінки». При цьому використовується та ж схема, що й при розбивці фізичних адрес на адреси конкретної комірки пам'яті: молодші 12 або 22 біт віртуального адреси позначають зміщення цієї адреси від початку сторінки, а старші біти (від 10 до 50) - номер сторінки. Коли процесору потрібно обчислити фізичну адресу з віртуального, він просто розділяє віртуальний адресу на номер сторінки і зсув, заглядає в таблицю, де для кожного номера вказані координати початку сторінки у фізичній пам'яті, і додає до отриманої координаті зміщення (схема 4). Згадана табличка сторінок називається таблицею трансляції адрес віртуальної пам'яті (або просто таблицею трансляції), і розміщується вона у вигляді B-дерева в самій звичайної оперативної пам'яті, що дозволяє створювати без великої надлишковості як завгодно великі швидкодіючі таблиці трансляції. Працює це дерево, правда (як і все, пов'язане з оперативною пам'яттю), як і раніше не дуже швидко, і тому процесор кешує раніше певні відповідності «номер сторінки - запис у таблиці трансляції» в спеціальному сервері - буфері трансляції віртуальних адрес (Translation Look -aside Buffer, TLB).

Схема 4. Робота з віртуальною пам'яттю.

Деталі таблиці трансляції

Фраза про B-дерево може прозвучати страхітливо, але насправді ховається за цим не така вже й складна технологія. Двійковий номер віртуальної пам'яті, за все тією ж доброю традицією, «розрізається» на кілька шматочків невеликого розміру (по 10 біт): наприклад, 00000000001111111111010101010101 - перетворюється на 0000000000 + 1111111111 + 010101010101. Перша частина адреси - 0 - це «номер директорії», друга - 1023 - «номер сторінки», третя - 1365 - зміщення від початку сторінки.

Що далі з цим усім робити? У процесорі є спеціальний регістр під назвою CR3 (Control Register # 3), в якому записується «вказівник на таблицю трансляції» - фізичну адресу, по якому в пам'яті розташовується «таблиця директорій». Ця сама таблиця - це 1024 записи довжиною по 32 (або 64) біта, в яких записані фізичні адреси «таблиць сторінок», відповідних тій або іншій директорії. У нас директорія номер нуль, а тому процесор, декодує віртуальний адреса, обчислює суму регістру CR3 з нулем і отримує адресу потрібної йому «таблиці сторінок». Ось у цій таблиці (теж з 1024 записів завдовжки 32 або 64 біта) вже записані фізичні адреси почав сторінок, так що, додавши до початку таблиці сторінок номер сторінки (1023) - ми виходимо на запис, в якій знаходиться фізичну адресу початку потрібної нам сторінки. Залишається тільки додати до нього 1365 - зміщення - і шуканий фізичну адресу готовий. У разі 64-бітної організації пам'яті рівнів трансляції в цій схемі не два, а чотири; у разі трансляції зі сторінками розміром 4 Мбайт - останній рівень трансляції пропускається.

Навіщо взагалі знадобилася така складна схема і чому було не можна обмежитися однією таблицею трансляції? Вся справа в розмірі таблиць. Для 32-бітної адресації пам'яті і сторінок розміром 4 Мбайт необхідний розмір таблиці складає всього лише 4 або 8 Кбайт пам'яті, але для більш затребуваних 4 Кбайт - сторінок, і, ще гірше, для 64-бітної адресації пам'яті, необхідні розміри таблиці виходять набагато більшими - від 4-8 Мбайт до 8 Гбайт і навіть 8 Тбайт. За часів 386-х процесорів навіть 4 Мбайт для таблиці трансляції адрес однієї програми здавалося занадто великою цифрою (а, враховуючи, що на комп'ютері можуть бути одночасно запущені сотні програм, і для кожної потрібно мінімум по 4 Мбайт фізичної пам'яті - це і для сучасних систем надто багато), і тому вибір був зроблений на користь дворівневої трансляції, при якій трансляцію можна зупинити ще на «верхньому» рівні, вказавши для деяких записів у «таблиці директорій», що вони не відповідають жодним реальним фізичним адресами і прибравши, таким чином, необхідність у вказівці для цілого діапазону адрес записів у таблиці трансляції.

До речі, сегментація (в 32-бітних процесорах) навіть з віртуальною пам'яттю все одно зберігається. Тобто реальні адреси, що згадуються в програмі, спочатку перетворюються з урахуванням сегментів у «лінійні», а вже вони за допомогою таблиці трансляції - в реальні «фізичні» адреси.

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

Захист важливих ділянок оперативної пам'яті від перезапису.

Один з найпростіших «прапорців», який вказується для адрес віртуальної пам'яті - це прапорець «тільки для читання», що дозволяє захистити певні області віртуальної оперативної пам'яті від запису. Приміром, зазвичай read-only оголошуються сторінки, що містять машинний код програми.

Захист програм від вірусів.

Основа новомодних «антивірусних» технологій на кшталт Microsoft Data Execution Prevention, що забезпечують надійний захист комп'ютера від експлойтів, що використовують атаки типу «переповнювання буфера», - крихітний Битик в таблиці трансляції (No eXecute - NX в AMD, і eXecute Disable, XD - у Intel), що забороняє виконання машинного коду з певних ділянок пам'яті.

Захист операційної системи.

Спеціальний біт дозволяє визначити деякі ділянки оперативної пам'яті як «системні» і принципово недоступні звичайному додатком як для читання, так і для запису.

Ефективний менеджмент оперативної пам'яті.

Цілий ряд спеціальних бітів дозволяє операційній системі відслідковувати, з яких адресами програма читала або записувала дані, і визначити «глобальні» сторінки пам'яті, загальні для всіх програм у процесорі.

Але найголовніший біт в таблиці трансляції - це «нульовий» біт P - Present, що забезпечує власне

По-справжньому віртуальну пам'ять.

Насправді, призначення цього біта досить просте - якщо він «скинутий» (встановлено в 0), то будь-яке звернення до оперативної пам'яті за цією адресою викликає системну помилку (виключення), що називається Page Fault (# PF). Але скільки ж на основі цієї «простоти» вдається побудувати! Адже, по суті справи, P-морський прапор - це зазначення процесору, що для обробки звернення програми до даного адресою пам'яті потрібно звернутися за допомогою до операційної системи.

Судіть самі: найпростіше застосування P-прапора - це реалізація своп-файлу, що дозволяє використовувати жорсткий диск замість фізичної оперативної пам'яті. Ідея в тому, що ми можемо для деяких сторінок віртуальної пам'яті не ставити їм у відповідність ніякого фізичної адреси оперативної пам'яті, а «скинути» для відповідних записів у таблиці трансляції P-прапор і зберегти сторінку у файл на жорсткому диску. Якщо звернень до даної сторінки не відбувається - то все добре. Якщо відбувається - то генерується виключення # PF. По суті своїй процесор просто припиняє виконання поточної програми, і заглядає у свій «довідник щодо дій у нештатних ситуаціях» - спеціальна ділянка пам'яті, в якому прописано, яку підпрограму операційної системи викликати в тому чи іншому випадку. У повній відповідності зі стандартом, процесор викликає обробник виключення # PF - один з ключових фрагментів будь-якої операційної системи. Обробник (фактично - операційна система) - «дивиться» на виниклу ситуацію («програма така-то полізла в пам'ять за адресою такому-то і була зупинена тому що прапор Present був скинутий»), визначає, що цією адресою відповідає сторінка пам'яті, якої немає в оперативній пам'яті, але яка є на жорсткому диску - і починає діяти:

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

      2. Читає потрібне місце своп-файлу, копіюючи дані з неї в цю сторінку.

      3. «Модернізує» таблицю трансляції, прописуючи в ній новий фізичну адресу для сторінки, через яку стався збій.

      4. Оновлює при необхідності дані в буфері TLB.

Після цих маніпуляцій «проблемний» адреса віртуальної пам'яті, який посилається на неіснуючу у фізичній пам'яті сторінку стає вже не таким вже й «проблемним» - потрібні дані вже завантажені в пам'ять, і таблиця трансляції потрібним чином оновлена. Так що оброблювачеві сигналу # PF залишається тільки повернути управління спочатку працювала програмі - і остання продовжить свою роботу, як ні в чому не бувало, навіть не здогадуючись про те, що в якомусь її місці одне-єдине звернення в пам'ять спровокувало таку довгу і складну процедуру «свопу» даних у фізичній пам'яті і на жорсткому диску.

Інші «популярні» застосування P-прапора віртуальної пам'яті дозволяють реалізовувати, приміром техніку «меппінга файлів на пам'ять». «Меппінга» - це коли програма за технологією, аналогічної техніки свопінгу, відображає за запитом програми той або інший файл у простір віртуальних адрес програми. Тобто можна домогтися того, щоб читання з елементу пам'яті # 13323658 виливалася б у автоматичне читання якого-небудь файлу program.data з позиції 3446. Це, по-перше, дуже зручно (файл не потрібно «читати» або «писати» - він вже доступний програмі у вигляді звичайного масиву або набору масивів), по-друге, дуже швидко (виробляється лише мінімально необхідний набір дій по завантаженню або записи даних), а по-третє, дуже ефективно (файл автоматично «кешується» в оперативній пам'яті, невживані сторінки з цього кеша автоматично ж прибираються, звільняючи фізичну пам'ять, при збереженні зберігаються тільки дійсно змінилися фрагменти файлу, а не все підряд, і т. п.). Хоча з-за обмежень порівняно вузького доступного програмі, яка працює під управлінням 32-бітних версій Microsoft Windows, віртуального простору в 2-3 Гбайт, і дуже громіздкою і незручною реалізації даної техніки засобами Win32 API, використовується вона досить рідко.

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

Це і є суть «віртуальної пам'яті» - користувальницька програма ніколи не може з упевненістю стверджувати, що ховається за абстрактним віртуальним адресою. Ми можемо як завгодно «дурити» її, здійснюючи за її спиною підтасування з реальними адресами, і домагатися з цією допомогою найрізноманітніших ефектів. Втім, про це ми поговоримо в наступному розділі. А поки - перерахуємо основні і більш затребувані переваги віртуальної пам'яті:

  • Віртуальна пам'ять має всі переваги сегментованої.

  • Але при цьому розміри віртуальної пам'яті, виділеної програмі, можуть як завгодно гнучко змінюватися.

  • Віртуальна пам'ять може «фізично» розміщуватися не тільки в оперативній пам'яті, але і на жорсткому диску і навіть у Мережі.

  • Віртуальна пам'ять не зобов'язана бути безперервної - її можна «нарізати» взагалі як завгодно, лише б це нам було зручно.

  • Можна задавати довільне число «пересічних» областей віртуальної пам'яті для різних програм, аж до того, що одні й ті ж дані будуть багаторазово відображені в адресний простір програми за різними адресами.

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

  • І не тільки помилкові: в задачах налагодження додатків віртуальна пам'ять дозволяє, наприклад, відстежити в будь-який момент таке «налагоджувальної подія», як просте читання програмою того чи іншого адреси в пам'яті.

Мінусів у віртуальній пам'яті всього два. По-перше, вона істотно уповільнює роботу комп'ютера (навіть проста трансляція віртуальних адрес, які не потрапили в TLB - дуже неквапливий заняття; обробка ж події # PF - і зовсім здатна зайняти сотні тисяч тактів процесора), а по-друге, - складна і абсолютно непрозора для рядового програміста.

а) Паравіртуалізація і бінарна трансляція

Отже, як ми вже сказали, всі користувальницькі програми сьогодні, фактично, працюють на «віртуальних» комп'ютерах - їм надається якась «узагальнено-стандартна» середовище виконання з віртуальною оперативною пам'яттю, і з цим «віртуальним комп'ютером» вони вільно працюють, не замислюючись про те, які реальні фізичні ресурси за цією віртуальністю стоять. Центральна завдання операційної системи - це підтримка цієї «віртуальної реальності» та своєчасне розподіл між цими віртуальності реальних апаратних ресурсів. Сама операційна система теж живе на одному з «віртуальних комп'ютерів», але, на відміну від всіх інших «мешканців» комп'ютера, володіє можливістю свою (і чужі) «реальності» змінювати і співвідносити з фізичними ресурсами комп'ютера.

І вже сама по собі подібна можливість дозволяє, насправді, реалізовувати практично все, що завгодно, з користувацькими додатками. Приміром, потенційно можна взяти, «зберегти» стан програми на флешку, «скопіювати» на інший комп'ютер і «продовжити» виконання програми вже на іншому комп'ютері. Можна (потенційно) запускати в одній і тій же операційній системі як Windows, так і POSIX-додатки (Linux, Unix-системи) - достатньо вміти створювати два «типу» віртуальних комп'ютерів, щоб кожен додаток отримувало рівно те середовище виконання, в якій воно звикло працювати. Але, на жаль, для користувача, подібні «хитрощі», що вимагають активної підтримки з боку операційної системи, реалізувати на практиці далеко не так просто, як розповісти про них. І забезпечити, скажімо, «рідну» підтримку Windows-додатків в Linux, так само як і зворотний підтримку Linux-додатків в Windows, з причини активної протидії Microsoft, неможливо. А тому користувач змушений обходитися без деяких цікавих функцій і задовольнятися Windows-додатками на Windows-системах і Linux-додатками на Linux-системах.

Як вихід із ситуації виникає цілком логічна пропозиція: якщо вже ми не можемо об'єднати в одній операційній системі можливості кількох різних ОС, то чому б одночасно запустити на своєму комп'ютері не одну, а відразу декілька операційних систем? Заодно і надійність підвищимо: якщо одна з операційних систем «впаде», інша залишиться, і буде здатна відновити «спав».

Характеристики

Тип файла
Документ
Размер
15,81 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6884
Авторов
на СтудИзбе
269
Средний доход
с одного платного файла
Обучение Подробнее