Mäluhaldus .Управление памятью

advertisement
Operatsioonisüsteemid.
Операционные системы
Virumaa Kolledž TTÜ
Lektor Larissa Joonas
2011
7.
Mäluhaldus. Mõiste
Управление памятью. Понятия
2
Teemad. Темы
1 Основное управление памятью. Põhiline mäluhaldus.
2 Подкачка. Swapping.
3 Виртуальная память. Virtuaalmälu.
4 Алгоритмы замещения страниц.
Lehekülgede vahetuse algorütmid.
5 Моделирование алгоритмов замещения страниц.
Lehekülgede vahetuse algorütmide modellerimine.
6 Realisatsioon. Вопросы реализации.
7 Сегментация. Segmentatsioon.
3
Mäluhaldus .Управление
памятью
• Mälu hierarhia. Иерархия памяти
– Väike kogus kiiret kallist mälu – vahemälu (cache). Небольшое количество
быстрой дорогой памяти - кэш
– Väheldane kogus keskmise kiirusega peamälu, keskmisega hinnaga.
Некоторое количество среднескоростной основной памяти по средней
цене
– Gigabaite aeglasest odavat kettamälu. Гигабайты медленной, дешевой
дисковой памяти
• Mälu manager haldab seda hierarhiat. Менеджер памяти
управляет этой иерархией
4
Juhtimise alus mäluhalduses. Основное управление памятью
Однозадачная система без подкачки на диск. Ühe ulessande
süsteem ilma kettale laadimiseta.
0xFF..
0xFF..
OS ROMis
Kasutaja
programm
0
Draiverid
ROM-is
Kasutaja
programm
Kasutaja
programm
OS RAMis
0
0xFF..
OS RAMis
0
Kolm kerge mälu haldamise moodust.Три простых способа
организации памяти
5
Mälu jaotamise metoodid.
Методы распределения памяти
Mälu jaotamise metoodid. Методы распределения
памяти
Välimise mälu kasutamisega.
С использованием внешней памяти
Lehekülgede saalimine.
Страничное распределение
Segmentide saalimine.
Cегментное распределение
Lk.-segm.
saalimine.Cегментностраничное распределение
Ilma välimise mälu kasutamiseta
Без использования внешней памяти
Fikseeritud jaotused.
Фиксированные разделы
Dünaamilised jaotud.
Динамические разделы
Ülekantavad jaotused.
Перемещаемые разделы
Swapping.Свопинг
6
Fikseeritud suurusega osad.
Многозадачность с фиксированными разделами
3
3
2
2
1
1
OS
OS
• Фиксированные разделы
– Erinevad järjekorrad igale osale. Отдельные очереди для
всех разделов
– Ühisjärjekord. Общая очередь
7
Dünaamilised jaotused.
Динамические разделы
OS
OS
OS
OS
1
6
6
7
7
2
8
8
3
4
5
3
4
5
3
5
8
Ülekantavad jaotused. Перемещаемые
разделы
OS
OS
1
1
2
2
3
3
9
Swapping. Подкачка
B
B
A Stack
A
OS
A Data
A Prog
OS
• Ruum andmete osa suurenemiseks. Представление
пространства для роста области данных
• Ruum andmete ja pinu osa suurenemiseks. Представление
пространства для роста стека и области данных
1
Aadresside häälestamine ja kaitsmine.
Настройка адресов и защита
• Ei ole võimalik teada täpselt kus mälus on mahutatud
programm
– Невозможно точно знать, где в памяти может быть
размещена программа
• Andmete ja koodi aadress ei saa olla absolutne. Адресация данных и
кода не может быть абсолютной
• Baas- ja piiriregistride kasutamine. Использование
базовых и предельных регистров
– Baasiregistrisse laaditakse mälu osa alguse aadress. В базовый
регистр загружается адрес начала раздела памяти
– Aadress on suurem, kui piiriregister on vigane. Адрес
больший, чем адрес предельного регистра, считается
ошибкой
1
Mäluhaldus biti massiivide abil. Управление
памятью с помощью битовых массивов
4
11110011
11000111
11100111
2
4
3
5
2
2
3
P 0 4 → H 4 2 → P 6 4 → H 10 3 → P 13 5 → P 18 2 → H 20 2 → P 22 3
• Mäluosa 5. protsessiga ja 3. vabaosaga. Часть памяти с 5
процессами и 3 свободными областями
• Vastatav biti kaart. Соответствующая битовая карта
• Samasugune informatsioon nimekirja moodi.Та же
информация в виде списка
1
Mäluhaldus seotu nimekirja abil. Управление
памятью с помощью связных списков
A
X
B
A
X
B
A
X
B
A
X
B
A
X
B
A
X
B
A
X
B
A
X
B
Neli naaber kombinatsioonide protsessi X lõpetamiseks.
Четыре комбинации соседей для завершения
процесса X
1
Vaba osa valimise algorütmid.
Алгоритмы выбора свободного
участка
• Первый подходящий участок. Esimene sobiv (
First-fit)
• Следующий подходящий участок. Järgmine sobiv
(Next-fit)
• Самый подходящий участок. Kõige sobivam
(Вest-fit)
• Самый неподходящий участок. Mitte sobiv
(Worst-fit)
• Быстрый подходящий участок. Kiire sobiv (Fastfit)
1
First-fit
• Otsime vaikseima piisava suurusega augu.
Peame labi otsima kogu nimekirja
– Kiirem. Самый быстрый
– Mälu alguses on palju protsesse, mida peaks
läbi vaatama vaba ruumi otsimisel.
• В начальной области памяти будет много
процессов, которые придется просматривать при
поиске свободного места
1
Next-fit
– Sagedamad augud kujunevad mälu ruumi lõpus,
kuhu jäävad suurimad vabad osad.
• Чаще всего свободные участки памяти
образуются в конце объема памяти, где остаются
самые большие свободные разделы
– Kõige suurem mäluosa jaotatakse väiksteks
plokkideks.
• Самый большой раздел памяти разбивается на
маленькие блоки
– Vajalik on mälu kokkusurumine, suure mäluosa
saamiseks.
• Необходимо сжатие, чтобы получить большой
раздел памяти в конце объема памяти
1
Вest-fit
– Otsime piisava suurusega augu. Peame läbi
otsima kogu nimekirja
• Выбирает блок, который ближе всего по размеру
к запрашиваемому
– Kui valime väiksema augu, fragmenteerimine
realiseerub väikestega fragmentidega.
• Если для процесса будет выбран самый
маленький блок, фрагментация будет
происходить маленькими фрагментами
1
Worst-fit
• Otsime suurima sobiva augu. Ka sel puhul
peame kogu nimekirja läbi otsima aga
erinevalt esimesest võib jätta suuremaid
jääkauke
1
Mälu
First-fit
Best-fit
Worst-fit
1
Buddy System
• Kogu kättesaadavat ruumi hinnatakse nagu ühe
plokki 2U suurusega.
– Общее доступное пространство рассматривается,
как единичный блок размером 2U
• Kui vajalik suurus vastab tingimusega 2U-1 < s <=
2U, siis protses võtab terve plokki.
– Если запрашиваемый размер удовлетворяет
условиям 2U-1 < s <= 2U, то отводится целый блок
• Vastasel korral jaguneb blokk kaheks samasuguseks väikeseks
blokiks.
– В противном случае блок разделяется на два одинаковых
маленьких блока
• Protsess jätkub nii kaua, kui plokki suurus ei ole võrdne või
vähem kui s.
– Процесс продолжается до тех пор, пока размер блока не
окажется большим или равным s
2
Пример
Buddy-системы
Buddy
System(2)
1Mbyte
100K ?
128K 128K
256K
512K
200K ?
128K 128K
256K
512K
400K ?
128K 128K
256K
512K
2
Дерево
Buddy-системы
Buddy
System(3)
2
Virtuaalmälu.
Виртуальная память
2
Jagamine lehekülgede abil.
Страничное распределение
• Virtuaal aadressid. Виртуальные адреса
• Virtuaal aadressi ruum. Виртуальное
адресное пространство
• Leheküljed, raamid ja plokkid. Страницы,
фреймы или блоки
• Lehekülje viga. Страничное прерывание
2
Jagamine lehekülgede abil.
Страничное распределение (3)
Seos virtuaalsete ja
füüsiliste aadresside
vahel ja lehekülje
tabeli abil.
Связь между
виртуальными и
физическими
адресами,
получаемая с
помощью таблицы
страниц
2
Lehekülje tabel.
Таблица страниц (1)
MMU sisemine
operatsioon 16
4 kb
leheküljega
Внутренняя
операция
MMU с 16
страницами по
4 KB
2
Lehekülje tabel.
Таблица страниц (2)
Tüüpiline kirjeldus lehekülje tabelis.
Типичная запись в таблице страниц
2
Lehekülgede vahetuse algorütmid.
Алгоритмы замещения страниц
• Lehekülgede valik. Выбор страницы
– Millist lehekülge tuleb eemaldada?
• Какая страница будет удалена
– Vabastama kohta uuele leheküljele.
• Освободить место для новой страницы
• Modifitseeritud lehekülg peab alguses olema salvestatud.
Модифицированная страница должна быть вначале
сохранена
– Mitte modifitseeritud leheküljed võivad ainult olla ülekirjatatud.
• Немодифицированные могут просто быть переписаны
• Parem on mitte eemaldada tihti kasutatavaid
lehekülgi. Лучше не удалять часто используемые
страницы
– Neid võib väga kiiresti vaja minna. Они могут очень скоро
понадобиться вновь
2
Optimaalne algorütm.
Оптимальный алгоритм (1)
• Vahetada leheküljed, mida ei lähe vaja lähimas
tulevikus.
– Замещать страницы, которые не будут
востребованы в ближайшем будущем
• Optimaalne, aga mitte realiseeriv. Оптимальный, но
нереализуемый
• Võimalik kasutada... Можно использовать …
– Arvestades viidete arvu eelmisel kasutamisel.
Учитывая число ссылок при предыдущем
использовании
2
Optimaalne algorütm.
Оптимальный алгоритм (2)
• Vahetab lehekülge, mida ei ole kasutatud pikemat
aega. Замещает страницу, не использовавшуюся
длительное время
• 4. raamiga näidis. Пример с 4 фреймами
1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
1
4
2
6 page faults
3
4
5
3
Optimaalne algorütm.
Оптимальный алгоритм (3)
3
Not Recently Used Page Replacement Algorütm –
не использовавшаяся в последнее время
страница
•
•
Iga leheküljel on viite loendur ja modifikatsiooni bitt.
Каждая страница имеет счетчик ссылок и бит
модификации
Lehekülgi klassifitseeritakse
–
1.
2.
3.
4.
•
Страницы классифицируются как
Ei olnud pöördumisi ja muutusi.Не было обращений и
изменений
Ei olnud pöördumisi, muutused olid. Не было обращений,
изменения были
Ei olnud muutusi, pöördumised olid. Не было изменений,
обращения были
Olid pöördumised ja muutused. Были и изменения и
обращения
NRU eemaldab lehekülje juhusliku otsimise abil удаляет страницу с помощью случайного поиска
3
Алгоритм FIFO
• Kasutab kõigi mälus asuvate lehekülgede nimekirja. Поддерживает список
всех страниц, находящихся в данный момент в памяти
– Selles järjekorras, millises nad mällu tulid. В том порядке в котором они
поступали в память
• Eemaldab lehekülje nimekirja alguses. Удаляется страница из начала списка
• Puudus. Недостаток
– Lehekülg võib olla tihti kasutatav. Страница может быть часто используема
3
Algorütm “Teine proov”.
Алгоритм «Вторая попытка»
• Действие алгоритма
– FIFO abil sorteeritud leheküljed. Страницы, отсортированные FIFO
– Lehekülgede nimikiri, kui lk.viga juhtus ajal 20, ja lk.A omab bitt R võrdne 0.
• Список страниц, если страничное прерывание произошло во время 20, а
страница А имеет бит R, равный 0
3
“Kella” algorütm.
Алгоритм «часы»
3
Least Recently Used (LRU)
• Vahetab lk., mis ei olnud kasutusel kõigem kauem.
– Выгружается страница, которая не использовалась дольше всего
• Peab kasutama seotud lk. nimekiri. Необходимо поддерживать связанный
список страниц
– Kõige tihedamini kasutatud alguses ja mitte kasutatud lõpus. Наиболее часто
используемые в начале, неиспользуемые в конце
– Uuendada iga mälusse pöördumise korral!!
Обновлять при каждом обращении к памяти !!
• Alternatiiv – kasutada loendurit, mis automaatselt suurendab iga käsu peale.
Альтернатива – снабдить аппаратным счетчиком, который автоматически
возрастает после каждой команды
– Valitakse lehekülgi väiksema loenduri arvuga. Выбираются страницы с
меньшим значением счетчика
– Perioodiline loendur alandub 0.-le.
• Периодически счетчик обнуляется
3
LRU
• 1, 2, 3, 4, 1, 2, 5, 1, 2, 3, 4, 5
1
5
2
3
5
4
3
4
3
LRU simulatsioon.
Симуляция LRU (1)
LRU kasutatab maatriksit. LRU, использующий матрицу.
Järjekord lk. pöördumisele:
Порядок обращения к страницам:
0,1,2,3,2,1,0,3,2,3
3
LRU simulatsioon.
Симуляция LRU (2)
• Vananemise algorütm modellerub LRU programmiga.
Алгоритм старения программно моделирует LRU
• 6 lehekülge - 5 kella tiksu peale.Изображены 6 страниц после
5 тиков часов, (a) – (e)
3
Tööhulga algorütm
Алгоритм «рабочий набор» (1)
• Tööhulk on lehekülgede kogum, lehekülgedega, mis on kasutatud viimase
pöördumise ajal. w(k,t) näitab tööhulga mahtu aja momendil t.
• Рабочий набор – множество страниц, используемых последними
обращениями к памяти. Функция w(k,t) представляет собой размер
рабочего набора в момент времени t
4
Tööhulga algorütm.
Алгоритм «рабочий набор» (2)
Алгоритм «рабочий набор»
4
Алгоритм WSClock
Пример работы алгоритма
4
Algorütmide ülevaade.
Обзор алгоритмов замещения страниц
4
Lehekülgede vahetuse modellerimine. Bilady anomaalia.
Моделирование алгоритмов замещения страниц.
Аномалия Билэди
• Kolm plokki. FIFO с тремя страничными блоками
• Neli plokki. FIFO с четырьмя страничными блоками
4
Stack Algorütm – магазинный
алгоритм
7
4
6 5
Mälu massiivi M seisund peale igat pöördumist ridade
töötlemisel.
Состояние массива памяти M после обработки каждого
элемента строки обращений
4
Kauguse rida.
Строка расстояний (1)
Tõenäosuse tihedus kahe hüpoteetiliste kauguste ridadele.
Плотность вероятности для двух гипотетических строк
расстояний
4
Kauguse rida.
Строка расстояний (2)
• Lehekülgede vigade arvu arvutamine kauguse järjekorrast.
Vektor C. Vektor F.
• Вычисление количества страничных прерываний из
последовательности расстояний: вектор C, вектор F
4
Вопросы разработки систем со страничным
распределением. Политика распределения памяти (1)
Mälu jaotamise poliitika.
• Lähte konfiguratsioon. Исходная конфигурация
• Lokaalne lk.vahetus. Локальное замещение страниц
• Globaalne lk.vahetus. Глобальное замещение страниц
4
Mälu jaotamise poliitika: lokaalne ja globaalne.(2)
Политика распределения памяти: локальная и
глобальная
Lehekülje vea sagedus, kui funktioon lk.plokki arvu poolt.
Частота страничных прерываний, как функция от количества
предоставленных процессу страничных блоков
4
Laadimise reguleerimine.
Регулирование загрузки
• Isegi parimate algorütmide kasutamisel süsteem ei saa edasi töödata. Даже при
использовании лучших алгоритмов система может буксовать
• PFF algorütm näitab et
PFF алгоритм показывает, что
– Mõndadele protsessidele on vaja rohkem mälu.
• Некоторым процессам нужно больше памяти
– Ei ole protsesse, mis tahaks vähem mälu.
• Но нет процессов, которым нужно меньше памяти
• Lahendus:
Решение :
Vähendada pretendeerivate protsesside arvu. Уменьшить число процессов,
сражающихся за память
– Ümber paigutama üks osa kettale. Переместить часть на диск
– Defineerima multitasking. Установить уровень многозадачности
5
Lehekülje suurus.
Размер страницы (1)
Väike suurus. Маленький размер страницы
• Eeldused. Преимущества
– Väiksem sisemine fragmentatsioon. Меньшая внутренняя
фрагментация
– Kergem leida sobiva suurusega osa. Легче найти раздел
подходящего размера
– Vähem mittekasutatavaid programme mälus. Меньше
неиспользуемых программ в памяти
• Puudused. Недостатки
– Programm vajab palju lehekülgi, lehekülje tabel on suur.
• Программе необходимо много страниц, таблица страниц
большая
5
Lehekülje suurus (2)
• Lisakulud suure tabeli toetamisele. Общие
накладные расходы вследствие поддержки
таблицы страниц
page table space
se
 p
