สวิตช์บริบทของเธรดเทียบกับ สวิตช์บริบทกระบวนการ


คำตอบ:


205

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

ค่าใช้จ่ายที่คลุมเครือมากขึ้นคือการสลับบริบทไปยุ่งกับกลไกการแคชของโปรเซสเซอร์ โดยทั่วไปเมื่อคุณสลับบริบทที่อยู่หน่วยความจำทั้งหมดที่โปรเซสเซอร์ "จำ" ในแคชของมันจะไร้ประโยชน์อย่างมีประสิทธิภาพ ความแตกต่างที่สำคัญอย่างหนึ่งที่นี่คือเมื่อคุณเปลี่ยนช่องว่างหน่วยความจำเสมือน Translation Lookaside Buffer (TLB) ของโปรเซสเซอร์หรือเทียบเท่าจะถูกล้างออกทำให้การเข้าถึงหน่วยความจำมีราคาแพงกว่ามากในระยะหนึ่ง สิ่งนี้จะไม่เกิดขึ้นระหว่างการสลับเธรด


8
ทั้งหมดนี้สมมติว่า TLB และแคชไม่เก็บ pid สำหรับแต่ละรายการ
รา

2
IMHO @dramzy ถูกต้องระบบปฏิบัติการอาจรองรับ Rapid Context Switching ซึ่งจะกล่าวถึงในไม่ช้า: youtu.be/3akTtCu_F_k?t=46m8s (ดูตั้งแต่ต้นเพื่อเรียนรู้เพิ่มเติมเกี่ยวกับหน่วยความจำเสมือนตารางหน้าเว็บและ TLB)
piotrwest

@piotrwest OS หลัก ๆ รองรับ Rapid Context Switching หรือไม่
สูงสุด

2
@dramzy คุณหมายถึง OS หรือฮาร์ดแวร์สามารถเก็บ pid ได้หรือไม่? คือนี้ความเกี่ยวข้องหรือไม่
สูงสุด

ในใจของฉันมีเฉพาะเธรดสวิทช์ (ไม่แน่ใจ) บน Linux ดังนั้น Linux OS จะตรวจสอบว่าเธรดถัดไปที่จะเรียกใช้มีการบันทึก pid พร้อมเธรดที่กำลังรันซึ่งจะกำหนดเวลาไว้หรือไม่?
roachsinai

16

การสลับบริบทของกระบวนการเกี่ยวข้องกับการสลับพื้นที่แอดเดรสหน่วยความจำ ซึ่งรวมถึงที่อยู่หน่วยความจำการแมปตารางเพจและทรัพยากรเคอร์เนลซึ่งเป็นการดำเนินการที่ค่อนข้างแพง ในบางสถาปัตยกรรมอาจหมายถึงการล้างแคชโปรเซสเซอร์ต่างๆที่ไม่สามารถแชร์ได้ในช่องว่างที่อยู่ ตัวอย่างเช่น x86 ต้องล้าง TLB และโปรเซสเซอร์ ARM บางตัวต้องล้างแคช L1 ทั้งหมด!

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


13

ประการแรกระบบปฏิบัติการจะนำเธรดขาออกในโหมดเคอร์เนลหากยังไม่มีอยู่เนื่องจากเธรดสวิตช์สามารถดำเนินการได้ระหว่างเธรดเท่านั้นซึ่งทำงานในโหมดเคอร์เนล จากนั้นตัวกำหนดตารางเวลาจะถูกเรียกเพื่อทำการตัดสินใจเกี่ยวกับเธรดที่จะดำเนินการสลับ หลังจากตัดสินใจแล้วเคอร์เนลจะบันทึกส่วนหนึ่งของบริบทเธรดที่อยู่ใน CPU (การลงทะเบียน CPU) ลงในตำแหน่งเฉพาะในหน่วยความจำ (โดยมากจะอยู่ด้านบนของสแต็กเคอร์เนลของเธรดขาออก) จากนั้นเคอร์เนลจะทำการสลับจากสแต็กเคอร์เนลของเธรดขาออกไปเป็นเคอร์เนลสแต็กของเธรดขาเข้า หลังจากนั้นเคอร์เนลจะโหลดบริบทที่เก็บไว้ก่อนหน้านี้ของเธรดขาเข้าจากหน่วยความจำไปยังการลงทะเบียน CPU และในที่สุดก็ส่งคืนการควบคุมกลับเข้าสู่โหมดผู้ใช้ แต่ในโหมดผู้ใช้ของเธรดใหม่ ในกรณีที่ OS พิจารณาแล้วว่าเธรดขาเข้าทำงานในกระบวนการอื่นเคอร์เนลดำเนินการเพิ่มเติมอีกขั้นตอนหนึ่ง: ตั้งค่าพื้นที่แอดเดรสเสมือนใหม่ที่ใช้งานอยู่

