สถิติเวลาดำเนินการจริงผู้ใช้และ Sys
หนึ่งในสิ่งเหล่านี้ไม่เหมือนกัน จริงหมายถึงเวลาที่ผ่านไปจริง ผู้ใช้และ Sys อ้างถึงเวลา CPU ที่ใช้โดยกระบวนการเท่านั้น
* ของจริงคือเวลานาฬิกาแขวน - เวลาตั้งแต่ต้นจนจบการโทร นี่เป็นเวลาที่ผ่านไปทั้งหมดรวมถึงตัวแบ่งเวลาที่ใช้โดยกระบวนการอื่นและเวลาที่กระบวนการใช้บล็อก (ตัวอย่างเช่นถ้ารอ I / O ให้เสร็จ)
* ผู้ใช้คือจำนวนเวลา CPU ที่ใช้ในรหัสโหมดผู้ใช้ (นอกเคอร์เนล) ภายในกระบวนการ นี่เป็นเวลา CPU จริงที่ใช้ในการดำเนินการตามกระบวนการเท่านั้น กระบวนการและเวลาอื่น ๆ ที่กระบวนการใช้ไปจะไม่ถูกนับรวมในรูปนี้
* Sysคือจำนวนเวลา CPU ที่ใช้ในเคอร์เนลภายในกระบวนการ นี่หมายถึงการประมวลผลเวลา CPU ที่ใช้ในการเรียกใช้ระบบภายในเคอร์เนลซึ่งตรงข้ามกับรหัสห้องสมุดซึ่งยังคงทำงานในพื้นที่ผู้ใช้ เช่นเดียวกับ 'ผู้ใช้' นี่เป็นเพียงเวลา CPU ที่ใช้โดยกระบวนการ ดูคำอธิบายสั้น ๆ ของโหมดเคอร์เนล (เรียกอีกอย่างว่าโหมด 'ผู้ควบคุม') และกลไกการเรียกระบบ
User + Sys จะบอกคุณว่า CPU ของคุณใช้เวลาเท่าไรในกระบวนการของคุณ
ต้นกำเนิดของสถิติที่รายงานตามเวลา (1)
สถิติที่รายงานตามเวลาจะถูกรวบรวมจากการเรียกใช้ระบบต่างๆ 'ผู้ใช้' และ 'Sys' มาจากการรอ (2) หรือเวลา (2) ขึ้นอยู่กับระบบเฉพาะ 'ของจริง' คำนวณจากเวลาเริ่มต้นและสิ้นสุดที่รวบรวมจากการโทร gettimeofday (2) ขึ้นอยู่กับรุ่นของระบบสถิติอื่น ๆ เช่นจำนวนของการสลับบริบทอาจถูกรวบรวมตามเวลา
บนเครื่องที่มีโปรเซสเซอร์หลายตัวกระบวนการแบบมัลติเธรดหรือกระบวนการฟอร์กกิ้งเด็กอาจมีเวลาที่ผ่านไปน้อยกว่าเวลา CPU ทั้งหมด - เนื่องจากเธรดหรือกระบวนการต่าง ๆ อาจทำงานแบบขนาน นอกจากนี้สถิติเวลาที่รายงานมาจากแหล่งกำเนิดที่แตกต่างกันดังนั้นเวลาที่บันทึกไว้สำหรับงานที่สั้นมากอาจมีข้อผิดพลาดในการปัดเศษตามตัวอย่างที่แสดงโดยผู้ลงประกาศดั้งเดิม
ไพรเมอร์แบบย่อใน Kernel vs. โหมดผู้ใช้
ในยูนิกซ์หรือระบบปฏิบัติการหน่วยความจำที่ได้รับการป้องกันโหมด 'Kernel' หรือ 'Supervisor' หมายถึงโหมดสิทธิพิเศษที่ CPU สามารถใช้งานได้การดำเนินการพิเศษที่อาจส่งผลต่อความปลอดภัยหรือเสถียรภาพสามารถทำได้เฉพาะเมื่อ CPU ทำงานใน โหมดนี้ การกระทำเหล่านี้ไม่สามารถใช้ได้กับรหัสแอปพลิเคชัน ตัวอย่างของการกระทำดังกล่าวอาจเป็นการจัดการ MMU เพื่อเข้าถึงพื้นที่ที่อยู่ของกระบวนการอื่น โดยทั่วไปรหัสโหมดผู้ใช้ไม่สามารถทำได้ (ด้วยเหตุผลที่ดี) แม้ว่าจะสามารถขอหน่วยความจำที่ใช้ร่วมกันจากเคอร์เนลซึ่งสามารถอ่านหรือเขียนได้มากกว่าหนึ่งกระบวนการ ในกรณีนี้หน่วยความจำที่ใช้ร่วมกันจะถูกร้องขออย่างชัดเจนจากเคอร์เนลผ่านทาง mechansm ที่ปลอดภัยและกระบวนการทั้งสองจะต้องแนบกับมันอย่างชัดเจนเพื่อที่จะใช้มัน
โหมดสิทธิพิเศษมักจะเรียกว่าโหมด 'เคอร์เนล' เนื่องจากเคอร์เนลจะถูกดำเนินการโดย CPU ที่ทำงานในโหมดนี้ ในการเปลี่ยนไปใช้โหมดเคอร์เนลคุณต้องออกคำสั่งเฉพาะ (มักเรียกว่ากับดัก ) ซึ่งจะเปลี่ยน CPU ให้ทำงานในโหมดเคอร์เนลและเรียกใช้รหัสจากตำแหน่งที่ระบุ เพื่อเหตุผลด้านความปลอดภัยคุณไม่สามารถเปลี่ยนไปใช้โหมดเคอร์เนลและเรียกใช้รหัสโดยพลการ - กับดักถูกจัดการผ่านตารางที่อยู่ที่ไม่สามารถเขียนได้เว้นแต่ว่า CPU กำลังทำงานในโหมดผู้ดูแล
การเรียก 'system' ใน C libary (โดยเฉพาะที่อธิบายไว้ในส่วนที่ 2 ของ man pages) มีองค์ประกอบโหมดผู้ใช้ซึ่งเป็นสิ่งที่คุณเรียกจากโปรแกรม C ของคุณ เบื้องหลังอาจมีการเรียกใช้ระบบหนึ่งครั้งหรือมากกว่าไปยังเคอร์เนลเพื่อทำบริการเฉพาะเช่น I / O แต่พวกเขายังคงมีรหัสที่ใช้ในโหมดผู้ใช้ นอกจากนี้ยังเป็นไปได้ค่อนข้างที่จะออกกับดักโดยตรงไปยังโหมดเคอร์เนลจากรหัสพื้นที่ผู้ใช้ใด ๆ หากต้องการแม้ว่าคุณอาจจะต้องเขียนตัวอย่างของภาษาประกอบเพื่อตั้งค่าการลงทะเบียนอย่างถูกต้องสำหรับการโทร หน้าอธิบายสายระบบที่มีให้โดยเคอร์เนลลินุกซ์และการประชุมสำหรับการตั้งค่าการลงทะเบียนสามารถพบได้ที่นี่
ข้อมูลเพิ่มเติม
เพื่อชี้แจงเกี่ยวกับ 'sys': มีบางสิ่งที่รหัสของคุณไม่สามารถทำได้จากโหมดผู้ใช้ - สิ่งต่าง ๆ เช่นการจัดสรรหน่วยความจำหรือการเข้าถึงฮาร์ดแวร์ (HDD, เครือข่าย ฯลฯ ) สิ่งเหล่านี้อยู่ภายใต้การดูแลของเคอร์เนล การดำเนินการบางอย่างที่คุณทำ (เช่น malloc หรือ fread / fwrite) จะเรียกใช้ฟังก์ชันเคอร์เนลเหล่านี้และจากนั้นจะนับเป็นเวลา 'sys' น่าเสียดายที่มันไม่ง่ายเหมือน "การเรียกไปที่ malloc ทุกครั้งจะถูกนับในเวลา 'sys'" การเรียกใช้ malloc จะทำการประมวลผลของตัวเอง (ยังคงนับในเวลา 'ผู้ใช้') และจากนั้นบางแห่งระหว่างการเรียกใช้ฟังก์ชันในเคอร์เนล (นับในเวลา 'sys') หลังจากกลับมาจากการเรียกเคอร์เนลจะมีเวลาอีกใน 'ผู้ใช้' แล้ว malloc จะกลับไปที่รหัสของคุณ เมื่อสวิตช์เกิดขึ้นและใช้ไปเท่าใดในโหมดเคอร์เนลคุณไม่สามารถพูดได้ มันขึ้นอยู่กับการใช้งานของห้องสมุด นอกจากนี้ฟังก์ชั่นไร้เดียงสาอื่น ๆ ที่ดูเหมือนว่าจะใช้ malloc และสิ่งที่คล้ายกันในพื้นหลังซึ่งจะมีเวลาอีกครั้งใน 'sys'
ที่มา: ที่นี่