แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

ความแตกต่างระหว่าง fork () และ vfork ()

ทั้ง fork () และ vfork () เป็นการ เรียกระบบ ที่สร้างกระบวนการใหม่ที่เหมือนกับกระบวนการที่เรียก fork () หรือ vfork () ใช้ fork () ช่วยให้การดำเนินการของผู้ปกครองและกระบวนการเด็กพร้อมกัน อีกวิธีหนึ่ง vfork () ระงับการดำเนินการของกระบวนการหลักจนกว่ากระบวนการลูกจะดำเนินการให้เสร็จสิ้น ความแตกต่างหลักระหว่างการเรียกระบบ fork () และ vfork () คือกระบวนการลูกที่สร้างขึ้นโดยใช้ fork มีพื้นที่ที่อยู่แยกต่างหากเหมือนกับกระบวนการหลัก ในขณะที่กระบวนการลูกที่สร้างขึ้นโดยใช้ vfork มีการแบ่งปันพื้นที่ที่อยู่ของกระบวนการหลัก

ให้เราค้นหาความแตกต่างบางอย่างระหว่าง fork () และ vfork () ด้วยความช่วยเหลือของกราฟเปรียบเทียบที่แสดงด้านล่าง

แผนภูมิเปรียบเทียบ

พื้นฐานสำหรับการเปรียบเทียบส้อม()vfork ()
ขั้นพื้นฐานกระบวนการลูกและกระบวนการหลักมีการแยกช่องว่างที่อยู่กระบวนการลูกและกระบวนการหลักใช้พื้นที่ที่อยู่เดียวกัน
การกระทำผู้ปกครองและกระบวนการเด็กดำเนินการพร้อมกันกระบวนการหลักยังคงถูกระงับจนกว่ากระบวนการลูกจะดำเนินการให้เสร็จสมบูรณ์
การแก้ไขหากกระบวนการย่อยเปลี่ยนแปลงหน้าใด ๆ ในพื้นที่ที่อยู่จะไม่สามารถมองเห็นกระบวนการหลักได้เนื่องจากพื้นที่ที่อยู่แยกต่างหากหากกระบวนการย่อยเปลี่ยนแปลงหน้าใด ๆ ในพื้นที่ที่อยู่จะสามารถเห็นกระบวนการหลักได้เนื่องจากพวกเขาแบ่งปันพื้นที่ที่อยู่เดียวกัน
คัดลอกบนเขียนfork () ใช้ copy-on-write เป็นทางเลือกโดยที่ parent และ child แชร์เพจเดียวกันจนกว่าเพจใดเพจหนึ่งจะแก้ไขเพจที่แบ่งใช้vfork () ไม่ใช้ copy-on-write

คำจำกัดความของ fork ()

fork () เป็นการเรียกระบบใช้เพื่อสร้าง กระบวนการใหม่ กระบวนการใหม่ที่สร้างขึ้นโดยการเรียก fork () เป็นกระบวนการลูกของกระบวนการที่เรียกใช้การเรียกระบบ fork () รหัสของกระบวนการลูกจะเหมือนกับรหัสของกระบวนการหลัก หลังจากการสร้างกระบวนการเด็กกระบวนการทั้งสองคือกระบวนการพ่อแม่และลูกเริ่มต้นการดำเนินการจากคำสั่งถัดไปหลังจาก fork () และกระบวนการทั้งสองได้รับการดำเนินการ พร้อมกัน

กระบวนการหลักและกระบวนการลูกมี พื้นที่ที่อยู่แยกต่างหาก ดังนั้นเมื่อกระบวนการใด ๆ ปรับเปลี่ยนคำสั่งหรือตัวแปรใด ๆ ในรหัส มันจะไม่ปรากฏในรหัสกระบวนการอื่น ๆ สมมติว่าถ้ากระบวนการลูกแก้ไขรหัสมันจะไม่ส่งผลกระทบต่อกระบวนการหลัก

กระบวนการลูกบางอย่างหลังจากการสร้างของพวกเขาทันทีเรียก exec () การเรียกระบบ exec () แทนที่กระบวนการ ด้วยโปรแกรมที่ระบุในพารามิเตอร์ จากนั้นพื้นที่ที่อยู่แยกต่างหากของกระบวนการลูกไม่ได้ใช้งาน ทางเลือกหนึ่งที่นี่คือการคัดลอกเมื่อเขียน

