Linux иштөө тутумунда fork системалык чакырыгын колдонуп, процесстин көчүрмөсүн түзгөндө, анын эс тутуму менен эмне болот?
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 механизми аркылуу. Бул — толугу менен көзкарандысыз процесстер.