Что происходит, когда происходит переключение контекста, когда процесс находится в режиме ядра?

cp $(ls -1t */*/* | head -n 1) destdir

Это предполагая, что полный список файлов помещается в доступное пространство списка аргументов (или вы получите ошибку «слишком длинный список аргументов»).

ls -1t упорядочивает свои аргументы в порядке времени модификации (сначала самые новые, параметр -t ) и показывает по одному файлу в каждой строке (параметр -1 ) . head -n 1 занимает только первую строку.

Он подставляется в командную строку, так что вы получаете cp newestfile destdir .

0
05.03.2018, 08:20
1 ответ

Hablando en términos generales (No sé cómo el kernel de Linux implementa esto exactamente )Si se activa alguna interrupción, se detiene cualquier código que se ejecute, se guardan todos los registros y la CPU ejecuta la rutina de servicio de interrupción que maneja las interrupciones. Posteriormente se restauran los registros y continúa la ejecución del código.

Lo único que podría hacer para evitar esto es deshabilitar las interrupciones, lo que generalmente se hace en microcontroladores para manejar operaciones atómicas. Por lo general, lo primero que hace la rutina de servicio de interrupciones es deshabilitar las interrupciones (para que ella misma no pueda ser interrumpida )y después de realizar sus tareas, lo último que hace es volver a habilitar las interrupciones.

Nuevamente, no estoy familiarizado con la implementación exacta de las rutinas de servicio de interrupción en el kernel de Linux, pero espero que funcionen de la misma manera.

En cuanto a los cambios de modo de usuario a modo kernel en la arquitectura x86, creo que sucede independientemente de esto. Es seguro asumir que el ISR se ejecuta en modo kernel, por lo que la CPU tiene que cambiar a él. Si ya está en modo kernel, solo tiene que guardar los registros y saltar al ISR. Luego, reanuda el código que se ejecutó antes de la interrupción en cualquier modo en el que se ejecutó el código.

1
28.01.2020, 02:43

Теги

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