การ คัดลอกเมื่อเขียน ให้กระบวนการผู้ปกครองและเด็กที่จะแบ่งปันพื้นที่ที่อยู่เดียวกัน หากกระบวนการใด ๆ ที่เขียนบนหน้าในพื้นที่ที่อยู่สำเนาของพื้นที่ที่อยู่ถูกสร้างขึ้นเพื่อให้กระบวนการทั้งสองทำงานอย่างอิสระ

คำจำกัดความของ vfork ()

รุ่น fork ที่แก้ไข () คือ vfork () การเรียกใช้ระบบ vfork () ยังใช้เพื่อสร้างกระบวนการใหม่ คล้ายกับ fork () ที่นี่ยังมีกระบวนการใหม่ที่สร้างขึ้นเป็นกระบวนการเด็กของกระบวนการที่เรียก vfork () รหัสกระบวนการลูกก็เหมือนกับรหัสกระบวนการหลัก ที่นี่กระบวนการย่อย หยุดการประมวลผล ของพาเรนต์จนกว่าการประมวลผลจะเสร็จสิ้นเนื่องจากกระบวนการทั้งสองใช้พื้นที่ที่อยู่เดียวกันร่วมกัน

ในขณะที่กระบวนการลูกและผู้ปกครองแบ่งปัน พื้นที่ที่อยู่เดียวกัน หากกระบวนการใด ๆ แก้ไขรหัสก็จะปรากฏให้เห็นกระบวนการอื่น ๆ ที่ใช้หน้าเดียวกัน ให้เราสมมติว่ากระบวนการหลักเปลี่ยนแปลงรหัสหรือไม่ มันจะสะท้อนให้เห็นในรหัสของกระบวนการเด็ก

ในฐานะที่ใช้ vfork () ไม่ได้สร้างการแยกพื้นที่ที่อยู่สำหรับกระบวนการลูกและผู้ปกครอง ดังนั้นจึงต้อง ดำเนินการใน กรณีที่กระบวนการลูกเรียก exec () ทันทีหลังจากการสร้าง ดังนั้นจะไม่มีการสูญเสียพื้นที่ที่อยู่และเป็นวิธีที่ มีประสิทธิภาพ ในการสร้างกระบวนการ vfork ไม่ได้ใช้ copy-on-write

ความแตกต่างที่สำคัญระหว่าง fork () และ vfork ()

  1. ความแตกต่างหลักระหว่าง fork และ vfork คือกระบวนการลูกที่สร้างโดย fork มี พื้นที่หน่วยความจำแยก จากกระบวนการหลัก อย่างไรก็ตามกระบวนการลูกที่สร้างขึ้นโดยการโทรของระบบ vfork แบ่งปัน พื้นที่ที่อยู่เดียวกัน ของกระบวนการหลัก
  2. กระบวนการลูกที่สร้างขึ้นโดยใช้ส้อม ดำเนินการพร้อมกัน กับกระบวนการหลัก ในขณะที่กระบวนการเด็กที่สร้างขึ้นโดยใช้ vfork ระงับ การดำเนินการของกระบวนการหลักจนกว่าการดำเนินการจะเสร็จสมบูรณ์
  3. เนื่องจากพื้นที่หน่วยความจำของกระบวนการพาเรนต์และชายด์คือการดัดแปลงแยกต่างหากโดยกระบวนการใด ๆ จึงไม่ส่งผลกระทบต่อเพจของผู้อื่น อย่างไรก็ตามในขณะที่กระบวนการผู้ปกครองและเด็กใช้ร่วมกันการปรับเปลี่ยนที่อยู่หน่วยความจำเดียวกันที่ทำโดยกระบวนการใด ๆ สะท้อนให้เห็นในพื้นที่ที่อยู่
  4. call call ของระบบ () ใช้ copy-on-write เป็นทางเลือกซึ่งช่วยให้กระบวนการลูกและผู้ปกครองแชร์พื้นที่ที่อยู่เดียวกันจนกว่าจะมีการแก้ไขหน้า ในทางตรงกันข้าม vfork ไม่ได้ใช้ copy-on-write

สรุป:

การเรียกใช้ระบบ vfork () จะต้องดำเนินการเมื่อมีการเรียกใช้กระบวนการลูกเรียก exec () ทันทีหลังจากการสร้างโดยใช้ fork () เนื่องจากพื้นที่ที่อยู่แยกต่างหากสำหรับกระบวนการลูกและผู้ปกครองจะไม่ใช้ที่นี่

Top