По всем вопросам- @workakkk
@itchannels_telegram - 🔥полезные ит-каналы
https://t.me/Golang_google - Golang программирование
@golangl - golang chat
@GolangJobsit - golang channel jobs
@golang_jobsgo - jobs
РКН: clck.ru/3FmvZA
#VRHSZ
Post #2178
3K

🚀 В Linux каждый процесс живёт в своей версии памяти.
Два разных приложения могут одновременно использовать один и тот же адрес, например
Почему так?
Потому что процесс видит не настоящую физическую память, а virtual address space - виртуальное адресное пространство.
Когда программа делает
Если запустить такую программу в двух терминалах, адрес может оказаться одинаковым.
Но это не значит, что процессы пишут в одну и ту же память.
Для каждого процесса ядро и MMU переводят виртуальные адреса в свои физические страницы. Один и тот же виртуальный адрес в процессе A может указывать на один участок RAM, а в процессе B - на другой.
Именно поэтому процессы изолированы друг от друга.
Программа думает:
«Это моя память».
На самом деле Linux говорит:
«Это твоя иллюзия памяти. А куда она реально мапится - решаю я».
Виртуальная память - одна из тех штук, без которых не было бы нормальной изоляции процессов, безопасного multitasking, shared libraries, fork, mmap и современного Linux в целом.
Два разных приложения могут одновременно использовать один и тот же адрес, например
0x555555..., но попадать при этом в совершенно разные места физической RAM.Почему так?
Потому что процесс видит не настоящую физическую память, а virtual address space - виртуальное адресное пространство.
Когда программа делает
malloc, она получает адрес, который выглядит как обычный указатель:
int *x = malloc(sizeof(int));
*x = getpid();
printf("PID %d -> virtual address: %p -> value: %d\n",
getpid(), (void*)x, *x);
Если запустить такую программу в двух терминалах, адрес может оказаться одинаковым.
Но это не значит, что процессы пишут в одну и ту же память.
Для каждого процесса ядро и MMU переводят виртуальные адреса в свои физические страницы. Один и тот же виртуальный адрес в процессе A может указывать на один участок RAM, а в процессе B - на другой.
Именно поэтому процессы изолированы друг от друга.
Программа думает:
«Это моя память».
На самом деле Linux говорит:
«Это твоя иллюзия памяти. А куда она реально мапится - решаю я».
Виртуальная память - одна из тех штук, без которых не было бы нормальной изоляции процессов, безопасного multitasking, shared libraries, fork, mmap и современного Linux в целом.
- ❤ 12
- 🔥 5
- 👍 2
- 🤔 1