o
v
e
r
h
e
a
d 
p 2
• Где
– s = average process size in bytes
– p = page size in bytes
– e = page entry
internal
fragmentation
Optimized when
p  2se
5
Erinevad ruumid käskudele ja andmetele.
Отдельные пространства команд и данных
• Ühe aadressi ruum.Одно адресное пространство
• Erinevad ruumid. Отдельные I и D пространства
5
Kollektiivne kasutavad leheküljed.
Совместно используемые
страницы
Kaks protsessi kasutavad ühte programmi ja tema lk.tabelit.
Два процесса используют одну и ту же программу, разделяя ее таблицу
страниц
5
Lehekülje puhastamise poliitika.
Политика очистки страниц
• On vajalik taust protsess. Необходим фоновый
процесс, paging daemon
– Perioodiliselt inspekteerib mälu.Периодически
инспектирует состояние памяти
• Kui vabaid plokke on väga vähe
– Если свободно слишком мало блоков
• Valib lehekülgi mälust kustutamiseks. Выбираются
страницы для удаления из памяти
• Kahe kellaosuti pritsiip. Использование
принципа часов с двумя стрелками
5
Realiseerimise küsimused. OS-i osalemine lk.vahetuse kasutusel.
Вопросы реализации. Участие ОС в процессе подкачки страниц
Neli situatsiooni, milles OS osaleb lehekülgede vahetuses.Четыре
ситуации, в которых ОС выполняет работу по подкачке
страниц
1.
Protsessi loomine. Создание процесса


