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

ผู้เขียน: Laura McKinney
วันที่สร้าง: 2 เมษายน 2021
วันที่อัปเดต: 10 พฤษภาคม 2024
Anonim
A reimplementation of NetBSD using a MicroKernel (part 1 of 2)
วิดีโอ: A reimplementation of NetBSD using a MicroKernel (part 1 of 2)

เนื้อหา


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

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

  1. แผนภูมิเปรียบเทียบ
  2. คำนิยาม
  3. ความแตกต่างที่สำคัญ
  4. ข้อสรุป

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

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


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

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

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

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


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

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

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

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

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

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

สรุป:

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