Chúng ta hãy tìm một số khác biệt giữa fork () và vfork () với sự trợ giúp của biểu đồ so sánh được hiển thị bên dưới.
Biểu đồ so sánh
Cơ sở để so sánh | cái nĩa() | vfork () |
---|---|---|
Căn bản | Quá trình con và quá trình cha mẹ có không gian địa chỉ riêng biệt. | Quá trình con và tiến trình cha mẹ chia sẻ cùng một không gian địa chỉ. |
Chấp hành | Quá trình cha mẹ và con thực hiện đồng thời. | Quá trình cha mẹ vẫn bị đình chỉ cho đến khi quá trình con hoàn thành việc thực hiện. |
Sửa đổi | Nếu tiến trình con thay đổi bất kỳ trang nào trong không gian địa chỉ, nó sẽ vô hình đối với tiến trình cha vì không gian địa chỉ là riêng biệt. | Nếu tiến trình con thay đổi bất kỳ trang nào trong không gian địa chỉ, nó sẽ hiển thị cho tiến trình cha khi chúng chia sẻ cùng một không gian địa chỉ. |
Sao chép trên ghi | fork () sử dụng copy-on-write như một cách thay thế trong đó cha mẹ và con chia sẻ cùng một trang cho đến khi bất kỳ một trong số chúng sửa đổi trang được chia sẻ. | vfork () không sử dụng copy-on-write. |
Định nghĩa của ngã ba ()
Fork () là một cuộc gọi hệ thống sử dụng để tạo ra một quy trình mới . Quá trình mới được tạo bởi lệnh gọi fork () là tiến trình con, của quá trình đã gọi cuộc gọi hệ thống fork (). Mã của tiến trình con giống hệt với mã của tiến trình cha của nó. Sau khi tạo tiến trình con, cả hai quá trình tức là quá trình cha và con bắt đầu thực thi từ câu lệnh tiếp theo sau fork () và cả hai tiến trình được thực thi đồng thời .
Quá trình cha và tiến trình con có không gian địa chỉ riêng . Do đó, khi bất kỳ quy trình nào sửa đổi bất kỳ câu lệnh hoặc biến nào trong mã. Nó sẽ không được phản ánh trong các mã quy trình khác. Giả sử nếu tiến trình con sửa đổi mã thì nó sẽ không ảnh hưởng đến tiến trình cha.
Một số tiến trình con sau khi tạo của chúng ngay lập tức gọi exec () . Cuộc gọi hệ thống exec () thay thế tiến trình bằng chương trình được chỉ định trong tham số của nó. Sau đó, không gian địa chỉ riêng biệt của quá trình con là không sử dụng. Một thay thế ở đây là copy-on-write.
Bản sao trên ghi cho phép cha mẹ và con xử lý để chia sẻ cùng một không gian địa chỉ. Nếu bất kỳ quy trình nào ghi trên các trang trong không gian địa chỉ, bản sao của không gian địa chỉ được tạo để cho cả quá trình hoạt động độc lập.
Định nghĩa của vfork ()
Phiên bản sửa đổi của fork () là vfork (). Cuộc gọi hệ thống vfork () cũng được sử dụng để tạo một quy trình mới. Tương tự như fork (), ở đây cũng có quy trình mới được tạo là quy trình con, của quy trình đã gọi vfork (). Mã quy trình con cũng giống với mã quy trình cha. Ở đây, tiến trình con đình chỉ việc thực thi tiến trình cha mẹ cho đến khi nó hoàn thành việc thực thi của nó vì cả hai quá trình chia sẻ cùng một không gian địa chỉ để sử dụng.
Khi quá trình con và cha mẹ chia sẻ cùng một không gian địa chỉ . Nếu bất kỳ quy trình nào sửa đổi mã, nó sẽ hiển thị cho quy trình khác chia sẻ cùng các trang. Chúng ta hãy giả sử nếu quá trình cha làm thay đổi mã; nó sẽ phản ánh trong mã của quá trình con.
Vì sử dụng vfork () không tạo các không gian địa chỉ riêng cho các tiến trình con và cha. Do đó, nó phải được thực hiện khi tiến trình con gọi exec () ngay sau khi tạo. Vì vậy, sẽ không lãng phí không gian địa chỉ và đó là cách hiệu quả để tạo ra một quy trình. vfork không sử dụng copy-on-write .
Sự khác biệt chính giữa fork () và vfork ()
- Sự khác biệt chính giữa fork và vfork là tiến trình con được tạo bởi fork có không gian bộ nhớ riêng với tiến trình cha. Tuy nhiên, quy trình con được tạo bởi cuộc gọi hệ thống vfork chia sẻ cùng một không gian địa chỉ của quy trình mẹ của nó.
- Quá trình con được tạo bằng cách sử dụng fork thực thi đồng thời với tiến trình cha. Mặt khác, tiến trình con được tạo bằng vfork sẽ tạm dừng quá trình cha mẹ cho đến khi quá trình thực thi của nó được hoàn thành.
- Vì không gian bộ nhớ của quá trình cha và con là sửa đổi riêng được thực hiện bởi bất kỳ quy trình nào không ảnh hưởng đến các trang khác. Tuy nhiên, vì quá trình cha và con chia sẻ cùng một sửa đổi địa chỉ bộ nhớ được thực hiện bởi bất kỳ quy trình nào phản ánh trong không gian địa chỉ.
- Hệ thống fork fork () sử dụng copy-on-write thay thế, cho phép tiến trình con và cha mẹ chia sẻ cùng một không gian địa chỉ cho đến khi bất kỳ một trong số chúng sửa đổi các trang. Mặt khác, vfork không sử dụng copy-on-write.
Phần kết luận:
Cuộc gọi hệ thống vfork () phải được thực hiện khi tiến trình con gọi exec () ngay sau khi tạo bằng cách sử dụng fork (). Vì không gian địa chỉ riêng cho quá trình con và cha mẹ sẽ không được sử dụng ở đây.