Вопрос по управлению процессами

Модератор: Модераторы разделов

Аватара пользователя
andreas90
Сообщения: 158
ОС: Bluewhite64 12.2

Вопрос по управлению процессами

Сообщение andreas90 »

Сейчас читаю Лава "Разработка ядра LInux', главу "Управление процессами".
Вот параграф "Копирование при записи"
"

В ОС lINUX вызов fork () реализован с использованием механизма copy-on-write страниц памяти. Технология COW позволяет отложить или вообще предотвратить копирование данных. Вместо создания дубликата адресного пространства процесса родительский и порожденный процессы могут совместно использовать одну и ту же копию адресного пространства. Однако при этом данные помечаются особым образом, и если вдруг один из процессов начинает изменять данные, то создается дубликат данных, и каждый процесс получает уникальную копию данных. Следовательно,дубликаты ресурсов создаются только тогда, когда в эти ресурсы осуществляется запись, а до того момента они используются совместно в режиме read-only. Такая техника позволяет задержать копирование каждой страницы памяти до того момента, пока в страницу памяти не будет осуществлена запись. В случае, если в страницы памяти никогда не будет осуществляться запись, как например, при вызове функции exec() сразу же после вызова fork(), то эти страницы никогда не копируются.Единственные накладные расходы, которые вносит функция fork() - это копирование таблиц страниц родительского процесса и создание дескриптора порожденного процесса....... т.д.
"
Читая этот параграф, у меня возник ряд вопросов:
1. О каких "таблицах страниц" родительского процесса идет речь?
2. Что понимается под записью в страницу памяти? (лучше на примере)
3. Что вообще обычно процесс хранит в страницах памяти?
4. Зачем вообще нужен механизм COW? Для экономии памяти?
5. Вызов функции exec() - это разве не запись в страницу памяти?

Если можно, объясните "на пальцах" как чайнику
"Ubuntu" is an ancient African word, that means "I can't configure Slackware"
Спасибо сказали:
Аватара пользователя
BlackStar
Сообщения: 1338
Статус: We are all Kosh
ОС: Fedora 10

Re: Вопрос по управлению процессами

Сообщение BlackStar »

Вся память условна разделена так называемые страницы одинакового размера, для 32-битных архитектур обычно 4Кб.
1. Таблицы страниц содержат адреса страниц выделенных ОС данному процессу.
2. Например, переменная i поменяла свое значение.
3. Свои данные, например мы динамически выделели память для массива.
4. Для экономии памяти и для быстрого запуска нового процесса.
5. Вызов exec() сразу после fork(), полностью замещает адресное пространство процесса новым, поэтому ничего от предка копировать не надо.
LightLang Team
Спасибо сказали:
Аватара пользователя
andreas90
Сообщения: 158
ОС: Bluewhite64 12.2

Re: Вопрос по управлению процессами

Сообщение andreas90 »

BlackStar писал(а):
26.03.2008 15:27
Вся память условна разделена так называемые страницы одинакового размера, для 32-битных архитектур обычно 4Кб.
1. Таблицы страниц содержат адреса страниц выделенных ОС данному процессу.
2. Например, переменная i поменяла свое значение.
3. Свои данные, например мы динамически выделели память для массива.
4. Для экономии памяти и для быстрого запуска нового процесса.
5. Вызов exec() сразу после fork(), полностью замещает адресное пространство процесса новым, поэтому ничего от предка копировать не надо.


Спасибо.
"Ubuntu" is an ancient African word, that means "I can't configure Slackware"
Спасибо сказали: