Các trọn vẹn của fork()
được thực hiện sử dụng mmap / sao chép vào ghi.
Điều này không chỉ ảnh hưởng đến heap mà còn chia sẻ các thư viện, stack, BSS.
Điều này, tình cờ, có nghĩa là ngã ba là một hoạt động cực kỳ nhẹ, cho đến khi 2 quá trình kết quả (cha mẹ và con) thực sự bắt đầu ghi vào phạm vi bộ nhớ. Tính năng này là một đóng góp chính cho tính sát thương của bom ngã ba - bạn kết thúc với quá nhiều quá trình trước khi kernel bị quá tải với sự sao chép và phân biệt trang.
Bạn sẽ khó có thể tìm thấy trong một hệ điều hành hiện đại một ví dụ về hoạt động trong đó kernel thực hiện một bản sao cứng (trình điều khiển thiết bị là ngoại lệ) - việc sử dụng chức năng VM trở nên dễ dàng và hiệu quả hơn rất nhiều.
Thậm chí execve()
về cơ bản là "vui lòng mmap nhị phân / ld.so / whatnot, tiếp theo là thực thi" - và VM xử lý việc tải thực tế của quá trình vào RAM và thực thi. Các biến chưa được khởi tạo cục bộ cuối cùng được tạo ra từ 'zero-page' - trang sao chép chỉ đọc đặc biệt có chứa số 0, các biến khởi tạo cục bộ cuối cùng được ghi lại (bản sao trên ghi, một lần nữa) từ chính tệp nhị phân, v.v.