«Ядро — это не процесс».
Это чистая терминология. (Терминология важна. )Ядро не является процессом, потому что по определению процессы существуют в пространстве пользователя. Но ядро имеет потоков .
«Если программа сталкивается с каким-либо обработчиком исключений, который требует длительной -синхронной обработки, прежде чем она сможет снова запуститься (, например, столкнется с ошибкой страницы, которая требует чтения с диска )» .
Если пользовательский процесс выполняет машинную инструкцию, которая ссылается на неотображенную страницу памяти, тогда:
Процессор создает ловушку и переходит в кольцевой 0/режим супервизора . (Это происходит аппаратно.)
Обработчик trap является частью ядра. Предполагая, что страница памяти действительно должна загружаться с диска, процесс будет переведен в состояние непрерывного сна (. Это означает, что он сохраняет состояние ЦП процесса в таблице процессов и изменяет поле состояния в записи процесса в таблице процессов. таблица процессов ), находит страницу памяти жертвы, инициирует ввод-вывод для выгрузки жертвы и страницы на запрошенной странице и вызывает планировщик (другой части ядра )для переключения пользовательского контекста на другой процесс, который готов к запуску.
В конце концов, ввод-вывод завершается. Это генерирует прерывание. В ответ на прерывание процессор вызывает обработчик и переходит в кольцевой режим 0/режим супервизора. (Это происходит аппаратно.)
Обработчик прерываний является частью ядра. Он очищает состояние ожидания ввода-вывода процесса, ожидавшего страницы памяти, и помечает его как готовый к запуску. Затем он вызывает планировщик для переключения пользовательского контекста на процесс, который готов к запуску.
В целом ядро работает:
В ответ на аппаратную ловушку или прерывание; это включает прерывания таймера.
В ответ на явный системный вызов пользовательского процесса.
Большую часть времени процессор находится в кольцевом 3/пользовательском режиме и выполняет инструкции из некоторого пользовательского процесса. Он переходит в кольцо 0/режим супервизора (, в котором живет ядро ), когда пользовательский процесс выполняет системный вызов (, например, потому что он хочет выполнить некоторую операцию ввода-вывода )или когда аппаратное обеспечение генерирует trap (неверный доступ к памяти, деление на ноль,и т. д. )или при получении запроса на прерывание от оборудования (Завершение ввода-вывода, прерывание по таймеру, перемещение мыши, поступление пакета на сетевой интерфейс и т. д.)
Чтобы ответить на вопрос в заголовке, "откуда планировщику ядра известно, как упреждать -процесс":ядро обрабатывает прерывания таймера. Если при поступлении прерывания таймера планировщик замечает, что работающий в данный момент пользовательский процесс исчерпал свой квант , тогда этот процесс помещается в конец очереди выполнения, и возобновляется другой процесс. (Как правило, планировщик заботится о том, чтобы все пользовательские процессы, готовые к запуску, получали справедливое процессорное время.)
Поскольку вы указываете место назначения /var/www/clients/client1/web5/./usr/share/zoneinfo/
, cp
сначала проверит, существует ли каталог для записи файлов. Так что да, вам нужно будет сначала создать каталог. Однако, если /var/www/clients/client1/web5/./usr/share/
уже присутствует, вы сможете:
cp -pr /usr/share/zoneinfo /var/www/clients/client1/web5/./usr/share/zoneinfo
, так как каталог назначения существует для записи каталога zoneinfo
.
rsync -a --relative
сделал свое дело.
rsync -a --relative /usr/share/zoneinfo/ /var/www/clients/client1/web5/
Кредит принадлежит unix _ниндзя в этом твите