Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как происходит сброс буфера на диск?  (Прочитано 24013 раз)
0 Пользователей и 1 Гость смотрят эту тему.
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« : 09-06-2011 06:59 » 

Всем привет. У меня такой вопрос. Например у нас есть программа, которая работает с буфером и файловой системой. Суть работы в следующем. Программа принимает некоторые данные в буфер и, например, каждые три секунды сбрасывает данные из буфера в файл, на файловой системе. Как программа работает с буфером не знаю, какие там есть способы в юникс системах, например memset, memcpy? Так вот, вопрос вот в чем, если например у нас буфер размером 5Мб, а за три секнды успело заполниться только 2Мб, что будет сброшено на диск? Весь буфер или только его заполненная часть? Если весь то что будет происходить с "пустой" частью буфера?

Добавлено через 25 минут и 20 секунд:
С точки зрения кода вроде понятно что операция происходит целиком с буфером. Увидел только указание размеров. А вот с точки зрения системы как? То есть возможно я зря думаю ниже кода, как сказано в коде так и будет!? Или все же...
« Последнее редактирование: 09-06-2011 09:57 от Джон » Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 09-06-2011 07:26 » 

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

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

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 09-06-2011 07:28 » 

а откуда система знает размер твоего! буфера, только ты сам.
Сказал 3 метра, значит 3 метра и будет сброшено
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #3 : 09-06-2011 07:29 » 

Dimka, а указатели куда указывают?
Sla, в том то и дело, что буфер размером 5 метров, а заполнился на три. Вопрос, сколько будет сброшено на диск?
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 09-06-2011 07:39 » 

ну так 5 и будет сброшенно, вернее  столько сколько ты сказал.

буфер = 5
с инфой = 3
буфер сброса = 1

Сброс 1
Сброс 1
Сброс 1

Сброс 1
Сброс 1

если хочешь меньше, то отслеживай конец буфера (указатель на последние данные)
« Последнее редактирование: 09-06-2011 07:41 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #5 : 09-06-2011 07:51 » 

В этом и вопрос. Если он сбрасывает ВЕСЬ буфер, что будет происходить с "пустой" частью буфера? Она будет записана на диск? В каком виде, мусор?

Если отслеживать конец данных в буфере, это нормальная практика? Есть стандартные механизмы описанные например в POSIX?
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 09-06-2011 07:57 » 

Ты же не очищаешь буфер пред использованием?

Сброшено буде ВСЕ
пример

выделил буфер (пусть будет зачищен).
заполнил до половины - сбросил.
Будет сброшен весь ( в конце - заполнитель очистки)
Указатель на начало

заполнил до четверти - сбросил.
Будет сброшен четверть + четверть до половины (если буфер не очищен) ( в конце - заполнитель очистки)
Указатель на начало

Но ты ведь пишешь в буфер по определенному указателю

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






Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #7 : 09-06-2011 08:07 » 

Понял. То есть, если у нас запись в основном по 3, 3,5 метра в буфер, а размер буфера 5 метров. То уменьшив размер буфера, не факт что мы сможем повысить эффективность дисковой подсистемы, за счет НЕ записи "не нужных" двух (2) метров, потому как нужно быть уверенным, как именно работаем с буфером. Например если, как ты описал, мы будем отслеживать позицию указателя относительно от начала буфера, то нам не важен размер буфера, главное не выйти за его рамки.

Так?
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 09-06-2011 08:46 » 

да, ты правильно понял.

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

Мы все учились понемногу... Чему-нибудь и как-нибудь.
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #9 : 09-06-2011 09:43 » 

Ок, всем спасибо!
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 09-06-2011 11:19 » 

Что вообще за буфер? Ничига не понятно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #11 : 09-06-2011 12:09 » 

RXL, я тоже ничего не понял. Но Sla говорит так уверенно, будто знает, что за буфер Улыбаюсь
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 09-06-2011 12:19 » 

Та ладно вам прибедняться...
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 09-06-2011 13:18 » new

Слав, если буфера ОС, то непонятно, какие, если приложения - то вообще ничего не понятно.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #14 : 09-06-2011 13:29 » 

Так как оказалось, что я понял Макса, а Макс понял меня, то попытаюсь объяснить.

Цитата
есть программа, которая работает с буфером

Это значит что она сбрасывает что-то в буфер (свой)

Цитата
и файловой системой.

И в какой-то момент сбрасывает этот буфер на диск.


Цитата
если например у нас буфер размером 5Мб
Этот буфер в программе


Цитата
за три секнды успело заполниться только 2Мб
И каждые три секунды, например буфер сбрасывается на диск



Цитата
что будет сброшено на диск?Весь буфер или только его заполненная часть?



Ответ: Весь буфер.

Цитата
Если весь то что будет происходить с "пустой" частью буфера?

Ответ: Сбрасывай только "заполненную часть"

« Последнее редактирование: 09-06-2011 13:34 от Sla » Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #15 : 09-06-2011 18:53 » 

Цитата: Sla
Ответ: Весь буфер.
Почему? Если буфер программы, то сбрасывается он так, как написано в программе.

Я лично не знаю, как написано.

Цитата: Sla
Ответ: Сбрасывай только "заполненную часть"
Но вывод из всего сказанного верный Отлично
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #16 : 09-06-2011 19:31 » 

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

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Антон (LogRus)
Глобальный модератор

ru
Offline Offline
Пол: Мужской
Внимание! Люблю сахар в кубиках!


WWW
« Ответ #17 : 10-06-2011 03:43 » 

А чем стандартная буферизация в ostream не устроила? зачем свой велосипед?
Записан

Странно всё это....
McZim
Команда клуба

ru
Offline Offline
Пол: Мужской
Я странный


WWW
« Ответ #18 : 10-06-2011 14:19 » 

мне просто нужно было абстрактно понять, я подзабыл. Поэтому ничего конкретного!
Записан

The CBO without stats is like a morning without coffee. (c) T.Kyte.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines