Какова роль буфера памяти является ли он устройством

Обновлено: 02.07.2024

Наиболее часто используемые операции в текстовых процессорах - копирование, перемещение, и удаление фрагментов текста. Эти операции могут выполняться как с буфером промежуточного хранения, так и без него. В Лексиконе, например, такие операции выполняются только через буфер. В процессорах MultiEdit и WinWord - и так и так. Например, в текстовом процессоре WinWord возможно перетаскивание фрагментов мышью на новое место (с удалением по старому месту или без удаления) без помощи буфера. Сущность операций, использующих буфер промежуточного хранения, состоит в том, что помеченный фрагмент текста переносится на новое место, копируется туда или просто удаляется Технология выполнения этих операций включает в себя несколько этапов:

выделение части текста (фрагмента);

перенос выделенного фрагмента в буфер промежуточного хранения;

перемещение курсора в нужное место документа;

копирование (перенос) выделенного фрагмента из буфера в место документа, указанное курсором.

На рис. иллюстрируется работа буфера промежуточного хранения: фрагмент текста переносится в новое место документа.


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

Поскольку все приложения Windows работают через общий системный буфер промежуточного хранения, операции с фрагментами текста могут затрагивать не только внешние документы, но и другие приложения. Так, вы можете перенести (скопировать) помеченный фрагмент из вашего текущего документа, создаваемого в WinWord, в какой-либо документ в табличном процессоре Excel, или, наоборот, использовать часть внешнего документа, находящегося в другом окне, создаваемом вами.

4. Для чего нужна операция отката?

Во многих программных средствах, в том числе и в текстовом процессоре, предусмотрена операция откатки. Для реализации этой операции текстовый процессор фиксирует последовательность действий по изменению текста в виде последовательных шагов. Специальной командой откатки (Undo) пользователь может вернуть документ к состоянию, которое было несколько шагов назад, т.е. "откатиться". Глубина возможной откатки зависит от Среды, мощности используемого компьютера и других причин. Наряду с командой откатки существует команда отмены откатки (Redo).

5. Какова роль окон в организации работы с текстом?

Характерной особенностью современных текстовых процессоров является их мультиоконность, т.е. способность одновременно работать с несколькими документами, находящимися в различных окнах. При вводе и редактировании текста пользователь работает в активном окне, в котором возможен доступ ко всем меню. Специальные команды дают возможность упорядочивать окна документов, создавать новые и переходить из одного окна в другое. Здесь различают два режима; полноэкранный и неполноэкранный. В полноэкранном режиме вновь открытое окно является текущим (активным) и перекрывает остальные открытые окна. Переход к другим окнам осуществляется по специальной команде. В неполноэкранном режиме специальные команды упорядочения окон дают возможность расположить все открытые окна на экране в уменьшенном формате без перекрытия (режим "мозаика") или вывести их на экран в натуральную величину с перекрытием в виде стопки документов (рис. 13.4). Окно становится активным в результате фиксации на нем в произвольном месте указателя мыши. Команды Распахнуть и Свернуть дают возможность распахнуть активное окно во весь экран или свернуть его в прежний уменьшенный формат.

С помощью команды Разбить рабочая область разделяется на две части. Это удобно, если необходимо работать одновременно с двумя разными частями большого документа.


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

Что такое буферная память?

Как узнать объем буферной памяти?

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

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

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

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

Объемы кэша

Объем буферной памяти

При выборе персонального компьютера важно обратить внимание на такой показатель, как объем буферной памяти. Поскольку он периодически нуждается в перезагрузке и очищении, то чем больше по размерам будет кэш - тем лучше. Современные ПА оснащаются 8, 16, 32 и 64 Мб, но буферы имеют объем 128 и 256 Мб.

Хотя современные ноутбуки и компьютеры чаще всего оснащаются большим размером кэш-памяти, меньшая – уже редкость. При выборе устройства пользователи редко обращают внимание на этот показатель, поскольку он непосредственно не зависит от цены. А также параметр не является ключевым при выборе компьютера. Здесь нужно обращать внимание и на другие показатели, поскольку обычно собственной памяти системы вполне достаточно для выполнения операций.

Типы кэш-памяти

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

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

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

Главная задача

Как проверить объем кэша?

Буферная память предназначена для временного хранения и чтения информации. Но этот показатель не является основным при определении эффективности работы винчестера. Важным также является алгоритм обмена данных с буфером, а также насколько хорошо проводится работа над тем, чтобы предотвратить ошибки.

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