Programmi suuruse defineerimine.Определение размера программы
Lk. tabeli loomine. Создание таблицы страниц
Protsessi kasutamine. Исполнение процесса
2.


MMU puhastus. Сброс диспетчера памяти MMU
TLB puhastus. TLB очищается
Lehekülje viga. Страничное прерывание
3.

Vigane virtuaalse aadressi määramine. Определение виртуального
адреса, вызвавшего ошибку
Protsessi katkestamine. Прерывание процесса
4.

Vabastada lk.tabeli ja leheküljed. Освободить таблицу страниц и
страницы
5
Lehekülje vigu töötlemine. Обработка
страничного прерывания (1)
1.
2.
3.
4.
5.
Ristvara lülitab süsteemi tuuma reziimile. Аппаратное
обеспечение переключает систему в режим ядра
Põhiregistrid salvestuvad. Сохраняются основные
регистры
OS määrab, missugused virtuaalsed lk. on vaja.OS
определяет, какие виртуальные страницы необходимы
OS määrab, kas aadress on mõjus ja kas kaitse sobib
juurdepääsu. OS определяет, действителен ли адрес, и
согласуется ли защита с доступом
Kui valitud blokk on “must”, siis ta salvestub kettale.Если
выбранный блок «грязный», то он записывается на диск
5
Lehekülje vigade töötlemine.
Обработка страничного
прерывания (2)
1.
2.
3.
4.
5.

