Copy on Write
реализован на основе implicit interrupt
, сгенерированногоMMU
(Блоком управления памятью ). Примеры причин ошибки страницы следующие.
page fault
также является неявным прерыванием, сгенерированным MMU
, но оба они НЕ одинаковы. Ниже приведены некоторые причины ошибки страницы.
Недопустимый доступ к памяти:Ошибка page fault
возникает, когда страница, требуемая пользовательским процессом, отсутствует в памяти. Page fault
может произойти, если процесс хочет получить доступ к виртуальному адресу, который ему не выделен (, широко известный какsegmentation fault
). Или это может произойти, если страница выгружена.
Копирование при записи:Одной из причин для page fault
является Copy On write
. Во время системного вызова fork ()ОС выделяет одну и ту же память как для дочернего, так и для родительского и помечает память как прочитанную -. Это экономит огромный штраф за копирование. Предположим, что ребенок вызывает exec
сразу после fork
. Если бы копирование при записи не использовалось, вся скопированная страница была бы сброшена во время exec
. Когда родитель или ребенок пытаются писать на этой странице, возникает ошибка страницы. Затем ОС выделяет новую страницу и снимает ограничения только для чтения -.
Копирование по требованию:Другой причиной для page fault
является copy on demand
. Когда пользовательский процесс запрашивает новую страницу в своем диапазоне виртуальных адресов, ОС может выделить виртуальный адрес без выделения соответствующего ему физического адреса. Когда процесс пытается получить доступ к этой странице, он генерирует ошибку страницы. Затем ОС выделяет физическую страницу, соответствующую виртуальной странице.
Таким образом, сбой страницы может НЕ требовать выделения новой страницы(в случае, когда она генерируется из-за ошибки ). Но если ошибка страницы требует новой страницы, страница поступает из того же пула страниц, из которого страница поступает в копию сервера при записи.
Реализацияmalloc
не связана с copy on write
.
ПРИМЕЧАНИЕ Операционная система может работать без Copy on Write
и Copy on Demand
. Хотя это не будет хорошо работать.Но page fault
механизм необходим ОС для поддержки `подкачки'
Проблема, кажется, существует только с шаговыми кнопками, которые на самом деле не нужны в моем случае. Их можно отключить, и панель выглядит нормально.
См. некоторые нерешенные отчеты об ошибках gtk, которые могут быть связаны:Нерешенная ошибка ширины кнопки шаговика Gtk
Следующий комментарий заставил задуматься об отключении кнопок:
Still an issue for GTK2. But less of one for GTK3 since high contrast and adwaita don't use stepper buttons by default. However, if you have a theme with steppers this is still present in 3.
GtkTheme Справочник по отключению степперных кнопок:GtkTheming
Это дает мне планку меньшего размера. Цвет тоже можно поменять, я думаю.
/* Disable steppers as the width is not conforming to the slider width and looks strange in apps like eclipse (SWT) */
scrollbar {
-GtkScrollbar-has-backward-stepper: 0;
-GtkScrollbar-has-forward-stepper: 0;
}
scrollbar slider {
/* Size of the slider */
min-width: 6px;
min-height: 6px;
border-radius: 6px;
-GtkRange-slider-width: 6;
-GtkRange-stepper-size: 6;
-GtkRange-stepper-spacing: 0;
-GtkRange-trough-border: 1;
-GtkRange-arrow-displacement-x: 0;
-GtkRange-arrow-displacement-y: 0;
}