Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Віртуальна пам'ять UNIX




Приклади віртуальної пам'яті

Віртуальна пам'ять

В перших комп'ютерах пам'ять була дуже малою по об’єму і до того ж дорого коштувала. IBM-650, найкращий комп'ютер того часу (кінець 50-х років), містив тільки 2000 слів пам'яті. Один з перших 60 компіляторів, ALGOL, був написаний длякомп'ютера з розміром пам'яті 1024 слова. Древня система з поділом часу прекрасно працювала на комп'ютері PDP-1, загальний розмір пам'яті якого складав 4096 18-бітних слів для операційної системи і користувальницьких програм. У ті часи програмісти витрачали дуже багато часу на те, щоб вмістити свої програми в малюсіньку пам'ять. Часто доводилось використовувати алгоритм, що працює набагато повільніше іншого алгоритму, оскільки кращий алгоритм був занадто великим по розміру і програма, у якій використовувався цей кращий алгоритм, могла не поміститися в пам'ять комп'ютера.

Традиційним рішенням цієї проблеми було використання допоміжної пам'яті (наприклад, диска). Програміст поділяв програму на кілька частин, так званих оверлеїв, кожний з який міг поміститися в пам'ять. Щоб прогнати програму, спочатку треба було зчитувати і запускати перший оверлей. Коли він завершувався, потрібно було зчитувати і запускати другий оверлей і т.д. Програміст відповідав за розбивку програми на оверлеї і вирішував, у якому місці допоміжної пам'яті повинний був зберігатися кожен оверлей, контролював передачу оверлеїв між основною і допоміжною пам'яттю і взагалі керував усім цим процесом без будь-якої допомоги з боку комп'ютера. Хоча ця технологія широко використовувалася протягом багатьох років, вона вимагала тривалої кропіткої роботи, зв'язаної з керуванням оверлеями. У 1961 році група дослідників з Манчестера (Англія) запропонувала метод автоматичного виконання процесу накладення, при якому програміст міг узагалі не знати про цей процес. Цей метод, що зараз називається віртуальною пам'яттю, мав очевидну перевагу, оскільки звільняв програміста від величезної кількості нудотної роботи. Вперше цей метод був використаний у ряді комп'ютерів, випущених у 60-і роки. До початку 70-х років віртуальна пам'ять з'явилася в більшості комп'ютерів. В даний час навіть комп'ютери на одній мікросхемі, у тому числі Pentium II і UltraSPARC II, містять дуже складні системи віртуальної пам'яті.

У цьому розділі ми поговоримо про віртуальну пам'ять у системах UNIX і NT. З погляду програміста вони багато в чому подібні.

Модель пам'яті в системі UNIX досить проста. Кожен процес має три сегменти: код, дані і стек, як показано на мал. 6.8. У машині з лінійним адресним простором код звичайно розташовується в нижній частині пам'яті, а за ним йдуть дані. Стек міститься у верхній частині пам'яті. Розмір коду фіксований, а дані і стек можуть збільшуватися або зменшуватися. Таку модель легко реалізувати практично на будь-якій машині. Вона використовується в операційній системі Solaris.

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

Опис, даний вище (віртуальна пам'ять з підкачуванням сторінок за вимогою), у цілому підходить для Berkeley UNIX. Однак Sysytem V (і Solaris) має деякі особливості, що дозволяють користувачам керувати віртуальною пам'яттю. Найважливішою є здатність процесу відображати файл або частину файла на частину його адресного простору. Наприклад, якщо файл в 12 Кбайт відображається на віртуальну адресу 144 К, то в осередку задресою 144 К буде знаходитися перше слово цього файлу. Таким чином, можна здійснювати ввод-вивод файлу без застосування системних викликів. Оскільки розмір деяких файлів може перевищувати розмір віртуального адресного простору, можна відображати не весь файл, а тільки його частину. Щоб здійснити відображення, спочатку потрібно відкрити файл і одержати дескриптор файлу (file descriptor). Дескриптор використовується для ідентифікації файлу, який потрібно відобразити. Потім процес робить виклик paddr=rnap (virtua1_address.lengtfi.protec1on.flags.fd.fi]e_offset) який відображає length, починаючи з filejoffset у файлі, у віртуальний адресний простір, починаючи з virtual_address. Параметр flags вимагає, щоб система вибрала віртуальну адресу, що потім повертається в paddr. Відображувана область повинна містити ціле число сторінок і повинна бути вирівняна в гра-iniiax сторінки. Параметр protection визначає дозвіл на читання, запис iвиконання (у будь-якій комбінації). Відображення можна надалі видалити за допомогою команди unmap.

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




Поделиться с друзьями:


Дата добавления: 2015-04-24; Просмотров: 474; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.