Да. Есть два способа добиться этого:
Уловка для изменения порядка рабочих областей (, предполагая, что ваш левый экран является основным экраном, вы можете использовать xrandr -q
, чтобы проверить )
workspaces = ["2:mail", "3:web", "4:dev", "5", "6", "7", "8:chat", "9", "10", "1:db"]
associatedKeySyms = [xK_2.. xK_9] ++ [xK_0, xK_1]
Ключевым здесь является порядок associatedKeySyms
, так как xmonad не заботятся об именах ваших рабочих областей. Если вы не отображаете имена рабочих областей в строке состояния, это будет работать. Еще более простой способ — просто изменить associatedKeySyms
без изменения workspaces
. Однако, если вам нужно отобразить имена рабочих областей (, вы можете захотеть, чтобы «1 :db» стояло первым и было связано с mod+1
), тогда вам нужно следовать следующему решению.
В основном вам нужно взломать StackSet
в XMonad.StackSet
(https://github.com/xmonad/xmonad/blob/master/src/XMonad/StackSet.hs), чтобы манипулировать привязкой между экранами и рабочими пространствами. Вам нужно написать код в startupHook
в вашем конфигурационном файле, чтобы он выполнялся при загрузке xmonad.
Вам также может понадобиться XMonad.Actions.PhysicalScreens
, если вы хотите указать правый или левый экраны вместо идентификаторов экрана.
Я только начал использовать xmonad, и я не сделал именно то, что вы хотите. У меня похожие потребности, но не только при запуске xmonad.Я пытаюсь взломать как процедуру запуска , так и процедуру повторного экрана (новый монитор подключен/отключен ), и надеюсь, что вы найдете некоторые части моей конфигурации полезными при написании своей..https://github.com/subbyte/subXMonad
Обработчик прерывания таймера Linux не так уж много делает напрямую . Для x86 вы найдете обработчик прерывания таймера PIT/HPET по умолчанию в arch/x86/kernel/time.c
:
static irqreturn_t timer_interrupt(int irq, void *dev_id)
{
global_clock_event->event_handler(global_clock_event);
return IRQ_HANDLED;
}
Это вызывает обработчик событий для глобальных событий часов,tick_handler_periodic
по умолчанию, который обновляет счетчик jiffies , вычисляет глобальную нагрузку и обновляет несколько других мест, где отслеживается время.
Как побочный -эффект возникновения прерывания,__schedule
может закончиться вызовом, поэтому прерывание по таймеру также может привести к переключению задачи (, как и любое другое прерывание ).
Изменение CONFIG _HZ изменяет периодичность прерывания таймера. Увеличение HZ
означает, что он срабатывает чаще, поэтому возникает больше накладных расходов, связанных с таймером -, но меньше возможностей ожидания планирования задач (, поэтому интерактивность улучшается ); уменьшение HZ
означает, что он срабатывает реже, поэтому меньше накладных расходов, связанных с таймером -, но выше риск того, что задачи будут ждать планирования (, поэтому пропускная способность повышается за счет интерактивного отклика ). Как всегда, лучший компромисс зависит от вашей конкретной рабочей нагрузки. В настоящее время CONFIG_HZ
в любом случае менее актуален для аспектов планирования; см. Как изменить продолжительность срезов времени -, используемых планировщиком ЦП Linux?
См. также Как обрабатывается прерывание в Linux?
what Linux does in the timer interrupt?
Я расцениваю это как просьбу -между действиями.
Копирую отсюда__schedule()
:
* 3. Wakeups don't really cause entry into schedule(). They add a
* task to the run-queue and that's it.
*
* Now, if the new task added to the run-queue preempts the current
* task, then the wakeup sets TIF_NEED_RESCHED and schedule() gets
* called on the nearest possible occasion:
Это хорошая отправная точка; это хорошо задокументировано. Это начало длинной истории. Что такое «пробуждение»? Это о состояниях R и S? и блокировка?
У меня есть только одно небольшое возражение против ответа С.К. и против одной из ссылок :о том, что HZ «уже не так важен».
Может быть из-за того, что в прошлом была некоторая путаница, некоторая чрезмерная коррекция от 100 Гц до 1000 Гц, а затем обратно к 300 Гц, поэтому для одновременного соответствия «мультимедиа» (подумайте о происхождении HPET 2005 :«мультимедийный таймер» ).
Может быть с 4 и более ядрами, это тоже имеет меньшее значение. Но в зависимости от того, что вы хотите делать со своим «сервером», это все равно должно иметь значение -такое соотношение между задержкой и пропускной способностью -может быть важным при большой нагрузке.
И если планирование не выполняется в прерываниях по таймеру, то оно выполняется в этих «других» прерываниях.
И почему HZ не настраивается (загрузкой или даже временем выполнения )?