เหตุใดความดีจึงมีตั้งแต่ -20 ถึง 19


22

niceคำสั่งช่วยให้คุณสามารถปรับการจัดลำดับความสำคัญการตั้งเวลา ( "ความดี") ของโปรแกรม ในทุกระบบที่เหมือนกับ Unix ที่ฉันใช้ความดีจะถูกระบุด้วยช่วงของจำนวนเต็มโดยที่ -20 เป็นลำดับความสำคัญการจัดตารางเวลาที่ดีที่สุด 0 คือค่าเริ่มต้นและ 19 เป็นค่าที่น้อยที่สุด

การมี 0 เป็นความดีเริ่มต้นนั้นง่ายพอ แต่เหตุใดจึงเลือก -20 และ 19 เป็นจุดสิ้นสุดของช่วง ทำไมไม่ -128 และ 127 ซึ่งจะพอดีกับไบต์ 8 บิตที่ลงนามแล้ว? หรือเพราะเหตุใด -100 ถึง 100 ซึ่งเป็นมนุษย์ที่ใช้ทศนิยมได้ง่ายกว่าหรือใกล้เคียงกับการยศาสตร์ -99 ถึง 99 เล็กน้อย มีการเลือกช่วง -20 ถึง 19 โดยพลการหรือไม่หรือมีความสัมพันธ์กับ internals ของตัวกำหนดตารางเวลาที่niceเชื่อมโยงกับตอนแรกหรือไม่ (ฉันเข้าใจว่าวันนี้ไม่มีความสัมพันธ์อย่างน้อยสำหรับ Linux ซึ่งตัวกำหนดตารางเวลาใช้ลำดับความสำคัญในช่วง 0 ถึง 139 อย่างไรก็ตามฉันสนใจเหตุผลทางประวัติศาสตร์สำหรับช่วง -20 ถึง 19)


4
ฉันไม่พบการอ้างอิงที่อธิบายว่าเหตุใดจึงเลือกช่วงที่เฉพาะเจาะจง แต่โปรดทราบว่าใน V7 ลำดับความสำคัญของไบต์ที่เซ็นชื่อ - ดูproc.h - และฟังก์ชันsetpriตั้งค่าลำดับความสำคัญเป็นmin(127, (recent CPU usage on a scale of 0 to 15) + 50 + pp->p_nice - 20) และลำดับความสำคัญ <25 ถูกสงวนไว้สำหรับ กระบวนการที่ทำสิ่งที่ไม่หยุดชะงัก ความดีจึงต้องเป็นช่วงที่ จำกัด
Mark Plotnick

คำตอบ:


7

ระดับความดีภายในคือ 0-39 แต่การเพิ่มขึ้นเป็นบวกหรือลบ แหล่ง ดังนั้นคำตอบคือตัวเลข (บวกและลบ) ที่niceคำสั่งยอมรับคือสิ่งที่ทำให้คุณได้รับตั้งแต่ 20 ระดับเริ่มต้นไปจนถึงที่ใดก็ได้ในช่วง 0-39

แล้วทำไม 0-39 ช่วงที่เฉพาะเจาะจงคือสิ่งที่ทำงานในการปรับใช้ดั้งเดิมของนักออกแบบ เหตุผลที่ค่าบวกมากขึ้นคือ nicer คือระดับที่ดีถูกเพิ่มเข้ากับการใช้งาน CPU ล่าสุดของกระบวนการในการกำหนดลำดับความสำคัญ เพื่อให้การจัดตารางเวลารอบโรบินโดยประมาณเคอร์เนลติดตามจำนวนซีพียูที่แต่ละโพรเซสได้เผาไปเมื่อเร็ว ๆ นี้และสลับไปใช้โพรเซสที่ไม่มีอะไรมาก ยิ่งระดับดีขึ้นเท่าใดเวลา CPU ก็จะยิ่งมากขึ้นเท่านั้นและยิ่งบ่อยครั้งที่ตัวกำหนดตารางเวลาจะทำให้กระบวนการนั้นเข้าสู่โหมดสลีปหรือออกจากโหมดสลีป ดูการออกแบบระบบปฏิบัติการ UNIXโดย Maurice J. Bach, Prentice-Hall 1986, วินาที 8.1 (8.1.4 เพื่อความดีโดยเฉพาะ) ไอ 0-13-201799-7


1
คุณเข้าใจผิดเมื่อสมมติว่าตัวกำหนดตารางเวลาจะทำให้กระบวนการเข้าสู่โหมดสลีปหากมีค่าที่ดีมาก ตัวกำหนดตารางเวลาจะไม่ปลุกกระบวนการสลีปหากมีกระบวนการอื่นพร้อมที่จะเรียกใช้และกระบวนการเหล่านี้มีระดับที่ดีขึ้น โปรดทราบว่าโปรเซสจะเข้าสู่โหมดสลีปเมื่อเรียก syscall ที่บังคับให้สลีปบนรีซอร์สหรือเมื่อโปรเซสนั้นใช้งานเป็นควอนตัมซีพียูและยังมีโปรเซสอื่น ๆ ที่รอคอยซีพียู
schily

-4

คุณจะเข้าใจผิด: ถ้าคุณอยู่ใน UNIX ที่ดี () อินเตอร์เฟซที่ยังคงทำให้รู้สึกคุ้มค่าที่ดีเริ่มต้นและNZERONZERO is 20

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

ค่าที่ดีคือ 0..2 * NZERO-1 หรือ 0..39

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


2
ดูเหมือนว่าคุณจะสับสนกับอินเตอร์เฟสของเชลล์และอินเตอร์เฟส C คำถามนี้เกี่ยวกับniceคำสั่งเชลล์
Gilles 'หยุดความชั่วร้าย'

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