Fork (lời gọi hệ thống)

Trong khoa học máy tính, đặc biệt là trong bối cảnh của hệ điều hành Unix và tương tự Unix, fork là một hoạt động mà một tiến trình tạo ra một bản sao của chính nó. Nó thường là một lời gọi hệ thống, được thực hiện trong kernel. fork là phương thức chính (và là duy nhất trong lịch sử) để tạo tiến trình trên các hệ điều hành tương tự Unix. Trong các hệ điều hành đa nhiệm, các tiến trình (chương trình đang chạy) cần một cách để tạo các tiến trình mới, ví dụ, để chạy các chương trình khác. fork và các biến thể của nó thường là cách duy nhất để làm việc này trong các hệ thống tương tự Unix. Để một tiến trình bắt đầu thực thi một chương trình khác, trước tiên, nó tạo ra một bản sao của chính nó. Sau đó, bản sao này (được gọi là "tiến trình con") gọi lời gọi hệ thống exec để ghi đè chính nó bằng chương trình khác: nó ngừng thực thi chương trình cũ của nó để chạy chương trình kia. fork tạo ra một không gian địa chỉ riêng cho tiến trình con. Tiến trình con có một bản sao của tất cả các phân đoạn bộ nhớ của tiến trình cha. Trong các biến thể UNIX hiện đại tuân theo mô hình bộ nhớ ảo của SunOS-4.0, sao chép khi ghi (copy-on-write) được thực hiện và bộ nhớ vật lý không cần phải được sao chép thực sự. Thay vào đó, các trang bộ nhớ ảo trong cả hai tiến trình có thể tham chiếu đến cùng một trang của bộ nhớ vật lý cho đến khi một trong số chúng ghi vào một trang như vậy, nó sẽ được sao chép. Khi một tiến trình gọi fork, nó được coi là tiến trình cha, và tiến trình mới được tạo là con của nó. Sau khi fork, cả hai tiến trình không chỉ chạy cùng một chương trình, mà chúng tiếp tục thực thi giống như cả hai đã gọi lời gọi hệ thống. Sau đó, chúng có thể kiểm tra giá trị trả về của lời gọi để xác định trạng thái của chúng (là tiến trình con hoặc tiến trình cha) và hành động một cách tương ứng.