Tại sao độ đẹp dao động từ -20 đến 19?


22

Các nicelệnh cho phép bạn điều chỉnh độ ưu tiên lập kế hoạch ( "nice") của một chương trình. Trên tất cả các hệ thống giống như Unix mà tôi đã sử dụng, tính độc đáo được chỉ định bởi một loạt các số nguyên, trong đó -20 là ưu tiên lập lịch thuận lợi nhất, 0 là mặc định và 19 là ít thuận lợi nhất.

Có 0 là độ đẹp mặc định là đủ trực quan, nhưng tại sao -20 và 19 được chọn làm điểm cuối của phạm vi? Tại sao không -128 và 127, chính xác sẽ phù hợp với một byte 8 bit đã ký? Hoặc tại sao không -100 đến 100, trực quan hơn đối với người có tư duy thập phân, hoặc tương tự nhưng công thái học hơn một chút, -99 đến 99? Là phạm vi -20 đến 19 được chọn tùy ý, hoặc nó có một số mối quan hệ với các phần bên trong của bộ lập lịch niceđược giao tiếp ban đầu không? (Tôi hiểu rằng ngày nay không có mối quan hệ nào như vậy, ít nhất là đối với Linux, người lập lịch sử dụng các ưu tiên trong phạm vi từ 0 đến 139. Tuy nhiên, tôi quan tâm đến các lý do lịch sử cho phạm vi -20 đến 19.)


4
Tôi không thể tìm thấy một tham chiếu giải thích tại sao phạm vi cụ thể đó được chọn, nhưng lưu ý rằng trong V7, mức độ ưu tiên phù hợp với một byte đã ký - xem Proc.h - và hàm setpri đặt mức độ ưu tiên min(127, (recent CPU usage on a scale of 0 to 15) + 50 + pp->p_nice - 20) và các ưu tiên <25 được dành cho các quá trình làm những việc không thể gián đoạn. Vì vậy, sự độc đáo phải là một phạm vi hạn chế.
Đánh dấu Plotnick

Câu trả lời:


7

Mức độ độc đáo bên trong là 0-39, nhưng mức tăng là dương hoặc âm. Nguồn . Vì vậy, câu trả lời là các số (dương và âm) được nicelệnh chấp nhận là những gì đưa bạn từ 20, mức mặc định, đến bất kỳ nơi nào trong phạm vi 0-39.

Vậy tại sao 0-39? Phạm vi cụ thể là những gì đã làm việc trong triển khai ban đầu của các nhà thiết kế. Lý do giá trị tích cực hơn đẹp hơn là mức độ đẹp được thêm vào mức sử dụng CPU gần đây của quy trình để xác định mức độ ưu tiên. Để cung cấp lịch trình vòng tròn gần đúng, hạt nhân theo dõi số lượng CPU mà mỗi quá trình đã đốt cháy gần đây và chuyển sang các quy trình chưa có nhiều. Mức độ đẹp càng cao, thời gian CPU có vẻ như quá trình đã có càng nhiều và bộ lập lịch sẽ thường xuyên đưa quá trình đó vào trạng thái ngủ hoặc để nó ngủ. Xem Thiết kế hệ điều hành UNIX của Maurice J. Bach, Prentice-Hall 1986, giây. 8.1 (8.1.4 cho tính độc đáo cụ thể). SỐ 0-13-201799-7.


1
Bạn đã nhầm khi cho rằng bộ lập lịch sẽ đặt một quá trình vào chế độ ngủ nếu nó có giá trị tốt đẹp. Thay vào đó, bộ lập lịch sẽ không đánh thức quá trình ngủ nếu có các quy trình khác sẵn sàng để chạy và các quy trình này có mức độ tốt hơn. Lưu ý rằng một quá trình được đưa vào trạng thái ngủ, khi nó gọi một tòa nhà chọc trời thực thi một giấc ngủ trên các tài nguyên hoặc khi một quá trình sử dụng hết lượng tử CPU của nó và có các quá trình đặc quyền khác đang chờ CPU.
schily

-4

Bạn đã nhầm: Nếu bạn đang sử dụng UNIX mà giao diện () vẫn có ý nghĩa, NZEROlà giá trị đẹp mặc định và NZERO is 20.

Để làm cho rõ ràng hơn: bạn đã hỏi về lệnh nicevà đồng thời đề cập đến các mức tuyệt đối, nhưng lệnh đẹp không quản lý các giá trị tuyệt đối mà chỉ tăng tương đối so với mức hiện tại. Trong trường hợp trạng thái mặc định, mức tốt đẹp NZEROlà 20.

Các giá trị đẹp là 0..2 * NZERO-1 hoặc 0..39

Lưu ý rằng mặc dù bộ lập lịch UNIX mặc định có thể vẫn có thể làm một cái gì đó hữu ích với một giá trị đẹp, nhưng không có nghĩa gì trong trường hợp bạn đang sử dụng một bộ lập lịch chuyên dụng, ví dụ như bộ lập lịch thời gian thực.


2
Bạn dường như đang nhầm lẫn giữa giao diện shell và giao diện C. Câu hỏi này là về nicelệnh shell.
Gilles 'SO- ngừng trở nên xấu xa'

Vâng, chính bạn là người nhầm lẫn mọi thứ. Lệnh tốt đẹp chỉ biết về deltas nhưng câu hỏi đề cập đến các giá trị tốt đẹp. Câu hỏi là về các giá trị tốt đẹp và tôi đã trả lời điều này.
schily
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.