Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.11.2015, 22:35   #1
dimoni414
Пользователь
 
Регистрация: 20.09.2014
Сообщений: 13
Вопрос Преимущества Адресного пространства(виртуальной памяти) над физической памятью

Вечер добрый)
Читаю Таненбаума, отвечаю на вопросы.
Вопрос звучит так: "В современных ОС адресное пространство процесса отделено от физической памяти машины.
2 преимущества такой системы?"

Как я понимаю, адресное пространство это "Виртуальное представление физической памяти".
Чтобы обратиться к памяти, нужно спроецировать адресное пространство на физическую память.
1) вероятно, чтобы процесс не мог обратиться в чужую память и системе легче было отслеживать действия процесса(он как-будто в клетке, заключённый в своё адресное пространство)
2)??
Какие есть у вас мысли по этому поводу?
dimoni414 вне форума Ответить с цитированием
Старый 27.11.2015, 23:49   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
чтобы процесс не мог обратиться в чужую память
шутник, блин. а как, по-твоему, работают дебаггеры?
Цитата:
2 преимущества такой системы?"
преимущества над чем? над досовской сегментной моделью «сегмент:смещение»?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 28.11.2015, 01:06   #3
dimoni414
Пользователь
 
Регистрация: 20.09.2014
Сообщений: 13
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
шутник, блин. а как, по-твоему, работают дебаггеры?
я всего лишь высказал предположение, знай бы я ответ, я бы сюда не писал)

Поставлю вопрос по-другому:
Зачем адресное пространство процесса отделено от физической памяти машины?
dimoni414 вне форума Ответить с цитированием
Старый 28.11.2015, 01:26   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,831
По умолчанию

Поехали:
1. программисту нет необходимости знать реальное количество памяти и её распределение по адресам
2. независимость программы от аппаратуры
3. ОС имеет возможность эффективно изолировать процессы один от другого
4. виртуальная память имеет размер, превосходящий имеющуюся в наличии оперативную память компьютера
5. ОС может свободно перемещать процессы внутри памяти, при этом они не подозревают об этих изменениях
6. процесс можно разделить на несколько частей, каждая из которых отдельно отображается на реальную память, т.е. процесс не обязан размещаться в смежном блоке памяти
7. объем ввода-вывода для выгрузки части программы на диск может быть меньше, чем в варианте классического свопинга, в итоге, каждая программа будет работать быстрее
8. поскольку появляется возможность частичного помещения программы (процесса) в память и гибкого перераспределения памяти между программами, можно разместить в памяти больше программ, что увеличивает загрузку процессора и пропускную способность системы
p51x вне форума Ответить с цитированием
Старый 28.11.2015, 02:29   #5
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Товарищ p51x пояснил все строго и по делу.
Но позвольте я попытаюсь вам немного разжевать этот вопрос более подробно.

По поводу названия темы:
Цитата:
Преимущества Адресного пространства(виртуальной памяти) над физической памятью
Это не виртуальная память.
Виртуальная память - это другой механизм, о котором вы узнаете в последующем. И он берет на себя совсем иную задачу. Но он частично дополняет преимущество виртуального адресного пространства.
Но давайте условимся, что этот механизм мы не будем сейчас учитывать.
Его будто бы нет. Поэтому, просто вспоминайте лишний раз о том, что программисту необходимо учитывать размер физической памяти (оперативная память).
Но это сейчас лишнее.
Сперва уточним, что мы говорим о многозадачных ОС. ОС - которые берут на себя обязательства организовывать доступ к ресурсам машины сразу нескольким задачам. Так будет несколько проще понять саму суть.( для однозадачных систем тоже есть свое преимущество в понятии виртуального адресного пространства)
В подобных условиях, очень тяжело предугадать, где именно найдется свободное место вашей программе в памяти. Но сам факт того, что оно будет (свободное место) имеет место быть.
И вот, собственно, введение понятия виртуального адресного пространства, позволяет представить вашу программу операционной системе в таком виде, в котором позволит ей (операционной системе) загрузить вашу программу в физическую память без нарушения логики ее работы в отношении своих адресов (здесь речь идет только о тех адресах, которые входят именно в ваше виртуальное адресное пространство). Т.е. если вы опираетесь на какой-то конкретный адрес в вашем виртуальном адресном пространстве, то он должен остаться действительным и при расположении вашей программы в физической памяти.
Если бы идея о предоставлении каждой программе своего ИНДИВИДУАЛЬНОГО, НЕЗАВИСИМОГО адресного пространства не существовала. Программист заранее должен был бы учитывать это и соотв. вычислять для своей программы только те адреса, которые со 100% вероятностью будут свободны в момент загрузки в память. Т.е. получается, кусочек (я бы даже сказал кусище) обязательств самой ОС программист бы брал на себя.
В условиях многозадачности это, скорее всего, недостижимо.
Эта проблема отпадает, когда мы говорим о действительно единоличном владении памятью машины (опять же, при условии, что мы не рассматриваем сейчас механизм виртуальной памяти.). В таких условиях можно и отказаться от понятия виртуального адресного пространства.

