Чӣ мешавад бо хотираи раванди вақте ки мо нусхаи онро бо истифода аз фармони системаи fork дар системаи оператсионӣ Linux месозем?
sobes.tech AI
Ҷавоб аз AI
Ҳангоми даъвати fork(), ядрои системаи оператсионӣ як раванди нав, филзод эҷод мекунад, ки тақрибан нусхаи дақиқи параст мебошад.
Аз нуқтаи назари хотира, дар ин ҷо ҳодисаҳои зерин рӯй медиҳанд:
-
Масоҳати виртуалии суроға: Фарзанд ба масоҳати виртуалии суроғаи худ дастрасӣ пайдо мекунад, ки дар он вақти даъвати
fork()бо падар якхела аст. Ин маъно дорад, ки фарзанд "мебинад" ҳамон диапазонҳои суроғаҳоро ва сохтори сегментҳоро (код, маълумот, стек, холӣ) дорад, ки ва падар. -
Хотираи физикӣ ва Copy-on-Write (CoW): Аввал, раванди падар ва фарзанд ба якҷоягӣ ба ҳамон саҳифаҳои хотираи физикӣ истифода мебаранд. Ин оптимизатсия бо номи "Copy-on-Write" (CoW) маъруф аст. Ҳамин ки яке аз равандуҳо кӯшиш мекунад, ки мазмуни саҳифаро тағйир диҳад, ядро нусхаи навро месозад.
- Агар раванди падар ё фарзанд маълумотро дар саҳифа нависад, ки қаблан умумӣ буд, ядро нусхаи навро барои раванди навиштани он месозад. Раванд дигар дар версияи кӯҳнаи саҳифаро истифода мебарад.
- Агар равандуҳо танҳо маълумотро мехонанд, онҳо ба истифодаи саҳифаи умумии хотираи физикӣ идома медиҳанд.
-
Дастгирии файл: Дастгирии файлҳои кушод дар фарзанд мерос мемонад. Ҳарду равандуҳо нишондиҳандаҳоро барои ҷойгиршавии дар файл истифода мебаранд.
-
Манбаъҳои дигар: Манбаъҳои дигар, ба монанди ҳодисаҳои сигналӣ, директорияи кории ҳозира ва ғайра, низ нусхабардорӣ ё мерос мегиранд.
Ин аст тасвиркунии содда:
Пеш аз fork():
+-------------------+
| Раванди падар |
| +-----------------+ |
| | Виртуалӣ |
| | (Стек, Холӣ, ...) |
| +-----------------+ |
| | |
| V |
| +-----------------+ |
| | Физикӣ |
| +-----------------+ |
+-------------------+
Баъд аз fork() (CoW):
+-----------------------+ +-----------------------+
| Раванди падар | | Раванди фарзанд |
| +-------------------+ | | +-------------------+ |
| | Виртуалӣ | | | | Виртуалӣ | |
| | (Ҳамон структура) | | | | (Ҳамон структура) | |
| +-------------------+ | | +-------------------+ |
| | | | | |
| V | | V |
| +-----------------------+ | +-----------------------+
| | Физикӣ | | | Физикӣ | |
| | (Баъзе саҳифаҳо умумӣ) | | | (Баъзе саҳифаҳо умумӣ) | |
| +-----------------------+ | +-----------------------+
+-----------------------+ +-----------------------+
| |
+----------------------------+
Саҳифаҳои аввалини умумӣ
Пас аз навиштани ба яке аз саҳифаҳо (активатсия кардани CoW):
+-----------------------+ +-----------------------+
| Раванди падар | | Раванди фарзанд |
| +-------------------+ | | +-------------------+ |
| | Виртуалӣ | | | | Виртуалӣ | |
| | (Саҳифаҳо алоҳида) | | | | (Саҳифаҳо алоҳида) | |
| +-------------------+ | | +-------------------+ |
| | | | | |
| V | | V |
| +-----------------------+ | +-----------------------+
| | Физикӣ | | | Физикӣ | |
| | (Саҳифаҳои алоҳида) | | | (Саҳифаҳои алоҳида) | |
| +-----------------------+ | +-----------------------+
Муҳим аст, ки фаҳмем, ки ҳарчанд пас аз fork() масоҳати виртуалӣ якхела аст, ҳар гуна тағйирот дар хотираи як раванд (навишт ба тағйирёбандаҳо, тақсимот/озодкунии хотира дар холӣ) ба хотираи раванди дигар таъсир намерасонад, ки бо механизми CoW таъмин мешавад. Ин равандуҳо комилан мустақил мебошанд.