Меню

Буфер обмена это размер оперативной памяти



Что такое буфер обмена

Очень удобная и полезная возможность, предоставляемая операционной системой по перемещению различной информации между приложениями. Все люди активно пользуются этой возможностью, хотя далеко не все четко себе представляют, как это работает.

Мы обойдемся без научных определений, что такое буфер обмена или clipboard по английски, а просто постараемся объяснить простым понятным языком для начинающих пользователей компьютера. Итак, буфер обмена это часть оперативной памяти, выделяемая для временного хранения помещаемой в него информации. Такое объяснение будет понятно далеко не всем, поэтому рассмотрим на более наглядных примерах.

Допустим, вы хотите скопировать какой-нибудь файл или папку в другое место на жестком диске компьютера. Сделать это можно несколькими способами, например, щелкнув на нем правой кнопкой мыши и выбрав в контекстном меню «Копировать». После этого, вы переходите в нужную папку в Проводнике Windows, щелкаете правой клавишей мыши и выбираете «Вставить». В папке появляется копия скопированного ранее объекта.

Что при этом происходит? Когда вы выделяете объект и выбираете в меню «Копировать», он помещается в буфер обмена, а по команде «Вставить» извлекается из буфера обмена в указанное место, причем вставлять из буфера можно сколько угодно раз. Следует иметь в виду, что одновременно в clipboard может храниться только одна порция информации, то есть, снова скопировав в буфер обмена другой объект, предыдущий из него удаляется.

Помещать в буфер можно любой тип информации, а не только файлы и папки. Выделив текст на странице в браузере и нажав «Копировать» вы тем самым помещаете его в буфер обмена и можете затем вставить этот фрагмент текста в текстовый редактор. Точно так же можно поступать с изображениями.

Другими словами, буфер обмена — это выделенная область в оперативной памяти компьютера, служащая для возможности обмена информацией между различными программами или внутри одной программы по воле пользователя. Что находится в буфере обмена в данный момент времени, нигде не отображается, нужно просто помнить, что вы копировали последним или выполнить вставку и посмотреть на результат.

В Windows XP содержимое буфера обмена можно было посмотреть, запустив файл clipbrd.exe находящийся в C:\Windows\System32 в более поздних версиях Windows такой возможности нет.

Информация в clipboard хранится в нем только до завершения работы компьютера, перезагрузки или помещения в него следующей порции данных.

Информация в буфер обмена может записываться в нескольких разных форматах одновременно с распределением по предпочтительности, наиболее предпочтительный вначале. Например, копируя форматированный текст из Word, мы получаем в буфере обмена его сразу в нескольких вариантах, как форматированный текст, как простой текст и как изображение. Соответственно, обратно в Word он вставится таким же форматированным текстом, в простой текстовый редактор обычным тестом, а в графический редактор в виде изображения.

Помимо системного буфера обмена доступного всем приложениям в компьютере, некоторые программы могут использовать собственный буфер доступный только им.

Если программа, в которую вы хотите вставить информацию из буфера, не поддерживает не один из форматов находящихся в нем в данный момент, то операция вставки будет недоступна. Например, если в буфере обмена находится изображение, то в простом текстовом редакторе вставка из буфера будет недоступна.

Горячие клавиши

Для работы с буфером обмена помимо меню можно использовать комбинации горячих клавиш, сильно ускоряющие работу.

Операция копирования — Ctrl + C или Ctrl + Ins (Insert)

Операция вставки — Ctrl + V или Ctrl + Ins (Insert)

Операция вырезания — Ctrl + X

Как очистить буфер обмена

В принципе, как мы уже писали, он очищается автоматически, это заложено в алгоритме его работы. Однако, иногда вы можете захотеть сделать это принудительно, чтобы удалить конфиденциальные данные из буфера обмена или освободить память от огромного файла находящегося в нем. Штатные средства операционной системы такой возможности не предоставляют, использование сторонних программ в данном случае не целесообразно. Проще всего скопировать в буфер обмена новую информацию, которая заменит хранящуюся в нем. Достаточно сохранить туда одну букву.

