|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
||
Пользовательская буферизация13.09.2019, 22:51. Показов 5120. Ответов 49
Метки нет (Все метки)
Что такое пользовательская буферизация? Читаю книгу по системному программированию и в ней есть тема пользовательской буферизации,но я не могу понять что автор имеет ввиду под понятием пользовательской буферизации.
Вот цитата с нее : Кликните здесь для просмотра всего текста
Пользовательская буферизация это просто построение программы с помощью обычных массивов или что? Добавлено через 5 часов 5 минут Если это так то как может быть не буферизованный ввод вывод?
0
|
||
| 13.09.2019, 22:51 | |
|
Ответы с готовыми решениями:
49
двойная буферизация двойная буферизация Двойная буферизация на С++ |
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
||
| 14.09.2019, 19:49 [ТС] | ||
|
DrOffset, так разве адресное пространство ядра отделено полностью от адресного пространства программы? Насколько я помню то все адресное пространство процесса состоит с пространства ядра + процесса, разве не так?
И все таки правильно я написал, после вызова read() программа переключается в режим ядра и вызывается обработчик события который вызывает read который сначала читает данные в буфер ядра, потом возвращает данные обработчик, обработчик буфер программы, а буфер программы тому буферу который был указан в read()? Добавлено через 5 часов 15 минут DrOffset, я прочитал ту статью и у меня появились сомнения,вот цитата
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 14.09.2019, 19:55 | ||||
|
Добавлено через 1 минуту
0
|
||||
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
||
| 14.09.2019, 19:56 [ТС] | ||
|
DrOffset,
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 14.09.2019, 19:59 | |
|
Vanconts, к чему это?
0
|
|
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|
| 14.09.2019, 20:01 [ТС] | |
|
DrOffset, к тому что flusher сбасывает память на диск с ядра,а не с буфера программы в ядро
0
|
|
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|
| 14.09.2019, 20:04 [ТС] | |
|
DrOffset, а вот скрин с сайта о виртуальной памяти на котором видно что 1 ГБ адрессного пространства процесса занимает ядро,возможно это не правда,тогда как все на самом деле?
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 14.09.2019, 20:07 | |||
|
Ваша цитата из #21 не имеет ничего общего с flusher из ядра. Это цитата о библиотечной функции flush, которая делает то, что я написал. Добавлено через 2 минуты
0
|
|||
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|
| 14.09.2019, 20:10 [ТС] | |
|
DrOffset, я кажется понял, спасибо,просто принцип работы буфера ядра с буфером программы слегка схожи поэтому я путался в этом,но так же в той теме было написано что есть ввод-вывод без буфера ,такое же есть в ядре,там написано что не используют буфер для того чтобы быть увереным что данные попали на диск,но это выходит не так,т.к. данные задеживаются в буфере ядра и просто могут не записаться на диск даже если не использовать буфер программы,разве не так?
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 14.09.2019, 20:12 | ||
|
Но вообще да, данные могут не записаться на диск, даже если буфер программы не используется.
0
|
||
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|
| 14.09.2019, 20:15 [ТС] | |
|
DrOffset, в теме на stackoverflow ,тоесть по сути данные(не всегда) проходят двойную буферизацию?
Добавлено через 1 минуту а когда я указываю читать 1024 байт 1024 раза по одному байту с файла то выходит что ядро вызывает 1024 раза read с файла по одному байту ,записывает это в буфер программы и уже с этого буфера данные приходят в саму программу?
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 14.09.2019, 20:23 | ||||
Самый простой пример и наглядный - это запись на флешку, если вы открыли файл в программе, и даже если отключили буферизированный ввод-вывод из RTL, записали файл, данные ушли драйверу и все коды возврата всех вызовов сигнализируют об успешной записи, то это далеко не означает, что они реально будут записаны. Именно поэтому у вас просят сделать "безопасное извлечение" (в Linux также есть команда sync для этого). В этот момент драйверу уйдет событие о том, что нужно сбросить все данные на носитель. Добавлено через 4 минуты
1
|
||||
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|||
| 14.09.2019, 20:25 [ТС] | |||
|
DrOffset, ну именно как буферы ядра работают я понял
и я об этом
Добавлено через 55 секунд
0
|
|||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||
| 14.09.2019, 20:29 | ||
Я бы не понимал ее буквально на вашем месте.
0
|
||
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|
| 14.09.2019, 20:40 [ТС] | |
|
DrOffset, просто теперь когда я понял как все работает то как по мне это глупый подход постройки логики,нужно проверять скорее записаны ли данные на диск ,а не в ядро,
а вот еще такой момент насчет sync() ,насколько я знаю sync как и fsync только "убеждаются " что данные записываются на диск,а чтобы использовать прямую запись с буфера программы на диск нужно открыть файл с флагом O_DIRECT,не так ли?
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
||||
| 15.09.2019, 00:08 | ||||
|
Большинству программ совершенно не важно, записаны ли реально данные сию минуту или будут записаны чуть позже. Если бы каждая обращающаяся к диску программа требовала немедленной реакции устройства на это, то как вы считаете, что бы произошло? Я вам подскажу: устройство будет просто "висеть" в бесконечной активности, что приведет не только к "тормозам" на уровне софта, но и быстрому его (устройства) износу. Добавлено через 3 минуты И кстати в справке к этому флагу написано следующее:
0
|
||||
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
||
| 15.09.2019, 00:19 [ТС] | ||
|
DrOffset, а в каких случаях это может быть?
0
|
||
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|||
| 15.09.2019, 00:42 | |||
|
Добавлено через 1 минуту Возможно будет полезно: https://lwn.net/Articles/457667/
0
|
|||
|
4 / 3 / 1
Регистрация: 08.08.2019
Сообщений: 238
|
|
| 15.09.2019, 00:43 [ТС] | |
|
DrOffset, та я понимаю что с осторожностью, просто что значит с осторожностью в моем случае? Это может быть опасно? И кстати чем так плохо делать прямой ввод-вывод?
0
|
|
|
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
|
|
| 15.09.2019, 01:31 | |
|
1
|
|
|
2737 / 894 / 331
Регистрация: 10.02.2018
Сообщений: 2,138
|
|
| 15.09.2019, 11:24 | |
|
Vanconts, жесткие диски осуществляют обмен информацией только блоками - секторами (512, 1024, ... байт). Если вы хотите прочесть один байт, то с диска нужно всё равно прочесть сектор, затем из прочитанного выбрать один байт. Если вы хотите следующий байт, то нужно опять прочесть тот же сектор и выбрать из него следующий байт. Логично, что выгоднее прочесть сектор один раз в память, а последующие операции чтения выполнять из памяти миную обращение к дискам. При записи ещё хуже. Что бы записать байт, нужно сперва прочесть сектор, заменить в нём байт и затем записать изменённый сектор на диск. Блочный алгоритм работы дисков вынуждает к использованию промежуточного буфера. Если хотите работать напрямую, то вы должны работать с блоками памяти кратными секторам как по размеру, так и по смещению.
1
|
|
| 15.09.2019, 11:24 | |
|
Нужна двойная буферизация для программы пользовательская функцыя Пользовательская функция Пользовательская функция! Пользовательская функция О_О Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version
1. 2003 - 06 - Designing Virtual Worlds (1st Edition)
Автор: Richard A. Bartle | Объем: 768 стр.
Ссылки: Amazon
. . .
|
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
|
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы.
Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
|
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version
Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
|
|
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров".
Задача:
Запрет инициалов.
Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
|
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . .
Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
|
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг.
Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует.
В процессе разработки. . .
|
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
|