Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
При использовании fork() из POSIX копируется вся user-space Page-Table родительского процесса в дочерний или просто где-то помечается, что эта часть используется одновременно и родительским и дочерним процессами? авторThe entire virtual address space of the parent is replicated in the child, including the states of mutexes, condition variables, and other pthreads objects; the use of pthread_atfork(3) may be helpful for dealing with problems that this can cause. И какая часть Page-Table копируется, или вся Stack + Heap + BSS + Data + Text? И если у них общая часть виртуального пространства, то зачем вообще им нужно анонимное отображение разделяемой памяти, ведь можно обмениваться данными просто через память в этом общем виртуальном пространстве? mmap Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 10:36 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
fork() расшаривает, У них общая часть только read only memory. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 11:44 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
C точки зрения прикладного разработчика, fork создает копию всей памяти процесса. С точки зрения разработчика ядра ОС, там могут быть оптимизации - копирование только таблицы страниц и использование механизма copy-on-write. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 13:13 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
fork() расшариваетИ если у них общая часть виртуального пространства, то зачем вообще им нужно анонимное отображение разделяемой памяти, ведь можно обмениваться данными просто через память в этом общем виртуальном пространстве? Если не рассматривать оптимизации, то fork создает копию памяти род. процесса, кроме памяти выделенной через mmap - она не копируется, а остается общей. Вот для этого и нужно анонимное отображение :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 13:38 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
Т.е. если с оптимизациями, то сначала копируется вся Page-Table, а затем по мере изменения данных по схеме copy-on-write данные по-странично копируются в новую физическую область и PTE из Page-Table перенаправляются туда? Исключения составляют mmap(,,,MAP_ANON|MAP_SHARED), но не mmap(,,,MAP_ANON|MAP_PRIVATE), и read-only данные. Кстати, а какие данные являются read-only на картинке из первого поста? Просто странно, что если область анонимного mmap() остается общей, то почему её не сделали с краю, а с краю разместили stack. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 20:48 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
fork() расшариваетПросто странно, что если область анонимного mmap() остается общей, то почему её не сделали с краю, а с краю разместили stack. А какая разница? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.10.2013, 23:53 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
А как тогда с помощью mmap() расшарить памяти между двумя уже запущенными процессами, но не через fork()? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2013, 13:17 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
но не через fork()А как тогда с помощью mmap() расшарить памяти между двумя уже запущенными процессами, но не через fork()? Через mmap в файле естественно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2013, 13:25 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyно не через fork()А как тогда с помощью mmap() расшарить памяти между двумя уже запущенными процессами, но не через fork()? Через mmap в файле естественно :) А он диск не будет использовать по чем зря? :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2013, 13:34 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
но не через fork()Anatoly Moskovskyпропущено... Через mmap в файле естественно :) А он диск не будет использовать по чем зря? :) Необязательно. Есть shm_open ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2013, 15:56 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
На самом деле практически всегда (если рассматривать обычные программы, без извращений) память процесса, хоть приватная хоть разделяемая, отображается на диск. Это либо исполняемые модули, либо явно отображенные файлы, ну и в остальных случаях это своп. Совсем другое дело, когда именно происходит доступ к диску (и вообще происходит ли) при работе с такой памятью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2013, 00:37 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
А обычно всё-таки оставляют возможность сохранять данные на диск для разделяемой памяти и если да то зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2013, 02:39 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
fork() расшариваетА обычно всё-таки оставляют возможность сохранять данные на диск для разделяемой памяти и если да то зачем?Ну собственно говоря, своп это и есть сохранение разделяемой памяти на диске. Обычно этим занимается сама ОС и приложению такой уровень контроля над памятью не нужен. Но для задач жадных до памяти (например базы данных) это может быть полезно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2013, 07:20 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
White Owlfork() расшариваетА обычно всё-таки оставляют возможность сохранять данные на диск для разделяемой памяти и если да то зачем?Ну собственно говоря, своп это и есть сохранение разделяемой памяти на диске. Обычно этим занимается сама ОС и приложению такой уровень контроля над памятью не нужен. Но для задач жадных до памяти (например базы данных) это может быть полезно. Ну если с обычной памятью я могу сделать mlock() чтобы не свопилась. То как этого же добиться для разделяемой памяти между процессами, обязательно использовать shm_open или есть и другие варианты? Все таки не хотелось бы чтобы из-за диска это влияло на скорость IPC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2013, 17:03 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
fork() расшариваетТо как этого же добиться для разделяемой памяти между процессами, обязательно использовать shm_open или есть и другие варианты? Память shm_open тоже свопится :) И вообще, непонятно чего вы боитесь так этого свопинга. Он влияет на производительность только при нехватке физической памяти. В большинстве случаев при отображении файла в память до записи в файл не доходит пока явно не будет вызван msync() или закрыто отображение. Для свопинга (как частного случая отображения файлов) эти две операции недоступны для юзера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2013, 17:48 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
fork() расшариваетпропущено... Ну если с обычной памятью я могу сделать mlock() чтобы не свопилась. То как этого же добиться для разделяемой памяти между процессами, обязательно использовать shm_open или есть и другие варианты? Все таки не хотелось бы чтобы из-за диска это влияло на скорость IPC. mmap с флагами MAP_LOCKED или MAP_HUGETLB. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.10.2013, 17:50 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
OoCcfork() расшариваетпропущено... Ну если с обычной памятью я могу сделать mlock() чтобы не свопилась. То как этого же добиться для разделяемой памяти между процессами, обязательно использовать shm_open или есть и другие варианты? Все таки не хотелось бы чтобы из-за диска это влияло на скорость IPC. mmap с флагами MAP_LOCKED или MAP_HUGETLB. А для этого надо скомпилировать ядро линукса с опцией HugeTLB fs? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 15:50 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
с опцией HugeTLBOoCcпропущено... mmap с флагами MAP_LOCKED или MAP_HUGETLB. А для этого надо скомпилировать ядро линукса с опцией HugeTLB fs? В общем случае зависит от ядра. В дистрибутивах с ядрами 3.XX достаточно установить параметр конфигурации ядра vm.nr_hugepages=<количество зарезервированных 2мб страничек>. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2013, 21:41 |
|
||
|
fork() расшаривает или копирует всю user-space Page-Table в дочерний процесс?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyfork() расшариваетТо как этого же добиться для разделяемой памяти между процессами, обязательно использовать shm_open или есть и другие варианты? Память shm_open тоже свопится :) И вообще, непонятно чего вы боитесь так этого свопинга. Он влияет на производительность только при нехватке физической памяти. В большинстве случаев при отображении файла в память до записи в файл не доходит пока явно не будет вызван msync() или закрыто отображение. Для свопинга (как частного случая отображения файлов) эти две операции недоступны для юзера. А кстати, если мы делаем msync(), то он всю буферезованную часть сваливает в файл, или у него где-то отмечается какие страницы менялись, а какие нет? Допустим если мы открыли файл в 1ГБ через mmap(), весь его прочитали, т.е. через множество page-fault подняли в память, теперь изменили только 1 байт, и вызвали msync(), то он весь 1ГБ начнет сваливать в файл или как-то определит ту страницу которую меняли и сохранит только её, и как он это определит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2013, 16:01 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2019856]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
170ms |
get topic data: |
12ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
| others: | 288ms |
| total: | 575ms |

| 0 / 0 |
