С помощью bash
вы можете заставить файловый глоббинг отказаться от __pycache__
, установив:
$ export GLOBIGNORE=__pycache__
Теперь, если вы выпустите:
$ ls __*
ls: cannot access __*: No such file or directory
Также с bash
Вы можете использовать переменную окружения FIGNORE
для пропуска суффиксов файлов. Это можно использовать для некоторой фильтрации каталога...
$ mkdir __pycache__
$ export FIGNORE=__pycache__
Тогда при выдаче:
$ ls __
tab
будет завершен файл
$ ls __pycache__
Однако если он имеет префикс (например, с помощью пути):
$ ls ./__
tab
он не будет завершен.
Вы можете использовать псевдоним grep
для исключения каталогов __pycache__
:
alias grep='grep --exclude-dir="__pycache__"'
Вы также можете использовать ответ Мадхавана Кумара для изменения завершения grep
и других команд, которые вы хотите фильтровать, но не забывайте, что они должны быть определены в rc-файле и использованы после использования bash_completion
, чтобы применить ваши переопределения.
FIGNORE
A colon-separated list of suffixes to ignore when performing filename
completion (see READLINE below). A filename whose suffix matches one of
the entries in FIGNORE is excluded from the list of matched filenames. A
sample value is ".o:~".
GLOBIGNORE
A colon-separated list of patterns defining the set of filenames to
be ignored by pathname expansion. If a filename matched by a pathname
expansion pattern also matches one of the patterns in GLOBIGNORE, it is
removed from the list of matches.
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
механизм необходим ОС для поддержки `подкачки'