Sự khác biệt giữa fork () và vfork ()

Tác Giả: Laura McKinney
Ngày Sáng TạO: 2 Tháng Tư 2021
CậP NhậT Ngày Tháng: 6 Có Thể 2024
Anonim
Sự khác biệt giữa fork () và vfork () - Công Nghệ
Sự khác biệt giữa fork () và vfork () - Công Nghệ

NộI Dung


Cả hai cái nĩa()vfork ()cuộc gọi hệ thống tạo ra một quy trình mới giống hệt với quy trình đã gọi fork () hoặc vfork (). Sử dụng cái nĩa() cho phép thực hiện quá trình cha mẹ và con cùng một lúc. Cách khác, vfork () đình chỉ việc thực hiện quy trình cha cho đến khi quy trình con hoàn thành việc thực hiện. Sự khác biệt chính giữa lệnh gọi hệ thống fork () và vfork () là quy trình con được tạo bằng fork có không gian địa chỉ riêng như quy trình cha. Mặt khác, tiến trình con được tạo bằng vfork phải chia sẻ không gian địa chỉ của tiến trình cha của nó.

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.

  1. Biểu đồ so sánh
  2. Định nghĩa
  3. Sự khác biệt chính
  4. Phần kết luận

Biểu đồ so sánh

Cơ sở để so sánhcái nĩa()vfork ()
Căn bảnQuá 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ànhQuá 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 đổiNế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 làm 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 ghifork () 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 ()

Các cái nĩa() 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 quy trình con, cả quy trình, tức là quy trình cha và con bắt đầu thực hiện từ câu lệnh tiếp theo sau ngã ba () và cả hai quy trình được thực thi đồng thời.

Quá trình cha mẹ và quá 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 giả sử quy trình con sửa đổi mã thì nó sẽ không ảnh hưởng đến quy trình cha.


Một số quá trình con sau khi tạo ra chúng gọi ngay lập tức thực hiện (). Cuộc gọi hệ thống exec () thay thế quá trình với 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.

Các sao chép trên ghi hãy để 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 (). Các vfork () cuộc gọi hệ thống cũng được sử dụng để tạo ra 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, quá trình con đình chỉ thi hành án của tiến trình cha mẹ cho đến khi nó hoàn thành việc thực thi vì cả hai quá trình chia sẻ cùng một không gian địa chỉ để sử dụng.

Khi quá trình trẻ em 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 thực hiện nơi mà quá trình con gọi thực hiện () ngay sau khi tạo ra nó. Vì vậy, sẽ không lãng phí không gian địa chỉ, và đó là hiệu quả cách để tạo ra một quy trình. vfork không sử dụng sao chép trên ghi.

  1. Sự khác biệt chính giữa fork và vfork là quá trình con được tạo bởi cái nĩa có một không gian bộ nhớ riêng từ quá trình cha mẹ. Tuy nhiên, quá trình con được tạo bởi vfork cuộc gọi hệ thống chia sẻ cùng một không gian địa chỉ của quá trình cha mẹ của nó.
  2. Quá trình con được tạo bằng ngã ba thực hiện đồng thời với quá trình cha mẹ. Mặt khác, tiến trình con được tạo bằng vfork đình chỉ việc thực hiện quy trình cha mẹ cho đến khi việc thực hiện của nó được hoàn thành.
  3. Vì không gian bộ nhớ của quá trình cha và con là sửa đổi riêng biệt đượ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ỉ.
  4. Hệ thống gọi fork () sử dụng sao chép trên ghi như một giải pháp 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.