OS planeerib uue lk. ülekandmist kettalt. OS планирует
операцию по переносу новой страницы с диска
Lk. tabel uuendub. Таблицa страниц обновляется
Katkestatud käsk tagastub sellesse seisundisse millel ta
katkestus. Прерванная команда возвращается к тому
состоянию, на котором прервалась
Katkestatud protsess pannakse graafikusse. Прерванный
процесс вносится в график
Registrid ümberlaaditud ja juhtimine läheb tagasi kasutaja
ruumi. Регистры перезагружаются и возвращается
управление в пользовательское пространство
Programmi töö jätkub. Продолжается работа программы
5
Katkestatud CPU käsu
ümberkäivitamine.
Перезапуск прерванной команды
процессора
Käsk, mis kutsub esile lehekülje vea.
Команда, вызвавшая страничное прерывание
5
Lehekülgede blokeerimine.
Блокирование страниц в памяти
• Virtuaalne mälu ja sisend-väljund mittesilmapaistvalt vastastikuselt
mõjuvad Виртуальная память и ввод-вывод незаметно
взаимодействуют друг с другом
• Protsess teeb süsteemi kutsungi selleks, et lugeda informatsiooni
failist ja seadmest puhvrisse
Процесс делает системный вызов, чтобы считать информацию из
файла и с устройства в буфер
– Kuni see protsess ootab sissendit või väljudit, teine protsess stardib. Пока
процесс ожидает ввода или вывода, другой процесс стартует
– Tekkib lehekülje viga. Происходит страничное прерывание
– Lehekülg, mis sisaldab puhvrit, võib olla valitud mälust eemaldamisele.
Страница, содержащая буфер, может быть выбрана для удаления из
памяти
• On vajalik blokeerida leheküljed, mis on kinni sisend-väljundis.
Необходимо блокировать страницы, занятые вводом-выводом
6
Lehekülje mälu süilitamine kettas.
Хранение страничной памяти на
диске
(a) Paging staatilisele osale.Постраничная подкачка в
статическую область свопинга
(b) Dünaamiline lk. reserveerimine.Динамическое
резервирование страниц
6
Poliitika ja mehhanismi lahutamine.
Разделение политики и механизма
Lk.vea töötlemine välise töötleja abil. Обработка страничного
прерывания с внешним обработчиком страниц
6
Segmenteerimine. Сегментация
(1)
• Liini aadressi ruumis tabeli kasvamisel võivad kaks tabelit kokku puuduma.
• В одномерном адресном пространстве при росте таблиц одна может
упереться в другую
6
Segmenteerimine. Сегментация
(2)
Segmenteeritud mälu lubab igale tabelile kasvatada iseseisvust.
Сегментированная память позволяет каждой таблице расти или
уменьшаться независимо от других
6
Segmenteerimine. Сегментация
(3)
Lk.vahetuse ja segmenteerimise võrdlemine.
Сравнение страничного распределения и сегментации
6
Puhas segmenteerimise realiseerimine.
Реализация чистой сегментации
(a)-(d) Välise fragmenteerimise areng. Pазвитие внешней
фрагментации
(e) Fragmenteerimise eemaldamine.Устранение
фрагментации с помощью уплотнения
6
Segmenteerimine lk. kasutusega.
Сегментация с использованием страниц :
MULTICS(1)
• Deskriptori segment osutab lk.tabelisse. Сегмент дескрипторов
указывает на таблицу страниц
• Deskriptori segment, arvud tähendavad väljade pikkus.
Дескриптор сегмента, числа означают длину полей
6
Segmenteerimine lk.kasutusel. Сегментация
с использованием страниц : MULTICS(2)
34-bittine virtuaalne aadress MULTICSis.
34-разрядный виртуальный адрес в системе MULTICS
6
Segmenteerimine lk.kasutusel. Сегментация
с использованием страниц : MULTICS(3)
Преобразование адреса, состоящего из 2 частей в адрес в
оперативной памяти
6
Segmenteerimine lk.kasutusel. Сегментация
с использованием страниц : MULTICS (4)
•
•
Простейший вариант MULTICS TLB
Существование двух размеров страниц делает преобразование сложным
7
Segmenteerimine lk.kasutamisega. Сегментация с
использованием страниц : Pentium (1)
Selektor Pentiumis. Селектор в Pentium
7
Segmenteerimine lk.kasutamisega. Сегментация с
использованием страниц : Pentium (2)
• Programmi segmendi deskriptor Pentiumis.
• Дескриптор программного сегмента в системе Pentium
7
Segmenteerimine lk.kasutamisega. Сегментация с
использованием страниц : Pentium (3)
Paari ümberkujundamine (selektor ja nihe) füüsiliseks
aadressiks. Преобразование пары (селектор, смещение)
в физический адрес
7
Segmenteerimine lk.kasutamisega. Сегментация с
использованием страниц : Pentium (4)
Liini aadressi proetseerimine füüsilisele aadressile. Отображение
линейного адрес на физический адрес
7
Segmenteerimine lk.kasutamisega.Сегментация с
использованием страниц : Pentium (5)
Level
Kaitse Pentiumis. Защита в Pentium
7
7
Download