Преимущества

Что такое буферная память?

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

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

Обычному пользователю для работы вполне достаточно 32 или 64 Мб. Больший размер теряет значимость, поскольку при взаимодействии с файлами большими по объему это различие незначительно. К тому же переплачивать за более объемный буфер вряд ли кому-то захочется.

Как узнать объем буферной памяти на жестком диске?

Преимущества буферной памяти

Не каждый пользователь интересуется такой характеристикой, как объем кэша (в отличие от размера жесткого диска). Обычно информация содержится на упаковке к устройству. Также можно найти данные в сети или воспользоваться программой HD Tune, которая является бесплатной.

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

Чтобы узнать объем буферной памяти в Мб, нужно скачать утилиту HD Tune и запустить ее. Далее во вкладке «Информация» нужно найти строку под названием «буфер», которая и покажет, какой по объему кэш установлен в данном устройстве.

Эксперты отмечают, что для обычного пользователя ПК подойдет размер в 128 Мб. Если же компьютер используется преимущественно для игр, стоит ориентироваться на размер кэша побольше.

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

Буферы

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

API буферов.

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

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

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

Пусть, например, в качестве первого устройства выступает компьютер, а в качестве второго - кабель локальной сети. Компьютеру значительно удобнее выдавать данные со скоростью, определяемой его собственным быстродействием, но в локальную сеть надо передавать данные со строго определенной скоростью, задаваемой стандартом на сеть (например, 100 Мбит/с). Кроме того, компьютер, по возможности, не должен отвлекаться на контроль за текущим состоянием сети, за ее занятостью и освобождением. Поэтому буферная память в данном случае необходима. И точно так же она нужна при приеме данных из локальной сети в компьютер.

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


Рис. 12.11. Двунаправленный информационный буфер

Информационные буферы бывают однонаправленными (входными или выходными) и двунаправленными (то есть входными и выходными одновременно - рис. 12.11). Например, буферная память сетевого адаптера двунаправленная, так как она буферирует и информацию, передаваемую в сеть из компьютера, и информацию, принимаемую из сети в компьютер. Двунаправленные буферы всегда сложнее проектировать из-за большего количества потоков данных.

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

Информационные буферы с периодическим режимом обмена могут быть организованы по типу FIFO или по типу LIFO .

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

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

Тем самым, разнообразие информационных буферов огромно. Мы же рассмотрим здесь всего три примера схем буферной памяти.

Первая схема - это простейший однонаправленный буфер с периодическим режимом обмена по принципу FIFO (рис. 12.12). Одно устройство записывает информацию в буфер, на другое устройство выдается информация из буфера. Память всегда записывается полностью, по всем адресам, и читается также полностью. Строб записи "–Зап." поступает в режиме записи с частотой, необходимой для записи, строб чтения "–Чт." поступает при чтении с частотой, необходимой для чтения. Шины данных для записи и чтения в память в случае, показанном на рисунке, отдельные.

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

Перед началом работы устройство, производящее запись в память, сбрасывает счетчик в нуль сигналом "–Сброс" и устанавливает режим записи в память, перебрасывая в нуль управляющий триггер (единица на инверсном выходе ). Затем начинается процесс записи: записываемые данные поступают с однонаправленного входного буфера (АП5) и записываются в память сигналом "–Зап.", который своим задним фронтом переключает адреса памяти. Полная процедура записи включает в себя столько циклов записи, сколько имеется ячеек у используемой памяти.

После окончания процедуры записи устройство, производившее запись, разрешает чтение из памяти, устанавливая в единицу триггер положительным фронтом сигнала "Пуск" (нуль на инверсном выходе ). При этом разрешается прохождение сигнала "–Чт.". Адреса памяти переключаются по заднему фронту сигнала "–Чт.", и по этому же фронту данные, читаемые из памяти, фиксируются в выходном регистре, срабатывающем по фронту (например, ИР27). Выходной регистр выполняет две функции: он не пропускает на выход данные, записываемые в память (по сигналу -WE запрещается запись в триггер), а также обеспечивает одновременность изменения всех разрядов читаемых данных. Выходная информация из-за этого регистра задерживается на один период сигнала "–Чт.", что необходимо учитывать. Если взять регистр со входом сброса в нуль, то можно сделать, чтобы при процедуре записи в память на выходе схемы был нулевой код.

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

Читайте также: