Так что же такое «область u» в UNIX?

Я нашел обходной путь, который работает для меня в Debian Buster с GNOME Shell версии 3.30 и с Lightdm. Я понятия не имею, сломает ли это что-нибудь, но я не заметил ничего необычного.

  1. Установить пакетcinnamon-screensaver
  2. Добавить /usr/bin/cinnamon-screensaverв приложения для запуска
  3. Создать сочетание клавиш для команды:cinnamon-screensaver-command -l
25
29.04.2020, 14:58
1 ответ

В AT&T Unix и исторически в BSD существовали только процессы, а не потоки; и каждая запись в таблице процессов состояла из двух частей: структуры struct procи структуры struct user. Первый всегда находился в памяти ядра. Последний может быть заменен как часть замены процесса. (Помните, это было в те дни, когда Unices фактически обменивались вещами, а не требовали -выдачи их.)

Структура struct userбыла также известна как «область u». Это произошло потому, что в результате некоторого умного отображения памяти структура текущего процесса userвсегда находилась по одному и тому же фиксированному виртуальному адресу в памяти ядра, и на нее можно было ссылаться в коде через глобальный символ u(, а не через указатель. ).

Структура содержала всевозможные вещи, которые просто не нужны ядру, когда процесс не является текущим процессом, включая маску создания файла, открытую таблицу файловых дескрипторов, ограничения ресурсов и так далее. Он содержал адреса обработчиков сигналов , нужных только тогда, когда процесс запущен и пытается вызвать обработчик, но не маску заблокированных сигналов или набор ожидающих сигналов,оба из них необходимы, когда процесс заменяется и, таким образом, были в struct proc. В некоторых Unices он даже содержал аргументы для текущей операции ввода-вывода, а не передавался по стеку.

Конечно, причины для такой конструкции уже давно не актуальны. К концу 80-х они практически устарели. В конце концов, глобальная переменная и умное отображение памяти были заменены простой косвенностью через указатель. Вы обнаружите, что struct userвсе еще существует в заголовочных файлах библиотеки C на BSD (в <sys/user.h>), но это в основном для совместимости исходного кода. В XNU она объявлена ​​как пустая структура. FreeBSD отмечает , что он присутствует главным образом потому, что он используется в дампах ядра для выполнения в формате a.out. Linux даже не существовал до тех пор, пока идея не устарела, и он вообще не работает таким образом.

В этом дизайне были некоторые вариации. Например, :AT&T Unix System 5 имела «расширенную пользовательскую область», struct euser, на которую указывало поле u_euserpструктуры u, где располагались некоторые вещи. Это иллюстрирует еще один момент. Все переменные-члены struct userназываются u_somethingв соответствии с соглашениями о кодировании ядра C того времени и его ранними языковыми правилами. Это считается причиной того, что umaskназван так , хотя это не точно.

Дополнительная литература

  • Стив Д. Пейт (1996 ). Внутреннее устройство UNIX :Практический подход . Аддисон -Уэсли. ISBN 9780201877212.
  • Морис Дж. Бах (1987 ). Дизайн операционной системы Unix® . Прентис -Холл. ISBN 0132017571.
37
19.03.2021, 02:19

Теги

Похожие вопросы