Если такой способ очистки буфера обмена вас не устраивает то, начиная с Windows Vista, можно создать специальный ярлык в удобном месте для его принудительной очистки. Как создать ярлык можно узнать здесь, вам нужно просто в поле объект написать следующую строку:

Читайте также:  Правильный разгон оперативной памяти ddr2

Название ярлыка можно сделать любое, например «Очистить буфер обмена». Теперь при запуске этого ярлыка буфер обмена будет очищаться.

Источник

Буфер обмена это размер оперативной памяти

Все вопросы и правила по ведению этой статьи были описаны в части 1. Автор ещё раз замечает, что он активно использует свои определения, и теоретические выкладки, которые никак не претендуют на официальный статус научных, но от этого хуже не становятся.

Буферы

Ещё один вид памяти, часто используемый, но нереализованный в виде API. Он берёт своё начало от вопросов по схемам редактирования файлов, что видимо, является темой последующих статей. Буферная память как следует из названия – это по сути дела то же, что и буферы. Но, в конце концов, такое понятие было обобщено и систематизировано, так как предлагаемая схема использования нашла себя и в других областях, отличных от вопросов буферизации. В общем случае темы буферизации и дефрагментирования являются довольно большими, очень скучно и нудно излагать их в одной статье, поэтому здесь будут лишь объяснения, связанные с буферной памятью, а все вопросы и причины, почему именно, так или иначе, таятся глубже.

Буферная память имеет несколько назначений.

Целью механизма буферной памяти, (или то же что «прокси- систем») является уменьшение потребляемых ресурсов объектом приёмником, требующего сравнительно больших затрат, путём уменьшения частоты поступления потока данных в объект- приёмник.

Целью механизма буферной памяти является создание участка оперативной памяти для отработки процессов рейдеринга памяти, и других процессов, время выполнения которых зависит от размеров памяти.

Читатель может заметить ещё одну цель создания буферов. Это проведение некоторого рода операций над файлами большого размера, которые не умещаются в оперативной памяти. Однако следует считать, что этот случай попадает под первое назначение буфера, так как нехватку оперативной памяти можно понимать как большие затраты ресурсов. Таким образом под затратой ресурсов следует понимать как источник хранения данных, так и время выполнения кода.

Буферной памятью называется – объект памяти, которым владеют одновременно два объекта, не связанные между собой.

В этом определении важно два слова: «ДВА ОБЪЕКТА» и «НЕ СВЯЗАННЫЕ». В случае нарушения одного из этих условий мы автоматически попадаем в неизведанный мир Оморфо программирования.

Обычно два объекта, владеющие буферной памятью, называются по типу их отношений с буфером: «источник» / «приёмник». Один объект «источник» помещает данные в буфер, а другой объект – «приёмник» снимает их с буфера. Но (. ) сами эти объекты не связаны между собой ни какой архитектурной зависимостью кода! Между прочим, такая модель взаимодействия получила название прокси, когда существует система-посредник между двумя системами. То есть буфер иными словами является прокси-объектом, а источник – буфер – приёмник – прокси-системой.

Рабочий цикл буфера.

Буферная память имеет три основных состояния:

  1. Состояние сброса.
  2. Состояние наполнения.
  3. Состояние передачи.

Состояние сброса – это первоначальное состояние буфера, в котором весь буфер считается пустым.

Состоянием наполнения называется момент времени, в котором информация помещается в буфер.

Состоянием передачи называется процесс, когда информация из буфера перемещается в объект приёмник.

Графическое изображение цикла работы буфера представлено на следующем рисунке 2.1 .

Состояние сброса является начальным состоянием буферной памяти, после того как она заказана и выделена. Буферную память, как правило, заказывает третье лицо, и назначает её владельцам: источнику и приёмнику. То есть источник, и приёмник не подозревают, что они работают через буфер. Очень часто буферную память заказывает и объект приёмник, который, по сути, управляет выходным хранилищем данных. В этом случае, он подключается к объекту источнику и передаёт ему буфер. Но никогда (. ) буферную память не заказывает объект источник, на это есть много веских причин, которые выходят за рамки повествования. Можно считать, что объект источник должен быть сконструирован так, чтобы он не подозревал, что работает с буфером. Конечно, на любое правило есть исключения, но в большинстве случаев, такое утверждение указывает на неоптимальность управляющего алгоритма, либо на возможность потенциальной ошибки в нём.