ต้นทุนหลักในทั้งสองสถานการณ์เกี่ยวข้องกับมลภาวะของแคช ในกรณีส่วนใหญ่ชุดการทำงานที่ใช้โดยเธรดขาออกจะแตกต่างกันอย่างมากจากชุดการทำงานที่ใช้โดยเธรดขาเข้า เป็นผลให้เธรดขาเข้าจะเริ่มต้นชีวิตด้วยการพลาดแคชดังนั้นจึงล้างข้อมูลเก่าและไร้ประโยชน์ออกจากแคชและโหลดข้อมูลใหม่จากหน่วยความจำ เช่นเดียวกับ TLB (Translation Look Aside Buffer ซึ่งอยู่บน CPU) ในกรณีของการรีเซ็ตพื้นที่ที่อยู่เสมือน (เธรดที่ทำงานในกระบวนการที่แตกต่างกัน) การลงโทษจะยิ่งแย่ลงเนื่องจากการรีเซ็ตพื้นที่ที่อยู่เสมือนจะนำไปสู่การล้าง TLB ทั้งหมดแม้หากเธรดใหม่จำเป็นต้องโหลดรายการใหม่เพียงไม่กี่รายการ ด้วยเหตุนี้เธรดใหม่จะเริ่มต้นควอนตัมของเวลาโดยมี TLB จำนวนมากพลาดและมีการเดินหน้าบ่อยครั้ง ค่าใช้จ่ายโดยตรงของเธรดสวิตช์ก็ไม่สำคัญเช่นกัน (ตั้งแต่ ~ 250 และสูงถึง ~ 1500-2000 รอบ) และขึ้นอยู่กับความซับซ้อนของ CPU สถานะของเธรดและชุดรีจิสเตอร์ที่ใช้จริง

PS: โพสต์ดีๆเกี่ยวกับค่าใช้จ่ายในการสลับบริบท: http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html


3
  • การสลับกระบวนการ:เป็นการเปลี่ยนระหว่างหน่วยความจำสองที่อยู่อาศัยของกระบวนการในสภาพแวดล้อมแบบมัลติโปรแกรม
  • การสลับบริบท:เป็นการเปลี่ยนบริบทจากโปรแกรมเรียกใช้งานไปเป็นอินเตอร์รัปต์เซอร์วิสรูทีน (ISR)

2

ใน Thread Context Switching พื้นที่หน่วยความจำเสมือนจะยังคงเหมือนเดิมในขณะที่ไม่ได้อยู่ในกรณีของ Process Context Switch นอกจากนี้ Process Context Switch ยังมีราคาแพงกว่า Thread Context Switch


0

ฉันคิดว่าความแตกต่างหลักคือเมื่อเรียกswitch_mm()ซึ่งจัดการตัวบอกหน่วยความจำของงานเก่าและงานใหม่ ในกรณีของเธรดพื้นที่แอดเดรสหน่วยความจำเสมือนจะไม่เปลี่ยนแปลง (เธรดแชร์หน่วยความจำเสมือน) ดังนั้นจึงต้องทำน้อยมากและมีค่าใช้จ่ายน้อยกว่า


0

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


0

การสลับบริบทเกี่ยวข้องกับการจัดเก็บบริบทหรือสถานะของกระบวนการเพื่อให้สามารถโหลดซ้ำได้เมื่อจำเป็นและการดำเนินการสามารถกลับมาทำงานต่อจากจุดเดิมได้ นี่เป็นคุณสมบัติของระบบปฏิบัติการมัลติทาสก์และอนุญาตให้ใช้ CPU ตัวเดียวร่วมกันโดยหลายกระบวนการ

  1. การสลับเธรด: การสลับเธรดเป็นประเภทของการสลับบริบทจากเธรดหนึ่งไปยังเธรดอื่นในกระบวนการเดียวกัน การสลับเธรดมีประสิทธิภาพมากและถูกกว่ามากเนื่องจากเกี่ยวข้องกับการสลับเฉพาะข้อมูลประจำตัวและทรัพยากรเช่นตัวนับโปรแกรมรีจิสเตอร์และสแต็กพอยน์เตอร์ ค่าใช้จ่ายของการสลับเธรดต่อเธรดนั้นใกล้เคียงกับค่าใช้จ่ายในการป้อนและออกจากเคอร์เนล
  2. การสลับกระบวนการ: การสลับกระบวนการเป็นประเภทของการสลับบริบทที่เราสลับกระบวนการหนึ่งกับอีกกระบวนการหนึ่ง เกี่ยวข้องกับการสลับทรัพยากรกระบวนการทั้งหมดกับทรัพยากรที่จำเป็นสำหรับกระบวนการใหม่ ซึ่งหมายถึงการเปลี่ยนพื้นที่แอดเดรสหน่วยความจำ ซึ่งรวมถึงที่อยู่หน่วยความจำตารางเพจและทรัพยากรเคอร์เนลแคชในโปรเซสเซอร์

-1

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

มีความสุขมากขึ้นไปอีก พวกเขาเขียนหนังสือเกี่ยวกับมัน

สำหรับต้นทุนการสลับบริบทกระบวนการ >>>> เธรดเนื่องจากคุณต้องรีเซ็ตตัวนับสแต็กทั้งหมดเป็นต้น


-1

สมมติว่า CPU ที่ระบบปฏิบัติการรันมีอุปกรณ์ High Latency แนบอยู่

ควรเรียกใช้เธรดอื่นของ Address Space ของกระบวนการในขณะที่อุปกรณ์ที่มีเวลาแฝงสูงจะตอบสนองกลับ

แต่ถ้าอุปกรณ์ที่มีความหน่วงสูงตอบสนองเร็วกว่าเวลาที่จำเป็นต้องตั้งค่าตาราง + การแปลความทรงจำเสมือนเป็นจริงสำหรับกระบวนการใหม่ก็เป็นเรื่องที่น่าสงสัยว่าสวิตช์มีความสำคัญหรือไม่

นอกจากนี้ HOT cache (ข้อมูลที่จำเป็นสำหรับการรันกระบวนการ / เธรดสามารถเข้าถึงได้ในเวลาที่น้อยลง) เป็นทางเลือกที่ดีกว่า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.