Подводя маленькие итоги.
Виртуальное адресное пространство, это скорее не преимущество в сравнении с чем-то. Это попросту НЕОБХОДИМОЕ условия для поддержания многозадачности в системе.
Аналогию кстати тоже можно привести. Вы когда идете в кино. Вы заранее не знаете какой ряд и какое место вы займете. Его вам назначает кассир при покупке билета (выдает билет с номером вашего ряда и места). Теперь представьте, что вы оплачиваете билет, а место выбираете сами для себя ЗАРАНЕЕ без какого-либо контроля со стороны кассира (идете по направлению в зал с уверенностью, что ваше место свободно), при этом, если в последствии вы обнаруживаете, что ваше место уже занято кем-то другим, уходили бы попросту домой, или прогоняли бы домой человека, который занимал ваше место. По крайней мере, кто-то из вас в данной ситуации останется обделенным. Некорректно было бы тогда со стороны кинотеатра осуществлять продажу билетов на показ фильма. Какой же это тогда кинотеатр, если не осуществляется контроль мест в зале? (наличие зала и большого экрана давало бы право называться ему кинотеатром, но это был бы плохой кинотеатр)

Я не исключаю того, что где-то что-то недоговорил. Если что-то осталось не понятным, спрашивайте.

min@y™
Цитата:
преимущества над чем? над досовской сегментной моделью «сегмент:смещение»?
Причем здесь способы распределения памяти?
Цитата:
Сообщение от min@y™ Посмотреть сообщение
шутник, блин

Последний раз редактировалось Базиля; 28.11.2015 в 03:04.
Базиля вне форума Ответить с цитированием
Старый 28.11.2015, 06:46   #6
Pavia
Лис
Старожил
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 2,409
По умолчанию

Цитата:
Сообщение от Базиля Посмотреть сообщение
Подводя маленькие итоги.
Виртуальное адресное пространство, это скорее не преимущество в сравнении с чем-то. Это попросту НЕОБХОДИМОЕ условия для поддержания многозадачности в системе.
Это не так. Почти все ОС РМВ имеют многозадачность, но не поддерживают виртуальную память.



Цитата:
Сообщение от dimoni414 Посмотреть сообщение
1) вероятно, чтобы процесс не мог обратиться в чужую память и системе легче было отслеживать действия процесса(он как-будто в клетке, заключённый в своё адресное пространство)
Нет. Виртуализация адресного пространства не означает её защиту.

1) Виртуализация АПпредназначена в первую очередь для решения вопросов дефрагментации памяти. Что увеличивает эффективность работы динамических программ, а также ОС. Повышая скорость работы.
2) Позволяет задействовать зарезервированную, но не используемую память. Как бы увеличивая память.
3) Возможность экономить память. За счёт объединения одинаковых кусков в один. Что как оказалось малоэффективно.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .

Последний раз редактировалось Pavia; 28.11.2015 в 07:00.
Pavia вне форума Ответить с цитированием
Старый 28.11.2015, 11:56   #7
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Цитата:
Это не так. Почти все ОС РМВ имеют многозадачность, но не поддерживают виртуальную память.
Виртуальную память или виртуальное адресное пространство?
Цитата:
1) Виртуализация АПпредназначена в первую очередь для решения вопросов дефрагментации памяти. Что увеличивает эффективность работы динамических программ, а также ОС. Повышая скорость работы.
2) Позволяет задействовать зарезервированную, но не используемую память. Как бы увеличивая память.
3) Возможность экономить память. За счёт объединения одинаковых кусков в один. Что как оказалось малоэффективно.
Вы сейчас говорите уже непосредственно про распределение памяти.
Но, перед этим идет понятие виртуального адресного пространства, без которого в способах распределения особо не разбежишься.

Последний раз редактировалось Базиля; 28.11.2015 в 12:07.
Базиля вне форума Ответить с цитированием
Старый 28.11.2015, 14:00   #8
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
"В современных ОС адресное пространство процесса отделено от физической памяти машины.
всегда думал, что сервис виртуального адресного пространства предлагает железяка, а система его просто использует.
в прошлом веке первые CPU прланировались под выполнение одной задачи и вся память принадлежала одной задаче. когда поняли как круто будет выполнять несколько задач "одновременно" на одной железяке полезли проблемы с распределением и управлением памятью, для решения проблемы была предложена модель ремапа памяти, которая теперь используется во всех CPU.
f.hump вне форума Ответить с цитированием
Старый 30.11.2015, 01:35   #9
dimoni414
Пользователь
 
Регистрация: 20.09.2014
Сообщений: 13
По умолчанию

Ух ты! Тут прям дискуссия развернулась)
Большое всем спасибо за столь подробные ответы!
Пища для мозгов)