Читайте также:  Что показывает загрузка цп и оперативная память

Объект источник помещает поток данных в буфер, при этом этот процесс передачи может быть организован двумя методами:

  1. Сегментами.
  2. Произвольно.

В первом случае считается, что источник заполняет буфер посегментно, фиксированными блоками памяти. Во втором случае, заполнение буфера происходит произвольным образом. По способу заполнения можно выделить следующие виды взаимодействия:

  1. По сессионное заполнение.
  2. Циклическое.
  3. Неупорядоченное.

В первом случае источник заполняет буфер во время специальных периодов называемых сессиями, во втором случае буфер заполняет в каком-либо непрерывном цикле, и в третьем случае буфер заполняется в произвольный момент времени.

И, наконец, по способу доступа источника и приёмника:

  1. Синхронный
  2. Асинхронные.

От приведённой выше классификации зависят методы и способы построения рабочего цикла буфера. Главным моментом в жизни буфера является его переполнение, именно по возникновению этого события происходит процедура передачи и перевод буфера в состояние сброса. То как это происходит, зависит от схемы взаимодействия.

Если память в буфере занимается сегментно, то тогда возникает возможность предсказывать переполнение, и передать данные в приёмник в любой момент, когда он будет готов для приёма. В подобных алгоритмах активно используются асинхронные вызовы и событийные системы потенциалов, но можно ограничиться и традиционными способами.

Если заполнение выполняется сессиями, то возникает возможность освобождать буфер каждый раз после сессии, если приёмник готов к передачи, но этим не стоит злоупотреблять, так как система буферной памяти разрабатывалась именно чтобы сделать обращение к выделению основных блоков памяти менее частым. В этом случае можно использовать систему потенциальных предсказаний. В случае циклического заполнения процесс передачи осуществляется в зависимости после последнего гарантированного удачного помещения данных в буфер. Удачным гарантированным помещением в случае сегментной схемы считается – последний помещающийся в буфер сегмент.

Так же хочется отметить по-секторную модель, в которой имеется возможность одновременных процессов считывания и записи в буфер, это актуально при многониточном программировании, а так же в нелинейных системах. В этом случае буфер делиться на несколько секторов. Когда заполняется один сектор буфера, следующий переходит в состояние заполнения, а заполненный сектор переходит в состояние передачи.

Выделение памяти буферу.

Вопрос создания буфера открывается в момент создания объекта приёмника. И как нестранно такое утверждение – правило. Сколько же памяти следует отдавать на буфер? Вот довольно жёсткий принцип:

Размер буфера должен быть таким, чтобы суммарное время выполнения кода обслуживающее режим наполнения, было бы равно времени выполнения кода, выполняющего режим передачи. При этом код исполняемый объектом источником должен иметь приемлемое время исполнения.

В первой части определения разговор идёт касательно так называемого первого назначения буфера. Обычно код организующий выделение памяти средствами ОС является «тяжёлым кодом», то есть он требует сравнительно много времени на выполнение. Предположим, если вы выполняете какие-то циклические действия над потоком ввода из файла, то было бы чрезвычайно расточительно обращаться к диску за каждым байтом. В этом случае, с диска считывается сразу дамп памяти, а некая операция выполняется над этим дампом. Данный пример, аналогичен, так же если вместо источника диска, подставить источник – некую функцию, конвертирующую данные, либо что-то ещё.

Во второй части правила говориться о затратах на использование ресурсов источником, подобно примеру выше – это диск. Диск – медленное устройство и требует сравнительно большего времени для получения/передачи данных. Вместо диска можно подразумевать совокупность процедур, работающих с памятью, и время выполнения которых зависит от размера обрабатываемой памяти. Примером таких процедур могут служить процедуры рейдеринга памяти, выполняющих её дефрагментацию.

Однако, несмотря на всё вышесказанное, прямое использование этого правила не возможно, так как число влияющих факторов на выбор размера буфера намного больше из тех, что рассмотрены в правиле. На выбор размера буфера так же влияют: гранулярность памяти, физический размер страниц, методы выделения памяти, удобство работы обслуживающих алгоритмов, и др. Так же фактором выбора размера буфера является место его размещения и метод получения.

