Обновить
109
0
Михаил Борисов @MichaelBorisov

Пользователь

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

Страх и ужас!

Вот альтернативная реализация 32-битного LFSR Галуа с полиномом Ethernet (0xEDB88320). Оригинал на Си:
uint32_t lfsr_step(uint32_t x)
{
    if(x&1)
    {
        x = x>>1 ^ 0xEDB88320;
    }
    else
    {
        x >>= 1;
    }
    return x;
}


Результат компиляции GCC 10.2:
lfsr_step(unsigned int):
        mov     eax, edi
        shr     eax
        mov     edx, eax
        xor     edx, -306674912
        and     edi, 1
        cmovne  eax, edx
        ret


Я бы написал иначе:
lfsr_step(unsigned int):
        shr     eax,1
        sbb     ebx,ebx
        and    ebx, 0xedb88320
        xor     eax,ebx
        ret


При реализации LFSR важно избегать условных переходов (JC, JNC и т.д.) потому, что в связи с псевдослучайностью последовательности предсказатель переходов процессора будет очень часто ошибаться. В результате код будет работать в разы медленнее.

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

Но, к сожалению, вы опоздали на пару сотен лет. В нынешнее время более продуктивно сначала изучить то, что изобретено другими, а уже потом изобретать своё. Можно ли поинтересоваться вашим возрастом?

Насчёт предложенного вами метода поиска максимума. Рассмотрим одномерный случай, чтобы не усложнять.

Так вот, вы имеете функцию sin(x) на сегменте [-4,4] и хотите найти её максимум. Вы делите промежуток на 2 части [-4,0]; [0, 4] и выбираете ту из них, максимум на которой больше. Главная загвоздка данного шага в том, чтобы узнать, какую половину сегмента выбрать.

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

Чтобы выбрать промежуток, максимум на котором больше, вам придётся вычислить одно или несколько значений в каких-то точках на каждом из промежутков-кандидатов. Сколько это будет точек? Чтобы точно найти максимум на каждой из половин, надо вычислить значения на всём бесконечном множестве точек.

Поэтому ваш метод, хотя и интересен с философской точки зрения, на практике неприменим.

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

Не обязательно предъявлять такое число. Достаточно показать, что оно существует, и что оно не принадлежит множеству вычислимых чисел.
А вы не искали по теме ультразвуковой диагностики? Там же есть методы обработки сигналов, которые воссоздают изображение «в срезах». Возможно, они применимы к вашей ситуации.
Потому, что это множество конечных строк, а диагональный метод работает на бесконечных строках (бесконечных десятичных дробях).
По крайней мере, удалось уточнить область применимости Стандартной модели — в сторону расширения. Это даёт информацию о том, где не надо искать открытий.
Раздел, посвящённый операционным усилителям — прочесть дважды

Дважды — мало. Надо минимум 10 раз, и после каждого раза — осмысление, обдумывание, сопоставление с другими знаниями, и ещё практика. Иначе не работает, проверял на себе.
Не всё так просто. Резисторы сопротивлением более пары-тройки мегаом в усилителях — это прямой путь к помехам, дрейфу, шуму и так далее. 420МОм — это вообще за пределами воображения. Токи утечки печатной платы и входные токи ОУ будут превышать номинальный ток через этот резистор.

Кроме того, коэффициент усиления схемы на одном ОУ не может быть выше, чем собственный коэффициент усиления ОУ. А он обычно составляет 50000-300000. Конкретно у вашего ОУ — 100e3. Так что в миллион раз на одном ОУ усилить нельзя.

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

Для реализации больших коэффициентов усиления следует использовать многокаскадные схемы, где каждый каскад имеет усиление порядка 30-60.
А не было попыток поставить себе кейлоггер и оценить реальную, а не стандартную, частоту повторения символов при вводе программ?
Думаю, это ещё будет зависеть от конкретного языка программирования.
Автор, скажите, а что это была за система? Часом не Arvid?
Не только дисковый. Сетевая карта, звук идут через DMA. Пересылки данных между основной памятью и видеопамятью идут через DMA.

Сейчас даже в 8-битные микроконтроллеры встраивают контроллеры DMA.
Выглядит красиво, спору нет. Профессионально и модно. Вот только помогает ли это пользователю?

Допустим, пользователь попал на эту картинку. Это значит, что его запрос не может быть исполнен или новостей нет. Сколько времени ему нужно продираться через остроумные картинки и политкорректные вежливые фразы, чтобы понять, что случился облом?

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

Дело в том, что ECC не только исправляет малые ошибки, но и обнаруживает большие ошибки — такие, которые скорректировать невозможно. В результате, как только ECC-модуль начал «умирать частями», система уходит в NMI по обнаружению некорректируемых ошибок, и это происходит ещё до старта ОС.
А какой принцип действия датчика? NDIR?
Это уже задача оптимального наблюдения. Фильтры Калмана и т.д.
Важно понимать разницу между суффиксами "-граф" и "-скоп".

"-scope" — суффикс, означающий «смотреть». Из Wiktionary:

From Ancient Greek σκοπέω (skopéō, “examine, inspect, look to or into, consider”). Suffix -scope Used to make terms denoting an instrument used for viewing or examination.