А теперь вопросики:
Цитата:
Сообщение от Базиля Посмотреть сообщение
Т.е. если вы опираетесь на какой-то конкретный адрес в вашем виртуальном адресном пространстве, то он должен остаться действительным и при расположении вашей программы в физической памяти.
Можете пояснить, пожалуйста, словосочетание: "должен остаться действительным"?
Что подразумевает под собой слово "действительный"?

P.S. Базиля, C кинотеатром отличная аналогия!
dimoni414 вне форума Ответить с цитированием
Старый 04.12.2015, 01:14   #10
Базиля
Участник клуба
 
Аватар для Базиля
 
Регистрация: 03.12.2009
Сообщений: 1,013
По умолчанию

Цитата:
Сообщение от dimoni414 Посмотреть сообщение
Можете пояснить, пожалуйста, словосочетание: "должен остаться действительным"?
Что подразумевает под собой слово "действительный"?
Когда вы пишете программу на каком-либо языке мнемонических команд (которые машина, к сожалению, не понимает. А точнее, кодовое значение мнемоник никак не соотв. действительным кодам команд, за которыми они закреплены) вы оперируете символьными адресами (имена переменных). Эти адреса, в конечном итоге, должны быть преобразованы в КОНКРЕТНЫЕ адреса расположения в физической памяти. Опять же, вспоминая про назначение виртуального адресного пространства - заранее неизвестно, где именно будет располагаться ваша программа. Посему, адреса из символьных(здесь уточню. Это те адреса, которые не понимает машина. С точки зрения семантики адресов - они не несут в себе какого-либо смысла. Это полный ХАОС Но, по правде говоря, "машина не понимает" - может быть и не совсем корректное высказывание. Она то все понимает - для нее все состоит из 0 и 1. Но все-таки, чтобы добиться какого-то обратного эффекта - мы должны закладывать в последовательность из нулей и единиц какой-то заранее определенный смысл. Символьные адреса, с точки зрения числовых адресов - набор чисел, зависящий от СИМВОЛЬНОЙ последовательности, а не от принципа построения и работы вашей программы.) преобразуются в виртуальные адреса. Виртуальные адреса - это такие адреса, которые уже несут в себе какую-то смысловую нагрузку. Они рассчитаны таким образом, что учитывают размеры самих значений, которые были закреплены вами за символьными переменными. Эти адреса соблюдают какую-то закономерность адресации в заданном участке (загнали стадо коров в загон ). Размеры этого участка конечно же учитываются (как пример, размер физической памяти). Т.е. грубо говоря - эти адреса уже можно применять при адресации в нашей программе после ее загрузки в физическую память. Но не в нашем случае. Вспоминая про то, что мы в памяти не одни (например, резидентные программы), необходимо еще одно преобразование, которые уже будет учитывать состояние физической памяти.
Вот это самое последнее преобразование никоим образом не должно разрушить наши ВИРТУАЛЬНЫЕ АДРЕСА (на которые и опирается наш код при своей работе). Они должны остаться действительными (сохранять свою силу действия) За это преобразования отвечает другой механизм, который частично опирается на основу механизма виртуального адресного пространства - виртуальные адреса.
Множество виртуальных адресов - можно интерпретировать как виртуально адресное пространство
В этом сообщении я раскрыл маленькие особенности. Но сам смысл, назначение и цель, никоим образом не поменялись. Процитирую:
Цитата:
Сообщение от Базиля Посмотреть сообщение
И вот, собственно, введение понятия виртуального адресного пространства, позволяет представить вашу программу операционной системе в таком виде, в котором позволит ей (операционной системе) загрузить вашу программу в физическую память без нарушения логики ее работы в отношении своих адресов (здесь речь идет только о тех адресах, которые входят именно в ваше виртуальное адресное пространство)
Теперь я могу немного уточнить - под "своими адресами" понимались именно виртуальные адреса.

Буду очень рад, если у вас возникнут новые вопросы.

Цитата:
Сообщение от f.hump Посмотреть сообщение
всегда думал, что сервис виртуального адресного пространства предлагает железяка, а система его просто использует.
Поясните, пожалуйста, что вы конкретно имели ввиду?
Хотелось бы побольше подробностей.

Последний раз редактировалось Базиля; 04.12.2015 в 01:46.
Базиля вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление виртуальной памятью Donat_Oshchepkov Visual C++ 3 13.12.2013 16:12
Чтение виртуальной памяти процесса Tambel Win Api 9 25.11.2013 12:58
Управление виртуальной памятью. Курсовая tuul_wq Помощь студентам 0 25.11.2012 20:44
Архитектура виртуальной памяти Vista alexabinsk Помощь студентам 0 25.06.2009 14:36
Проблемы с виртуальной памятью. DeKot Операционные системы общие вопросы 13 29.05.2009 11:10