เธรดระดับเคอร์เนลต้องการการสลับบริบทซึ่งเกี่ยวข้องกับการเปลี่ยนชุดตัวประมวลผลขนาดใหญ่ที่กำหนดแผนผังหน่วยความจำปัจจุบันและการอนุญาต นอกจากนี้ยังแสดงให้เห็นถึงแคชโปรเซสเซอร์บางส่วนหรือทั้งหมด
เธรดระดับผู้ใช้ต้องการเพียงการทำบัญชีจำนวนเล็กน้อยภายในหนึ่งเคอร์เนลเธรดหรือกระบวนการ
อย่างไรก็ตามความแตกต่างนั้นไม่ใหญ่หากเธรดของคุณกำลังทำการดำเนินการ I / O เป็นหลักเนื่องจากสิ่งเหล่านั้นต้องผ่านเคอร์เนลในทุกกรณี สิ่งสำคัญที่สุดคือหากคุณพยายามจำลองสถานการณ์ด้วยกระบวนการอิสระจำนวนมาก ในกรณีดังกล่าวคุณต้องให้ความสนใจอย่างรอบคอบกับกลไกการซิงโครไนซ์เธรดที่คุณใช้เพราะบางตัวขึ้นไปยังเคอร์เนลและทริกเกอร์การสลับบริบท
http://www.cs.rochester.edu/u/cli/research/switch.pdf "โดยทั่วไปค่าใช้จ่ายทางอ้อมของการสลับบริบทจะอยู่ในช่วงตั้งแต่หลายไมโครวินาทีถึงมากกว่าหนึ่งพันไมโครวินาทีสำหรับภาระงานของเรา"
แก้ไข: เธรดระดับผู้ใช้รักษาสแต็กต่อเธรดและอาจหรือไม่อาจบันทึกการลงทะเบียนวัตถุประสงค์ทั่วไปขึ้นอยู่กับสถาปัตยกรรมและกฎการปิดบังของการประชุมที่เรียก สามารถทำได้ง่ายเพียงแค่ทิ้งรีจิสเตอร์ไปที่สแต็คกระโดดไปยังที่อยู่ใหม่และป๊อปอัปรีจิสเตอร์บางตัวซึ่งอาจอยู่ในแคชของคุณหากเธรดนั้นเพิ่งรัน
บริบทเคอร์เนลระดับยังสวิทช์เปลี่ยนแผนที่หน่วยความจำโดยการเขียนไปยังTLB , และการเปลี่ยนแปลงระดับความปลอดภัย (ระดับสิทธิ์หรือ "แหวน") ในการประมวลผล ดู"ข้อควรพิจารณาด้านประสิทธิภาพ"
bookkeeping
เท่าที่ฉันรู้ว่าแม้กระทั่งหัวข้อระดับผู้ใช้ยังคงมีการลงทะเบียนและแม้กระทั่งพวกเขาต้องผ่านการสลับบริบท