Читайте также:  Как расширить слоты для оперативной памяти

Буферную память можно разместить как статически, то есть заранее расположенную в секции неинициализированных данных, так и динамически выделенную.

В том случае, если буфер создаётся для кэширования вывода в файл, можно разместить буфер прямо на первых страницах файла, однако это чревато последствиями перекачки всех данных при сохранении файла. Можно размещать буфер и в хвосте файла, с каким-то запасом, и постепенно передвигать сам буфер по мере заполнения файла. Вот как это выглядит на практике:

Здесь серым цветом выделена заполняющаяся часть файла, а зелёным – буфер. Остальное – незанятое пространство. Если заполнение дойдёт до границ буфера и потребует большего пространства, тогда информация в буфере будет переработана, а сам буфер будет перемещён дальше, вот так:

По сути, данный метод является как бы обычной последовательной записью в файл, но с промежутками. И, тем не менее, это считается полноценным случаем буфера.

Буферную память целесообразно размещать в области виртуальной памяти, т.е. в файле подкачки. В любом случае размер буфера обязан быть кратен размеру страницы в данной системе. Однако гранулярность выделения памяти в Win32 является 64-bits, что создаёт жёсткие ограничения на размер буфера. Поэтому стоит выделять некоторое пространство памяти для нескольких буферов, и давать им размеры и базовые адреса по размерам страниц. (Более подробно о стратегиях выделения памяти в следующей части.)

Один буфер для многих и многоуровневая буферизация.

Широкий круг задач приходится выполнять жёстко последовательно. Например, ввод с клавиатуры может быть направлен в данный момент времени только в один источник. Этим можно воспользоваться для организации одного буфера для использования многими. Можно применить технологию ускользающих. В этом случае сброс буфера будет выполняться либо когда он наполнен, либо когда к буферу обращается другой объект-хозяин. Место под такой буфер можно зарезервировать в неинициализированном разделе, если он не превышает 8kb – 12kb оперативно памяти. Использование статических буферов является более эффективными по способу адресации, и тем эта эффективность выше, чем больше кода использует данный буфер. При этом при использовании статически размещённого буфера отпадает головная боль за слежением очистки мусора и выделения памяти, что сильно влияет на качество системы. Статические буфера желательно использовать, где только это возможно, хотя это возможно далеко не везде. К счастью существует метод многоуровневой буферизации. Как следует из названия, этот метод представляет собой наличие объекта хозяина у буфера, где объект хозяин сам является буфером. Буфер, который «стоит» ближе к действительному источнику именуется первым, а все последующие по порядку. Обычно каждый последующий буфер имеет меньшую частоту сброса, а значит, занимает больше памяти. Метод многоуровневой буферизации позволяет комбинировать достоинства нескольких приёмов размещения буферов. Например, первым буфером может являться буфер размещённый статически, а вторым – размещённый динамически. Примером использования многоуровневой системы буферизации может послужить API работы с файлами. Вы можете использовать кокой-то свой буфер для выполнения задач, когда система прозрачно для вас выполняет ещё одну буферизацию. А если вспомнить про физический буфер, находящийся в самом жёстком диске, то мы получим трёх уровневую систему буферизации ввода.

Определённый интерес представляет использование «какой-либо памяти» и буфера. Модель работы такой системы выглядит так:

  1. Объект источник помещает данные в область памяти «не являющуюся буфером».
  2. После всех операций данные направляются в буфер.

В качестве промежуточной памяти может выступать какой либо её блок, размещённый статически и работать по методике ускользающих. Такая система нашла широкое применение на практике, и мы рассмотрим её подробней несколько позже. Важно отметить следующее, что в данной многоуровневой системе, первый объект-буфер не является либо совсем буфером, либо является буфером неполноценным, так как не отвечает одному из назначений буфера, или не имеет буферного цикла.

API буферов.

Обычно всё-таки следует организовать некоторый локальный API по работе с буферной памятью. Первая важная функция, которая должна существовать это, конечно же, CreateBuffer. Вот возможный её прототип:

Источник