Bash-скрипт не работает в crontab

MMU обращается к таблице, которая описывает, как преобразовывать виртуальные адреса в физические адреса. (Не нужно преобразовывать физические адреса в виртуальные адреса, и это было бы вообще невозможно, поскольку к одному и тому же физическому адресу можно получить доступ через несколько виртуальных адресов или его можно не отображать.) Структура этой таблицы зависит от архитектуры ЦП, но общий принцип всегда один и тот же: есть регистр ЦП, который содержит физический адрес таблицы, который содержит физические адреса следующих таблиц, и так далее (всего от 2 до 4 уровней в существующих архитектурах) до уровня таблиц который содержит физические адреса, где находятся данные. На каждом уровне, какой элемент таблицы использовать, определяется некоторыми битами виртуального адреса.

MMU ничего не знает о процессах операционной системы как таковых. Когда ЦП переключается на выполнение другого процесса, то есть когда происходит переключение контекста, задачей кода переключения контекста операционной системы является обновление таблиц MMU по мере необходимости.На практике я думаю, что все системы Unix хранят копии таблиц в памяти для каждого процесса и просто обновляют регистр MMU, чтобы он указывал на таблицу верхнего уровня для текущего процесса.

На самом деле есть часть MMU, которая заботится о процессах операционной системы: TLB. Поиск записей в таблице MMU довольно затратен, поскольку требует многократного доступа к памяти. TLB — это кеш этих запросов. При переключении контекста операционная система должна аннулировать TLB (т. е. удалить все записи кэша), поскольку сопоставление для нового процесса будет другим. Многие архитектуры позволяют ОС помещать индикатор в каждую запись таблицы MMU, чтобы сказать, что «эта запись принадлежит процессу N». Затем запись TLB пропускается, если номер процесса, который она содержит, не является текущим номером процесса. Регистр ЦП содержит номер текущего процесса, а код переключения контекста обновляет его. Этот механизм означает, что TLB может содержать информацию сразу о нескольких процессах, что повышает производительность при переключении между этими процессами. Поскольку для хранения N часто доступно меньше битов, чем необходимо для хранения всех идентификаторов процессов ОС, N — это не идентификатор процесса, а число, сгенерированное ОС для этой цели, и оно меняется со временем, если оно вообще используется.

0
21.01.2017, 18:26
1 ответ

Проблема с этой строкой:

clamscan --bell --recursive --max-filesize=99999 --log log/myLogs.txt $file

Это пытается записать в журнал / myLogs.txt. Если вы находитесь в своем домашнем каталоге / home / oneill , он попытается записать в /home/oneill/log/myLogs.txt , что, вероятно, является правильным местом. Если вы находитесь в корневом каталоге / , он попытается записать в /log/myLogs.txt , для которого у него нет соответствующих разрешений.

Используйте абсолютные пути или поместите cd / home / oneill где-нибудь в начале скрипта.

3
28.01.2020, 02:25

Теги

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