С другой стороны, "-граф" соответствует:
Etymology
From Ancient Greek suffix -γραφω (-graphō), from γράφω (gráphō, “to scratch, to scrape, to graze”), whence also -graphy.
Suffix
-graph
that writes
stenograph
(metonymically) that is written


Таким образом, "-скоп" — это прибор, который позволяет наблюдать, а "-граф" — записывающий, регистрирующий прибор. Вспомните другие приборы с этими суффиксами:

Стетоскоп, эерископ, эндоскоп, телескоп, микроскоп, спектроскоп — все они могут «смотреть», но не могут записывать.

Томограф, фонограф, виброграф, спирограф — записывающие, регистрирующие приборы.

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

Можете привести формулу расчёта прогрессивного IRPF? Есть ли в Испании понятие «Необлагаемый минимум доходов»?

Какие есть налоговые льготы для «пассажиров с детьми»?
Что тут сказать — надо читать классику. Эта задача хорошо рассмотрена в Numerical Recipes. Во втором издании это параграф 8.5 Selecting the Mth largest. Наверно, у Кнута ещё лучше описано.

В частности, предлагается алгоритм, похожий на Quicksort, но существенно упрощенный, с асимптотической сложностью O(n), где n — размер массива.

Поиск m максимальных элементов — это ещё не самый трудный вариант данной задачи. Что если в массиве из 10000 элементов надо найти такой, который находится на 5000м месте по величине? Это, между прочим, задача поиска медианы, часто встречается на практике.

И если у разработчика нет специализированного алгоритма выбора элемента с заданным рангом — то быстрее всего приемлемое решение можно реализовать именно через сортировку.
Всё немного иначе.

Считывание данных с дискет контроллером Intel 8272 может производиться в двух режимах: поиск и чтение отдельного сектора; или чтение дорожки целиком. Именно первый режим использовался для считывания операционными системами. Второй режим использовался только в защитах и спец утилитах.

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

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

Если PC работает стабильно медленно, и драйвер дисковода никогда не успевает считать 2 рядом расположенных сектора подряд — то применяется система перемежения секторов — «Interleave». Сектора размещаются на дорожке с чередованием номеров:

1, 6, 2, 7, 3, 8, 4, 9, 5

Приведённая выше последовательность называется «2:1 Interleave». В такой системе, получив от контроллера данные первого сектора, процессор имеет ещё время, пока под головкой пробегает сектор 6, для выдачи контроллеру команды на чтение второго сектора, и при этом второй сектор будет считан на том же обороте диска. Все секторы дорожки можно считать за 2 оборота диска, что хуже, чем 1, но лучше, чем 9 (когда процессор не успевает без Interleave).

Стандартный формат MS-DOS использовал 2:1 Interleave.

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

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

Для борьбы с этим явлением было придумано смещение нумерации секторов на соседних дорожках:

Дорожка 0 — 1, 2, 3, 4, 5, 6, 7, 8, 9
Дорожка 1 — 9, 1, 2, 3, 4, 5, 6, 7, 8
Дорожка 2 — 8, 9, 1, 2, 3, 4, 5, 6, 7

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

Подобные форматы дискет можно было реализовать только спец утилитами. Стандартные команды форматирования в DOS и Windows это не поддерживали и форматировали все дискеты с 2:1 Interleave.
У многих дисководов этот сигнал выдавался от балды, о чем писал Питер Нортон в своей книге

Можно пруф? Я не встречал ни одного исправного дисковода, который бы выдавал индексный сигнал от балды.

Индексный сигнал при работе дисковода необходим для следующих вещей:
1) Маркировать начало и конец записи во время форматирования: запись дорожки целиком ведётся от индекса до индекса;
2) Вести счёт оборотам диска при поиске сектора на дорожке. Если сектор не был найден после заданного числа индексных импульсов — то контроллер выдаёт ошибку «Sector not found».
3) Маркировать начало и конец считывания для операции «чтение дорожки целиком». Правда, эта операция в операционных системах обычно не использовалась, а использовалась только в защитах и сервисных утилитах для анализа и восстановления дисков.

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

Форматирование дорожки — это просто её полная перезапись, включая индексные метки секторов, преамбулы для настройки ФАПЧ, промежутки между секторами и индексными метками и т.д. При форматировании некоторые контроллеры (напр. КР1818ВГ93) позволяют произвольным образом задавать структуру, расположение и содержание данных на дорожке. При этом можно разместить секторы произвольных размеров в произвольной последовательности, не обязательно начиная с первого. Возможно, именно это явление описывалось у Нортона.

Индексный сигнал дисковода используется контроллером дисковода при форматировании. Контроллеры на всех PC были одинаковые — это микросхема Intel 8272. В более поздних вариантах она была интегрирована в микросхемы чипсета, но логика её работы осталась неизменной.

Таким образом, если на каких-то дисководах индексный сигнал формируется не от датчика положения диска — то на таких дисководах, как минимум, будет невозможно форматирование дискет. Как максимум — драйвер будет зависать в случае ошибки чтения вида Sector Not Found.

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность