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


Т.е. в данном примере, если попытаться открыть любой файл относительно файла $mft, доступ ко всему тому «С» повиснет, а так как этот том является системным, подвиснет и вся система. При этом не нужно иметь каких-либо прав. Если же том был не системным, то повиснет только доступ к этому тому, но если выполнить перезагрузку, то система повиснет на ней.

Немного теории


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


HANDLE файла всегда ссылается на структуру ядра FILE_OBJECT. Эта структура формируется ядром перед посылкой запроса файловой системе. Файловая система, в свою очередь, инициализирует поля этой структуры. Таким образом, структура FILE_OBJECT будет содержать указатели на структуры файловой системы: FCB (File control block, содержит все необходимые данные для управления файлом) и CCB (Context Control Block, содержит данные, уникальные для конкретного открытого экземпляра). Также не исключено, что два разных HANDLE будут ссылаться на один и тот же файл тома, как это отражено слева. Структура FCB содержит список всех структур CCB. Структура CCB содержит указатель на соответствующую FCB. Т.е. для каждого открытого файла тома в памяти будет ровно одна структура FCB. Если файл открыт несколько раз, то также будет сформировано ровно столько CCB структур, сколько раз был открыт соответствующий файл, и все эти структуры будут ссылаться на единственную FCB структуру.

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

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

Файл $mft файловой системы NTFS является системным. Этот файл описывает расположение всех файлов на томе. NTFS при монтировании открывает его для личного использования. При попытке прочитать содержимое директории или во время открытия файла NTFS выполнит чтение файла $mft. При любой попытке удалить файл или создать файл NTFS выполнит запись в этот файл. Следовательно, перед любой такой операцией механизм ERESOURCE этого файла также будет захвачен, затем будет выполнена сама операция, после чего механизм будет освобожден.

Функция NtfsCommonCreate


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


Файловая система NTFS хранит дерево уже открытых файлов/директорий. Поэтому целесообразно в целях повышения производительности найти целевой файл в этом дереве вместо многократного чтения тома. Следовательно, функция посредством функции NtfsFindStartingNode попытается найти его. Если же найти файл не удалось, тогда функция попытается найти директорию, в которой он располагается. Эта попытка будет выполняться вплоть до корня файловой системы. Функция NtfsFindStartingNode возвращает указатель на структуру FCB либо самого файла, либо той директории, которая по глубине ближе всех располагается к целевому файлу. Функция также вернет часть необработанного пути относительно найденной директории. Также функция предварительно захватывает ERESOURCE найденной директории или файла разделяемо.

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

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

По окончании своей работы в случае неуспешного завершения функция NtfsCommonCreate закроет последнюю найденную директорию посредством функции NtfsTeardownStructures. Также эта функция освободит ERESOURCE директории/файла, если это возможно. Т.е. если эта директория/файл не являются открытыми. Т.к. эта директория/файл были открыты файловой системой только что, вероятнее всего, что их ERESOURCE будет освобожден, а FCB файла будет закрыт.

Суть проблемы


Когда будет произведена попытка открыть файл относительно файла $mft, функция NtfsFindStartingNode не найдет его, т.к. эта функция выполняет поиск несколько иначе, в отличие от функции NtfsOpenSubdirectory, которая находит этот файл всегда. Следовательно, начнет работу цикл, начиная с корня файловой системы. Далее функция NtfsOpenSubdirectory откроет этот файл и захватит его ERESOURCE монопольно. На следующей итерации цикл обнаружит, что файл не является директорией, и, следовательно, прервет свою работу с ошибкой. А при завершении своей работы функция NtfsCommonCreate посредством функции NtfsTeardownStructures попытается закрыть его. Функция NtfsTeardownStructures, в свою очередь, столкнется с тем, что она не сможет закрыть файл, т.к. он открывается самой файловой системой при монтировании. При этом, вопреки ожиданиям функции NtfsCommonCreate, функция NtfsTeardownStructures не освободит ERESOURCE $mft файла. Таким образом, он останется захваченным навсегда. Поэтому, например, при попытке создания файла или чтения файлов тома, файловая система NTFS попытается захватить ERESOURCE $mft файла и зависнет на этом этапе навсегда.

Заключение


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

Комментарии (454)


  1. lovecraft
    22.05.2017 11:07
    +4

    Пусть простит меня сообщество за холиварную тему, но все-таки…

    Вопрос открытых или не открытых исходных кодов ОС — это вещь первостепенная. Сколько литров кофе потратили сотрудники компании во время реверс-инжиниринга, сколько нервных клеток пало в неравной борьбе с плохо протестированным кодом? И все равно пофиксить эту уязвимость типа «отказ в обслуживании» своими силами нельзя — исходников нет, и даже если написать свой фильтр-драйвер и проверять все вызовы NtCreateFile, то для такого драйвера нужна подпись Майкрософт, а она есть не у всех.

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


    1. anatolymik
      22.05.2017 11:13
      +15

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


      1. andreymal
        22.05.2017 12:10
        +18

        проекты с открытым исходным кодом часто содержат ошибки, которые опытный разработчик никогда не допустит

        В проприетарном ПО всё то же самое, только мы этого не видим, потому что код закрытый, ваш кэп :)


        А неготовность линукса для десктопа связана не с открытостью, а с бесплатностью (даже какому-нибудь каноникалу не хватает ресурсов, в первую очередь денег на программистов, чтоб исправить всё и сразу) (хотя можно сказать, что бесплатность это следствие открытости, но вроде не всё так просто)


        1. anatolymik
          22.05.2017 12:29
          +2

          Не видим, но есть ряд косвенных признаков. Также, теперь можно ознакомиться с WRK v1.2. И попытаться сравнить. Дело не только в отсутствии механизмов, но еще в том, что если они присутствуют, какое у них качество.


          1. MacIn
            22.05.2017 14:47

            Кроме того, исходники минимум двух версий утекли в сеть. За WRK — плюс.


            1. sumanai
              22.05.2017 18:31

              Эти исходники весьма неполные, если что.


              1. MacIn
                22.05.2017 19:33

                Одной из версий — да.


                1. sumanai
                  22.05.2017 22:07

                  Да вроде обоих. NT4 ещё со скрипом компилируют, дописав пачку кода, а вот W2000 уже никак, не хватает пары подсистем.


                  1. MacIn
                    23.05.2017 00:38

                    А, ну как посмотреть, да. Я имел в виду, что кода достаточно для понимания, как что работает.


      1. lovecraft
        22.05.2017 12:12
        +5

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


        1. anatolymik
          22.05.2017 12:27
          +5

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


        1. daggert
          22.05.2017 12:51
          +1

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

          Некоторые баги в открытом ПО висят десятилетиями… В винде не лучше, но в свободном ПО очень часто бывает «вам надо — вы и делайте».


          1. grossws
            22.05.2017 14:28
            +13

            Некоторые баги в открытом ПО висят десятилетиями… В винде не лучше, но в свободном ПО очень часто бывает «вам надо — вы и делайте»

            Эта позиция всё же оказывается чуть лучше и понятнее чем "вам надо — ждите, держитесь там и всё такое".


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


            1. daggert
              22.05.2017 14:54
              +4

              Я с вами соглашусь. Просто хотел сказать что открытый код != гарантированное исправление ошибок.


              1. mva
                23.05.2017 20:36
                +2

                Зато открытый код — наличие возможности У ВАС ЛИЧНО при наличии навыков исправить проблему "здесь и сейчас".


                Вот возьмём две ситуации:
                Slack и Telegram.


                В первом меня очень расстраивал баг, заключавшийся в том, что при нажатии Alt+Shift открывалось меню (Alt) и выбирался фиг пойми какой пункт (или, рандомно, никакой, но при быстром машинальном переключении раскладки во время печати, когда успеваешь напечатать полтора слова прежде, чем от глаз к рукам поступит сигнал о том, что на экране что-то не то, какая-то "буква" нет-нет, да и матчила какой-то из биндингов в меню и активировала чёрт-те что.


                Т.к. код у их приложения закрытый (не смотря на то, что это всего лишь кастрированный хромиум с парой кастомных js-скриптов), всё, что мне оставалось после репорта — это ждать пару десятков версий, пока наконец соизволили починить...


                Во втором меня очень расстраивало что в широкоэкранной (да и в неширокоэкранной тоже, но в этой особенно) разметке балуны (не знаю, как правильно эти прямоугольники по-русски назвать) с текстом имеют слишком маленький лимит ширины и в итоге любой большой текст (особенно вставляемый код) превращается в кашу.
                И разработчики вот уже год как игнорируют тонны багов и даже закрыли пуллреквест с патчем, исправляющим это (и он уже протух относительно кода).
                Но… Т.к. код открыт — ничто не помешало мне по мотивом протухшего пулл-реквеста сделать свой патч и добиться желаемого эффекта: текст перестал искусственно сжиматься по горизонтали якобы для улучшения читаемости (чьей, интересно? явно не моей!).


                Или, опять же, 2Gis против всё того же телеграма.
                Оба патчат Qt5 для того чтобы собрать своё приложение (ну, нравится людям, видимо, патчить инструменты).
                Но у 2Gis код закрыт и поэтому остаётся только страдать и иметь не работающее под линуксами отличными от Ubuntu приложение (потому что кроме ситуации с патченными Qt5 и крахом из-за отсутствия использованных костылей в системной версии, они ещё и слинковали бинарник одновременно с двумя версиями ICU).


                Телеграмовцы тоже любители пропатчить Qt, но… код у них открытый и поэтому это позволило мне (и представителям других дистрибутивов) написать набор патчей для отвязывания его от необходимости как патчить системные Qt, так и билдить свою статическую копию.


                В случае с 2Gis же… Я уже года два-три, если не больше, репорчу-репорчу, но т.к. Linux не ЦА-платформа — nobody cares.


                Так и живём :)


                1. daggert
                  24.05.2017 00:41
                  +2

                  > Зато открытый код — наличие возможности У ВАС ЛИЧНО при наличии навыков исправить проблему «здесь и сейчас».

                  >… при наличии навыков…

                  Я действительно рад что у вас навыки для исправления багов, к сожалению моих навыков программирования (веб + МК) хватает только для того чтоб написать багрепорты и ждать у моря погоды, что в линуксе что в винде.


                1. DmitryKa
                  29.05.2017 22:35

                  В случае с 2Gis же… Я уже года два-три, если не больше, репорчу-репорчу, но т.к. Linux не ЦА-платформа — nobody cares.

                  Они, видимо, решили вообще уйти в онлайн и на мобильные платформы (их очередной ответ в вк группе)


            1. Revertis
              22.05.2017 17:09
              +2

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


              1. mva
                23.05.2017 20:37
                +3

                Виной всему деньги и только лишь они. А вовсе не состояние открытости кода и/или лицензии :)


        1. geher
          22.05.2017 14:22
          +1

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

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


          1. khim
            22.05.2017 16:23
            +1

            Исправление ошибок в системе с открытыми исходниками тоже может быть осложнено лицензией, прямо запрещающей модификацию кода не автору
            Если лицензия позволяет править исходники только автору, то это — не система с открытыми исходниками. Microsoft для таких случаем использует термин shared source


          1. grumbler66rus
            25.05.2017 00:33

            Касательно РФ, закон позволяет вносить изменения в программу, которые исправляют баги или адаптируют её для конкретного применения. Главное не распространять изменённую копию. И закон имеет приоритет над лицензионным соглашением.


            1. khim
              25.05.2017 00:46
              +1

              Закон мог бы иметь приоритет, но… не имеет. Дело в том, что в соответствующий пункт несколько лет назад была внесена маленькая поправочка. Было:

              Лицо, правомерно владеющее экземпляром программы для ЭВМ… вправе без разрешения автора или иного правообладателя… большой список всякого разного
              стало:
              Лицо, правомерно владеющее экземпляром программы для ЭВМ… вправе без разрешения автора или иного правообладателя… большой список всякого разного, если иное не предусмотрено договором с правообладателем

              И эта маленькая добавка в конце оччено существенно изменила-таки смысл закона, согласитесь? Вы лицензионное соглашение на Windows читали? Ну так просветитесь…


              1. sumanai
                25.05.2017 05:25
                -1

                А лицензионное соглашение является договором в юридическом смысле?


                1. DrPass
                  25.05.2017 09:42
                  +1

                  Является, естественно. Но там та самая «маленькая добавка в конце» в соответствующей статье в Гражданском кодексе на самом деле очень размытая: «Применение положений, предусмотренных настоящей статьей, не должно противоречить обычному использованию программы для ЭВМ или базы данных и не должно ущемлять необоснованным образом законные интересы автора или иного правообладателя.»
                  Т.е. не «как сказал правообладатель в лицензионном соглашении», а «сами между собой разберётесь, на крайняк, в суде».


                  1. khim
                    25.05.2017 13:02

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

                    «Внесение в программу для ЭВМ или базу данных изменений» и «исправление явных ошибок» — это пункт 1280 подраздел 1 параграф 1. В нём — никакой размытости: «если иное не предусмотрено договором с правообладателем» и точка.


              1. grumbler66rus
                25.05.2017 20:23
                +2

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


      1. Ivan_83
        22.05.2017 14:26
        +8

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

        В случае же закрытыми исходниками можно только догадываться о том что там булькает в чёрном ящике.
        А уж процесс поиска решения и подавно требует больше навыков и времени.
        Под вендой я обычно пользовался процесс монитором и долго листал его простыни, настраивал фильтры, и иногда удавалось после долгого выжигания глазами листингов и медитаций находить решение: там файл подсунуть, тут права подкрутить, там реестрик подредактировать и тп.
        Гуру же берутся за дебагер, копаются в асмовых листингах.
        Но в целом людей которые могут и у которых есть мотивация и возможности (время) — крайне мало.
        Людей которые могут нагуглить исходник, пролистать текст и чего то понять всё же больше, и времени на это нужно меньше.

        Касательно линукса для десктопов — там много всего есть, проблема часто в том, что туда пытаются идти с идеологией МС, а потом говорят что линукс говно.
        Нет там АД, и оно там не надо. Там другой подход.
        Есть керберос, есть nfs, есть возможность монтировать свою хомдиру на входе авторизовавшись керберосом — те фактически получить некий аналог АД и роуминговых профилей.
        Если нужны какие то политики с настройками и пр — для этого есть отдельные средства, а примитивные случаи просто скриптуются.

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


        1. Alexey2005
          22.05.2017 15:55
          -9

          У Linux всё очень плохо с поддержкой железа и разных низкоуровневых фишек. Чуть ли не любая железка под Linux не раскроет все 100% своего функционала, а хоть что-нибудь из функций будет отсутствовать или не заработает как положено.
          Вот взять хотя бы NTFS, раз уж статья о ней. Как-то обнаружил, что на внешнем USB-диске появились ошибки: имя одного из файлов сменилось на кашу из символов, и удалить этот файл не выходит — пишет, что файл повреждён.
          В винде я бы сделал chkdsk и всё, а в Linux вдруг с удивлением обнаружил, что там полностью отсутствует мало-мальски функциональный инструмент для исправления NTFS-ошибок. Всё, что может мне предложить Linux — это утилиты из комплекта NTFS-3G, которые ntfsfix и ntfsck. И обе они исправляют лишь небольшое подмножество ошибок — фактически, только чтобы файловая система после фикса вообще могла смонтироваться. Полез гуглить — везде советуют загрузиться из-под винды и пофиксить.
          Ну весело… Получается, что в Linux нет полной поддержки одной из самых распространённых домашних файловых систем? Все эти экзотические Linux'овые ФС ни одно виндовое устройство не видит, да и всякие смарт-телевизоры тоже что-то не очень. У FAT32 ограничение на размер файла. И на чём же к примеру хранить фильмы, чтобы иметь возможность пофиксить ошибки ФС в случае их появления?


          1. andreymal
            22.05.2017 16:07
            +12

            Если я правильно помню, тут проблема не совсем в линуксе, NTFS абсолютно закрытая ФС без какой-либо официальной документации, и то, что она доступна в линуксе хоть как-то, уже очень большое достижение (если я не прав, буду рад узнать об этом)


            И на чём же к примеру хранить фильмы

            exFAT? Правда, я не интересовался, чё там с исправлением ошибок)


            1. KVL01
              23.05.2017 11:47

              С exFAT довольно странная вещь. Я, правда, пару раз обжёгшись больше с ней не разбирался, возможно, не умею её готовить. А случилось вот что: отформатировал флешку дома (Win7 x64), принёс на работу – винда (Win7 x64) её не понимает. Ладно, переформатировал на работе, всё стало хорошо, принёс домой – моя винда её не понимает.

              Отформатированную дома флешку, кстати, прекрасно понимала домашняя же XP SP2 с апдейтом для поддержки exFAT.


            1. hddmasters
              23.05.2017 13:26
              +1

              exFAT отвратительная файловая система с точки зрения надежности.
              1. в отличие от FAT16,32 таблица заполняется, только для фрагментированных файлов.
              2. таблица FAТ в одном экземпляре. Кроме этого в некоторых ОС при форматировании (создании таблицы) не удосуживаются очищать область, которую будет занимать таблица. Основной структурой контроля занятого пространства считают Bitmap. В итоге анализируя разрушения.

              В общем при незначительных разрушения директории можем получить существенные потери при попытке воспользоваться средствами исправления ошибок (потери большие нежели в случае FAT32).

              ExFAT использовать, только для хранения данных потеря которых не будет критична.


          1. fshp
            22.05.2017 16:15
            +7

            И на чём же к примеру хранить фильмы, чтобы иметь возможность пофиксить ошибки ФС в случае их появления?

            Ext4, XFS, Btrfs. Не вижу в них экзотики.


            в Linux нет полной поддержки одной из самых распространённых домашних файловых систем

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


            1. andreymal
              22.05.2017 16:17

              Ext4, XFS, Btrfs

              Чё там с поддержкой их приставками, телевизорами, виндами?


              1. khim
                22.05.2017 16:34
                +9

                Чё там с поддержкой их приставками, телевизорами
                Трясите производителей, однако. Все эти приставки и телевизоры используют Linux и «внутри себя» используют ext3/ext4 и xfs, однако на внешних HDD их не поддерживают — и кто в этом виноват? Linux?

                виндами?
                Если винда у вас есть, то и виндовый chkdsk у вас есть, не вижу проблемы.


                1. andreymal
                  22.05.2017 16:37
                  -13

                  и кто в этом виноват? Linux?

                  В контексте данной ветки неважно, кто виноват, важно, что линукс и используемые им технологии, как ни крути, не готовы для повседневного использования)


                  виндовый chkdsk у вас есть

                  Он умеет проверять и исправлять «Ext4, XFS, Btrfs»?


                  1. andreymal
                    22.05.2017 17:11
                    -6

                    А за что заминусовали-то, да ещё и в карму? Я какую-то неправду сказал?


                    1. G-Tiger
                      23.05.2017 08:14
                      -1

                      Вы что-то не так сказали в сторону Linux-а. Уже не раз замечаю такое явление. Стоит кому-то что-то сказать на эту ОС, как тут же откуда-то прилетают минуса.


                  1. khim
                    22.05.2017 17:20
                    +6

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

                    важно, что линукс и используемые им технологии, как ни крути, не готовы для повседневного использования)
                    Потому что производители «приставок и телевизоров» целенаправленно и сознательно делают невозможным их использование.

                    Вы уж меня извините, но… это не техническая проблема и технического решения она не имеет!

                    Он умеет проверять и исправлять «Ext4, XFS, Btrfs»?
                    Нет, но в этом случае вас не будет напрягать тот факт, что поддержка NTFS в Linux, по понятным причинам, ограниченная.


                    1. andreymal
                      22.05.2017 17:28

                      но если вам неважно — кто виноват в проблеме

                      Передёргивать не надо, я же указал — в контексте данной ветки.


                      Потому что производители «приставок и телевизоров» целенаправленно и сознательно делают невозможным их использование.

                      Ни капельки не споря с этим, вынужден ещё раз заметить, что из-за этого линуксовые технологии непригодны для конечных пользователей, и форматирование флешек для них «Ext4, XFS, Btrfs» по-прежнему неприемлемо, потому что эту флешку никто не сможет прочитать.


                      вас не будет напрягать

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


                      1. Jef239
                        22.05.2017 19:33
                        +2

                        для конечных пользователей, и форматирование флешек для них «Ext4, XFS, Btrfs» по-прежнему неприемлемо, потому что эту флешку никто не сможет прочитать.

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

                        Тот же андроид 6, в чем SD-карту форматирует в режиме расширения основной памяти? Ну 100% там не FAT.

                        простым пользователям (не мне), которые хотят закинуть фильм на флешку и посмотреть на приставке или перекинуть соседу, на это всё глубоко плевать: им надо чтобы просто работало. А оно не работает.

                        А пока у соседа винды нет — все работает. А вот если у соседа винда — вот тогда катастрофа.


                        1. fshp
                          23.05.2017 00:43
                          +2

                          Как только винда где-то появляется, так всё, приехали. Эту фс не умею, на этой флешке 2 раздела… Винда говно.


                          1. Jef239
                            23.05.2017 01:29

                            С двумя разделами на флэшке у меня никаких проблем. На первом — vFAT, читается на любой винде. На втором ext3 — у меня читается. Но у меня для этого дела драйвер поставлен на винду поставлен. Писать он тоже может, это я уже я сам остерегаюсь.


                          1. Taciturn
                            23.05.2017 09:19

                            Начиная с Windows 10 1703 несколько разделов на флешках наконец работают.


                        1. andreymal
                          23.05.2017 10:36

                          А вот если у соседа винда

                          Ну вообще-то именно с этого и началась данная ветка.


                          Тот же андроид 6

                          Чего вы андроид-то приплели, у андроида всё хорошо, я про него ничего не писал и не собираюсь.


                          все линуксы её читают

                          А приставки, телевизоры (которые не на андроиде) и соседские винды? Не надо прикидываться, будто проблемы не существует.


                          1. Jef239
                            23.05.2017 13:57
                            -2

                            Понимаете чем беда…

                            Когда я 34 года назад начинал работать программистом, пакет дисковод мог ставится только на тот дисковод, где он писался. А на соседний — не стоило, ибо юстировка иная.

                            Потом это побороли, сделали совместимость между разными устройствами одной машины.

                            Потом — между разными устройствами однотипных машин.

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

                            В стандартах на USB-флэш и SD-карты прописан FAT. И до сих пор не каждая флэшка будет беспроблемно работать в ext3.

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

                            Я понимаю ваше желание выйти за рамки стандарта. Потерпите немного. современные SDHC-карты уже готовы к ext3, USB — ну или выбирать модель или ждать лет 5.

                            А софт… Ну моя windows XP читает ext3. Хотите — научите вашу. И соседа. В конце концов «из коробки» в винде нет ни экселя ни поверпоинта.


                            1. daggert
                              23.05.2017 14:16

                              > Хотите — научите вашу. И соседа. В конце концов «из коробки» в винде нет ни экселя ни поверпоинта.

                              Не с целью флуда, однако:
                              У вас есть драйвер монтирующий флешку или жд в экст4 фс в «мой компьютер», при этом не висящий постоянно в отдельном сервисе?


                              1. Jef239
                                24.05.2017 07:30
                                +2

                                Нету, висит сервис «Ext2 management module». А чем он мешает?


                                1. daggert
                                  24.05.2017 10:17

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


                                  1. mayorovp
                                    24.05.2017 10:24
                                    +3

                                    Это жирный минус "оптимизаторам" и "антивирусам".


                                  1. Am0ralist
                                    24.05.2017 10:48
                                    +6

                                    То есть то, что какие-то «левые» программы без спроса нарушают работоспособность нормальных программ — это минус не левых программ, а тех, чью функциональность нарушали?
                                    Отличная логика…


                                    1. anatolymik
                                      24.05.2017 11:05

                                      Хороший пример. В ядре я такого особенно наелся. Особенно мне нравилось когда разработчик вызывал IoCallDriver, если драйвер который он вызвал, породил исключение, из-за неверной передачи параметров, то решение их было очень простым, обернули в try/except. Вместо того чтобы разобраться в причине. И таких разработок больше чем множество. Кстати спорить с такими разработчиками не возможно. Люди не в состоянии воспринять твою мысль в принципе.


                            1. hddmasters
                              23.05.2017 15:16
                              +1

                              Это контроллер оптимизирован для FAT и иногда просто зависает для других файловых систем.

                              при анализе алгоритмов NAND контроллеров можно сказать, что в основной массе их микропрограммы они не оптимизируются для какой-либо файловой системы. Зависание — это уже признак проблемы устройства.
                              Я понимаю ваше желание выйти за рамки стандарта. Потерпите немного. современные SDHC-карты уже готовы к ext3, USB — ну или выбирать модель или ждать лет 5.

                              Простите, а что именно в них готово, что не приготовлено в USB flash? В SD(SDHC) картах логика работы контроллеров аналогична логике работы контроллеров USB_NAND. Можно рассмотреть примеры различных контроллеров и их нюансы трансляции.


                              1. Jef239
                                24.05.2017 07:28

                                Ну значит такое качество у вас анализа было… :-) Для оптимизации под FAT хватает того, что контролер считает, что часто перезаписываемая область находится в начале диска, а не в его середине или в конце

                                Эксперимент очень простой. Берете 5-10 неиспользованных флэшек разных моделей. Разбиваете на 2 раздела. Один — большой под FAT, второй в конце, 1-2 гига, под ext3. При попытке растарить на него почти гигабайтный архив — запись зависает примерно в половине случаев.

                                Потом берете ещё 5-10 флэшек — и пытаетесь их замучать при помощи одного раздела FAT. И все работает отлично.

                                Можете сами проверить. Но мы покупаем флэшек в два раз больше, чем нам надо. И не всегда хватает. Последний раз брали sundisk на 8 и 16 гигов — они чуть получше, но тоже виснут.

                                Можете ещё DD сделать с посекторным копированием. Тут уже процентов 75, что флэшка помрет.


                                1. mayorovp
                                  24.05.2017 08:52

                                  А это не может быть простое завышение объема, как любят делать некоторые?


                                1. qw1
                                  24.05.2017 09:25
                                  +1

                                  Можете ещё DD сделать с посекторным копированием. Тут уже процентов 75, что флэшка помрет.
                                  Интересно, я тоже это наблюдал на SD-картах и USB-flash. При попытке «почистить» устройство записями нулей в \Device\PhysicalDriveX у меня карточки умирали насовсем. И я решил, что контроллер не может обрабатывать запись в сектора, близкие к началу, и больше так делать не надо.
                                  А это не может быть простое завышение объема, как любят делать некоторые?
                                  До умирания устройства были почти полностью забиты данными и никаких проблем с данными не было.


                                  1. hddmasters
                                    24.05.2017 14:40

                                    Интересно, я тоже это наблюдал на SD-картах и USB-flash. При попытке «почистить» устройство записями нулей в \Device\PhysicalDriveX у меня карточки умирали насовсем. И я решил, что контроллер не может обрабатывать запись в сектора, близкие к началу, и больше так делать не надо.
                                    это были USB flash с изношенной NAND памятью, достаточно износа в области хранения служебных структур, чтобы получить мертвое изделие при первом же сбое в механизме трансляции.


                                    1. Jef239
                                      25.05.2017 15:45
                                      -1

                                      Интересно, что у меня «изношенными» оказывались только что купленые устройства, что SD 1.1, что USB 2.0.

                                      Вы имеете ввиду, что они «изнашиваются» за время транспортировки с завода? :-)

                                      Или все-таки речь о том, что посекторное обновление хорошо поддерживается лишь для ограниченной области таблицы FAT?


                                      1. hddmasters
                                        25.05.2017 16:19
                                        +1

                                        Или все-таки речь о том, что посекторное обновление хорошо поддерживается лишь для ограниченной области таблицы FAT?

                                        Вас не смутило, что любой физический блок может выполнять любую логическую роль? Ничего, что за время жизни USB Flash местоположение FAT таблиц многократно сменится согласно физического адреса, хотя согласно LBA адресации положение будет неизменным?

                                        Интересно, что у меня «изношенными» оказывались только что купленые устройства, что SD 1.1, что USB 2.0.

                                        Претензии по качеству конечного изделия предъявляйте производителю.

                                        Вы имеете ввиду, что они «изнашиваются» за время транспортировки с завода? :-)

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


                                        1. Jef239
                                          25.05.2017 17:08
                                          -1

                                          Меня не смущает, что небо голубое, а трава зеленая. А вас это разве смущает?

                                          Ничего, что за время жизни USB Flash местоположение FAT таблиц многократно сменится согласно физического адреса, хотя согласно LBA адресации положение будет неизменным?

                                          Вот и я про о том же. Этот механизм намного лучше работает для начала диска, чем для других областей.

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

                                          я имею в виду некачественные изделия

                                          Ну тогда назовите те, которые вы считаете «качественными». Проверим, наблюдается ли этот эффект на них.


                                          1. hddmasters
                                            25.05.2017 17:29
                                            +1

                                            Вот и я про о том же. Этот механизм намного лучше работает для начала диска, чем для других областей.

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

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

                                            Они уже вымирающий вид. Те самые старые USB Flash малой емкости с SLC или хотя бы MLC памятью. Рынку нужны дешевые и емкие изделия, а это TLC, которое с рождения неспособно хранить пользовательские данные без ошибок (живет исключительно за счет емких ЕСС)


                                            1. Jef239
                                              25.05.2017 18:19
                                              -1

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

                                              Ну так докажите это. Экспериментами с современными флэшками или ссылками на даташиты изготовителей. Информации об дизассемблировании одной прошивки десятилетней давности — это не доказательство.

                                              я затрудняюсь комментировать подобные опусы

                                              Тогда я вас ещё сильнее затрудню. S25FL256S — 32 блока по 4 килобайта и 5120 блоков по 64. Это вот был один из кандидатов для нашей платы.


                                              1. hddmasters
                                                25.05.2017 18:31

                                                Ну так докажите это.

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

                                                Тогда я вас ещё сильнее затрудню. S25FL256S — 32 блока по 4 килобайта и 5120 блоков по 64. Это вот был один из кандидатов для нашей платы.

                                                а причем это изделие к NAND памяти? И чем оно должно затруднить?


                                                1. Jef239
                                                  25.05.2017 20:26
                                                  -1

                                                  Ну то есть доказательств у вас нет. У вас есть только ВЕРА в то, что производители не использовали маркетинговые преимущества от увеличения надежности записи в начальные блоки логических адресов.

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

                                                  А любые результаты экспериментов — намного лучше ВЕРЫ.

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

                                                  Хотите убедиться — сделайте эксперименты сами.


                                                  1. hddmasters
                                                    25.05.2017 20:58

                                                    Ну то есть доказательств у вас нет. У вас есть только ВЕРА в то, что производители не использовали маркетинговые преимущества от увеличения надежности записи в начальные блоки логических адресов.

                                                    пока есть только ваше нежелание просмотреть уже указанные источники, чтобы понять основы алгоритмов контроллеров. Речь идет не о вере, а о постоянном анализе различных алгоритмов NAND контроллеров по мере появления их в готовых изделиях.
                                                    С другой стороны, у меня — результаты экспериментов. Весьма нестрогие, но показательные.

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

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

                                                    есть только в ваших выводах, которые основаны без учета алгоритма работы самого NAND контроллера.
                                                    Хотите убедиться — сделайте эксперименты сами.

                                                    Так делаю, но более детальные и с учетом алгоритмов NAND контроллеров.


                                                    1. Jef239
                                                      25.05.2017 23:26
                                                      -1

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

                                                      На самом деле все просто. Есть способ легко, за 5-10 строчек кода, получить маркетинговое преимущество над конкурентами. Вы утверждаете. что эта идея никому кроме меня в голову не пришла? Или все не стали её реализовывать, потому что эти 10 строчек затормозят алгоритм? Или по какой причине? Мифический нейтралитет к файловой системе? Так 99.9% -под FAT.

                                                      Вот подумайте над ответом на этот вопрос.


                                                      1. hddmasters
                                                        26.05.2017 08:00

                                                        Ну так давайте ссылку на результаты ваших экспериментов. Какая была методика, что делали. Гляну, могли ли они вообще выявить отличия в алгоритмах.
                                                        Прочтите сначала то, что здесь написано. Приводя примеры с flash памятью научитесь видеть отличия в NOR и NAND, так сказать подготовьтесь к усваиванию материала, а позже выложу на хабр немного материалов по реверс-инжинирингу NAND контроллеров используемых в USB flash.
                                                        На самом деле все просто. Есть способ легко, за 5-10 строчек кода, получить маркетинговое преимущество над конкурентами.

                                                        какое преимущество?
                                                        Вы утверждаете. что эта идея никому кроме меня в голову не пришла? Или все не стали её реализовывать, потому что эти 10 строчек затормозят алгоритм? Или по какой причине? Мифический нейтралитет к файловой системе? Так 99.9% -под FAT.

                                                        исходя из алгоритмов работы NAND контроллеров на сегодня наиболее удобна файловая система FAT из-за минимальных паразитных нагрузок. Второе удобство совместимость с различными ОС.

                                                        Вот подумайте над ответом на этот вопрос.

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


                                                        1. Jef239
                                                          26.05.2017 13:19
                                                          -1

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

                                                          Самые часто записываемые блоки на FAT — это область таблицы FAT.

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

                                                          Отсюда и желание на тех устройствах, где FAT составляет 99.9% потребления — оптимизировать характеристики под него.

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

                                                          Так что при анализе вы легко можете не понять, что какая-то оптимизация будет хорошо работать на FAT и плохо на ext3. Тут нужен не просто анализ — а моделирование полученного алгоритма.


                                                          1. hddmasters
                                                            26.05.2017 16:56

                                                            Преимущество понятно какое. На всех устройствах хранения прежде всего выходят из строя логические блоки, в которые запись идет чаще всего. Когда мы транслируем логический блок в физический — эта закономерность сохраняется. Чем больше записей в один блок — тем больше шансов, что трансляция в конечном итоге приведет нас в сбойный блок.
                                                            Вы пока не понимаете основного механизма ротации блоков. Не получится так, что какой-то один блок сильно износится. Изнашиваться будет равномерно группа блоков, так как роли физических блоков будут изменчивыми. Допустим первые три цикла записи FAT таблиц были в нулевой блок, после глядя на показатель счетчика записей при следующей записи этот блок перейдет в первый невключенный в трансляцию в рамках логического банка но с меньшим значением счетчика записей, а нулевой будет исключен из трансляции. Таким образом изменяемые данные будут постоянно менять свое физическое положение, хотя логически они будут оставаться на прежнем месте. И механизм этот в основе работы практически всех NAND контроллеров (с теми или иными нюансами).
                                                            Самые часто записываемые блоки на FAT — это область таблицы FAT.

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

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

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

                                                            Так что при анализе вы легко можете не понять, что какая-то оптимизация будет хорошо работать на FAT и плохо на ext3. Тут нужен не просто анализ — а моделирование полученного алгоритма.

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


                                                            1. Taciturn
                                                              26.05.2017 22:32

                                                              А эта волшебная ротация, на основе чего вообще происходит? Как, после первой записи во все блоки, контроллер отличает занятые блоки от свободных? Через USB ведь TRIM не работает.


                                                              1. hddmasters
                                                                27.05.2017 07:39

                                                                А эта волшебная ротация, на основе чего вообще происходит? Как, после первой записи во все блоки, контроллер отличает занятые блоки от свободных? Через USB ведь TRIM не работает.

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

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


                                                            1. Jef239
                                                              28.05.2017 15:14
                                                              -1

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

                                                              Гм, пишем на флэшку до полного заполнения, потом удаляем все файлы или форматируем флэшку. Что будет? «Статической информации» — ноль. Будет ли при этом алгоритм выравнивания износа работать эффективно?

                                                              Если будет — это означает, что флэшка понимает удаление файлов, то есть заточена под файловую систему. А затачивать её имеет смысл только под FAT. Если не будет — значит вы недопонимаете тонкости или некорректно формулируете определения.

                                                              FAT обладает следующими особенностями:

                                                              • Наиболее часто перезаписываемая область (таблица FAT) находится в начале диска
                                                              • Заполнение диска идет с начальных секторов. Более того, Если мы удалим файл и на его место запишем другой — будет задействовано прежде всего освободившееся место в начале диска.
                                                              • Создание файла обычно идет в 4 приема: таблица FAT, каталог, сам файл, перезапись длины в каталоге.
                                                              • Области каталогов и данных файла обычно находятся в разных физических блоках флэш, то есть удалены по логическим адресам.


                                                              Все это не так для ext2.

                                                              • Часто перезаписываемые области (bitmap и inode) в середине диска
                                                              • Заполнение идет равномерно по всему диску. То есть с точки зрения самой флэшки диск быстро становится заполнен на 100%.
                                                              • Создание файла идет в 4 приема bitmap, inode, каталог, тело файла.
                                                              • При этом во многих случаях bitmap и inode попадают в один физический блок флэшки. а каталог и тело файла — в другой физический блок. Таким образом, кэширование на 1 блок — очень выгодно для ext2.


                                                              Учетом любой из этих особенностей можно сделать оптимизацию под ту или иную файловую систему.

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

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

                                                              Грубо говоря, если файлы занимают 10% диска — на FAT можно легко включить в ротацию 90% диска. А вот на ext2 даже 5% занятого места ограничивают ротацию считанными резервными блоками.

                                                              И это помимо тех оптимизаций, о которых я писал ранее.


                                                              1. hddmasters
                                                                28.05.2017 15:42

                                                                Гм, пишем на флэшку до полного заполнения, потом удаляем все файлы или форматируем флэшку. Что будет? «Статической информации» — ноль. Будет ли при этом алгоритм выравнивания износа работать эффективно?

                                                                для подавляющего большинства USB flash это будет означать, что придется переписать лишь группу блоков с метаданными файловой системы. По мере записи новой информации. Но по мере записи в пустые блоки, которые согласно транслятора заняты, ротация будет происходить. Пусть не самый эффективный алгоритм, но достаточно неплохо отработает в случае удаления, форматирования, при записи новых данных.
                                                                Если будет — это означает, что флэшка понимает удаление файлов, то есть заточена под файловую систему. А затачивать её имеет смысл только под FAT. Если не будет — значит вы недопонимаете тонкости или некорректно формулируете определения.

                                                                USB Flash не понимает нюансов файловой системы за исключением некоторых очень древних «проб пера» авторов фирмварей, которые давно показали неэффективность.
                                                                FAT обладает следующими особенностями:

                                                                Наиболее часто перезаписываемая область (таблица FAT) находится в начале диска
                                                                Заполнение диска идет с начальных секторов. Более того, Если мы удалим файл и на его место запишем другой — будет задействовано прежде всего освободившееся место в начале диска.

                                                                справедливо для логического пространства. В физическом все будет выглядеть по другому. Опять же пример в статье, что произойдет при перезаписи блока.
                                                                Грубо говоря, если файлы занимают 10% диска — на FAT можно легко включить в ротацию 90% диска. А вот на ext2 даже 5% занятого места ограничивают ротацию считанными резервными блоками.

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

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


                                                                1. Jef239
                                                                  29.05.2017 09:40
                                                                  -2

                                                                  Разница в том, что паразитных нагрузок в случае EXT будет больше, чем в случае FAT

                                                                  Почему? Потому что ext2 кэшируется и несколько обновлений одного сектора сливаются в одно? Потому что 4 записи для создания короткого файла на FAT вам кажутся сильно меньше 4 записей для той же операции на ext2? Или потому, что флэшка оптимизирована для FAT?

                                                                  Вот и подумайте, почему 4 для ext2 вам кажутся сильно больше, чем те же 4 для FAT.


                                                              1. geher
                                                                28.05.2017 17:27

                                                                > Если мы удалим файл и на его место запишем другой — будет задействовано прежде всего освободившееся место в начале диска.

                                                                Интересно, это во всех реализациях FAT так?
                                                                Логично было для разработчиков драйверов ФС в зависимости от конкретных требований добавить в этот алгоритм одну из двух или сразу две оптимизации (первую по крайней мере во времена царствования старых жестких дисков). Во-первых, выделять по возможности нефрагментированный участок (последовательно расположенные кластеры) для ускорения последовательного чтения файла.
                                                                Во-вторых, выделять место в ранее не использованном пространстве, чтобы повысить вероятность восстановления данных после удаления (необходимые данные о ранее занятых, а после освобожденных кластерах можно хранить «внутри» драйвера ФС).

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

                                                                > Все это не так для ext2.

                                                                > а каталог и тело файла — в другой физический блок.

                                                                Почему для FAT и ext2 в этом случае будет разница?
                                                                Могу ошибаться, но в обоих случаях каталог — это тоже файл (за исключением корневого каталога FAT). И располагаться они будут в обеих ФС с некоторой (достаточно большой) вероятностью в разных физических блоках флэшки…


                                                                1. Jef239
                                                                  29.05.2017 03:10

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

                                                                  Для этого на этапе создания файла ОС должна хотя бы примерно понимать его размер. А обычная схема создания файла этого не предусматривает. open/write/close, и только на этапе close, по положению файлового указателя определяется размер файла. Да, есть SetFilePointer и SetEndOfFile в WinAPI, в Си (POSIX) можно сделать ftruncate, но… вы используете эти вызовы в своих программах? Вот и другие не используют. Ну разве что в программах копирования или разархивирования файлов.

                                                                  Так что самый частый случай — в момент создания файла длина неизвестна, а известна она становится лишь при закрытии файла.

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

                                                                  Во-вторых, выделять место в ранее не использованном пространстве,

                                                                  В FAT я такого не видел. Наоборот, стараются предотвратить разрастание занятой области. Одна из причин — на внешних дорожках старых дисков плотность записи меньше, чем на внутренних (число секторов фиксировано, физическая длина внешних дорожек больше). То есть запись надежнее.

                                                                  Почему для FAT и ext2 в этом случае будет разница?

                                                                  Цитата из вики

                                                                  Ядро Linux, используя число индексных дескрипторов, содержащих каталоги, пытается равномерно распределить inode каталогов по группам, а inode файлов старается по возможности переместить в группу с родительским каталогом

                                                                  Грубо говоря, разница будет потому, что ext2 оптимизирует движение головки по винчестеру. А операция — «прочли каталог, потом читаем файл» — это частая операция и нуждается в оптимизации. Размещение inode в группе с каталогом практически гарантирует, что данные файла будут в той же группе (ну пока файл не слишком разросся).

                                                                  И располагаться они будут в обеих ФС с некоторой (достаточно большой) вероятностью в разных физических блоках флэшки…

                                                                  Для 2хмеговый физических блоков флэш и файлов меньше 512 байт — вероятность попасть в один и тот же физический блок достаточно велика.


                                                                  1. MacIn
                                                                    29.05.2017 19:20

                                                                    Грубо говоря, разница будет потому, что ext2 оптимизирует движение головки по винчестеру.

                                                                    Как она это делает, если геометрия накопителя — неизвестна?


                                                                    1. Jef239
                                                                      29.05.2017 20:51

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

                                                                      Собственно геометрия (CHS) известна, прописана в MBR, просто сейчас совсем не совпадает с настоящей. Во времена разработки еxt2 — 1993 год — обычно совпадала. Но была неизвестна скорость вращения диска. Так что полная оптимизациия — и тогда не ставилась целью


                                                                      1. hddmasters
                                                                        29.05.2017 20:58
                                                                        -1

                                                                        Во времена разработки еxt2 — 1993 год — обычно совпадала. Но была неизвестна скорость вращения диска. Так что полная оптимизациия — и тогда не ставилась целью
                                                                        совпадала для MFM/RLL накопителей. А 1993 год — это 7 лет прошло с момента появления IDE. В которых уже CHS параметры были виртуальными.


                                                                        1. Jef239
                                                                          29.05.2017 22:42
                                                                          -1

                                                                          Вы путаете метод записи битов на диск (FM/MFM/RLL) с методом связи диска с компьютером (ST-506/ESDI/SCSI/IDE (он же АТА)).

                                                                          Ну это как-то несерьезно — путать мягкое с кислым. Через IDE работали и MFM диски размерами 20-40 мегабайт.

                                                                          Проблемы встали, когда размеры начали выходить за пределы, допустимые для IDE. Вот тогда LBA (ATA-1) запоздал и появились варианты с подменой геометрии.

                                                                          Но большинство дисков 1993 года — вполне жили в CHS с натуральной геометрией. Насколько мне помнится, тогда самыми популярными были 80мегабайтные диски, а им трансляция ещё не нужна была.


                                                                          1. hddmasters
                                                                            29.05.2017 23:09

                                                                            Вы путаете метод записи битов на диск (FM/MFM/RLL) с методом связи диска с компьютером (ST-506/ESDI/SCSI/IDE (он же АТА)).

                                                                            ключевой момент. старые диски, не имели набортного контроллера. Всем сервоприводом управлял контроллер. И вот тогда речь шла о реальной геометрии. Почитайте про ключевые изменения в архитектуре с появлением IDE. IDE контроллер — хост контроллер и обмен данным с накопителем по протоколам описанным в АТА стандарте.

                                                                            Ну это как-то несерьезно — путать мягкое с кислым. Через IDE работали и MFM диски размерами 20-40 мегабайт.

                                                                            20-40мегабайт это уже ARLL (много разных видов) диски. Методы кодирования данных более совершенные (если уже про методы записи).
                                                                            Но большинство дисков 1993 года — вполне жили в CHS с натуральной геометрией. Насколько мне помнится, тогда самыми популярными были 80мегабайтные диски, а им трансляция ещё не нужна была.
                                                                            Неправда.

                                                                            Conner CP3046F с виртуальной CHS адресацией (40Мб). При виртуальных CHS C-977,H-5, S-17. В паспорте висит реальная геометрия С-1053 H-2 S-40. Вскрытие покажет 1 пластину и две головки. И так почти все HDD тех времен и тех емкостей в 3,5" исполнении.

                                                                            Говоря о коннере, можно сказать, что для тех времен весьма интересная микропрограмма с развитой терминальной системой.


                                                                            1. Jef239
                                                                              29.05.2017 23:14

                                                                              Насколько я помню, 3.5 — это была экзотика для 1993 года. Большинство винчестеров было 5.25.

                                                                              см, мой пост выше, 1053 дорожки — это как раз тот случай, когда физическая геометрия не лезла в CHS.

                                                                              P.S. Вы, похоже, путаете год разработки модели с годом её популярности на рынке.


                                                                              1. hddmasters
                                                                                29.05.2017 23:23

                                                                                Насколько я помню, 3.5 — это была экзотика для 1993 года. Большинство винчестеров было 5.25.
                                                                                обратите внимание, что при одинаковых технологиях тех времен, на 5,25 диск можно было нанести еще больше треков, ибо реально площадь выше. 3,5" показательно, что даже на более модный 3,5" форм фактор было неуместно говорить о реальной CHS адресации.
                                                                                P.S. Вы, похоже, путаете год разработки модели с годом её популярности на рынке.
                                                                                Похоже, что Вы были уверены, в том, что CHS параметры были настоящими, а производители несколько раньше их сделали виртуальными.


                                                                                1. Jef239
                                                                                  29.05.2017 23:32

                                                                                  Суть в том, что 3.5 — это были дорогие современные винчестеры для ноутбуков, а 5.25 — делались для массового сегмента и по более старым технологиям. Кроме того, 5.25 бывали и высоты 2U. Представляете, сколько блинов там размещалось? А вот 3.5 — это 1/2U или 1/4U. То есть 1-2 блина максимум.


                                                                                  1. hddmasters
                                                                                    29.05.2017 23:49

                                                                                    Суть в том, что 3.5 — это были дорогие современные винчестеры для ноутбуков, а 5.25 — делались для массового сегмента и по более старым технологиям. Кроме того, 5.25 бывали и высоты 2U. Представляете, сколько блинов там размещалось? А вот 3.5 — это 1/2U или 1/4U. То есть 1-2 блина максимум.


                                                                                    У меня в донорской базе можно найти много старых дисков и я многих их них могу пощупать вживую. Естественно представляю и как их реальную геометрию, так и некоторые особенности микропрограмм.
                                                                                    В стандартах на USB-флэш и SD-карты прописан FAT. И до сих пор не каждая флэшка будет беспроблемно работать в ext3.

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

                                                                                    Я понимаю ваше желание выйти за рамки стандарта. Потерпите немного. современные SDHC-карты уже готовы к ext3, USB — ну или выбирать модель или ждать лет 5.

                                                                                    Началась беседа с Вами после подобного утверждения. Которое некорректно. И на попытку возражения Вам, вы требовали доказательств. И вам были показаны некоторые материалы по реверс-инжинирингу одного из NAND контроллеров и даны комментарии.
                                                                                    Ну так докажите это.

                                                                                    Давай предложим Вам сделать тоже самое? Вы расскажете на чем основаны Ваши выводы касательно оптимизаций и почему SD карты уже готовы, а USB flash нет.


                                                                                    1. Jef239
                                                                                      30.05.2017 00:00

                                                                                      Естественно представляю и как их реальную геометрию, так и некоторые особенности микропрограмм.

                                                                                      Зато из дисков очень тяжело извлечь годы их реальной популярности на рынке.

                                                                                      Вы расскажете на чем основаны Ваши выводы касательно оптимизаций и почему SD карты уже готовы, а USB flash нет.

                                                                                      Про оптимизации много раз уже говорил, а выводы основаны на опыте,

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


                                                                                      1. hddmasters
                                                                                        30.05.2017 00:09

                                                                                        Более того, вы уже признали наличие одной оптимизации. А этого достаточно для объяснения результатов моих экспериментов.
                                                                                        скорее вы притянули за уши трактовку, как некое признание.
                                                                                        Про оптимизации много раз уже говорил, а выводы основаны на опыте,
                                                                                        то есть вы из-за того, что у вас зависли некоторые USB flash без каких-либо предпосылок сделали выводы, что виной тому оптимизации под FAT? А как же анализ принципов работы устройства, чтобы доказать, что виной тому оптимизации для FAT и что это не просто тыканье пальцем в небо?

                                                                                        Также пролейте свет на то, что ж такого в SD картах, что они по вашему мнению готовы к разным файловым системам, а USB flash нет? Для более интересного вашего объяснения уточню, что алгоритмы работы с NAND памятью идентичные и у тех и у других накопителей в зависимости от производителя.

                                                                                        Зато из дисков очень тяжело извлечь годы их реальной популярности на рынке.
                                                                                        дата выпуска может подсказать.


                                                                            1. MacIn
                                                                              30.05.2017 15:27

                                                                              Были и восьмидесятки с ST-506 по двум шлейфам, с MFM. У меня была такая — на 2 слота 5.25.


                                                                      1. MacIn
                                                                        30.05.2017 15:24

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

                                                                        А номера-то логические? Какова трансляция из CHS в LBA? Вполне могут быть и не близкими.

                                                                        Собственно геометрия (CHS) известна, прописана в MBR, просто сейчас совсем не совпадает с настоящей.

                                                                        Вот именно. Там может быть и 16 блинов с виртуальным преобразованием LBA в CHS, которое совсем не отвечает реальному положению дел. И трюк вида «быстрее переключиться на другую головку в следующем секторе, пока блин вращается, interleave вот это все» уже не будет однозначно работать.


                                                                        1. khim
                                                                          30.05.2017 23:03
                                                                          +1

                                                                          А номера-то логические? Какова трансляция из CHS в LBA? Вполне могут быть и не близкими.
                                                                          Это вы уже из пальца какую-то фигню вытаскиваете.

                                                                          Да, могут. Иногда (чтобы скрыть «плохие блоки») какой-нибудь сектор могли и «за можай», на самый край диска. Но в среднем — так не было, иначе какой был бы смысл в дефрагментации?

                                                                          А она реально очень сильно ускоряла работу с дисков до появления SmartDrv.


                                                                          1. MacIn
                                                                            31.05.2017 01:30

                                                                            Это вы уже из пальца какую-то фигню вытаскиваете.

                                                                            Что CHS — не всегда реальны? Нет, это факт. Что соседние блоки могут не быть соседними физически? Тоже факт. В среднем — да, должны быть рядом.

                                                                            Но в среднем — так не было, иначе какой был бы смысл в дефрагментации?

                                                                            Все верно, так же как read ahead.

                                                                            Но при всем при этом есть определенный алгоритм трансляции логического номера блока в CHS, (на уровне, например, BIOS или DOS, если уж вспоминать старину). И это будет трансляция в виртуальный CHS.


                                                                            1. khim
                                                                              31.05.2017 13:26

                                                                              на уровне, например, BIOS или DOS, если уж вспоминать старину
                                                                              BIOS и DOS никогда ничего не транслировали. После появления IDE этим стал винчестер заниматься — но он, разумеется учитывал то, что BIOS и DOS считали что CHS — это таки «настоящие» CHS…


                                                                              1. MacIn
                                                                                31.05.2017 19:50

                                                                                BIOS и DOS никогда ничего не транслировали

                                                                                Fat оперирует линейными номерами блоков же? Значит, транслирует.


                                                                        1. Jef239
                                                                          30.05.2017 23:25
                                                                          +1

                                                                          Номера логические. Но понятно, что сектора 1700 и 1800 ближе к друг другу, чем сектора 700 и 95000. Так что без перфекционизма — но оптимизируется.


                                                                          1. hddmasters
                                                                            30.05.2017 23:34
                                                                            +1

                                                                            Номера логические. Но понятно, что сектора 1700 и 1800 ближе к друг другу, чем сектора 700 и 95000. Так что без перфекционизма — но оптимизируется.

                                                                            неудачный пример. С учетом зонного распределения с вашими цифрами может быть меньшим маршрут от 700 до 95000, нежели от 1700 до 1800.

                                                                            Лучше показать пример: очередь на чтение из трех секторов 100, 800 000 000, 100 000 000 будет исполнена, как 100, 100 000 000, 800 000 000. В таком примере достаточно очевидно преимущество в операциях позиционирования. В случае мелких смещений смысл в сортировке есть, так как эффективно отработает упреждающее чтение (look ahead)


                                                                            1. Jef239
                                                                              31.05.2017 00:29

                                                                              В среднем более мелкий маршрут — быстрее более крупного. Это именно в среднем и не касается очень малых маршрутов (в пределах цилиндра) и очень больших. Но в среднем — именно так.


                                                      1. hddmasters
                                                        27.05.2017 15:26

                                                        пример анализа одного из алгоритмов USB NAND контроллеров с картинками. По факту их проводилось великое множество (уж больно много разных NAND контроллеров). Естественно хватает отличий и ухищрений. Но нет ничего близко похожего на ваши утверждения.


                                                        1. Jef239
                                                          28.05.2017 15:18
                                                          -3

                                                          Ну если это называть анализом… Проанализирован только нижний слой алгоритма. Верхний вы даже не пытались анализировать. Чуть позже прямо там напишу вопросы, на которые вы не ответили.


                                                          1. hddmasters
                                                            28.05.2017 15:28

                                                            Ну если это называть анализом… Проанализирован только нижний слой алгоритма. Верхний вы даже не пытались анализировать. Чуть позже прямо там напишу вопросы, на которые вы не ответили.


                                                            А вы не сочиняйте алгоритмов, которых нет. Сначала найдите признаки их существования, где-то кроме как у Вас в фантазиях. Причины того, что USB flash у вас умирали с использованием Ext совсем в другом. Разберите хотя бы структуры хоть одной из фирмварей USB_NAND контроллера, проанализируйте хоть один код, чтобы понять задачи MCU, что в подавляющем случае они не занимаются анализом данных. У них и так хватает нагрузки.


                                                            1. Jef239
                                                              29.05.2017 09:52

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


                                                              1. hddmasters
                                                                29.05.2017 10:23

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

                                                                Правда? А ничего, что размер таблиц FAT обратно пропорционален размеру кластера?
                                                                Возьмем абстрактный раздел 8GiB кластер 4KiB. Количество записей в таблице описывающей пространство будет равным 8 589 934 592/4 096=2 097 152/. Размер одной записи 4 байта. т.е. в сектор помещается 512/4=128 записей. 2 097 152/128=16 384 секторов или 8MiB размер одной копии таблицы FAT32. Две копии соответственно 16MiB.
                                                                кластер 8КiB, обе копии таблиц 8MiB
                                                                кластер 16KiB, обе копии таблиц 4MiB

                                                                А теперь вернемся к NAND контроллеру, ему чтобы оптимизировать каким-то образом запись необходимо знать размер таблиц. Как минимум должен быть алгоритм поиска boot сектора и разбор параметров из него, для создания схемы оптимизации.

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


                                                                1. Jef239
                                                                  29.05.2017 10:49

                                                                  А ничего. В начале у нас кроме FAT ещё и корневой каталог. И просто каталоги. В итоге, если мы при ротации для блоков ниже 32 MiB будем выбирать наименее изношенный физический блок, а для остальных — более изношенный физический блок, то изношенные физические блоки у нас осядут в неизменяемых данных.

                                                                  Ещё полезная оптимизация — физические блоки, в которых вообще никогда не было записи, держать в списке резервных. Особенно если в качестве номера банка взять младьшие биты адреса блока.

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

                                                                  Что за тайная оптимизация? Объединение нескольких логических записей в близкие сектора в одну физическую запись?


                                                                  1. hddmasters
                                                                    29.05.2017 11:14

                                                                    Что за тайная оптимизация? Объединение нескольких логических записей в близкие сектора в одну физическую запись?

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

                                                                    Что-то вы про «номера банка» несуразное написали. Попробуйте переписать.
                                                                    А ничего. В начале у нас кроме FAT ещё и корневой каталог. И просто каталоги. В итоге, если мы при ротации для блоков ниже 32 MiB будем выбирать наименее изношенный физический блок, а для остальных — более изношенный физический блок, то изношенные физические блоки у нас осядут в неизменяемых данных.


                                                                    Счетчики записей для блоков (там где они есть и где известны) как бы не намекают на подобный алгоритм действий. Насчет «изношенные физические блоки осядут в неизменяемых данных» не получится. Например неизменяемые данные записаны на новую USB flash и до конца жизни накопителя никто их не перезаписывает. В итоге имеем неизменяемые данные в совершенно неизношенных блоках.


                                                                    1. Jef239
                                                                      29.05.2017 11:45
                                                                      -1

                                                                      Про номера банков не поняли? А все просто. 0,4, 8, 12 логический блок — нулевой банк, 1, 5, 9, 13 — первый, 2, 6, 10, 14 — второй, 3, 7, 11, 15 — третий. А не так, что первый 2 мегабайта — все в нулевой банк. И это тоже оптимизация под FAT. она дает равномерное заполнение банков для заполненной не до конца флэшки.

                                                                      Если этой оптимизации нет, то при заполненной на 20% флэшке у нас на FAT будет использоваться только нулевой банк. А на ext2 — заполнение диска более равномерное, так что такая оптимизация важна прежде всего для FAT.

                                                                      Счетчики записей для блоков (там где они есть и где известны) как бы не намекают на подобный алгоритм действий

                                                                      Помнится, в служебной информации были не опознанные вами биты. Не хранится ли там число потребовавшихся ECC-коррекций? И не является ли оно не менее важным, чем счетчик записей?

                                                                      Насчет «изношенные физические блоки осядут в неизменяемых данных» не получится.

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

                                                                      Например неизменяемые данные записаны на новую USB flash и до конца жизни накопителя никто их не перезаписывает. В итоге имеем неизменяемые данные в совершенно неизношенных блоках.

                                                                      Ну давайте попробуем подумать???

                                                                      Ну скажем есть тысяча файлов по 2 мегабайта в каждом (128 кластеров). Пишутся они обычным образом: открыли, записали данные и закрыли. Это означает, что на каждый файл было 128 записей в FAT, 2 записи в каталог и 1 запись данных. Так что после первых 10 файлов — уже сильно выгодно изношенные блоки выдавать на «вечное хранение» под данные файла.


                                                                      1. hddmasters
                                                                        29.05.2017 12:17

                                                                        Про номера банков не поняли? А все просто. 0,4, 8, 12 логический блок — нулевой банк, 1, 5, 9, 13 — первый, 2, 6, 10, 14 — второй, 3, 7, 11, 15 — третий. А не так, что первый 2 мегабайта — все в нулевой банк. И это тоже оптимизация под FAT. она дает равномерное заполнение банков для заполненной не до конца флэшки.

                                                                        говоря о физических банках, то показан разброс по микросхемам.


                                                                        Говоря о логических банках


                                                                        0x0-0x3C3*0x200000=именно столько логического пространства реализует нулевой банк. 0 блок из 1 банка — это уже 0x3C4 блок в логическом пространстве. Необходимость организации в банки — экономия на размере маркера номера блока (маркер с номером в служебке блока, дублирующая информация из транслятора и существует далеко не во всех служебках). В случае, если в данном SK6211 использовать FAT, то таблицы всегда будут находиться только в границах 0 банка. (И по факту находятся там).
                                                                        Если этой оптимизации нет, то при заполненной на 20% флэшке у нас на FAT будет использоваться только нулевой банк. А на ext2 — заполнение диска более равномерное, так что такая оптимизация важна прежде всего для FAT.

                                                                        как уже написано он и есть в нулевом логическом банке в случае SK6211, но есть контроллеры, для которых все пространство будет как один логический банк.
                                                                        Помнится, в служебной информации были не опознанные вами биты. Не хранится ли там число потребовавшихся ECC-коррекций? И не является ли оно не менее важным, чем счетчик записей?

                                                                        понимаете при перемещении данных в другой блок (а смена позиции логического блока происходит при перезаписи даже части информации), а старый блок исключается и очищается (полностью все биты установлены 0xFF) т.е. информации о качества чтения для этого физического блока не остается и смысла ее тащить в другой блок нет. Не исключено, что можно ввести счетчики количества коррекций согласно ЕСС, но тупиковое направление в силу того, что в современной TLC памяти коррекции будут чуть ли не в каждой странице блока (только что выпущенной памяти).
                                                                        Любые процессы с флэшкой надо анализировать как вероятностные. Вы приводите частный случай. А для любого алгоритма есть частные случаи, когда все плохо. Для того делается моделирование, чтобы проверить, как алгоритм ведет себя на большом массиве типичных случаев.
                                                                        в силу специфики деятельности я знакомлюсь с большим количеством разных контроллеров.Привел пример очень популярного алгоритма, который с незначительными нюансами можно видеть в массе других контроллеров.
                                                                        Ну скажем есть тысяча файлов по 2 мегабайта в каждом (128 кластеров). Пишутся они обычным образом: открыли, записали данные и закрыли. Это означает, что на каждый файл было 128 записей в FAT, 2 записи в каталог и 1 запись данных. Так что после первых 10 файлов — уже сильно выгодно изношенные блоки выдавать на «вечное хранение» под данные файла.

                                                                        и зачем? Если есть еще много блоков, в которые не было записей. А также откуда контроллеру узнать, что данные будут лежать мертвы грузом, а не будут активно перезаписываться?


                                                                        1. Jef239
                                                                          29.05.2017 13:56

                                                                          Необходимость организации в банки — экономия на размере маркера номера блока

                                                                          А с этим никто не спорит. Просто эффективней из LBF-адреса сектора под адрес банка выделить младшие биты. В минусах будет одинаковое количество блоков в банке.

                                                                          тупиковое направление в силу того, что в современной TLC памяти коррекции будут чуть ли не в каждой странице блока

                                                                          Тем не менее, по каким-то критериям блоки отправляются в список bad-блоков. И скорее всего эти критерии количественные, то есть позволяют выделить надежные и слабые блоки.

                                                                          старый блок исключается и очищается (полностью все биты установлены 0xFF) т.е. информации о качества чтения для этого физического блока не остается

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

                                                                          откуда контроллеру узнать, что данные будут лежать мертвы грузом, а не будут активно перезаписываться?

                                                                          А тут есть хорошая презумпция. Таблицы FAT — перезаписываться будут, остальные данные — скорее всего нет. То есть можем считать что первые логические 32 мегабайта — перезаписываются часто, остальное — редко. И в 99% случаев — будем правы.

                                                                          и зачем? Если есть еще много блоков, в которые не было записей.

                                                                          А вот это уже особенность ext2. У меня такое впечатление, что после записи 5-10 процентов на ext2 уже записаны все блоки. Дело в том, что ext2 борется с фрагментацией файлов путем рассредоточения их по диску. Плюс ещё старается разместить файлы поближе к каталогам. А каталогов — порядка тысячи. В итоге после записи каталоговой структуры — уже можно считать что большинство блоков записано. Это не FAT, где при создании каталоговой структуры все каталоги попадут лишь в несколько логических блоков.


                                                                          1. hddmasters
                                                                            29.05.2017 19:30

                                                                            А тут есть хорошая презумпция. Таблицы FAT — перезаписываться будут, остальные данные — скорее всего нет. То есть можем считать что первые логические 32 мегабайта — перезаписываются часто, остальное — редко. И в 99% случаев — будем правы.

                                                                            нередкая ситуация: работа с файлом на USB flash. Какой-нибудь студент делающий реферат, один файл пересохранит многократно. При том что редакция будет незначительна и размер в кластерах прежний и положение в логическом пространстве прежнее. И таких ситуаций множество, когда надо думать не только о FAT таблицах, в связи с чем направления по оптимизации записи именно FAT таблиц как-то иначе, чем иные данные не получают широкого распространения.
                                                                            А вот это уже особенность ext2. У меня такое впечатление, что после записи 5-10 процентов на ext2 уже записаны все блоки. Дело в том, что ext2 борется с фрагментацией файлов путем рассредоточения их по диску. Плюс ещё старается разместить файлы поближе к каталогам. А каталогов — порядка тысячи. В итоге после записи каталоговой структуры — уже можно считать что большинство блоков записано. Это не FAT, где при создании каталоговой структуры все каталоги попадут лишь в несколько логических блоков.
                                                                            итог: паразитная нагрузка в случае Ext выше
                                                                            Тем не менее, по каким-то критериям блоки отправляются в список bad-блоков. И скорее всего эти критерии количественные, то есть позволяют выделить надежные и слабые блоки.
                                                                            как правило они отправляются технологическим ПО. Исключить блок из трансляции можно по многим критерями. Например по количеству попыток чтения с использованием Read Retry, после успешного прочтения, но с долгими мучениями переписать его в другой блок. Но есть ли смысл закладывания этих алгоритмов в обычные USB flash — большой вопрос.

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

                                                                            Технология производства выглядит как быстро, дешево и лишь бы кое-как работало.


                                                                            1. Jef239
                                                                              29.05.2017 23:25

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

                                                                              Мда… Знаете с времен редактора TED для RSX-11М много воды утекло. Никто не перезаписывает уже лежащий на диске файл. Делает так:

                                                                              • Создали файл с новым, временным именем. Для Word имя этого файла начинается с тильды.
                                                                              • Записали данные в него.
                                                                              • Существующий файл переименовали в .bak
                                                                              • Новому файл дали имя старого файла.
                                                                              • Удалили .bak


                                                                              Последние лет 30 — это основная технология, все остальные варианты — приводят к потере файла из-за сбоя во время записи.

                                                                              итог: паразитная нагрузка в случае Ext выше

                                                                              УВЫ. Итог — всего 4 записи на FAT взамен целых 4 записей на ext2. Но, как не обзови, 4=4.


                                                                              1. hddmasters
                                                                                29.05.2017 23:36

                                                                                УВЫ. Итог — всего 4 записи на FAT взамен целых 4 записей на ext2. Но, как не обзови, 4=4.
                                                                                у Вас 4 запис, в силу Ваших знаний этого вопроса. Вы даже в FAT ошиблись и не учли процесс обновления FSinfo.


                                                                                1. Jef239
                                                                                  29.05.2017 23:56

                                                                                  Ну так расскажите тогда, сколько будет по вашему мнению.


                                                                    1. Jef239
                                                                      29.05.2017 11:53

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

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


                                                                      1. hddmasters
                                                                        29.05.2017 12:28

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

                                                                        подобное обычно на уровне драйвера ОС. Как например в жестких дисках уже много лет как введено понятие AHCI контроллера, который сортирует очередь команд для оптимизации перемещений БМГ. Буферизацию на запись с оптимизации записей для сменных устройствах обычно не используют. В силу того, что от пользователя можно ждать постоянных подвохов связанных с извлечением накопителя в неподходящий момент. USB NAND контроллер просто обслуживает R/W операции идущие поверх USB PHY и тут уже вопрос как обрабатываются команды. Учитывая, что в некоторых USB flash используются те же контроллеры что и в некоторых бюджетных SSD, то можно предполагать наличие классических оптимизаций. Но в случае простых контроллеров, так оптимизаций обычно нет.


                                                                        1. Jef239
                                                                          29.05.2017 13:31

                                                                          Драйвер ОС не знает размера физического блока и ориентируется на размер кластера.

                                                                          Тот же linux — вообще не рассчитан на извлечение флэшки, у него иногда буферизация записи до минуты идет. С другой стороны, не так важно, выдернем ли мы флэшку во время записи или во время буферизациии длиной в 1 микросекунду. Более 50 миллисекунд — буферизацию делать не стоит. А до 50 мс — это «вытащил ровно во время записи».

                                                                          можно предполагать наличие классических оптимизаций

                                                                          Ну я рад, что в каких-то вещах мы начинаем сходится.


                                                                          1. hddmasters
                                                                            29.05.2017 19:18

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

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


                                                                            1. Am0ralist
                                                                              29.05.2017 20:40

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


                                                                              1. hddmasters
                                                                                29.05.2017 21:03

                                                                                Вот по личному опыту больше трупов я видел после стандартного извлечения с помощью «отключить устройство» в винде.
                                                                                Не можете прокомментировать?
                                                                                При изношенной памяти и сбоях при записи уже неважно как будет извлечен накопитель из USB порта.


                                                                                1. Am0ralist
                                                                                  29.05.2017 22:07
                                                                                  +1

                                                                                  Проблема в том что изучение показывало, что флешки были не самые изношенные офисной нагрузкой (не самые большие объемы документов на них таскалось, редко напрямую с флешек кто работал, в отличие от меня). Это было еще во времена массовости 1-4 гиговых флешек, проблем с записью и чтением до отключения не наблюдалось, а вот после отключения — аболютные трупы получались. Ну вот вообще абсолютные. То есть из разряда записали, скопировали обратно, отключили, вытащили, втыкают заново — труп. Разные утилиты не помогали.
                                                                                  Особенно часто грешили кингстоны, купленные не в сомнительных местах, а в нормальных магазинах…
                                                                                  В то же время и в хвост, и в гриву используемые мною годами, которые я вечно выдергивал сразу после записи (как индикаторы отмигаются) — обычно либо терялись быстрее, либо утрачивали актуальность объемов, а не дохли.


                                                                                  1. Jef239
                                                                                    01.06.2017 11:57

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

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


                                                                            1. Jef239
                                                                              29.05.2017 22:46

                                                                              Оверлей трансляции — это что за зверь?

                                                                              тем не менее две последовательные записи он потенциально может объединить в одну,

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

                                                                              Потому реально — не объединяет.


                                                                1. Jef239
                                                                  29.05.2017 10:57

                                                                  Видите в чем беда… Вы перфекционист. Вам кажется, что если уж оптимизация — так до полного упора. А это просто не нужно. Есть такое правило «20-80» (20% людей выпивают 80% пива). 20% возможных оптимизаций дают примерно 80% эффекта.

                                                                  И не надо анализировать бут-сектор и считать размеры FAT. Ну хотя бы потому, что 90% людей флэшку не переформатируют. А из оставшихся — 95% форматирует с дефолтными параметрами. И того, настройкой на дефолтную разметку мы оптимизируем 99.5% случаев использования.

                                                                  Остальное — никому не нужный перфекционизм.


                                                                  1. hddmasters
                                                                    29.05.2017 11:17

                                                                    Видите в чем беда… Вы перфекционист. Вам кажется, что если уж оптимизация — так до полного упора. А это просто не нужно. Есть такое правило «20-80» (20% людей выпивают 80% пива). 20% возможных оптимизаций дают примерно 80% эффекта.

                                                                    И не надо анализировать бут-сектор и считать размеры FAT. Ну хотя бы потому, что 90% людей флэшку не переформатируют. А из оставшихся — 95% форматирует с дефолтными параметрами. И того, настройкой на дефолтную разметку мы оптимизируем 99.5% случаев использования.

                                                                    Остальное — никому не нужный перфекционизм.

                                                                    именно введение оптимизаций для FAT можно назвать перфекционизмом. Такие попытки были. Например OTI 2169, там небольшой логический мини банк для блоков с FAT был. Но эта политика себя не оправдала. (это было во времена USB Flash 256Мб, 512МБ)


                                                                    1. Jef239
                                                                      29.05.2017 11:47

                                                                      Ещё раз говорю — сделайте моделирование. И вы увидите, что алгоритмы оптимизированы под FAT.


                                                                      1. hddmasters
                                                                        29.05.2017 12:32

                                                                        Ещё раз говорю — сделайте моделирование. И вы увидите, что алгоритмы оптимизированы под FAT.
                                                                        пока не получили массового распространения файловые системы учитывающие аппаратные нюансы NAND flash, то FAT остается файловой системой, которая имеет минимальную паразитную нагрузку. Чуть поглубже погрузитесь в устройство той же Ext и понаблюдайте за всеми R/W операциями и проанализируйте места записей и посчитаете насколько паразитных записей будет больше.


                                                                        1. Jef239
                                                                          29.05.2017 13:25
                                                                          +1

                                                                          Что значит «не получили массового распространения»? UBIFS, JFFS2 и LogFS более чем используются. Вы попробуйте найти устройство с linux, где не было было бы одной из этих систем!

                                                                          Но именно с микросхемами NAND flash, а не с USB-флэш, в которой для этого есть собственный контролер.

                                                                          посчитаете насколько паразитных записей будет больше.

                                                                          Я вам уже посчитал — аж 4 на ext2 взамен всего 4х на FAT для коротких файлов (размером меньше кластера). При этом ext2 агрессивно кэшируется, в отличие от FAT на windows. Иногда после записи на флэшку делаешь sync и чуть ли не минуту ждет сброса дискового кэша. Так что реальных операций записи — сильно меньше.


                                                            1. Jef239
                                                              29.05.2017 10:01
                                                              -2

                                                              Причины того, что USB flash у вас умирали с использованием Ext совсем в другом.

                                                              И в чем же они? Почему 4 записи на файл на ext2 вам кажутся сильно больше, чем 4 записи на FAT?


                                      1. hddmasters
                                        25.05.2017 16:59
                                        +3

                                        Возьмем к примеру USB Flash на старом контроллере и простой NAND
                                        SK6211 (UFD) + NAND K9HBG08U1M -2шт.

                                        Samsung NAND 8bit I/O, страница 2112 байт. 2 банка, 2 плоскости в банке. Микросхема умеет работать сразу с 2 плоскостями. Организация в блоки по 128 страниц. (128*2112=270336 байт).

                                        2 микросхемы = 4 банка, в каждом банке по 2 плоскости. Контроллер реализует эти возможности. В итоге имеем параллельную симметричную запись по каждому из каналов сразу в 4 банка и в каждом сразу в две плоскости. Итого поток сразу по 8 «каналам». 8*128=1024 страницы — это размер блока (1024*2112=2 162 688), единица в трансляции, которой оперирует данный NAND контроллер.

                                        Организация страницы: (особенность SK6211)
                                        2112 байт из них 2048 — данные для LBA диапазона. 64 служебные. по 16 байт на каждый блок 512 байт. В каждые 16 байт входят несколько служебных байт с маркером и флагами (дублирующие информацию из транслятора) и ЕСС (БЧХ)

                                        Трансляция:
                                        Логический банк по 0x400 (1024 блока), реально включено в трансляцию 0x3Cx (количестве в каждом экземпляре будет разное в зависимости от количества заведомо забракованных блоков).

                                        В таблице указываются порядковые номера блоков из которых формируется LBA диапазон.

                                        пример работы NAND контроллера:
                                        Допустим в блоке с логическим номером 3 лежит файл 2кб, мы его отредактировали и сохранили изменения. NAND контроллер прочитает целый блок 2МБ, внесет в буфере изменения в виде наших модифицированных 2кб очистит и перепишет целиком блок 2Мб, только вот при выборе куда записать не факт, что он выберет блок из котрого прочитал. Скорее выберет блок из тех, что не принимают участие в трансляции с меньшим значением счетчика перезаписей, выполнит в него запись содержимого буфера, отразит сие в трансляции. Аналогичные действия произведутся в областях содержащие метаданные файловой системы.

                                        На вопрос с чего я решил, что данный контроллер работает именно так отвечу демонстрацией примера моей древней работы по реверс-инжинирингу http://www.flash-extractor.com/forum_old/viewtopic.php?t=758 (первое же сообщение с описанием сбора логического образа из дампов полученных из микросхем). Там описан только алгоритм сбора образа с пользовательскими данными в рамках ПО существовавшего в 2008 году.


                                        1. Jef239
                                          25.05.2017 17:11
                                          -1

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

                                          А я про современные флэшки на 8 и 16 гигов.


                                          1. hddmasters
                                            25.05.2017 17:21

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

                                            А я про современные флэшки на 8 и 16 гигов.

                                            Я специально взял в качестве примера старый накопитель как значительно более простой пример в пояснении принципов работы. И кстати его размер 8Гб. Думаю Вам бы не стало проще понять принцип работы NAND контроллеров, если бы я добавил всякие нюансы с зашумливанием данных с исключением столбцов по плоскостям, несимметричной записью по каналам, нюансы с использованеим «блоков-апдейтов» и т. п.


                                            1. Jef239
                                              25.05.2017 18:22
                                              -1

                                              Некоторые из этих нюансов позволяют дать приоритет в надежности для начальных логических блоков.

                                              Если вы чего-то не нашли в конкретной прошивке — это не означает, что такого не бывает никогда. :-) Как подтверждение — S25FL256S


                                              1. hddmasters
                                                25.05.2017 18:43

                                                Некоторые из этих нюансов позволяют дать приоритет в надежности для начальных логических блоков.

                                                Если вы чего-то не нашли в конкретной прошивке — это не означает, что такого не бывает никогда. :-) Как подтверждение — S25FL256S

                                                каким боком приведенный пример flash памяти может относиться к USB Flash или различным CF, SD картам?


                                1. hddmasters
                                  24.05.2017 14:27
                                  +1

                                  Ну значит такое качество у вас анализа было… :-)

                                  Для оптимизации под FAT хватает того, что контролер считает, что часто перезаписываемая область находится в начале диска, а не в его середине или в конце

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

                                  Эксперимент очень простой. Берете 5-10 неиспользованных флэшек разных моделей. Разбиваете на 2 раздела. Один — большой под FAT, второй в конце, 1-2 гига, под ext3. При попытке растарить на него почти гигабайтный архив — запись зависает примерно в половине случаев.

                                  Ваш эксперимент с создание разделов в разных местах логического пространства ровным счетом ничего не показывает, кроме того, что в случае использования Ext на USB Flash они отваливаются при высокой нагрузке, что не лучшим образом характеризует качество изделий. Упреждая вопрос с кажущейся одинаковой нагрузкой в случае FAT и Ext предложу Вам обратить внимание на устройство файловых систем, чтобы понимать, какие метаданные файловой системы и куда пишутся, кроме непосредственно самих данных файла. Также обращаю внимание на то, что запись ведется преимущественно блоками (группа NAND страниц), т. е. перезапись метаданных Ext — это неслабая паразитная нагрузка, которая намного выше, нежели в случае FAT.


                                  1. Jef239
                                    25.05.2017 17:02
                                    -1

                                    Так вот любой физический блок может выполнить любую логическую роль

                                    Это не отменяет тот факт, что таблица FAT находится в начале логического пространства адресов.

                                    Упреждая вопрос с кажущейся одинаковой нагрузкой в случае FAT и Ext предложу Вам обратить внимание на устройство файловых систем, чтобы понимать, какие метаданные файловой системы и куда пишутся,

                                    Обычный режим для Windows — это частое (после записи каждого файла)обновление таблицы FAT. Причем для мелких файлов — меняется лишь один сектор в этой таблице. Винда обычно настроена так, чтобы выдергивание флэшке не привело к поломке FAT.

                                    С другой стороны linux кэширует запись в служебные области, Причем время кэширования — достаточно велико.

                                    Так что теоретически, при распаковке кучи мелких файлов, нагрузка на определенные сектора будет выше для FAT

                                    Собственно можете сами попробовать писать секторами по 512 в начало и конец логического диска на USB. И сами увидите, что посекторная запись в конец быстрее вышибает диск.


                                1. geher
                                  24.05.2017 21:05

                                  Пес его знает.
                                  Есть такая штука Raspberry Pi.
                                  Штатная флэшка под нее разбита на два раздела. Сначала маленький FAT с несколькими текстовыми файлами настройки, а потом, кажется, Ext3 (точно не FAT), работает нормально, образ льется по dd нормально. Под большой нагрузкой (постоянная запись с камеры) флэшка умирает примерно за полгода. Но и FAT (тоже постоянная запись с камеры, но не RPi) под большой нагрузкой умирает за примерно то же время.


                                  1. hddmasters
                                    25.05.2017 16:23

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


                                    1. geher
                                      25.05.2017 20:05

                                      Файлы от 1 до 5 мб недостаточно мелкие?
                                      Из-за особенностей настройки видео резалось именно такими порциями (низкое качество несколько секунд).


                                      1. hddmasters
                                        25.05.2017 20:19

                                        мелкий файл — это файл, который многократно меньше размера блока, которым оперирует NAND контроллер. 1-5Мб цифры одного порядка с размером блока.


                                  1. hddmasters
                                    25.05.2017 17:14

                                    Это не отменяет тот факт, что таблица FAT находится в начале логического пространства адресов.

                                    начисто отменяет. блок с boot сектором и FAT может и в самом конце быть. За время эксплуатации он постоянно будет перемещаться. Чуть ли не при каждой перезаписи. В первый свободный блок с существенно меньшим числом записей.
                                    Обычный режим для Windows — это частое (после записи каждого файла)обновление таблицы FAT. Причем для мелких файлов — меняется лишь один сектор в этой таблице.

                                    для вас меняется один лишь сектор, а NAND контроллер целиком переписывает блок.
                                    Винда обычно настроена так, чтобы выдергивание флэшке не привело к поломке FAT.
                                    от Windows и любой другой ОС тут мало что зависит. Если выдергивание произойдет во время обновления таблицы трансляции, то получите накопитель, который «перестал определяться» или «определяется нулевым размером».

                                    С другой стороны linux кэширует запись в служебные области, Причем время кэширования — достаточно велико.

                                    Так что теоретически, при распаковке кучи мелких файлов, нагрузка на определенные сектора будет выше для FAT

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

                                    Собственно можете сами попробовать писать секторами по 512 в начало и конец логического диска на USB. И сами увидите, что посекторная запись в конец быстрее вышибает диск.

                                    поверьте, данный детский эксперимент мне точно нет нужды проводить. Я все же предпочитаю более глубокий анализ принципов работы NAND контроллеров.


                1. Alexey2005
                  22.05.2017 17:10
                  -1

                  А как повлиять на производителей в плане улучшения поддержки сторонних FS? Тут разве предусмотрена какая-то обратная связь? Даже просто выбрать при покупке модель с поддержкой ext3/ext4, если таковые вообще существуют в природе, и то практически невозможно, потому как в характеристиках этого не указывают. Поддержку основных кодеков и видеоконтейнеров укажут, а такую мелочь — нет.


                  1. khim
                    22.05.2017 17:34
                    +6

                    А как повлиять на производителей в плане улучшения поддержки сторонних FS?
                    В том-то и дело, что они не сторонние, а нативные. В тех самых «приставках и телевизорах», в подавляющем большинстве случаев сидит Linux. А как влиять? Просить, требовать, искать прошивки, которые позволят вам использовать то, чего хотите. А как ещё?

                    Даже просто выбрать при покупке модель с поддержкой ext3/ext4, если таковые вообще существуют в природе, и то практически невозможно, потому как в характеристиках этого не указывают. Поддержку основных кодеков и видеоконтейнеров укажут, а такую мелочь — нет.
                    Ну вот эту проблему и нужно решать.

                    А то у вас получается, что Linux не поддерживает Linux'овые технологии — а виноваты разработчики. Нет. Виноваты те, что взял — и открутил эту поддержку по тем или иным причинам.


              1. Scorry
                22.05.2017 17:11

                Читайте тут. Надеюсь, вы понимаете, что «винды» в перечне «приставки, телевизоры» выглядит несколько чужеродно.


                1. andreymal
                  22.05.2017 17:16

                  Нет, не понимаю. Сходить к соседу с внешним USB-диском с фильмами — вполне реалистичная ситуация (не у всех ещё интернеты в сотни мегабит). И форматировать его в «Ext4, XFS, Btrfs» совершенно не годится, потому что у соседа на компе стоит не Android-x86, а Windows 7.


                  На флешке/переносном USB-винте должна стоять ФС, которая работает одновременно и на приставках, и на телевизорах, и на виндах. Если сосед — хипстер/дизайнер, то и в макосях тоже.


                  1. Zapped
                    22.05.2017 17:31
                    +5

                    >Если сосед — хипстер/дизайнер, то и в макосях тоже.
                    с макосями дела не имел, но загуглив по-быстрому, получил, например
                    Mac OS X can read from NTFS drives, but it can’t write to them unless you use one of the below tricks.
                    то есть, насколько я понимаю, без предварительных танцев в макоси тоже не всё хорошо


                  1. Scorry
                    22.05.2017 17:37
                    +14

                    Вы интересно выстраиваете аргументы. Виндовый чекдиск не умеет править линуксовые системы — минус линуксу. Линукс умеет править нтфс, но базово — снова минус линуксу. Майкрософт силой загоняет производителей железа на совместимость с виндами и с носителями на фат32 — неужели снова Столлман с Торвальдсом злое умыслили?


                    1. andreymal
                      22.05.2017 17:40
                      -4

                      Во-первых, я писал, что поддержка NTFS это плюс линуксу. Во-вторых, ещё раз повторюсь, конечным пользователям плевать, у кого какие там плюсы-минусы, им надо чтобы просто работало. «Ext4, XFS, Btrfs» под «просто работает» не попадает. Вот и всё. Не надо мне минусов надумывать, я ничего такого не говорил.


                      1. Scorry
                        22.05.2017 17:50
                        +1

                        Я укажу вам на дыру в ваших рассуждениях: я — конечный пользователь. И мне сильно, очень сильно не плевать. Поэтому у меня в доме майкрософта, например, исчезающе мало.


                        1. andreymal
                          22.05.2017 17:58
                          +1

                          Что ж, рад за вас) К сожалению для всех нас, типичный конечный пользователь не такой. Он ближе к такому.


                      1. khim
                        22.05.2017 18:03
                        -1

                        Не надо мне минусов надумывать, я ничего такого не говорил.
                        Вы почему-то начали очень сильно напирать на «конечных пользователей», которым «наплевать» на всё на свете в ветке, которая, уж извините, началась со следующего диалога:


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

                        Все эти экзотические Linux'овые ФС ни одно виндовое устройство не видит, да и всякие смарт-телевизоры тоже что-то не очень.


                        Ну а дальше — уже откуда-то возникли «обычные пользователи», которым «всё пофиг», и которым, в частности, пофиг, что нормально Smart TV работает только с HDD, отформатированным в ext3.


                        1. andreymal
                          22.05.2017 18:07
                          +1

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


                          1. khim
                            22.05.2017 18:43
                            +1

                            Как и автор второго комментария.
                            Автор второго комментария, вы уж извините, начинает с того, что заявляет: чуть ли не любая железка под Linux не раскроет все 100% своего функционала, а хоть что-нибудь из функций будет отсутствовать или не заработает как положено, притом что подавляющее большинство «железок» (как то: смартфоны и SmartTV, роутеры и суперкомпьютеры) сейчас только под Linux'он и работают.

                            Как было сказано чуть выше:
                            Виндовый чекдиск не умеет править линуксовые системы — минус линуксу. Линукс умеет править нтфс, но базово — снова минус линуксу.
                            Это, вы уж извините, не «я лишь констатирую факты касательно юзабельности всего этого по состоянию на май 2017 года», а совсем даже другое…


                            1. andreymal
                              22.05.2017 18:58

                              Я отвечал лишь про файловые системы. Про оборудование я ничего не говорил и говорить не собираюсь (хотя сказать тоже много чего есть, я недавно 3G-модем не смог завести, например), только про файловые системы.


                              Как было сказано чуть выше:

                              Прекращайте перевирать мои комментарии, никому никаких минусов я не приписывал. Я лишь объясняю, что нельзя просто так взять и отформатировать флешку в Ext4. Если все ваши соседи юзают убунту, если все ваши приставки без проблем подключают Ext4, если ваш работодатель отказался от использования продукции Microsoft — я буду очень радоваться за вас и завидовать вашему локальному вендекапцу. Но, к сожалению, мир, в котором живу я (и автор второго комментария), не такой, мне приходится взаимодействовать с Windows каждый день (в том числе с использованием флешек), и, если я отформатирую флешку в Ext4, я получу кучу проблем при взаимодействии с другими людьми и их устройствами.


                              1. khim
                                22.05.2017 19:19

                                Ваш мир примерно так же несовершенен, как и мой — но какое это всё имеет отношение к качеству опен-сорсного кода, в частности, кода Linux'а?


                                1. andreymal
                                  22.05.2017 19:24
                                  +1

                                  А никакого. Я про него ничего и не говорил. Я говорил лишь про то, что из-за несовершенства мира нельзя отформатировать флешку/юсб-диск в "Ext4, XFS, Btrfs".


                                  Это даже к теме поста не имеет отношения, может лучше уже закрыть тему?)


                              1. fshp
                                23.05.2017 00:59

                                я недавно 3G-модем не смог завести, например

                                Вы опять же путаете производителей софта и производителей железа.
                                То, что производитель вашего модема написал драйвер лишь к Windows — никак к теме не относится. У меня есть сканер, который работает лишь в WinXP x86. Начиная с висты и выше драйверов нет. Однако сканер прекрасно работает в любых версиях Linux. И будет работать ещё не одно десятилетие.


                  1. grossws
                    22.05.2017 17:37
                    +1

                    На флешке/переносном USB-винте должна стоять ФС, которая работает одновременно и на приставках, и на телевизорах, и на виндах. Если сосед — хипстер/дизайнер, то и в макосях тоже.

                    Тогда ntfs не очень подходит, т. к. её поддержка на macosx хуже на linux.


                    1. andreymal
                      22.05.2017 17:45
                      -1

                      1. khim
                        22.05.2017 17:49
                        +2

                        exFAT — ещё хуже, чем NTFS. По той же причине.


                        1. andreymal
                          22.05.2017 17:52

                          Есть где почитать про проблемы? В моей практике с ней было всё прекрасно, лучше чем с NTFS


                          1. grossws
                            22.05.2017 18:05

                            На куче железок он не поддерживался по тем же причинам: патенты. Какая сейчас ситуация в ванильном линуксе — не знаю. Apple вполне может оплачивать лицензию.


                          1. khim
                            22.05.2017 18:07
                            +1

                            Wikipedia не подойдёт?

                            Там про всё написано: и про проблемы с патентами и лицензиями и про Samsung'овский драйвер с непонятным правовым статусом и про прочее.

                            Разница в основном в том что, что exFAT разрабатывался под весьма убогое ядро Windows CE (и, соответcтвенно, под «хитрый план» связанный с вытеснением Linux'а со всяких «приставок и Smart TV»), так что хитрых фич в ней меньше.


              1. mva
                23.05.2017 21:06

                Всё в порядке. Просто в UI доступном для "ЦА" её намеренно вырезали. Вот так вот, да. Замкнутый круг. Нету — потому что ЦА не поймёт, а ЦА никогда не поймёт потому что нету.


          1. Ivan_83
            23.05.2017 14:55
            +6

            Насчёт железа ты не прав, в том смысле что далеко не любая.
            Если хочешь померится у кого длиннее список, включи в линуксовый список все те чипы на которых он запускается и все те IP (модули в чипах) хреновины которые в них встроены и которые линух умеет.
            С видюхами да, не фонтан, пока что.
            К тому же, я могу припомнить что на дворе уже 2017 год, а венда говорят только начиная с десятки кое как научилась работать с вланами, а до того юзеры венды дрочили на утилиты вендоров сетевых карт чтобы хоть какие то VLANы поиметь в системе. Хотя для поддержки VLAN таковая в сетевухе не требуется вообще.
            Или вон в конце поста история про DVB в венде.

            Ну давай, в своей венде примонтируй самую распространённую во фре UFS2, самую крутую для работы с дисками ZFS, самую линуксовую ext2.
            Не можешь?
            Значит венда говно.
            Те нефиг всё под венду ровнять.
            Я и сам тебе могу сотни юзкейсов накидать когда винда отсасывает.

            Если тебе надо что то скормить телеку — юзай nfs, UPnP/DLNA и не парь мозги себе и людям. А некоторые плееры даже и самбу умеют.

            2 andreymal
            Ну так венда настолько уныла что ничего кроме своих NTFS и FAT не знает, почему ты это предъявляешь пользователям/пейсателям линуха!?
            Иди мс дрочи, пусть вкорячивают, ты же типа заплатил.
            Нам (не винда юзерам) то твой NTFS как бы нафик не сдался, у нас своих винрарных фс хватает, которые получше будут и на любой случай жизни.
            Да и ко всяким телекам/плеерам у нас свой подход: nfs, самба, UPnP/DLNA — производитель о нас подумал и внедрил поддержку DLNA и на коробку об этом буквами и картинкой написал, это вы там флешки с вирусами разносите. Не лень вам с флешкой бегать?
            А не пробовали WMP тыкать, а то он тоже умеет кина по DLNA на ящик показывать. Вот всякие дриектплей, хромекаст и прочие красивые названия это оно и есть. Всамртах самсунга оно с 2011 года есть.

            А я вот смог завести все 3г мопеды под фрёй: http://netlab.dhis.org/wiki/ru:hardware:huawei:e3272
            под линухом уже всё давно заезжено.
            Но если ты юзер, то перед приобретением хрени нужно убедится что кто то уже её прикрутил и закоммитил поддержку, а не тащить в комп всё подряд что под руку подвернётся.

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

            2 anatolymik
            В линупсе есть udevd, systemd оно получает все нотификации от ядра об новых устройствах.
            Во фре есть devd он тоже получает нотификации от ядра о новых файлах и делает какие то действия в ответ, ну там драйвер подгрузить или дёрнуть что то.
            Это намного более гибкая система чем то что в венде, тут всё просто и понятно.

            Если тебе не нравятся чужие 100500 дистров линуха, форкни что нравится и сделай свой болгенос с гувернандками и думом.

            «Попробуйте разработать шифрование загрузочного диска (на уже установленной системе, а не во время установки).» и про фильтрацию — не нужно натягивать свои хотелки и косяки планирования на линукс, очевидно это не венда.
            Если ты прошляпил и тебе нужно зашифровать диск ПОСЛЕ установки — достаёшь второй диск, копируешь систему на него, делаешь первый диск зашифрованным и копируешь систему обратно.
            Это не венда, тут можно копировать систему целиком и она, о чудо, будет работать.
            Попробуй свою венду скопировать на другой диск чтобы она потом ещё и работала. Штатными средствами.
            Или вот в линухе/бсд можно одной командой проверить ВСЕ установленные из портов/пакетов проги на предмет того что они поменялись (ну там диск сломался или ещё чего), а в венде — хер.
            Фрю/линух можно легко починить просто поставив поверх, при этом все конфиги останутся на месте, ибо это штатная процедура обновления по сути, а венду ты хер починишь. Можно попрыгать там с её типа шаттной системой восстановления, но это не всегда помогает и потом можно систему только переставить… а потом переставить весь софт.

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

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

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

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

            Ну и как любителю крипты в венде, могу тебе напомнить что:
            1. там часть годных алгоримов отключена тупо в реестре
            2. если ты включаешь это ручками, то будь готов повторять процедуру несколько раз в год, потому что иногда приезжают обновления которые выключают это обратно.
            http://netlab.dhis.org/wiki/ru:software:win:sec:enabletls
            3. встроенной крипте в венду доверять нельзя в принципе, потому что никто не делал публичных аудитов. Даже ихнему ГСПЧ, вероятно там подарок АНБ себе любимым аналогичный тому что был в гспч на элиптике который они везде продавливали.
            4. шифрование диска там дико подозрительное, в части ключа восстановления, на что и намекали авторы трукрипта в своём прощальном послании.

            Вывод же из всего этого простой: не ходи с вендовым уставом и привычками по другим ОС, учи матчасть тех ОС куда пришёл и будет тебе щастье, а иначе только страдания и боль.
            Хотя виндузятники без страданий не могут, особенно на десятке с обновлениями %)


            1. sumanai
              23.05.2017 16:23
              -3

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

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

              Месье не освоил оснастку «Управление дисками» консоли управления?
              Есть такая же штука для обработки сетевых пакетов, их тоже можно по всякому жевать и слать в разные места на своё усмотрение, хоть прямо эзернет фреймы.

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

              «селинух»- это костыль к убогой системе прав UNIX, где есть только три права (чтение-запись-выполнение) и три же объекта для их применения (владелец-группа-остальные). В Windows в любимой вами NTFS поддерживается значительно больше прав доступа безо всяких ограничений на число тех, к кому они применяются.
              не ходи с уставом и привычками одной ОС по другим ОС

              Исправил.


              1. khim
                23.05.2017 17:21
                +3

                В Windows в любимой вами NTFS поддерживается значительно больше прав доступа безо всяких ограничений на число тех, к кому они применяются.
                В случае с безопасностью «больше» не значит «лучше». Что система прав Windows гибче — однозначно. А вот безопаснее ли она — это большой вопрос.

                Да и selinux — это не «костыль к системе прав». Это вы его с xattr, перепутали, я думаю.

                не ходи с уставом и привычками одной ОС по другим ОС

                Исправил.
                С исправлением согласен.

                Вообще есть много вещей, которые в Linux и Windows сделаны по разному — причём так, что сходу сказать «что лучше» — нельзя. Например в Windows интерфейс системных вызовов (syscalls) — нестабилен, что приводит к тому, что многие вещи, которые в FreeBSD/Linux можно сделать в Windows в принципе не поддерживеются — но зато это позволяет делать межмодульные вызовы быстрее. И? Какой из подходов лучше? Зависит от ваших целей, разумеется.

                Собственно отсюда и появляется явление, которое неправильно описано G-Tigerом как стоит кому-то что-то сказать на эту ОС, как тут же откуда-то прилетают минуса.

                Минуса появляются не тогда, когда кто-то заявляется «Linux не умеет X, а Windows — умеет», а когда кто-то из этого делает «глубокомысленный» вывод «потому Linux — отстой». Ибо это как раз и есть попытка «ходить с уставом и привычками одной ОС по другим ОС».


                1. sumanai
                  23.05.2017 17:49

                  Что система прав Windows гибче — однозначно. А вот безопаснее ли она — это большой вопрос.

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

                  Верно.


              1. Ivan_83
                25.05.2017 22:42
                +1

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

                Месье освоил GEOM и теперь смотрит на оснастку как на говно для мышководов.

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

                Понятия не имею про се линукс, гугель в андройде на него фапает.
                Хочешь поспорить — скажи что нибудь приятное про MAC во фре :)

                2 sumanai
                У вас все дефолты священны, чего с вас взять :)

                2 PsyHaSTe
                Специалисты по восстановлению данных вообще не рекомендуют chkdsk юзать, ибо он часто запарывает/херит.
                Но думаю у них от части мир такой: к ним несут то что уже запорото/похерено, а то что большинство спасается они не видят.

                2 Zalechi
                Конформизм такой конформистский, да?

                2 anatolymik
                У меня для тебя печальная новость: МС очень херово дорабатывает венду.
                Давай вспомним историю.
                98 и всё что до неё — УГ, но оно работало на 16/32мб озу и за это их можно простить.
                2000-2001 годы — 2к и ХР. Годно, юзабельно, не падает, но уже нужно 128 а лучше 256мб озу.
                В те годы линукс я видел на десктопе, мне кажется он был чуть прожорливее.
                И вот прошло 16 лет.
                Линукс переписали уже наверное раза два целиком, фря офигенно подросла и обзавелась форками. Подросло и окружение рабочего стола, которое во многом всё ещё не стало сильно прожорливее (кроме кде).
                Что за 16 лет стало в венде круче?
                х64 приросло? упёрли ASLR из опенбсд? переписали ядро полтора раза и похерили совместимость с дровами три раза?
                Вот только не надо мне про прозрачность и рабочие столы — это всё можно было в ХР.
                Ах да, IPv6 вроде как впилили.
                По сравнению с опенсорцом венда все 16 лет НИХЕРА НЕ РАЗВИВАЛАСЬ!

                Они даже гуй до сих пор не смогли оторвать от ядра.
                Единственный раз тут было интервью какого то архитектора облаков (азуре?) и он там говорил дельные вещи мягким языком: о том как они выпиливали горы говна чтобы вендовое ядро стало похоже на линуксовое и чтобы сделать минимальный дистр на 200 метров и сколько это стоило усилий. Именно он говорил что венда сливает и они это понимают и кромсают там чтобы срезать все наслоения сгнившего кода и не нужного хлама.
                Но здесь этого похоже никто не услышал, ибо все продолжают спорить о вкусах сорта говна 10 под разными соусами разного срока выдержки/пропатченности.

                И ты там где то спрашивал про примеры говнокодерства мс — почитай про багу WSAPoll() и что мс теперь назвало это фичей и не будет править дабы не сломать обратную совместимость.

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

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

                2 khim
                Справедливости ради.
                Когда венда 95 появилась это был наверное прорыв, как ни крути.
                У ребят бабло потекло ручьями и было не до кодинга и тем более не до SMP, которого тогда поди и в серверах то не было толком.
                Параллельно они пилили NT, потому что было понятно что падения 95 это как то не бизнес подход.
                Те они вышли на растущий рынок и старались на нём продвинутся и удержатся, это примерно означало много пеара и багфиксы.
                Кой чего они прикупили, кой чего пофиксили и выкатили через 3 года вин 98.
                И вот где то тогда, ИМХО, замаячили многопроцовые сервера у корпоратов, плюс стало понятно что глюкодром/решето 98 не излечимо в принципе.
                Плюс было накладно тянуть сразу две ветки венды.
                Более менее у них всё получилось только через 4 года с ХР/2к3. Пожалуй самая годная ОС за всю их историю и за первые лет 10 начала века (на десктопе).
                Из видимых/ощутимых улучшений в семёрке/2к8 относительно 2к3 х64 был IPv6 да поддержка SSD, кто бы что там не говорил. Ах да, в семёрке дрова видео как то отвязали и они при падении перестали ронять систему.
                А дальше Гейтс стал впадать в маразм, его выперли на пенсию и всё окончательно скатилось.
                Тех оплотов разума что остались в компании хватит чтобы ещё протянуть, но не хватит чтобы изменить курс в никуда.

                Широкополосный инет кардинально изменил рынки, МС к этому не готова, и что то делают чтобы не потонуть вроде только в азуре. Если бы не эти гады :) я бы давно заблочил нафик у себя все подсети МС как бесполезные и вредные — ибо в них может утекать как минимум телеметрия. Только они могут собрать дистр и идут в этом направлении который мне будет интересно посмотреть.
                ИМХО мы сейчас находимся в начальной точке взрывного роста опенсорца, так не характерного для виндо платформы, и этот рост довольно быстро перекроет все те наработки в виде софта которые есть у венды и которые в общем то ради чего её ставят.
                Вон даже наша 1С и та уже под линукс подсуетилась.


                1. sumanai
                  25.05.2017 22:52
                  -2

                  Режим обновления, а ты поди снеси кусок десятки

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

                  Вы мой намёк на то, что 99,999% пользователей это не нужно, вы не поняли? Ну вот, написал открытым текстом.
                  Из видимых/ощутимых улучшений в семёрке/2к8 относительно 2к3 х64 был IPv6 да поддержка SSD

                  IPv6 у меня отключён за отсутствием у провайдера, ОС стоит на SSD, здоровье которого наконец-то опустилось до 99% с конца 2012 года, спасибо вам, иначе не заметил бы. И всё это на XPx 64.


                  1. qw1
                    26.05.2017 13:54

                    Это весьма сложно, скажу я вам. Получать права на файлы, пытаться удалить заблокированные… Ну нафиг, сложно это.
                    Ничего сложного. Запустить консоль с повышением прав и выполнить
                    del /s /f /q "C:\Program files\*"
                    del /s /f /q C:\Windows\*

                    И посмотреть, как обновление системы восстановит потерянные файлы )))


                    1. sumanai
                      27.05.2017 00:07

                      И что вы этим хотели сказать? Зачем восстанавливать то, что не удалено?

                      Заголовок спойлера
                      image


                      1. khim
                        27.05.2017 00:57

                        Натурный эксперимент, проведённый несколько лет назад доказал, что всё это, в общем, сказки: система зачхастую отказывалась грузиться и гораздо чаще «полностью вернуть работоспособность испорченных систем не удалось» — и это были не Windows 95…


                      1. qw1
                        27.05.2017 11:02

                        И что вы этим хотели сказать? Зачем восстанавливать то, что не удалено?
                        Как минимум, ядро ntoskrnl.exe и все драйвера в System32\Drivers не заблокированы. Значит, система не загрузится в следующий раз.


                        1. sumanai
                          27.05.2017 12:29

                          Я же показал скриншот после выполнения этой команды. Ничего из этого удалено не было, и система штатно перезагрузилась. И всё потому, что прав не хватило.
                          Выполните эту команду сами и убедитесь. Только про бекап не забывайте- с ОС ничего не случится, а вот сторонние программы могут пострадать.


                  1. Ivan_83
                    28.05.2017 04:00
                    -3

                    Ну да, мышководить это ппц как сложно, проще два вагона угля совковой лопатой отмахать, конечно.
                    Оч сложно сменить владельца файлов, имея SeTakeOwnerShip привилегию (у админа есть но можно и любой учётке дать), потом сменить права доступа и затем погрохать всё к чертям.
                    Ну если чо приноси диск, у меня фре (fuse-nfs вообще то) плевать на эти ваши ACL в NTFS, я тебе быстро все *.exe, *.dll удалю, покажешь потом как оно восстановится.
                    А то у нас то по колхозному всё, как в досе: херак, скопировал с рабочей системы, и готово.

                    Да и консоль у нас на всяких инсталяторах не скучная=бесполезная, а вполне решающая.
                    Впрочем есть и вполне бытовой сценарий: диск может посыпаться, и может оказаться что профили юзеров, сам реестр и програмфилес вообще не пострадают, а только куски ОС. И вот sfc /scannow это вообще очень слабое средство для лечения таких случаев.

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

                    А у меня IPv6 включён уже года 4 как минимум, и клал я с прибором на провайдеров, сливаю всё через туннель прямо штатовским гэбистам в их хурикатэлектрик.

                    Так не солидно юзать трофейный огрызок в виде ХРх64, надо было брать хотя бы полноценный 2к3х64 стандарт, там больше всего доступно и суппортился он сильно дольше и качественнее.


                    1. sumanai
                      28.05.2017 16:31
                      +1

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

                      Я прекрасно знаю как это сделать. Но сделать это случайно практически нереально.
                      Ну если чо приноси диск, у меня фре (fuse-nfs вообще то) плевать на эти ваши ACL в NTFS, я тебе быстро все *.exe, *.dll удалю, покажешь потом как оно восстановится.

                      У меня вообще виртуальная машина, и пересылать образ в 60ГБ как-то лень.
                      Да да, в венде одни юзеры, настоящих программеров и админов там нет, я догадывался… )

                      На http://stackoverflow.com/ заходить не советую- его поддерживают ненастоящие админы на десятке серверов под Windows )))
                      надо было брать хотя бы полноценный 2к3х64 стандарт, там больше всего доступно и суппортился он сильно дольше и качественнее.

                      Заплатки я оттуда и брал, остальное чушь. Ничего из 2к3 мне не нужно. Зачем мне файловый сервер, менеджер лицензий и прочий шлак на домашнем ПК?


                      1. MacIn
                        29.05.2017 19:22

                        Заплатки я оттуда и брал

                        Что имеется в виду?


                        1. sumanai
                          30.05.2017 00:20

                          Устанавливал обновления 2003 сервера на свою XP х64. Эти ОС основаны на одном ядре, и обновления у них были общие, так что после окончания поддержки обновления от сервера вставали без проблем.


                          1. MacIn
                            30.05.2017 15:29

                            А вы все еще используете XP64? Помню, кто-то говорил про преимущества, еще обсуждали сторонние программы для накопителей SDD.


                            1. sumanai
                              30.05.2017 17:07
                              +1

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


                              1. MacIn
                                30.05.2017 19:05

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

                                Почему?


                                1. sumanai
                                  30.05.2017 19:36

                                  А зачем мне очередной клон интерфейса хрома? Мне FF без Classic Theme Restorer не мил. И это не считая десятка других дополнений, завязанных на XUL и которые принципиально не перенести на WebExtension.


            1. FieryVortex
              29.05.2017 22:35

              Попробуй свою венду скопировать на другой диск чтобы она потом ещё и работала. Штатными средствами.
              Может, глупость спрошу, но разве средство резервного копирования и восстановления с настройкой создания образа системы (или любого другого выбранного NTFS-раздела, доступного системе) с этим не справляется?.. Вроде, оно для чего-то подобного и сделано.
              Оно делает образ системы в виде виртуального жёсткого диска VHD, который можно закинуть почти куда угодно (на NTFS-раздел, естессно) и загрузиться прямо с него, добавив соответствующую запись в список загрузки BCD.


              1. Am0ralist
                29.05.2017 23:48

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

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

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


                1. FieryVortex
                  30.05.2017 06:20

                  злобный монополист захватил кучу сопутствующих рынков встроенными приложениям в ОС с монопольным положением на рынке ОС
                  Да, бородатый прикол. Частично решался размещением горки бесплатного доп.софта на официальном сайте.
                  лохи, не смогли создать такую простую утилиту
                  Угу, коммерческой компании делать больше нефиг, как тратить тысячи лишних человеко-часов разработчиков ради тонны круто написанных утилит на любой вкус/цвет/запах, которые, раз они так круты, скорее всего, моментально спиратят. И так-то их софт по торрентам гуляет вовсю.
                  Тот же GNU/Linux создавался десятками компаний и кучей энтузиастов. Попутно разный прикладной свободный софт пришёл и на другие платформы, включая столлманно-мерзкую венду.
                  не кормите его
                  Да просто было любопытно потыкать палочкой очередного «винда нифига не умеет!!11адынадын», не удосужившегося сделать то, что посильно простому вендоюзеру, — заглянуть в настройки резервного копирования, в папку с бэкапами и немного подумать.


              1. Ivan_83
                30.05.2017 14:51
                -2

                Отлично.
                Ещё бы кто то об этом знал и умел пользоваться.

                А что делать когда когда образа нет или он тоже покорёжен?
                Я же привёл вполне конкретный кейс: часть бинарников ОС удалена/покорёжена, реестр и профили полностью целые.
                В случае сбоя диска или вирусов вполне обычное дело.

                Это я ещё не спрашиваю что делать когда програм филес удалено/покорёжено.
                Или как найти файл который поменялся из за того что его подменили/заразили.

                2 Am0ralist
                Включи моск.
                Средства обновления, самодиагностики и управления пакетами — часть ОС, даже в унылой венде.
                Напомнить про угрёбищный msi инсталлер?
                Собственно это часть инфрастуктуры/платформы ОС, оно ни с чем не конкурирует, ровно как и вендовое АПИ это часть которая не конкурирует, и дисковая система NTFS тоже как бы часть и не конкурирует ни с кем.
                Даже встроенный чекдиск не конкурирует с другими, нельзя придти в антимонопольную службу и доказать что он тут не нужен, пусть люди смогут купить нортон диск доктор. Потому что это сервисная штатная утилита для починки того что является неотъемлемой частью ОС.

                Ровно как и всякие акронисы и прочие бэкаперы не идут с антимонопольными исками чтобы выпилили встроенные средства восстановления. Даже производители антивирусов не очень то рыпаются, хотя им то вполне можно было.

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

                Так про линукс я сказал что мне пофик что там, я им не так чтобы активно пользуюсь.

                2 sumanai
                Стак — ошибка природы.
                Рано или поздно им надоест и они перепишут это на похапе и поставят вместо 10 виндуст машин 3 тазика с фрёй/линухом и начнут наконец спать спокойно.

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


                1. sumanai
                  30.05.2017 17:13

                  Стак — ошибка природы.

                  Сперва добейся запустите альтернативу.
                  поставят вместо 10 виндуст машин 3 тазика с фрёй/линухом

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

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


          1. PsyHaSTe
            23.05.2017 19:11
            -1

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


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


          1. mva
            23.05.2017 20:59
            +3

            1) "вот эти экзотические Linux'овые ФС", на самом деле, используются на куда бОльшем количестве девайсов в мире, чем существует ПК с Windows
            2) Почему вы Linux'у в претензию ставите отсутствие нормальной поддержки проприетарной и абсолютно не документированной ФС, все имплементации которой получены только реверс-инжинирингом, при этом не ставите Windows в вину отсутствие нормальной поддержки не только ExtFS, но и других "вкусняшек", код которых полностью открыт (т.е. давно бы уже могли, если бы не принцип EEE)? Вы сами не видите за собой двойных стандартов?
            3)


            У Linux всё очень плохо с поддержкой железа

            a) это не вина Linux. Это вина вендоров. Иногда в лени и/или жадности и/или глупости (незнании о существовании чего либо кроме Windows), иногда в сговоре с M$ явно запрещающем писать драйвера для других ОС (да-да).
            b) на самом деле, это наглая ло^W^W совсем не так. Я сменил уже порядка 3 лаптопов "игрового" класса (сейчас, вот, пишу с MSI GT-72 купленного год назад) и всё железо в них прекрасно поддерживается. Даже смена окраски клавиатуры.


            и разных низкоуровневых фишек

            Не соблаговолите ли вы быть немного более конкретным? Иначе сие так же суть подлог и провокация.


            Чуть ли не любая железка под Linux не раскроет все 100% своего функционала, а хоть что-нибудь из функций будет отсутствовать или не заработает как положено.

            От первого до последнего слова подлог и провокация.


            Ну и сама суть:


            взять проприетарную ОС с проприетаной ФС
            В винде я бы сделал chkdsk и всё, а в Linux не могу
            LINUX КАКАШКА НЕ ПОДДЕРЖИВАЕТ САМУЮ ПОПУЛЯРНУЮ ФС А ВИНДА РУЛИТ ПОТОМУ ЧТО ПОТОМУ
            В винде нету поддержки ни одной из кучи других (зачастую более лучших) ФС (кстати, некоторые из поддерживаемых Linux'ом ФС старше самой Windows раза в два-три).
            ЭКЗОТИЧЕСКИЕ ФС!!!!!!1111

            Ну, детский сад же, ну.


            UPD.: забыл ещё сказать:


            Практически все эти "умные телевизоры" используют Linux и умеют эти все ФС. Просто вендоры — ну… вендоры. Короче. "ЦА не поймёт — значит выкидываем".


            Практически все "приставки" (STB и т.п.) — тоже линуксы и то же самое.


            Игровые — либо линуксы либо другие юниксы и то же самое


            1. qw1
              23.05.2017 21:12

              Короче. «ЦА не поймёт — значит выкидываем»
              Тут опять рулят деньги. Не хотят вендоры учить индусов из своей техподдержки, как отвечать на вопросы по ext4 и btrfs. Проще написать сценарии по двум fs и всё.


        1. Andreyika
          22.05.2017 17:11
          +4

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


        1. Zalechi
          23.05.2017 22:50

          «Холивар он такой».
          Вы ребя нашли очередной стимул к разодрать старую рану. Не могу пройти мимо…
          Винда — она такая лапочка…
          Линуx — такой брутальный…

          Винда — лимузин…
          Линуx — внедорожник(джип)…

          Мы уже наверно подошли к пониманию, что сравнивать их можно косвенно. Роскошный лимузин и проходимый жип — оба являются представителями автомобилей. И толку сравнивать эти классы? Давайте обсудим закрытость и открытость этих систем. Бессмысленно! первокурснику понятно, что…

          Итого:
          1) В рейтинге закрытых систем абсолютный лидер и монополист — Винда. Карсочная, гладкая, вылизанная и причёсанная. Эх одна отрисовка шрифтов чего стоит…
          В этой категории iOS даже «краем глаза» не приблизится к мастдаю. Единтственное — это перформанс, тут конечно яблоковцы гуру. Однако iOS — основывается на открытом коде линукса, что у же выбивает его из вышеназванной категории, да и много ещё к чему подкопаться можно. Например, многие кодят в среде iOS, пишут музыку и рисуют фильмы картинки. Вот ток вопрос, в ограниченности предоставленных инструментов полюбому открыт.
          Кого ещё можно затронуть в этой категории?..

          2) В рейтинге открытых систем — есть много игроков, но все они брутальны. В том плане, что это либо для гиков, админов промышлеников и тд/тп, либо это десктопы, которые никак не сравнить с вышеупомянутыми лидерами.

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


          1. geher
            24.05.2017 21:19

            > iOS
            Может быть все же OS X?

            iOS — это планшеты и смарты, которые пока уделывают виндоконкурента по полной программе.

            Впрочем, и в OS X, и в iOS не используется линуксовое ядро. Там, если не путаю, используется своеобразное юниксовое ядро mach64, причем творчески переработанное.
            И да, OS X официально сертифицировано как UNIX система, Linux нет.


            1. Zalechi
              24.05.2017 21:34

              Да, спасибо за поправку. Конечно я имел в виду OS X, ну и во вторых за замечание по поводу принадлежности к UNIX системам.
              Однако хрен редьки не слаще, — If you know what I'm mean… I'm think you do.


      1. saipr
        23.05.2017 10:31

        "Для desktop решений, говоря примитивно, ад. "
        С конца 80-х использовал Unix/Xenix, с середины 90-х — desktop — Linux. И не разу не пожалел. Утверждаю — ад это Microsoft. Просто не тот desktop берете!!!!


        1. anatolymik
          23.05.2017 11:44
          +1

          Попробуйте разработать DLP такое же как под Windows — универсальное. Например для фильтрации устройств которые нужно блокировать. В Linux нет центрального PnP.

          Попробуйте разработать шифрование загрузочного диска (на уже установленной системе, а не во время установки). В Linux, отсутствует множество механизмов для таких задач, например фильтрация. Приходиться делать через remapping устройств. А после нужно переконфигурировать Linux, на новое блочное устройство. И разные версии Linux конфигурируются по разному. Я уже не говорю что нужно парсить текстовый файл с этой целью.

          Я перечислил только то, что мне в голову пришло. На практике примеров значительно больше.


          1. saipr
            23.05.2017 11:52

            1. anatolymik
              23.05.2017 12:01
              +1

              Нет. Я говорил о загрузочном томе. Сделать можно. Но это ад. Хотя бы потому что нужно поддерживать много тонкостей разных версий.

              Во-вторых, это никак не отменяет отсутствие центрального PnP.

              Ну вот еще пример, всем известно что когда Linux адаптировался под многопроцессорные системы, чтобы избежать повреждения данных в контексте ядра, был добавлен так называемый big kernel lock. Который захватывался всякий раз когда user mode вызывал сервисы ядра. Т.е. получается потоки будут простаивать. Windows, изначально разрабатывался как многопроцессорная система. Учитывая все требования которые были необходимы на момент разработки.

              С точки зрения реализации Windows мне импонирует больше. И не только реализации, а также её модель мне нравиться больше. Проще и гибче.


              1. khim
                23.05.2017 13:14
                -1

                Ну вот еще пример
                Отличный пример! Хорошо показывает преимущества Linux и беду Windows.

                всем известно что когда Linux адаптировался под многопроцессорные системы, чтобы избежать повреждения данных в контексте ядра, был добавлен так называемый big kernel lock.
                Угу. Известная вещь. Про него даже статья есть в Wikipedia. Где, кстати, написано, что его извели пять лет назад.

                Windows, изначально разрабатывался как многопроцессорная система. Учитывая все требования которые были необходимы на момент разработки.
                Именно. А если чего было сделано криво изначально (скажем идиотские «устройства» con, nul, aux — да там много чего), то всё — теперь все будут «жрать этот кактус». Вечно (ну или по крайней мере до тех пор, пока Windows не станет историей).

                С точки зрения реализации Windows мне импонирует больше. И не только реализации, а также её модель мне нравиться больше. Проще и гибче.
                Ну да. Хотите создать процесс — передаёте имя и параметры. Это же так сложно! То ли дело в Windows: вызываете функцию с 10 аргументами (из которых многие — структуры) — и порядок. Что может быть проще?

                Ах, ну да, есть проблеммка: среди этой кучи аргументов не нашлось места массиву параметров — командная строка передаётся как единое целое и её нужно разбирать на части. Причём разные команды делают это по разному (hint: в командной строке ведь и кавычки всякие могут быть). Да так, что «упрощённый» _wexec несовместим с «упрощённым» _tmain'ом. Видимо предполагается что «устаревшие» параметры никто использовать не должен, все будут COM пользовать…


                1. anatolymik
                  23.05.2017 13:24
                  -1

                  Вы сейчас все смешали. Не стоит сравнивать целиком модель, с отдельными моментами. Еще раз подчеркну, что мне реализация и модель Windows нравиться больше. Я свое мнение не навязываю.

                  Я явно упомянул что когда Linux адаптировался, ввели BKL. Я знаю что его нет сейчас. Я говорю о подходе как таковом в решении конкретной проблемы. Windows же, изначально в себе не содержал ничего подобного. Если это не так приведите пример.

                  Касательно идиотских устройств они были введены для совместимости с DOS.

                  Касательно 10 аргументов, это ничего не доказывает. Эти 10 аргументов позволяют породить новый процесс гибко.

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


                  1. khim
                    23.05.2017 17:49

                    Не стоит сравнивать целиком модель, с отдельными моментами.
                    В том-то и дело, что это — не «отдельные моменты». Это — принципиальная разница в подходах.

                    Windows же, изначально в себе не содержал ничего подобного. Если это не так приведите пример.
                    Да легко. Windows (не путать с ядром NT!) была изначально рассчитана только и исключительно на однопроцессорные системы. И в ней, когда её адаптировали под многопроцессорные системы — также образовались аналоги BKL. И их тоже изводили — годами. Причём, извели-таки не до конца. Вот, например.

                    Касательно идиотских устройств они были введены для совместимости с DOS.
                    На самом деле для поддержки CP/M, с которой была «слизана» DOS 1.0. Вот только DOS уже давно в Windows x64 не поддерживается, про CP/M уже все забыли, а идиотские устройства — по прежнему с нами.

                    Еще раз подчеркну, я говорил о модели и реализации. Я не говорил об отдельных функциях у которых может быть множество параметров. А это множество, само по себе ничего не доказывает.
                    Не «доказывает», но наводит на неприятные мысли.

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

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

                    Хороший пример (раз уж мы тут о локах говорим): Mutex'ы и Futex'ы. Mutex'ы в Windows есть — однако они неудобные и медленные. Собственно изначально они и в Linux были медленными. А потом — были изобретены Futexы. И в Windows они тоже есть. Но вот только дальнейшая судьба у них — различна. В Linux — стандартные Mutex'ы были переписаны так, чтобы использовать Futex'ы (и теперь их не нужно «создавать» и «освобождать», они быстрые и т.д. и т.п.), а в Windows — Futex'ы были добавлены «сбоку». Mutex'ы — по прежнему медленные и неудобные, но если вам очень нужно (и вы можете позволить себе не поддерживать Windows 7) — тогда да, можете использовать Futex'ы. Напрямую. Создавая поверх них все необходимые надстройки. Удачи!


                    1. anatolymik
                      23.05.2017 17:56
                      +3

                      Коллега, разговор бессмысленный.


                    1. mayorovp
                      23.05.2017 19:25

                      А из-за того, что процессы и нити дорогие — появились разные другие извращения.

                      Это вы сейчас так разработчиков NGPT обозвали?


                    1. MacIn
                      24.05.2017 15:29
                      +1

                      Обычный мьютекс(без имен) — это спин-лок CriticalSection, которой сто лет в обед.


                1. sergey-b
                  23.05.2017 18:56
                  +1

                  Да, API Windows в этой части особенно кривой. Однако и в Linux не все хорошо. Например, в Linux нет удобного буфера обмена. В Windows пользователь может скопировать таблицу из Excel и вставить ее в Paint. А в Linux каждая программа по-своему с буфером работает, поэтому никогда не знаешь, что получится при попытке вставить данные из буфера. Для серверных задач это вообще значения не имеет, а для десктопа это важно. Поэтому даже многим разработчикам удобнее в Windows.


                  1. khim
                    23.05.2017 20:24

                    Например, в Linux нет удобного буфера обмена.
                    Это уже не Linux.

                    Насчёт того, что творится «выше» ядра в GNU/Linux на десктопе — я и сам могу рассказать много ужасов.

                    Недаром именно на desktop'е Linux «сливает» целиком и полностью. Почему это происходит — отдельный вопрос, но во-многом, я думаю — беда в том, что разработка софта для дейсктопа происходит по всем известной CADT модели.

                    Однако в самом ядре — все очень сильно не так.


                    1. sergey-b
                      23.05.2017 20:38
                      +3

                      В этом и есть сила Windows. Владеющая этой ОС корпорация может себе позволить довести до нужного уровня и ядро, и оболочку (ну почти, за исключением консоли), и производителей железа простимулировать. А разработчики ядра Linux никак не могут повлиять на разработчиков десктопов, им остается надеяться и ждать, когда те сами организуются и наведут у себя порядок.


                1. MacIn
                  24.05.2017 15:26
                  +1

                  скажем идиотские «устройства» con, nul, aux — да там много чего

                  Воу-воу-воу, палехче. Это же только симлинки для досовких устройств, compatibility layer, а не нечто имманентное самой системе. Возьмите и удалите, если так прям надо.

                  То ли дело в Windows: вызываете функцию с 10 аргументами (из которых многие — структуры) — и порядок. Что может быть проще?

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


                  1. khim
                    24.05.2017 17:02

                    Так уж сделайте обертку за 5 минут с двумя параметрами, и будет вам счастье.
                    Счастья — не будет. Как я уже сказал: это разница именно в ментальной модели. В Linux функции, как правило, маленькие простые и быстрые («пустой» системный вызов Linux отрабатывает на порядок быстрее, чем Windows). В Windows — они большие, сложные и медленные. Процессы и потоки в Windows тоже тяжёлые и дорогие (откуда и появляются всякие фиберы и прочее извращение). Отого, что вы сделаете обёртку с двумя параметрами системный вызов быстрее работать не станет и памяти на создание потока меньше тратится не будет…


                    1. mayorovp
                      24.05.2017 17:33
                      +1

                      Где можно увидеть бенчмарки?


                      1. khim
                        24.05.2017 18:16

                        Вот, например. Да — статья старая, но она как раз примерно из тех времён, когда архитектура Windows NT разрабатывалась. Разница там в разы, а не на проценты.

                        Собственно это изначально очевидно: это разница между микроядерной архитектурой и монолитным ядром.

                        Со временем Windows NT делалась всё менее «микроядерной» и «цена» системного вызова уменьшалась, но, насколько я знаю, разница всё ещё заметна.


                        1. mayorovp
                          24.05.2017 18:22

                          А ничего, что у Linux тоже монолитное ядро? Кстати, по вашей ссылке линукса в сравнении нет.


                          1. khim
                            24.05.2017 18:30

                            А ничего, что у Linux тоже монолитное ядро?
                            Именно потому — оно и монолитное. Дорогие системные вызовы — ахилесова пята как раз микроядер. Функции с дюжиной аргументов, разве что кофе не заваривающие — метод борьбы в Windows NT…

                            Кстати, по вашей ссылке линукса в сравнении нет.
                            Там есть NetBSD — для оценки «масштабов бедствия» достаточно.


                            1. mayorovp
                              24.05.2017 18:31

                              Нет, недостаточно. Потому что нет информации о "масштабах бедствия" в линуксе.


                        1. sumanai
                          24.05.2017 21:36

                          Собственно это изначально очевидно: это разница между микроядерной архитектурой и монолитным ядром.

                          NT не является микроядерной, впрочем как и чисто монолитной. У NT, как и у Linux, гибридное ядро. Хотя у NT уклон в модульность чуть больше и прослеживается с рождения.


                          1. khim
                            24.05.2017 21:50
                            +2

                            Израчально NT планировалась «красивой», «правильной», «строго микроядерной». И первая версия — почти такая и есть. А потом… потом посмотрели на производительность, схватились за голову и начали срочно ядро «гибридизировать», чтобы производительность была хотя бы на уровне плинтуса, а не под ним.


                            1. sumanai
                              24.05.2017 22:01

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


                              1. qw1
                                24.05.2017 22:12

                                Я думаю, мы ещё придём к микроядерности ради параллелизма. Все эти громоздкие IPC/DPC хорошо себя покажут, когда ядер в процессорах будет под 32-64.

                                Подсистемы ОС будут хорошо висеть на отдельных физических ядрах и обмениваться сообщениями.


                                1. sumanai
                                  24.05.2017 22:15
                                  +1

                                  Я думаю, мы ещё придём к микроядерности ради параллелизма.

                                  Никак не связанные задачи.
                                  Подсистемы ОС будут хорошо висеть на отдельных физических ядрах и обмениваться сообщениями.

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


                                  1. qw1
                                    24.05.2017 22:20
                                    -1

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

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


                                    1. mayorovp
                                      25.05.2017 06:39
                                      +1

                                      Под нагрузккой системы с СУБД в центре помирают исключительно из-за немасшбтабируемой СУБД в центре, а не из-за монолитности.


                                      1. qw1
                                        25.05.2017 07:25

                                        Но разделение большой системы на много маленьких — способ повышения масштабируемости.


                                        1. mayorovp
                                          25.05.2017 09:56
                                          +2

                                          Или понижения, если делить неправильно.


                    1. MacIn
                      24.05.2017 18:05
                      +1

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


                      1. khim
                        24.05.2017 18:26
                        -1

                        Порождение процесса — тяжелая вещь как ни крути.
                        Насколько я знаю в Linux создание нового процесса занимает время меньшее, чем создание новой нити в Windows и не сильно больше чем создание «супердешевого» файбера.

                        Что действительно занимает много времени — так это загрузка нового бинарника. Но, опять-таки в Linux это делать при создании нового процесса необязательно.

                        Занесение всяких доппараметров, навроде хэндла стандартного устройства вывода, проверка на то, что они заполнены или нужны defaultные, ничего не решает.
                        Да ладно вам? Сколько времени занимает заполнение одной структурки на 4K? Это — всё, что нужно в Linux для создания процесса, если при этом таблицы дескрипторов, маппинги виртуальной памяти и прочее — шарятся с родителем. Но даже «полноценных» процессов можно напорождать сотни и тысячи за секунду.


                        1. MacIn
                          24.05.2017 20:01
                          +2

                          Создание нити(fiber) вобще не обсуждаем, это отдельная легковесная некооперативная штука. А если говорить о создании в пространстве родителя, где все шарится, то это будет эквивалентно созданию потока в NT, а не процесса.
                          Иначе получается некорректное сравнение (вы, кстати, выше пеняли кому-то на это — мол, Х решает проблемы, которые есть только в Х).

                          Но даже «полноценных» процессов можно напорождать сотни и тысячи за секунду.

                          Насколько «полноценных», каков этот критерий?

                          Что действительно занимает много времени — так это загрузка нового бинарника. Но, опять-таки в Linux это делать при создании нового процесса необязательно.

                          Ну так и при создании потока в NT этого делать не надо. Создание процесса в NT — это синоним, по сути, для загрузки бинарника. Да, если он уже подгружен, там будет переиспользование при создании 2+ копии и так далее.


                          1. qw1
                            24.05.2017 21:13
                            +1

                            Да, если он уже подгружен, там будет переиспользование при создании 2+ копии и так далее.
                            Уже нет. Проклятый ASLR испортил всё и на винде, и в линуксах.


                            1. khim
                              24.05.2017 21:36

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

                              Это — собственно костыль для отсутствующего forkа.


                              1. qw1
                                24.05.2017 21:41

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

                                Когда же загруженный код отличается от того, что на диске, я не уверен, что он будет шариться. Может, будет, а может и нет. Если будет, кто владелец страницы? Первый загрузивший её процесс? А если он раньше помрёт? Надо искать авторитетные источники.


                                1. sumanai
                                  24.05.2017 21:47

                                  Надо искать авторитетные источники

                                  Я уже упоминал тут книгу «Внутреннее устройство Microsoft Windows», там всё это подробно расписано.
                                  Если кратко, то страницы только для чтения, содержащие код и константы, шарятся очевидно легко, просто один регион памяти отображается на адресное пространство нескольких процессов, заведует всем диспетчер памяти. Страницы, доступные для записи помечаются тегом «Copy on write», и соответственно копируются в личное адресное пространство процесса при первой попытке записи. Это относится к отображаемым файлам и загружаемым библиотекам.


                                  1. qw1
                                    24.05.2017 21:50

                                    Это очевидно. Вопрос в ASLR, где каждая страница кода после загрузки должна быть релоцирована на другой адрес. По вышецитированному должен случиться copy-on-write, но тогда какой тут шаринг?


                                    1. khim
                                      24.05.2017 21:58

                                      Простой. Как я уже сказал: загрузчик в Windows — это часть ядра. И когда он грузит библиотеку — он запоминает куда он её поклал. Если другой процесс запросит ту же библиотеку — ему постараются её отпамировать на тот же адрес. Тут подробности, если интересно.


                                    1. MacIn
                                      26.05.2017 16:44

                                      А какая разница? Маппинг будет другой, но страница-то та же самая.


                                      1. khim
                                        26.05.2017 16:50

                                        В Windos не используется PLT, потому если загрузить код в другое место, то все функции, которые его используют придётся менять.

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

                                        Зато 3-5% можно на некоторых бенчмарках выиграть.


                                        1. MacIn
                                          26.05.2017 19:32

                                          В Windos не используется PLT, потому если загрузить код в другое место, то все функции, которые его используют придётся менять.

                                          Нельзя ли подробнее? По идее, например, external dependencies в виде dll зачастую как раз через PLT делаются — IAT позволяет это.


                                      1. MacIn
                                        26.05.2017 19:30

                                        Ах да, релоки же могут быть.


                                      1. qw1
                                        26.05.2017 20:39

                                        А какая разница?
                                        Маппинг страниц диска в процессы как read-only — тривиальный алгоритм, copy-on-write с переходом страницы в частный рабочий набор — тривиальный алгоритм, отслеживание одинаковых, но изменённых после загрузки страниц — задача сложнее


                                1. khim
                                  24.05.2017 21:52

                                  Если будет, кто владелец страницы? Первый загрузивший её процесс? А если он раньше помрёт?
                                  Загрузчик в Windows — это часть операционной системы. Он — всем и владеет.


                                  1. qw1
                                    24.05.2017 21:59

                                    Очень интересно. Я нашёл пост, в котором описывается процесс маппинга.

                                    Оказывается, copy-on-write не происходит. Загрузчик знает, что DLL в памяти «сдвинут» относительно DLL на диске. И, при подкачке страницы, сам корректирует смещения.

                                    https://blogs.msdn.microsoft.com/oldnewthing/20160413-00/?p=93301

                                    upd. хех, я нагуглил ту же страницу :)


                          1. khim
                            24.05.2017 21:34
                            -1

                            А если говорить о создании в пространстве родителя, где все шарится, то это будет эквивалентно созданию потока в NT, а не процесса.
                            Строго говоря «создать процесс» в Windows вообще нельзя. От этого всякие программы типа Хрома (да и Edge, кстати) очень страдают: нельзя просто создать зиготу, а потом её размножать. Разработчики V8 очень много сил потратили, чтобы сделать бутстрап V8 как можно быстрее… очередная проблема, существующая только на Windows, кстати.

                            вы, кстати, выше пеняли кому-то на это — мол, Х решает проблемы, которые есть только в Х
                            Вы правы. Но желание «размножить» процесс, увы, решает проблемы, которые в Windows тоже нужно как-то решать.

                            Насколько «полноценных», каков этот критерий?
                            Стандарный fork, грубо говоря.

                            Дело в том, что в Linux как раз создание процесса — несколько более затейливо, чем в Windows. Вы можете шарить с родителем всё, вплоть до адресного пространства, а можете — получить приватное видение файловой системы, приватные сетевые устройства и даже приватные PID'ы (и да — ребёнок в этом случае будет иметь приватный виртуальный PID #1 и будет там, «в новом мире», init'ом).

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


                            1. sumanai
                              24.05.2017 21:40
                              +2

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

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


                              1. qw1
                                24.05.2017 21:49
                                +2

                                В каждой подсистеме Linux, от самых первых до последней в Windows 10, реализуют этот пресловутый форк.
                                Потому что в ядре есть RtlCloneUserProcess, на базе которого есть куча примеров реализаций fork в Win32. Другое дело, что нет документированной функции.

                                Но Microsoft не спешит. В ядре NT4 уже были множественные рабочие столы, которые недокументированно использовались всякими сторонними десктоп-менеджерами. А потом на их базе сделали публичное API.


                              1. MacIn
                                26.05.2017 16:58

                                Верно, на уровне Native API.


                            1. MacIn
                              26.05.2017 16:56

                              Строго говоря «создать процесс» в Windows вообще нельзя.

                              Это терминологический спор, давайте оставим его в стороне.

                              Стандарный fork, грубо говоря.

                              Форк — юниксовая тема, как я уже сказал, незачем переносить ее в мир NT и потом обсуждать что что-то, мол, не так. С таким же успехом можно взять, скажем, то, что в других ОС называется нитями (а в NT соответственно потоками) и сравнивать при этом с NTшными fiber'ами.

                              Не совсем. Бинарник загружается в новый процесс, а в тот же самый его загрузить нельзя.

                              Это другой вопрос. Я о том, что создание процесса в мире NT сопряжено с выделение адресного пространства, загрузкой образа и так далее. Нет четкого эквивалента, поэтому сравнивать «тут процессы лучше, тут хуже» нельзя.

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

                              Другой мир — NT — другие решения. Ни хорошо, ни плохо. Fork — способ решения каких-то задач в мире Unix.


              1. grossws
                23.05.2017 13:19

                Ну вот еще пример, всем известно что когда Linux адаптировался под многопроцессорные системы, чтобы избежать повреждения данных в контексте ядра, был добавлен так называемый big kernel lock. Который захватывался всякий раз когда user mode вызывал сервисы ядра. Т.е. получается потоки будут простаивать. Windows, изначально разрабатывался как многопроцессорная система. Учитывая все требования которые были необходимы на момент разработки.

                От BKL окончательно избавились в 2.6.39, см https://kernelnewbies.org/BigKernelLock. Отношение к современному Linux'у это имеет, по большей части, историческое. Да и ранее, BKL автоматически снимался при засыпании потока.


                А какая версия Windows разрабатывался изначально для SMP? 3.1? NT3.5? 95? NT4? Или всё же только 2000?


                1. anatolymik
                  23.05.2017 13:26

                  BKL был только пример. Я знаю что его нет сейчас.

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


                  1. grossws
                    23.05.2017 14:05

                    Раз у вас столько инсайдерской информации, поделитесь сколько процентов из nt4 присутствуют в nt5? Сколько пришлось переписать для поддержки smp? Сколько функций было затронуто?
                    И потом расскажите какая у вас была методология подсчета того, что в linux переписали «половину ядра»?


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


                    1. anatolymik
                      23.05.2017 14:13

                      Касательно информации, она далеко не инсайдерская. Есть исходники nt 4.0, 2000 и есть WRK v1.2(Windows 2003). Можно посмотреть и сравнить. Чем я занимался много. Многие функции в нынешнем Windows сохранились и по сей день еще с nt 4.0.

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

                      Дополню, если Microsoft дорабатывает свой продукт, костыли вроде BLK она не делает. Она делает полноценную реализацию. Еще раз, я говорил о подходе в развитие продукта.

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


                      1. khim
                        23.05.2017 18:07
                        -1

                        Многие функции в нынешнем Windows сохранились и по сей день еще с nt 4.0.
                        Собственно в этом-то и беда. Требования изменились, железо — изменилось тоже, но все костыли, забитые когда-то ради поддержки давно почивших в бозе платфом — живут и здравствуют.

                        Еще раз, я говорил о подходе в развитие продукта.
                        Дык и мы о том же! В случае с Linux — люди делают ошибки и их справляют. В случае с Microsoft — «она делает полноценную реализацию», но если там что-то не так — то… «мыши кололись, плакали, но продолжали жрать кактус». Обход когда-то забитых «костылей» — становится частью техзадания на новые фичи!


                        1. anatolymik
                          23.05.2017 18:11
                          +2

                          Я извиняюсь, а почему если функция существует 20 лет то это обязательно плохо? Может разработчики угадали на 20 лет вперед? Если все необходимые требования выполняются и все необходимые задачи решаются?


                          1. khim
                            23.05.2017 18:21

                            Если «все необходимые задачи решаются» — тогда да. А вот если мне обьясняют, что мне сегодня, сейчас, нужно вставлять в мой код кучу свеженьких ксотыликов для того, чтобы «объехать» костыли, которые были забиты в систему в момент её проектирования для железа, которое уже почти 20 лет не поддерживается… то возникает желание кого-нибудь убить.

                            Просто вы, как я понял, в основном общаетесь с одной системой — и вам она нравится. А я несколько лет назад — писал низкоуровневый код, который должен был работать на трёх системах (Linux, MacOS, Windows). И подавляющее большинство несуразностей и кривостей — происходили из-за того, что нам приходилось поддерживать Windows.

                            Слава богу, что мы от этой поддержки отказались, так что сейчас я с этим ужасом не сталкиваюсь, так что как устроена жизнь в Windows 10 — не знаю. Но не думаю что там вдруг всё радикально изменилось и «сакральные костыли» куда-то исчезли.


                            1. anatolymik
                              23.05.2017 18:30
                              +2

                              Приведите пример костылей. Приведите пример проблем поддержки windows.


                              P.S. В настоящий момент я системный программист под linux.


                              1. khim
                                23.05.2017 19:12
                                +2

                                Приведите пример костылей.
                                Один пример я уже привёл выше: из-за костыля, который в Windows забили ради поддержки DEC Alpha нам пришлось городить целую подсистему эмуляции 4K-страниц (которые используют все другие системы и которые, собственно, реализует процессор). Стоит ли говорить о том, что ни одну версию Windows, которая бы вышла в годы, когда DEC Alpha была актуальна мы не поддерживали никогда?

                                Выпиливание NtSetLdtEntries в Windows x64 было другим «приятным» сюрпризом, которое потребовало от нас не одного человеко-года.

                                Ну и всякие «мелочи» (скажем нам так и не удалось придумать способ «захватить» себе участок памяти с базой равной нулю… да и вообще — аллоцировать гигабайт памяти на 32-битной Windows это те ещё пляски с бубном).

                                Это то, что вспомнилось через 5 лет. Но помню что количество костылей, которые содержали замечания «мы делаем X, потому что Windows не позволяет сделать Y» — зашкаливало, MacOS — дала пару или тройку подобных замечаний, а Linux — я не помню такого вовсе…


                                1. anatolymik
                                  23.05.2017 19:22
                                  -1

                                  Просто из спортивного интереса, почему вам было принципиально распределение виртуального пространства с гранулярностью 4к?

                                  На счет NtSetLdtEntries, я так понимаю в Linux, API не меняется, функции не режут, интерфейсы функций тоже не меняются.

                                  Касательно мелочей, если я Вас правильно понял конечно, нулевой адрес в Windows зарезервирован.


                                  1. khim
                                    23.05.2017 19:41

                                    Просто из спортивного интереса, почему вам было принципиально распределение виртуального пространства с гранулярностью 4к?
                                    Потому что бинарники, которые нам нужно было запускать в sandbox'е не были «родом из Windows» и рассчитывали на то, что, в общем, предоставляет железка, а не на то, что кудесники из Microsoft придумали.

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

                                    А вот DOSEMU — уже нет. Но тут, извините, проблема в процессоре: поддержки 16-битных сегментов в Long Mode нету.


                                    1. anatolymik
                                      23.05.2017 19:44

                                      64 прекрасно делиться на 4, что не так?


                                      1. khim
                                        23.05.2017 19:59

                                        Вот если бы 4 делилось на 64 — то всё было бы чудесно.

                                        А так… если у нас программа хочет аллоцировать 4K в режиме read-write, а следующие — в режиме read-only (обычный guard page), то под Windows — у нас проблемы.

                                        Пришлось наворотить целый «огород», который пытается программы, по мере возможности, обмануть, и убедить их что всё работает как положено, а не как в Windows.


                                        1. qw1
                                          23.05.2017 21:28
                                          +4

                                          если у нас программа хочет аллоцировать 4K в режиме read-write, а следующие — в режиме read-only (обычный guard page), то под Windows — у нас проблемы.
                                          VirtualProtect работает на уровне страниц, и как я помню, всегда так работала. Значит, кто-то не осилил документацию.

                                          Вот рабочий пример кода, ставящий разную защиту на соседние страницы.
                                          Скрытый текст
                                          #include <windows.h>
                                          #include <stdio.h>
                                          
                                          int main()
                                          {
                                                  DWORD prev;
                                                  char* ptr = (char*)VirtualAlloc(nullptr, 0x10000, MEM_COMMIT, PAGE_READWRITE);
                                                  BOOL r1 = VirtualProtect(ptr, 0x1000, PAGE_READWRITE, &prev);
                                                  DWORD err1 = GetLastError();
                                                  BOOL r2 = VirtualProtect(ptr+0x1000, 0x1000, PAGE_READONLY, &prev);
                                                  DWORD err2 = GetLastError();
                                                  printf("r1=%d/%d, r2=%d/%d, byte1=%d, byte2=%d\n", r1, err1, r2, err2, *ptr, ptr[0x1000]);
                                                  printf("write byte1 - "); *ptr = 1; printf("ok\n");
                                                  printf("write byte2 - "); ptr[0x1000] = 1; printf("ok\n");
                                                  return 0;
                                          }


                                          1. anatolymik
                                            23.05.2017 21:47

                                            Вы меня опередили)


                                  1. qw1
                                    23.05.2017 21:06

                                    А разве в linux userspace нулевой адрес не зарезервирован, чтобы ловить segfault при разыменовывании nullptr?


                                    1. khim
                                      23.05.2017 21:15

                                      Зарезервирован нулевой адрес, но можно захватить себе кусок памяти, начиная с адреса 64K. Нас это устроило.

                                      Хотя да, если бы у бинарников, которые нам нужно было обрабатывать, не было там «дыры» в 64K, то в Linux у нас тоже была бы проблема.


                                      1. qw1
                                        23.05.2017 21:34
                                        +3

                                        Учитывая такие странные запросы, можно было бы попробовать не использовать Win32, а стартовать процесс в native api, плюс процесс поддержки — в Win32 для взаимодействия с юзеом. Хотя документации, как делать exe для native, почти не было, кроме статей Руссиновича.

                                        Тут тебе голое адресное пространство — лепи, что хочешь. Хоть убунту, подсистему которой сделали в десятке.


                                1. anatolymik
                                  23.05.2017 19:29

                                  Кстати в функции NtSetLdtEntries на х64 нет смысла из-за аппаратных особенностей процессора. Так что не к Microsoft претензии.


                                  1. khim
                                    23.05.2017 19:44

                                    Кстати в функции NtSetLdtEntries на х64 нет смысла из-за аппаратных особенностей процессора.
                                    Это кто ж вам такую чушь сказал? А почему аналоги на MacOS и Linux работают?

                                    Так что не к Microsoft претензии.
                                    А к кому? Я ж не претендую на NtSetLdtEntries в 64-битных программах. Зачем было из 32-битных из изводить?

                                    Ах, ну да: отряд равняется на отстающего — если в 64-битных программах нет сегментов, то уже и в 32-битных мы их поддерживать не будем.

                                    Отличный подход, чёрт побери.


                                    1. anatolymik
                                      23.05.2017 19:46

                                      Чушь говорит даташит на процессор. Для х64 приложений в нем нет смысла. Функционал ломается.


                                      На счет 32х битных не знаю.


                                      В mac и linux для х64 бинаря?


                                      1. khim
                                        23.05.2017 20:02

                                        В mac и linux для х64 бинаря?
                                        Нет, конечно. У нас и не было бы никаких x64-бинарей, если бы NtSetLdtEntries работал бы.

                                        Для х64 приложений в нем нет смысла.
                                        Правильно. А раз в x64 приложениях в нём нет смысла, то давайте теперь и из 32-битных NtSetLdtEntries выкорчуем.

                                        Решение — вполне в духе той самой 64K-гранулярности, когда из-за поддержки DEC Alpha введённой 1993м в прекращённой в 2003м у нас костыли в 2012м.


                                        1. red75prim
                                          23.05.2017 22:41
                                          +4

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

                                          Правильно. А раз в x64 приложениях в нём нет смысла, то давайте теперь и из 32-битных NtSetLdtEntries выкорчуем.

                                          Костыли, которые лично вам не нужны, живут — плохо. Недокументированную функцию, которая лично вам нужна, убрали — плохо.


                                          Мнение ясно. Но, видимо, инженерам Windows приходится иметь дело не только с вами.


                                          1. khim
                                            24.05.2017 02:23
                                            -2

                                            Костыли, которые лично вам не нужны, живут — плохо. Недокументированную функцию, которая лично вам нужна, убрали — плохо.
                                            Не совсем так.

                                            «Железо» что-то делать умеет, а Windows нет == плохо.

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

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

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

                                            Единственный рынок (ну или два смежных рынка — тут как считать) где она доминирует — это рынки, которые достались ей в наследство от «ужасной», «кошмарной», «неуклюжей» классической Windows: десктоп и сервера малого бизнеса. Нигде, где у людей не было вложены деньги в Windows-софт до появления Windows NT успеха достичь не удалось.

                                            Подумайте над этим.


                                            1. DrPass
                                              24.05.2017 03:25
                                              +2

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

                                              Да как сказать. Windows NT во второй половине 1990-х практически уничтожила рынок Unix-серверов и рабочих станций. По сути, от них остался только самый топовый сегмент. Неудачными можно считать попытки наезда на ARM-архитектуру и все девайсы, которые работают под ней, сейчас это действительно вотчина Linux. Но и то, это по причине каких-то архитектурных проблем системы, а по причине стратегических просчётов руководства Майкрософт. Во времена Windows CE все шансы закрепиться там у них были.
                                              Людям-то в массе своей вообще безразлично, какая там ОС стоит в их телевизоре (по факту, даже рядовые пользователи компьютера не слишком привередливые в этом плане, пользуются тем, что им поставили). Это больше работа с вендорами, да с поставщиками софта.


                                            1. MacIn
                                              24.05.2017 15:34
                                              +1

                                              МС сильны в поддержке клиентов и изменениях «как бы не навредить legacy». И слава богу. Если вы используете недокументированную функцию, то вы ССЗБ.


                                            1. Zalechi
                                              24.05.2017 15:54

                                              1. khim
                                                24.05.2017 17:08

                                                Может я неверно истолковал Вас, но, если я не ошибаюсь, данный ответ я пишу с Windows NT 10(NT 6.4).
                                                И? Чего это доказывает? Многие мои знакомые со скрипом, стонами и болью переползли с Windows 9X на операционки на базе Windows NT. Многие, впрочем, так и застряли на Windows XP.

                                                Но этот рынок не был «завоёван». Он был передан уже готовым. В наследство вот от тех самых людей, которые, как нам тут рассказывают ничего не понимали в написании операционок и наделали кучу проблем в «классической» Windows.


                                                1. Am0ralist
                                                  24.05.2017 18:08
                                                  +1

                                                  Но этот рынок не был «завоёван». Он был передан уже готовым.

                                                  Да-да, продажи компьютеров начали стагнировать со времен 9х, угу. За это время количество персоналок не только не выросло где-нибудь на порядок, но даже наоборот — сократилось! И это всё было, видимо, на фоне с невероятным противостоянием против более прогрессивной и удобной Linux для декстопов. Я прям так и вижу эпическую картину.

                                                  С учетом, что в 2000 году компьютеров примерно 350 млн было, а 1 млрд. мы перевалили еще в 2008 году, то до сих пор монопольное положение на рынке декстопов именно за МСом намекает, что успех был достигнут определенно не за счет 9х винды, а именно за счет удачности NT, в том числе за счет XP. Поэтому ваше стремление переиначить историю не понятно.
                                                  В противном случае линукс бы быстро научился повторять 9х и отхапал бы на текущий момент намного больший кусок.


                                                  1. khim
                                                    24.05.2017 19:01
                                                    -1

                                                    В противном случае линукс бы быстро научился повторять 9х и отхапал бы на текущий момент намного больший кусок.
                                                    Вы это серьёзно? Мы вообще — на Хабре или где? Независимому разработчику заставить работать программы для Windows под другой OS не сложно, а очень сложно (вот с этими ребятами можете на досуге обсудить).

                                                    А Windows 9X выпускалась специально как средство запуска «старых программ для Windows 3.1x» и «новых программ для Cairo». А потом — разрабочиков начали просто гнобить если они отказывались поддерживать Windows NT 4 (а потом Windows 2000).

                                                    Поэтому ваше стремление переиначить историю не понятно.
                                                    Это вы стремитесь изобрести какую-то альтернативную историю где от Windows 9X люди вдруг резко отказываются и «стройными рядами» переходят на Windows NT. В реальности же — пользователи тянули до последнего и Microsoft даже пришлось выпустить ещё одну «внеочередную версию» (после того как в 1998м Билл Гейтс заявил что после Windows 98 всем придётся жрать кактус перейти на линейку Windows NT). Вот как пользователи хотели перейти на «суперудачную NT».


                                                    1. Am0ralist
                                                      24.05.2017 19:13

                                                      Я был как раз тот, кто снес предустановленную пиратскую хп и поставил честную пиратскую 98 после покупки компа. Потому что я ее знал и мне не нравилось переучивать под новый интерфейс.
                                                      Через полгода я снес 98, поставил XP в классическом виде и перестал страдать дурью (в том числе вида переустановки винды по очередному глюку).
                                                      Ретроградство — оно такое.

                                                      Что опять же никак не доказывает ваши слова, потому что по выходу любой следующей версии винды это повторялось снова и снова. Ну, кроме 7-ки, которая не сильно от висты отличалась, а к этому моменту к той уже все привыкли. Зато вот что с выходом висты (очень стабильная ОС, я нарадоваться не мог на работе на те пару ноутов, которые с ней были куплены — ибо проблем на них не было совершенно, в отличие от ноутов с XP), что 8-ки (а 8.1 по мне так вообще лучшая на текущий момент), что 10-ки (хотя тут больше факт навязывания всех возмутил).
                                                      Поэтому приводить как довод то, что на новую версию пользователи переходили со скрипом и воем и этим доказать несостоятельность NT, хотя так было всегда — вот это и есть альтернативное толкование истории.


                                                      1. khim
                                                        24.05.2017 19:46
                                                        -1

                                                        Поэтому приводить как довод то, что на новую версию пользователи переходили со скрипом и воем и этим доказать несостоятельность NT, хотя так было всегда
                                                        В том-то и дело, так не было «всегда»: Windows 3.0 просто сметалась с прилавков. На Windows 3.1 народ зачастую переходил до её выхода (да-да, работали на бете). То есть как раз «классическая» Windows — честно отвоевала своё место под солнцем (притом что в момент выхода Windows 3.0 реклама во всех журналах расхваливала OS/2).

                                                        А вот уже Windows NT — извините, но ни одного рынка она так и не завоевала. Там выше рассказы про то, что она убила рынок рабочих станций на UNIX… Вот нифига подобного! Попытка — была. Но ни Windows под Alpha, ни Windows для MIPS — успеха не имела.

                                                        Рынок рабочих станций убил Intel, а не Windows.


                                                        1. sumanai
                                                          24.05.2017 21:42

                                                          На Windows 3.1 народ зачастую переходил до её выхода (да-да, работали на бете).

                                                          Как и на бете Windows 7, как и на 10, как и сейчас многие сидят на инсайдерских сборках, которые по суди равны unstable убунты, или как там самая новая ветка зовётся.


                                        1. anatolymik
                                          23.05.2017 22:48
                                          +5

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

                                          Случай что вы описали, меня наводит на следующие мысли. Вы портировали legacy код с другой платформы. При этом, этот код был написан без учета особенностей других ОС. Не потому что разработчики о чем-то не подумали, а потому что мир был тогда другим. Хотя нередко на своей практике я сталкивался с тем, когда разработчики намерено себе ставят палки в колеса. Я лично видел как код написанный для х32, не заводился на х64, только потому что все указатели кастились к DWORD, а не ULONG_PTR. Я также слышал, брань разработчиков, которые писали этот код и которые его в попыхах исправляли. Нужно было писать это
                                          на диктофон, можно было бы сейчас нарезать неплохих мемов. Ругаться на платформу на которой что-то иначе, тоже самое что ругаться на то что солнце светит. Это объективная реальность. Мне не раз приходилось
                                          переделывать свои работы, некоторые я переделывал 8 раз. Ибо, на каждом витке, я получал новую информацию, и новый опыт. Это нормально. Если бы каждый сокрушался на плохую платформу, я бы не добился нормальных результатов своей деятельности. Я извиняюсь, но люди которые занимаются подобной критикой, никогда не доводили ни одного дела до конца нормально. Это в своем роде, косвенный признак.

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

                                          Т.к. многие задачи решаются намного проще чем в Linux. Например, наличие центрального PnP. Банально, но это позволяет мне отслеживать любое устройство и его принадлежность в дереве устройств. Это например
                                          позволит сделать универсальный DLP. Также центральный PnP, позволяет более эффективно управлять аппаратными ресурсами, пространство памяти, простанство ввода-вывода и т.д. Т.к. за это отвечает центральная подсистема, решения об управлении этими ресурсами будут куда эффективнее чем в случае, когда этих подсистем множество,
                                          работу которых придется согласовывать. А это в своем роде лишний программный слой. Иначе говоря, костыль.
                                          Наличие фильтрации, позволяет вносить новый функционал без доработки существующих драйверов, сторонних разработчиков или разработчиков Microsoft. По мне так, разработчки Windows и делали ставки именно на это, чтобы весь продукт можно было мастабировать на столько просто, на сколько это возможно. При этом не призывая на помощь другие команды. А фильтрация совместно с центральным PnP, позволяет более грамотно управлять тем же самым электропитанием, например. Т.к. все
                                          мы знаем, что некоторые платформы делаются так, что несколько независимых устройств разных шин, могут запитываться одним источником. В случае с Windows, система навесит дополнительных фильтров на соответствующие устройства, и тем самым подсистема питания, центральная, будет знать, кто и от кого питается. При этом ей не нужно понимать на какой шине располагается устройство. И в сооветствии с этим она будет принимать решение, выключать источник, или нет.

                                          Выгружаемая память в ядре, что позволяет выделять память в пространстве ядра большого объема. А говоря о менеджере памяти,
                                          в Linux он сильно проще. Об этом хотябы говорит swap раздел, когда на Windows это файл. Есстественно работать с блочным устройством сильно проще, чем с файлом. Кстати не так давно, интереса ради установил truecrypt под ubuntu, и зашифровал swap. Результат убитый Linux. Сначала все повисло, после hard reset, система отказывалась грузиться. Сразу скажу, я знаю, что теперь Linux поддерживает и файлы. Но Windows это делал как минимум с nt 4.0. Такой более сложный менеджер памяти, позволяет более эффективно распределять имеющуюся физическую память. И безусловно это усложняет API ядра. Т.к. нам теперь надо какой пул мы хотим получить. Это к вопросу о 10 лишних аргументов.

                                          Я могу говорить об этом много. Безусловно, такая реализация Windows имеет и недостатки. Например, из-за того что менеджер памяти Windows
                                          сложнее, то на не сильных машинах, основной ресурс будет съедать именно он. Под несильными я имею в виду машины до 32мб
                                          памяти, или вроде того. Windows плохо портируется на другие платформы, например потому что в ядре нередко ловяться исключения,
                                          в случае с процессором который не умеет кидать исключений, результат окажеться печальным. Более того, все вышеописанные подсистемы
                                          требуют ресурсы, а на платформах где они не нужны, он будут просто выедать их в холостую. И поскольку реализация Linux проще, то и
                                          переносится он куда веселее. Лично я снимаю шляпу перед тем количеством платформ, которые он поддерживает.

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

                                          Ну так, как-то.


                                          1. khim
                                            24.05.2017 01:59

                                            Сразу скажу, я знаю, что теперь Linux поддерживает и файлы. Но Windows это делал как минимум с nt 4.0.
                                            Ох какое супермегадостижение. А когда там появится режим со swap-файлом на соседнем компьютере? Который я использовал на бездисковых рабочих станциях под Linux 20 лет назад? Излишне говорить что и swap-файлы Linux поддерживал уже тогда. В версии 1.1 — точно работало, я этим регулярно пользовался.

                                            Swap-раздел обычно используется не потому, что swap-файлы Linux «не умеет», а потому что так быстрее и надёжнее.

                                            Выгружаемая память в ядре, что позволяет выделять память в пространстве ядра большого объема.
                                            И тем самым уносит требования к «железу» в небеса (что и погубило, собственно, Windows на смартфонах). В ядре Windows невыгружаемая часть — тоже есть и, как правило, она занимает больше чем в Linux — вся память, которую ядро требует в принципе на том же железе.

                                            И это — типичная ситуация с восторгами по Windows. То есть обычно разговор выглядит так:
                                            — Вот, в Windows есть классная фишка X, а в Linux — нет!
                                            — Круто, но зачем она нужна?
                                            — А вот потому что это позволяет решить проблему Y и Z!
                                            — Но проблем Y и Z в Linux нету — зачем мне там X?

                                            Иногда, тогда, когда какие-то вещи в Windows сделаны разумнее, они перекрёстках в Linux. Но так бывает редко. Гораздо чаще — это «крутое» решение проблем, которых, по большому счёту можно было просто избежать.

                                            Когда вы будете портировать ассемблерный код ARM под платформу Intel, не надо жаловаться на то что процессор Intel не интерпритирует инструкций процессора ARM.
                                            С какого перепугу? Процессор — это процессор. Если он чего-то не умеет, то он таки этого не умеет. Тут уж ничего не сделаешь. А вот когда процессор чего-то умеет, то, извините, я хочу чтобы OS этого умела тоже. А не как в Windows, где «тут умеем, тут не умеем, а тут — только для своих».

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

                                            Интересно, что в этом смысле Windows-мир и Linux-мир являются полными противоположностями: низкоуровневый API в Windows просто ужасен и когда с ним приходится сталкиваться — хочется кого-нибудь убить. Но «сверху» над ним сделаны обёртки, которыми пользоваться, в общем, довольно приятно (за исключением тех случаев когда «уши» от того ужаса, который находится «под капотом» выглядывают). В Linux, наоборот, «внизу» всё весьма изящно и красиво. А вот сверху над этим — гора разных поделок, над дизайном которых, похоже никто особо не думал. Типа тех же init-скриптов, которые отказались запускать вам систему с зашифрованным swap-разделом (интересно почему: так-то для работы Linux'а ни swap-раздел, ни swap-файл не нужны в принципе).


                                            1. daggert
                                              24.05.2017 10:28

                                              > И тем самым уносит требования к «железу» в небеса (что и погубило, собственно, Windows на смартфонах).

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

                                              > И тем самым уносит требования к «железу» в небеса (что и погубило, собственно, Windows на смартфонах).

                                              Берите еще выше — тонна оболочек, уже сравнимая с виндовыми фремворками, когда одно приложение на Qt, второе на vala, а нужное вообще из сырцов на питоне собираем… Лично я по этому и не стал разрабатывать под линукс, если в винде я могу сделать нативное приложение для актуальной платформы, используя последний фреймворк (последнее приложение было на телефон и стационарник в одном), то на линуксе приложение на gtk при переносе между разными платформами выглядело… не очень. Пришлось писать в вебе, чтоб не изучать плюсом qt, vala и черт еще пойми сколько разных вещей.


                                            1. Am0ralist
                                              24.05.2017 10:42

                                              И тем самым уносит требования к «железу» в небеса (что и погубило, собственно, Windows на смартфонах).

                                              Вы сейчас о чем? О том, что WinPhone с малым количеством оперативки работали плавнее и лучше андроидов в аналогичном ценовом сегменте?
                                              Или еще о версии 6,5 какой-нибудь? Чью популярность сложно игнорировать.
                                              И это я говорю, как непосредственно имевший дешевый и дорогой винфон 8 серии, а так же общавшийся с андроидами дешевых конфигураций (при сравнимой и даже большей цене за них при сравнении с мои дешевым за 3750 р), которые были убоги чуть более, чем полностью.
                                              Или когда удобно, то в аргументах слышится, что андроид — это линукс, а когда нет — это игнорируется, как и жадность андроида до ресурсов, приведшего к появлению телефонов с овердофига количеством ядер и оперативки, которые частенько превышают подобные числа у компьютеров людей?
                                              Но во втором случае можно заметить, что чистый полноценный линукс на телефонах так вообще не полетел от слова совсем (помянем убунтуфоны и прочие мииго). Так что ваш наезд в эту сторону не то что не в тему, а вообще демонстрирует не лучшее понимание этой самой темой.
                                              PS. Пока отвечал — успели уже оставить аналогичный коммент…


                                              1. khim
                                                24.05.2017 18:05
                                                -1

                                                О том, что WinPhone с малым количеством оперативки работали плавнее и лучше андроидов в аналогичном ценовом сегменте?
                                                Нука-нука. С этого момента поподробнее. WinPhone со 192MiB оперативки в 2008 или, так и быть, в 2009м году — в студию. Напомимаю что Android начался именно с такого.

                                                Или еще о версии 6,5 какой-нибудь? Чью популярность сложно игнорировать.
                                                Эта версия не исползовала «расчудесное» ядро Windows NT, не поддерживала многозадачность и потому потребовалось, в лучших традициях Microsoft, «переписать всё с нуля». Вот только монополии на рынке не было и пока Microsoft этим занимался — всё было кончено.

                                                Или когда удобно, то в аргументах слышится, что андроид — это линукс, а когда нет — это игнорируется, как и жадность андроида до ресурсов, приведшего к появлению телефонов с овердофига количеством ядер и оперативки, которые частенько превышают подобные числа у компьютеров людей?
                                                Вы тут ставите телегу впереди лошади. «Овердофига количеством ядер и оперативки» на телефоне появились вследствие Закона Мура. А Android — начал с системы, которая ставилась на телефон с 256MiB флеша и 192MiB оперативки и постепенно был переписан, чтобы использовать фичи, доступные в современных SOCах.

                                                Windows NT же со своим подходом «мы всё делаем только по-настоящему, на мелочи не размениваемся» к шапочному разбору в результате банально опоздала. В 2012м году, когда Windows Phone 8 появилась уже всем всё было ясно…

                                                Но во втором случае можно заметить, что чистый полноценный линукс на телефонах так вообще не полетел от слова совсем (помянем убунтуфоны и прочие мииго).
                                                Мииго был убит засланцем из Майкрософт. А Ubuntu — появился гораздо позже Андроида и на вопрос «а что это такое было» ответить так и не смог. Но это мелочи: мы тут вроде ядро обсуждаем? Так вот Linux-ядро — отлично работало и на первых Android'ах с меньше, чем 256MiB оперативки (Windows Phone изначально требовалось 512MiB) и на современных телефонах с гигабайтами оперативки и полудюжиной ядер — тоже чувствует себя отлично. А Android… Android занимал «столько, сколько нужно». Windows Phone же вначале не мог использовать многоядерные системы из-за своего убого Windows CE ядра, а потом, когда телефонные SOC'и доросли до поддержки «правильного» ядра Windows NT… уже было поздно.

                                                Вот чем кончаются попытки всё и всегда делать «правильно» и «не экономить на мелочах».


                                                1. daggert
                                                  24.05.2017 18:19
                                                  +1

                                                  > Нука-нука. С этого момента поподробнее. WinPhone со 192MiB оперативки в 2008 или, так и быть, в 2009м году — в студию. Напомимаю что Android начался именно с такого.

                                                  В 2008 вполне себе здравствовал Windows Mobile, отлично работающий на 64 мегабайтах оперативки и первый андроид, который пытался повторить iOS, побеждал только ценой.

                                                  Теперь перенесемся в 2017 год — мой телефон Lumia 650 с 1 гигабайтом памяти и последней ОС Windows Mobile, который не тормозит и не глючит. Сравните с последней версией Android?

                                                  > Мииго был убит засланцем из Майкрософт.

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


                                                  1. khim
                                                    24.05.2017 19:09

                                                    Теперь перенесемся в 2017 год — мой телефон Lumia 650 с 1 гигабайтом памяти и последней ОС Windows Mobile, который не тормозит и не глючит. Сравните с последней версией Android?
                                                    Да легко: мой Google Pixel с 4GiB RAM тоже не тормозит.

                                                    В 2008 вполне себе здравствовал Windows Mobile, отлично работающий на 64 мегабайтах оперативки
                                                    Вот только там не было чудесного «правильного» ядра Windows NT, о котором мы тут говорим.

                                                    То, что было у Microsoft в 2008м и то, что есть у него в 2017 не «перетекают» из одного в другое — вот в чём беда! На «неправильном» ядре Windows CE и на «правильном» ядре Windows NT работают разные программы, а «гениальная» идея устроить переход через «чистый» C# — сделала всё только хуже!


                                                    1. Am0ralist
                                                      24.05.2017 19:14

                                                      Да легко: мой Google Pixel с 4GiB RAM тоже не тормозит.

                                                      ЧТД.
                                                      мой телефон Lumia 650 с 1 гигабайтом памяти

                                                      Но вас это не смущает, мы видим.


                                                      1. khim
                                                        24.05.2017 20:01

                                                        А почему это должно меня смущать? 4GiB памяти — нормальный обьём для 2017 года.

                                                        Тут же вполне себе зеркально отразилась история самой Windows!

                                                        В 1992 году IBM выпустила OS/2 2.0, а Microsoft — Windows 3.1. Но OS/2 2.0 требовала 8MiB оперативы (которых мало у кого было), а Windows 3.1 — довольствовалась 2MiB, а на 4MiB — и вообще «летала». Народ облизнулся на OS/2 и закупил Windows 3.1 в диких количествах.

                                                        IBM «учла урок». В 1994м году вышла OS2/ Wart 3.0, которая вполне прилично себя вела на 4MiB. А Microsoft выпустил в 1995м году Windows 95, которая для приличной скорости работы требовала 8MiB. Но к этому моменту 8MiB — уже никого не пугали и IBM снова оказалась в тёмном месте ибо Windows 95 отлично работала с программами для Windows 3.1! А те у кого дерег на 8MiB не было остались просто на Windows 3.1…

                                                        То же самое и здесь: важно не какая операционка лучше работает с каким-то определённым количеством опереативки. Важно какая операционка лучше работает с тем железом, которое есть на рынке! А вот это — определяется законом Мура…


                                                    1. daggert
                                                      24.05.2017 23:01
                                                      +1

                                                      > Да легко: мой Google Pixel с 4GiB RAM тоже не тормозит.

                                                      Прикрывать плохую реализацию многозадачности повышением характеристик… Надеюсь вы не пишите программы которыми я пользуюсь.

                                                      >Вот только там не было чудесного «правильного» ядра Windows NT, о котором мы тут говорим.

                                                      Я вам отвечал сугубо на ваш пассаж про прожерливость мобильной операционки, а не о правильности современного WP ядра.

                                                      > То, что было у Microsoft в 2008м и то, что есть у него в 2017 не «перетекают» из одного в другое — вот в чём беда!

                                                      Не буду спорить, но я не вижу в этом беды. Иногда надо избавляться от легаси.


                                                      1. khim
                                                        25.05.2017 00:23

                                                        Не буду спорить, но я не вижу в этом беды. Иногда надо избавляться от легаси.
                                                        При наличии живых конкурентов это обычно обозначает избавление от соответствующего подразделения. Кто у нас там решил таким изысканным образом умереть? Nokia, Palm, RIM. Ах, да, ещё Microsoft. Или кого-то забыл?

                                                        Прикрывать плохую реализацию многозадачности повышением характеристик…
                                                        Причём тут «плохая реализация многозадачности»? Это просто типичные характеристики телефона 2017 года. Вы же не жалуетесь, что Windows 10 на машинках с 64MiB памяти нормально не работает? С когда-то это был огромный, мало кому доступный, объём памяти.

                                                        Понимаете — с точки зрения современного инженера какой-нибудь каменный мост, который стоит 1000 лет — это провал. Потому что это значит, что в его строительство было вбухано в 10 (если не 100 раз) больше ресурсов, чем это было реально нужно для решения поставленной задачи.

                                                        То же самое и с операционками: если они не работают на имеющемся железе — плохо, вы никому их не продаете, но если они могут работать на 1/10 того, что есть — то это тоже не слишком хорошо: вы могли бы ресурсы, которые были затрачены на «выжимание из программы всех соков» потратить на что-либо другое.

                                                        В прошлом веке Microsoft и его пользователи это очень хорошо понимали. Про историю с OS/2 я уже писал, но ведь и Excel (требовавший в 2-3 больше ресврсов, чем Lotus 1-2-3) и WinWord (занявший нишу WordPerfect за те годы, когда его разработчики пытались написать версию для Windows на ассемблере) и многое другое — было сделано по этому шаблону. А вот в XXI века их то ли гордыня обуяла, то ли память отшибло — и они ринулись «махать кулаками после драки». Ну вот скажите на милость: зачем было тратить время и силы на поддержку устройств с 256MiB памяти в то время как в работе уже была следующая, несовместимая версия, ставившая на этих железках крест? Это же в чистом виде повторение ошибок OS/2!

                                                        Я вам отвечал сугубо на ваш пассаж про прожерливость мобильной операционки, а не о правильности современного WP ядра.
                                                        Но ведь это связанные вещи! Когда смартфоны располагали только лишь 128MIB-192MiB памяти это самое «правильное» ядро не позволило выпустить то, что можно было продать. И тот факт, что за счёт оптимизации UI на «подросших» смартфонах через 3-4 года вся конструкция стала требовать меньше памяти, чем платформа конкурентов, тратящая появившиеся ресурсы на всякие вау-эффекты — он же уже никого спасти не мог!

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


                                                        1. daggert
                                                          25.05.2017 01:15

                                                          > При наличии живых конкурентов это обычно обозначает избавление от соответствующего подразделения. Кто у нас там решил таким изысканным образом умереть? Nokia, Palm, RIM. Ах, да, ещё Microsoft. Или кого-то забыл?

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

                                                          > Причём тут «плохая реализация многозадачности»? Это просто типичные характеристики телефона 2017 года. Вы же не жалуетесь, что Windows 10 на машинках с 64MiB памяти нормально не работает? С когда-то это был огромный, мало кому доступный, объём памяти.

                                                          Windows 10 работает успешно на 35м чипсете и четырех гигабайтах памяти, на компьютере купленном почти 10 лет назад, по этому не жалуюсь (: Правда в телефонах это иначе, однако мой HTC Radar успешно обновлялся три года (вроде как) и даже сейчас работает как в первый день покупки.

                                                          > Это же в чистом виде повторение ошибок OS/2!

                                                          Это неудачная попытка захвата рынка говнофонов, который занят телефонами на андроиде где даже нажатие кнопки меню глючит. Примерно как потуги гугла с chrome os, и мозиллы с firefox os.

                                                          > Когда смартфоны располагали только лишь 128MIB-192MiB памяти это самое «правильное» ядро не позволило выпустить то, что можно было продать.

                                                          Это буллшит маркетолога. Людям не нужна оперативка/проц, им нужна работа программ и в windows CE с этим было отлично.

                                                          > И тот факт, что за счёт оптимизации UI на «подросших» смартфонах через 3-4 года вся конструкция стала требовать меньше памяти, чем платформа конкурентов, тратящая появившиеся ресурсы на всякие вау-эффекты — он же уже никого спасти не мог!

                                                          Платформа конкурентов изначально требовала больше памяти, была хуже на UI, однако финансовые вливания гугла и удобный момент сделали свое время. Майки слили, с этим спорить просто глупо и я этим заниматься не буду, я адекватно вижу минусы платформы, однако я напомню что в момент выхода 2.3 версии (2010 год) — минималочка для андроидофонов была 512 мегабайт, чтоб уместить не только ОС, но и пару приложений, один в один как на WP 7.5, в тот-же год. Телефоны с меньшей памятью тупили даже на наборе номера.

                                                          > Вы каким браузером пользуетесь?

                                                          Хром, в основном, но переползаю IE, ради синхронизации полной десктопа с телефоном.


                                                          1. khim
                                                            25.05.2017 13:22
                                                            +1

                                                            Людям не нужна оперативка/проц, им нужна работа программ и в windows CE с этим было отлично.
                                                            Проблемы в том, что в Windows CE не было предусмотрено поддержки многоядерных систем, принцип «на мелочи не размениваемся» потребовал перехода на ядро Windows NT — а его уместить в нужные параметры за счёт «правильной архитектуры» было, увы, нельзя.

                                                            Платформа конкурентов изначально требовала больше памяти, была хуже на UI, однако финансовые вливания гугла и удобный момент сделали свое время.
                                                            Платформа кокурентов — вышла на рынок в 2008м году, Windows Phone на базе Windows NT — вышла на рынок в 2012м, через 4 года. Потому что на железе 2008-2009 годов она просто была неработоспособной.

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

                                                            я напомню что в момент выхода 2.3 версии (2010 год) — минималочка для андроидофонов была 512 мегабайт, чтоб уместить не только ОС, но и пару приложений, один в один как на WP 7.5, в тот-же год
                                                            Извините, но не соглашусь. Как человек просидевший на HTC Dream и пользовавший там, в том числе, 2.3. Вот 4.0 — это было резкое повышение требований и да, там о телефонах с 256MiB памяти (не говоря уже о 192MiB, как у HTC Dream) — оставалось только мечтать.

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

                                                            Примерно как потуги гугла с chrome os
                                                            Кто-тот тут говорил о том, что 10% в европейских странах и России — это было круто для Windows Phone. Ну так у ChomeOS в США больше на рынке лэптопов. В в школах — она вообще доминирует.

                                                            Это не значит, конечно, что у неё безоблачное будущее: как я уже говорил у OS/2 было 40% рынка в Германии в 1995 году, но… не надо её сравнивать с FirefoxOS, которая дальше пары экспериментальных моделей не пошла…


                                                            1. daggert
                                                              25.05.2017 14:18

                                                              > Проблемы в том, что в Windows CE не было предусмотрено поддержки многоядерных систем, принцип «на мелочи не размениваемся» потребовал перехода на ядро Windows NT — а его уместить в нужные параметры за счёт «правильной архитектуры» было, увы, нельзя.

                                                              Соглашусь с вами

                                                              > Платформа кокурентов — вышла на рынок в 2008м году, Windows Phone на базе Windows NT — вышла на рынок в 2012м, через 4 года. Потому что на железе 2008-2009 годов она просто была неработоспособной.

                                                              Сравнивать гипотетические вещи — моветон, сравнивайте с реальными конкурентами, делая срез по времени.

                                                              > Классическая технология, с помощью которой Microsoft убеждал пользователей в прошлом веке игнорировать предложения конкурентов и подождать годик-два-три-четыре не сработала, так как на рынке смартфонов покупателями являлись в основном люди не слышавшие в принципе ни о Майкрософте и не желавшие ждать пока «правильное» решение поспеет.

                                                              Эм, а что майкрософт предлагал во времена заката CE 6.0 и чего просил подождать людей?

                                                              > Извините, но не соглашусь. Как человек просидевший на HTC Dream и пользовавший там, в том числе, 2.3. Вот 4.0 — это было резкое повышение требований и да, там о телефонах с 256MiB памяти (не говоря уже о 192MiB, как у HTC Dream) — оставалось только мечтать.

                                                              В 2012 году у меня был HTC Radar и сравнивал я его в живую с HTC Evo 3D, имевшим лучшие характеристики и худшее юзабилити, в особенности «вязкую камеру» запомнил. Сравнивайте одновременно вышедшие телефоны.

                                                              > Кто-тот тут говорил о том, что 10% в европейских странах и России — это было круто для Windows Phone. Ну так у ChomeOS в США больше на рынке лэптопов. В в школах — она вообще доминирует.

                                                              Это результат прямого вливания бабла. Как только «дешевые ноубуки» закончатся — об ОС сразу забудут.


                                                              1. khim
                                                                25.05.2017 19:35
                                                                -1

                                                                Эм, а что майкрософт предлагал во времена заката CE 6.0 и чего просил подождать людей?
                                                                То же самое, что и во времена Windows 3.1: красивую картинку. Когда-нибудь. В будущем.

                                                                В 1991м он обещал «промежуточную» систему (которой стала Windows95) через два года и великолепную Windows Cairo c блекджеком и шлюхами с обьекто-ориентированной файловой системой и прочими чудесами (частично реализовано в Windows XP, частично не реализовано вообще) — через четыре.

                                                                То же самое было и в 2008м-2009м годах. Только вот на этот раз никто ждать обещанного «три-четыре года» облизываясь на красивую картинку и не имея ничего в руках не захотел.

                                                                В 2012 году у меня был HTC Radar и сравнивал я его в живую с HTC Evo 3D, имевшим лучшие характеристики и худшее юзабилити, в особенности «вязкую камеру» запомнил. Сравнивайте одновременно вышедшие телефоны.
                                                                А почему, собственно? Да и потом: какое имеет отношение «HTC Radar» к «правильной» Windows на ядре Windows NT? Что Windows CE имеет весьма низкие требования к железу — я в курсе. Но так как мы ненавидим BKL и «на мелочи не размениваемся», то она оказалась тупиком. А дальнейшее — уже история.

                                                                Это результат прямого вливания бабла. Как только «дешевые ноубуки» закончатся — об ОС сразу забудут.
                                                                А почему, собственно, они должны закончится? Или вы думаете Google производителям хромбуков доплачивает? Нет — они с прибылью продаются. С небольшой, конечно, ну так сверхдоходов никто и не обещал.


                                                                1. daggert
                                                                  26.05.2017 01:30

                                                                  > То же самое, что и во времена Windows 3.1: красивую картинку. Когда-нибудь. В будущем.

                                                                  Какую? Вы наверное не помните — ничего не предвещало смерть Windows Mobile 6.0, она была актуальна. До анонса «чего-то нового» было еще пару лет.

                                                                  > В 1991м он обещал «промежуточную» систему (которой стала Windows95) через два года и великолепную Windows Cairo c блекджеком и шлюхами с обьекто-ориентированной файловой системой и прочими чудесами (частично реализовано в Windows XP, частично не реализовано вообще) — через четыре.

                                                                  Я не знаю что было в эти годы, был слишком мал, правда судя по википедии — cairo был типичным проектом microsoft research.

                                                                  > То же самое было и в 2008м-2009м годах. Только вот на этот раз никто ждать обещанного «три-четыре года» облизываясь на красивую картинку и не имея ничего в руках не захотел.

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

                                                                  > А почему, собственно? Да и потом: какое имеет отношение «HTC Radar» к «правильной» Windows на ядре Windows NT? Что Windows CE имеет весьма низкие требования к железу — я в курсе. Но так как мы ненавидим BKL и «на мелочи не размениваемся», то она оказалась тупиком. А дальнейшее — уже история.

                                                                  Как минимум это не правильно. Вы сравниваете разные поколения систем, игнорируя факт что системы одного поколения (WP 7.8 vs android 4.0) имеют разные требования, не в пользу андроида. Про ядро — я не могу вам ответить, ведь мне, как пользователю, всегда было плевать, и я опять-же отошлю вас перечитать тот вопрос, на который я вам отвечаю.

                                                                  > А почему, собственно, они должны закончится? Или вы думаете Google производителям хромбуков доплачивает? Нет — они с прибылью продаются. С небольшой, конечно, ну так сверхдоходов никто и не обещал.

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

                                                                  PS: минусы вашим постам не я ставлю.


                                                1. Am0ralist
                                                  24.05.2017 18:55

                                                  Ага, только доля Винфонов с которыми «все было кончено» еще в 2012 году — в 2015 году достигала более 10% в европейских странах и России. Слив произошел в 16 из-за других причин и не имеет никакого отношения к производительности или неудачности ОС.

                                                  Нука-нука. С этого момента поподробнее. WinPhone со 192MiB оперативки в 2008 или, так и быть, в 2009м году — в студию.

                                                  Классно передернули, к ОС 2012 года притянули параметры систем 8-9 год и потребовали им соответствовать, хотя за это время требования к функционалу выросли значительно. Хотите сказать, что в 12 году андроид такие же требования выдвигал, правда-правда?
                                                  Так что, давайте-ка сравнивать аналоги одного временного периода, а то я потребую вообще, чтоб андроид на 32 мегабайтах работал — ведь когда то раньше были устройства, которым этого хватало, но при этом так же потребую поддержку фуллшд экрана. Не все ж вам ворота двигать.
                                                  А в тот же период вдруг окажется, что андроиду 512 — ваще никак уже было, как минимум гиг требовать начал, хотя интерфейс все равно оставался задумчивым. А появившиеся позднее смарты с 8-кой на том же гиге — уделывали по цена/качество всех в том же низком ценовом сегменте для пользователя, проигрывая исключительно за счет количества приложений.
                                                  И да, Вы лично пользовались теми устройствами? Ибо я — да. Поэтому мне сказки о том, что андроид занимает сколько надо — не надо рассказывать. Особенно смешно было сравнивать с работой смарта более чем в два раза дороже стоившего. Хотя, может быть, на нем игрушки и лучше фпс выдавали, но не прочее точно.
                                                  «Овердофига количеством ядер и оперативки» на телефоне появились вследствие Закона Мура.

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

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


                                                  1. khim
                                                    24.05.2017 19:38

                                                    Ага, только доля Винфонов с которыми «все было кончено» еще в 2012 году — в 2015 году достигала более 10% в европейских странах и России.
                                                    А доля OS/2 в 1995м году в Германии достигала 40%. Вы хотите сказать, что в 1995м году у OS/2 были шансы на успех? Ага. Щаз. В 2012м году было уже, в целом, ясно, что Windows Phone — это труп. Как я уже писал.

                                                    Классно передернули, к ОС 2012 года притянули параметры систем 8-9 год и потребовали им соответствовать, хотя за это время требования к функционалу выросли значительно. Хотите сказать, что в 12 году андроид такие же требования выдвигал, правда-правда?
                                                    Нет конечно. Но выводить на рынок новую OS для смартфонов нужно было в 2008-2009м годах (новую — в смысле не поддерживающую программы, написанные для «старых» OS, а не в смысле что у неё все компоненты новенькие, свеженаписанные). В 2010м — ну… может быть, уже почти поздно. К концу же 2012 почти половина продающихся телефонов была смартфонами — а значит тот, кто захватывал в этот момент рынок — тот и оставался.

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

                                                    И да, Вы лично пользовались теми устройствами?
                                                    Нет, не пользовался. А вот с Windows CE — возился. И я — не одинок. В этом-то всё и дело! В момент, когда Windows Phone на базе Windows NT довели до ума «поезд уже ушел»! Она уже в момент выхода почти никого не интересовала — и было понятно, что жить ей осталось недолго.

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

                                                    Бедный Мур, как что, так сразу его приплетают (прям как и другую известную личность), пытаясь оправдать прожорливость систем, которые написали программисты.
                                                    Нет, его привлекают чтобы описать железо, которое будет доступно в тот или иной момент времени. А софт… софт занимает все ресурсы, которые ему дадут занять.

                                                    Разработчики ядра бьются за то, чтобы его можно было впихнуть во всякие маломощные IoT устройства и в суперкомпьютеры — так что оно работает и на машинках с 32MiB и на системах с тысячами процессоров. Андроид затачивается под то железо, что есть на рынке — и выигрывает.

                                                    А Windows Phone на базе Windows NT — проигрывает, потому что «в нужное время, в нежном месте» оно оказывается неготово, вот и всё.


                                                1. qw1
                                                  24.05.2017 21:11
                                                  +1

                                                  Эта версия не исползовала «расчудесное» ядро Windows NT, не поддерживала многозадачность и потому потребовалось, в лучших традициях Microsoft, «переписать всё с нуля»
                                                  WinCE 6.5 я хорошо пощупал, потому что у меня валяется Loox C550, к которому я сам собирал оптимизированные ROM-ы.

                                                  Там ядро ближе к NT, чем к 9x, потому что формат модулей ядра был PE, актуальном в текущей винде, а не LE, который были в *.vxd-драйверах 9x.

                                                  Userspace вообще сказка — убрали не-unicode api, которые никак не выпилить из десктопа, чем кардинально решили проблему с кодировками.

                                                  Многозадачность там была нормальная. Окна сворачивались на панель задач, навигатор в фоне работал, писал трек. mp3-плеер играл (кстати, собранный из открытых исходников и допиленный). Что ещё надо…


                                                  1. khim
                                                    24.05.2017 22:05

                                                    Там ядро ближе к NT, чем к 9x, потому что формат модулей ядра был PE
                                                    Оно там вообще своё, как я понимаю, с нуля написанное, но — изначально не заточенное под SMP, а сделать BKL — это ж никак низзя, лучше харакири. Что, в принципе, на рынке смартфонов Microsoft успешно и проделал.

                                                    Многозадачность там была нормальная. Окна сворачивались на панель задач, навигатор в фоне работал, писал трек. mp3-плеер играл (кстати, собранный из открытых исходников и допиленный). Что ещё надо…
                                                    Поддержку восьмиядерных процессоров?

                                                    Как бы вся наша дискуссия вертится вокруг big kernel lock и учёта всех требований, которые были необходимы на момент разработки. И всё, что я хочу показать, так это то, что big kernel lock — был хорошим решением. Ибо позволил решить задачу «малой кровью», а потом, в конечном итоге — его выпилили.

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

                                                    Но похоже что это — натуральное побуждение всех больших компаний. Вот и Google занялся этой же фигнёй


                                            1. qw1
                                              24.05.2017 12:40
                                              +1

                                              изкоуровневый API в Windows просто ужасен и когда с ним приходится сталкиваться — хочется кого-нибудь убить. Но «сверху» над ним сделаны обёртки, которыми пользоваться, в общем, довольно приятно
                                              Этот момент мне непонятен. Сравните «ядерный» ZwCreateFile и «пользовательский» CreateFile. Найдите 10 отличий.


                                              1. mayorovp
                                                24.05.2017 12:47
                                                -1

                                                "Ядерный" не знает как минимум про текущую директорию, логические диски и устройства dos — это все фичи подсистемы win32. Также он, скорее всего, не редиректит папки Program Files и system32 в 32х-битных приложениях и не выполняет виртуализацию Program Files в режиме совместимости.


                                                1. qw1
                                                  24.05.2017 12:56

                                                  Хороший обзор. Но эти «недостатки» позволяют назвать это АПИ ужасным?


                                              1. khim
                                                24.05.2017 17:31

                                                Этот момент мне непонятен. Сравните «ядерный» ZwCreateFile и «пользовательский» CreateFile. Найдите 10 отличий.
                                                На этом месте отличий нет. Но если вы посмотрите на .NET — то увидите вполне себе разумный API, которым достаточно удобно пользоваться.

                                                В Linux'е же, наоборот — над простыми и понятными creat и open настроены страшные GObject-конструкции, которые ещё и каждые несколько лет меняются непредсказуемым образом.


                                                1. qw1
                                                  24.05.2017 21:29
                                                  +1

                                                  Но если вы посмотрите на .NET — то увидите вполне себе разумный API
                                                  Потому что это managed-среда, со сборщиком мусора и универсальным IDisposable, избавляющим от API закрытия файлов, хендлов и т.п. Немного не то, что ожидаешь об базовых сервисов ОС.

                                                  .NET совершенно не минималистичный. Под одним File.Create — 100500 перегрузок, начиная от простого открытия файла по имени, до версии со всеми параметрами, доступными в CreateFile.


                                            1. qw1
                                              24.05.2017 12:44
                                              +1

                                              Процессор — это процессор. Если он чего-то не умеет, то он таки этого не умеет. Тут уж ничего не сделаешь. А вот когда процессор чего-то умеет, то, извините, я хочу чтобы OS этого умела тоже.
                                              Зависит от поставленных задач. Если вам нужно, грубо говоря «все 16 гигабайт RAM одним куском», это повод задуматься, а правильная ли OS выбрана. Для десктопных и серверных задач сетования на недоступность LDT выглядят странно. Может, вы ещё и IDT хотите контролировать?


                                              1. MacIn
                                                24.05.2017 15:39
                                                +1

                                                Может, вы ещё и IDT хотите контролировать?

                                                И таки Win95 тут поможет :D


                                                1. qw1
                                                  24.05.2017 21:24

                                                  Открытая IDT — дыра в ring0 )))


                                                  1. MacIn
                                                    26.05.2017 17:00
                                                    +1

                                                    Этим и пользовался WinCIH, если я верно помню (проглядывал когда-то его исходники).


                                            1. dartraiden
                                              27.05.2017 19:54
                                              +1

                                              Swap-раздел обычно используется не потому, что swap-файлы Linux «не умеет», а потому что так быстрее и надёжнее.

                                              Разработчики Ubuntu, кстати, отказываются от swap-раздела:
                                              Уход от отдельных разделов подкачки обусловлен сложностями в выборе оптимального размера раздела в современных реалиях, связанных со значительным ростом размера оперативной памяти в современных системах и применением высокопроизводительных, но дорогостоящих, постоянных хранилищ на базе NVMe и SSD. Рекомендация выделять под подкачку двойной размер ОЗУ в сегодняшних условиях потеряла смысл. Традиционные методы резервирования места под подкачку на устройствах NVMe и SSD рассматриваются как слишком дорогие и неэкономные, а создание больших разделов подкачки на жестких дисках — как избыточное.


                                              1. grossws
                                                28.05.2017 00:55

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


                                                Я довольно давно использую sparse swap-файлы на ssd. При использовании https://github.com/Nefelim4ag/systemd-swap вполне нормально работают наборы swap-файлов, которые создаются по мере необходимости.


                                          1. MacIn
                                            24.05.2017 15:38

                                            Например, из-за того что менеджер памяти Windows
                                            сложнее, то на не сильных машинах, основной ресурс будет съедать именно он. Под несильными я имею в виду машины до 32мб

                                            Еще, насколько я помню, у Linux было преимущество по части realloc in-place.


                                    1. mayorovp
                                      24.05.2017 12:58

                                      А к кому? Я ж не претендую на NtSetLdtEntries в 64-битных программах. Зачем было из 32-битных из изводить?

                                      Насколько я знаю, в Long mode такая штука как LDT попросту отсутствует независимо от того, 64-битный режим активен или режим совместимости. Поэтому 64-битная ОС не может предоставить такое API даже для 32х-битных приложений.


                                      Разбирался в вопросе по Википедии, если что не так — прошу поправить.


                                      1. anatolymik
                                        24.05.2017 13:00

                                        В режиме совместимости работает.


                                        1. mayorovp
                                          24.05.2017 13:11

                                          Хм, был не прав, оно и в 64-битном режиме работает. Либо в вики фигня написана, либо я как-то не так прочитал.


                                          Вот со второй попытки нашел мануал где все расписано: http://developer.amd.com/wordpress/media/2012/10/24593_APM_v21.pdf


                                          1. anatolymik
                                            24.05.2017 14:23

                                            В х64 не работает, т.к. база для сегментов cs, ss, ds, es не загружается. Она всегда 0, для этих сегментов. Для fs и gs загружается, но только первые 32 бита.


                                            1. khim
                                              24.05.2017 17:11

                                              Для fs и gs загружается, но только первые 32 бита.
                                              Для fs и gs загружаются все 64 бита, но только в Linux и MacOS. И да — это было очередной головной болью для нас.


                                              1. anatolymik
                                                24.05.2017 17:13

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


                                                1. khim
                                                  24.05.2017 17:27

                                                  Загружаются, при помощи специальных инструкций нулевого кольца.
                                                  Ну так и в 32-битном режиме для этого помощь со стороны ядра нужна была, просто так базу fs или gs нельзя было переставить.

                                                  На современных процессорах можно вообще из обычной программы всё сделать через WRFSBASE/WRGSBASE если операционка это поддерживает. Вы думаете эти инструкции появились потому что никому базу менять не нужно? Ну да, конечно.


                                                  1. anatolymik
                                                    24.05.2017 17:32

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

                                                    > На современных процессорах можно вообще из обычной программы
                                                    Можно, дальше то что?


                  1. khim
                    23.05.2017 18:11
                    -2

                    Я могу только сказать что для этого разработчикам не пришлось переписывать половину ядра.
                    Для этого пришлось переписать всё ядро. Полностью. Целиком.

                    Потому что Windows (и, позднее, Windows CE) изначально была рассчитана только на однопроцессорные системы — и поддержку каких-либо других добавить никто не пытался ни туда, ни туда.

                    А OS/2 3.0 — да, она изначально под SMP затачивалась, так что было бы странно если бы она его не поддерживала.


                    1. anatolymik
                      23.05.2017 18:12
                      +1

                      Возьмите исходники и сопоставьте. Вы найдете очень много совпадений.


                      1. khim
                        23.05.2017 18:24
                        -1

                        Возьмите исходники и сопоставьте. Вы найдете очень много совпадений.
                        С этого момента — поподробнее. У вас есть исходники Windows 95 или хотя бы Windows 3.1? Было бы интересно посмотреть, на самом деле.

                        Но сомневаюсь я что-то что из Windows в Windows NT перекочевало много кода. Катлер изначально стремился ровно к противоположному.


                        1. anatolymik
                          23.05.2017 18:27
                          +2

                          Насколько я понял, мы вели речь об NT. Касательно линейки 95, я могу ошибаться, но помоему этим занималась отдельная команда.


                          1. khim
                            23.05.2017 18:56

                            Насколько я понял, мы вели речь об NT.
                            Я говорил о BKL. Процесс, при котором он появился — это процесс перехода от системы не поддерживающей SMP к системе, поддерживающей SMP. То есть в случае с Windows — переход от Windows 1.x/2.x/3.x к Windows XP.

                            Касательно линейки 95, я могу ошибаться, но помоему этим занималась отдельная команда.
                            Совершенно верно. И там, где Linux получил «костыль», который со временем выпилили, там Windows — получил новое ядро, написанное с нуля.

                            Вы уверены что это — лучший подход к разработке?


                            1. anatolymik
                              23.05.2017 19:03
                              +2

                              Насколько я знаю, ветка NT получила свое начало до Windows 9x линейки.

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

                              Я предлагаю, закончить этот бессмысленный разговор.


                              1. khim
                                23.05.2017 19:15
                                -1

                                Даже если так, этот подход в разработке себя я так понимаю не оправдал? Ничего не работает, все падает, старый софт не заводиться?
                                Так точно. Windows 9X поддерживалась долгие годы именно потому что «все падает, старый софт не заводиться». Отказ от поддержки этой линейки произошел не тогда, когда софт «завёлся», а тогда, когда старый софт, без поддержки Windows NT, стал неактуален.


                                1. anatolymik
                                  23.05.2017 19:23
                                  +2

                                  Без комментариев.


                                1. qw1
                                  23.05.2017 21:41

                                  Отказ от поддержки этой линейки произошел не тогда, когда софт «завёлся», а тогда, когда старый софт, без поддержки Windows NT, стал неактуален.
                                  Вот с этим я полностью согласен. 9x был полезен, чтобы запускать Duke Nukem и т.п., что в принципе не могло идти в NT/2000. Потом выпустили eduke32, doomgl, и Win9x стала не нужна.


                    1. sumanai
                      23.05.2017 18:22
                      +1

                      Потому что Windows

                      Тут явно путают саму ОС Windows, существующую в нескольких слабо связанных друг с другом линейках, и ядро ОС.
                      Все современные Windows работают на ядре NT, про которое и пишут, что оно изначально поддерживает SMP. Вспоминать сейчас линейку Windows 9x, внутри которых чуть ли не DOC, сейчас так же актуально, как и вспоминать Linux 1.0.


                      1. khim
                        23.05.2017 18:52
                        -1

                        Вспоминать сейчас линейку Windows 9x, внутри которых чуть ли не DOC, сейчас так же актуально, как и вспоминать Linux 1.0.
                        Плюс-плюс-плюс! Ура-ура-ура! Вы абсолютно правы. Но ведь топикстартер вытащил этот самый BKL, который отправляет нас в путеществие во времена Linux 1.0, не так ли?

                        BKL — появился в момент превращения Linux 1.0 (не поддерживающий SMP) в Linux 2.0 (поддерживающий SMP, пусть и с «костылём»).

                        Аналогичный процесс «в стане Microsoft» — это превращения линейки «классической Windows» в Windows XP. При котором было переписано всё ядро, полностью, с нуля. Потому что подход «делаем всё „по-настоящему“, но костыли, которые мы при этом породим потом никогда не изводим» себя исчерпал.

                        «Подход Linux» — был осуществлён одним человеком за примерно год работы, после чего, правда, пришлось потратить годы на выпиливание соотвествующего костыля.

                        «Подход Microsoft» — привёл к тому, что команда из десятков отличных разработчиков работала чуть ли не 10 лет и, после потраченных миллиардов долларов, смогла завершиться успехом только потому, что Microsoft обладала монополией на десктопе.

                        Аналогичный процесс на рынке PDA/смартфонов привёл к тому, что Microsoft оный рынок потеряла. Полностью. Совсем.


                        1. sumanai
                          23.05.2017 19:03
                          +2

                          Но ведь топикстартер вытащил этот самый BKL, который отправляет нас в путеществие во времена Linux 1.0, не так ли?

                          Вы сами ответили, что он появился в 2.0, и просуществовал до 2.6, то есть уже не так давно.
                          Потому что подход «делаем всё „по-настоящему“, но костыли, которые мы при этом породим потом никогда не изводим» себя исчерпал.

                          DOS и надстройки над ним писались через пень-колоду.
                          «Подход Linux» — был осуществлён одним человеком за примерно год работы

                          А как же хвалёный опенсорс? Или тогда в разработке Linux никто кроме Торвальдса не участвовал?
                          Аналогичный процесс на рынке PDA/смартфонов

                          Не аналогичный.
                          NT позволяла запускать на себе большую часть софта линейки Windows 9x, что было одним из требований к разработке этой ОС. Поэтому она и взлетела.
                          На рынке мобильных же устройств МС пару раз закапывала старые ОС и выкатывала новые, которые не были совместимы ни со старыми программами, ни со старым железом. Результат немного предсказуем.


                          1. khim
                            23.05.2017 19:36

                            А как же хвалёный опенсорс?
                            Живёт и здравствует! Это был как раз триумф опенсорса. Вернее — супертриумф в кубе!

                            Или тогда в разработке Linux никто кроме Торвальдса не участвовал?
                            А кто вам сказал что этим Линус занимался? Этим как раз совсем другой человек занимался. А Линус только советовал и облизывался, так как денег на SMP-машину у него тогда не было. Они тогда как самолёт стоили.

                            А вот Коксу Caldera такую машинку прикупила — и денег дала, чтобы он годик работал над поддержкой SMP.

                            Вдумайтесь: то, на что в Microsoft потратили несколько лет команды из не одного десятка человек, кучу специализированного железа и прочего в случае с Linux'ом — сделал один человек, которому купили один комп!

                            При этом Linux 2.0 с поддержкой SMP — был гораздо, гораздо, ГОРАЗДО более совместимым с Linux 1.0, чем Windows NT с Windows 3.1.

                            Так ли уж ужасен BKL, который, к тому же, в конце-концов извели, если сравнить все «за» и «против»?

                            DOS и надстройки над ним писались через пень-колоду.
                            О как. А ничего, эти 32-битные надстройки писались в те же годы, что и, собственно, Windows NT? То есть у нас в одной компании работает «группа товарищей», которыая всё пишет «через пень-колоду» и «аккуратисты, которые всё делают грамотно». Простите, но… не верю.

                            NT позволяла запускать на себе большую часть софта линейки Windows 9x, что было одним из требований к разработке этой ОС. Поэтому она и взлетела.
                            Извините, но… нет. Взлетела она только тогда, когда поддержка Windows 9X была прекращена. Windows 98 была в ходу ещё долгие годы после выхода Windows XP. Именно потому что ни о каком запуске «большей части софта» и речи не шло.

                            16-битный и, особенно, DOS-софт работал вообще отвратительно.

                            На рынке мобильных же устройств МС пару раз закапывала старые ОС и выкатывала новые, которые не были совместимы ни со старыми программами, ни со старым железом.
                            А почему она это делала — не напомните? А вот всё потому же: потому что Windows CE не получалось довести до ума и добавить туда все необходимые фичи.

                            Ещё одна команда, работающая через одно место, в той же компании?


                            1. sumanai
                              23.05.2017 20:24

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

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

                              Просто это совпало с выходом клиентских NT.
                              А вот всё потому же: потому что Windows CE не получалось довести до ума и добавить туда все необходимые фичи.

                              Скорее маркетинг, а это просто отговорка.


                            1. qw1
                              23.05.2017 21:56

                              DOS и надстройки над ним писались через пень-колоду
                              О как. А ничего, эти 32-битные надстройки писались в те же годы, что и, собственно, Windows NT? То есть у нас в одной компании работает «группа товарищей», которыая всё пишет «через пень-колоду» и «аккуратисты, которые всё делают грамотно». Простите, но… не верю.
                              Надстроек было множество, от разных вендоров. Начиная от популярнейшей DOS4/GW, до написанной авторами Watcom C++.

                              MS же просто делало слой совместимости (и довольно неплохо), перехватывая int 67h, там API у надстроек было более-менее одинаковое. Но иногда DOS-программы не работали в Win9x, если использовалась экзотическая надстройка.


                              1. khim
                                24.05.2017 02:29
                                +1

                                В данном случае под «надстройкой над классической Windows» я понимаю Win32 подсистему в Windows 9X. И совершенно непонятно что мешало сделать её достаточно надёжной и поддерживающей SMP. Почему для решения этой задачи было недостаточно введения BKL с последующим избавлением от него, а потребовалось всё выкинуть и написать новое ядро с нуля.


                                1. qw1
                                  24.05.2017 12:54
                                  -1

                                  Тут обычный вопрос с приоритетами и захватом рынка. Опоздай на 2 года, и рынок был бы у OS/2. Поэтому все силы — на совместимость с DOS и на пиление «рюшечек» в интерейсе, а также на офисные пакеты, мультимедию, игровые API. Увы, тут уж не до ядра…


                                1. sumanai
                                  24.05.2017 16:33

                                  И совершенно непонятно что мешало сделать её достаточно надёжной и поддерживающей SMP.

                                  Да всё мешало. Код старых версий был гвоздями прибит к одному процессору и задаче, большинство ядерных функций были не реентабельными, то есть если одна программа вызывала эту функцию, то остальные тупо ждали вместе с самой системой.
                                  Семейство Windows 9X на половину было написано на ассемблере, что мешало задаче портируемости на другие платформы.
                                  И т.д. и т.п.
                                  В общем они правильно сделали, что взяли и выкинули старый код в пользу уже имеющегося и надёжного кода NT, который писали для серверных систем и прочих военных.


                                  1. khim
                                    24.05.2017 17:16

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

                                    Семейство Windows 9X на половину было написано на ассемблере, что мешало задаче портируемости на другие платформы.
                                    Откуда сведения? Что там в 16-битной части было много асма — верю. Ну так его можно было выкорчевать и заменить потихонечку. Выкидывать всё и переписывать всё с нуля было совершенно не нужно. А 32 битная часть… сомневаюсь я что там было так уж много асма.


                                    1. sumanai
                                      24.05.2017 18:04
                                      +1

                                      А 32 битная часть… сомневаюсь я что там было так уж много асма.

                                      Её самой там было не так уж много.


                                      1. khim
                                        24.05.2017 19:50
                                        -1

                                        К началу XXI века? Дисковые драйвера, сетевые, DirectX, USB и куча всего ещё — были 32 битными. Я думаю типичная WIndows 98 система содержала больше 32-битного кода, чем 16-битного.


                                        1. qw1
                                          24.05.2017 21:37

                                          Не важно, сколько в процентах было 32-битного кода.
                                          Важно, что база GDI, USER и прочие критически важные части были 16-битные и не портируемые.


                                          1. khim
                                            24.05.2017 21:59

                                            Важно, что база GDI, USER и прочие критически важные части были 16-битные и не портируемые.
                                            И что — их сложнее было переписать, чем создать с нуля новую операционку?


                                            1. sumanai
                                              24.05.2017 22:06
                                              +1

                                              Вы не понимаете одного- NT уже была почти создана, в рамках совершенно другого проекта. Просто они взяли и прикрутили системные вызовы WinAPI к ядру NT, так как оно изначально поддерживало возможность добавления подсистем совместимости, когда поняли, что WinAPI популярно, а старое ядро никуда не годится.


                                              1. khim
                                                24.05.2017 22:19

                                                Просто они взяли и прикрутили системные вызовы WinAPI к ядру NT, так как оно изначально поддерживало возможность добавления подсистем совместимости, когда поняли, что WinAPI популярно, а старое ядро никуда не годится.
                                                Ага. А потом потратили 10 лет на то, чтобы добиться более-менее приличной совместимости с существующей системой.

                                                Вы уверены, что это было быстрее, чем постепенный рефакторинг старого ядра?

                                                Вы не понимаете одного- NT уже была почти создана, в рамках совершенно другого проекта.
                                                Угу. Проекта по захвату ранка рабочих станций. Который закончился полным и оглушительным провалом. Но это — уже другая история.


                                                1. sumanai
                                                  24.05.2017 22:25

                                                  А потом потратили 10 лет на то, чтобы добиться более-менее приличной совместимости с существующей системой.

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

                                                  Партнёрство не удалось, что поделать. Пришлось идти другим путём.


                                            1. qw1
                                              24.05.2017 22:07
                                              +1

                                              Разумеется. Когда есть 16-битное ядро, в которое рандомно воткнуты 32-битные куски, тут только «господь, жги».

                                              Примерно так выглядело что-то низкоуровневое
                                              http://www.drdobbs.com/windows/direct-thunking-in-windows-95/184410046


                1. sumanai
                  23.05.2017 16:28
                  +2

                  А какая версия Windows разрабатывался изначально для SMP?

                  С самой первой NT. Это было требование во время её разработки, пруф ищите в книге «Внутреннее устройство Windows» нужной вам редакции, уверен, что это написано в самом первом издании.


                  1. grossws
                    23.05.2017 17:09

                    IIRC портируемость и потенциальная поддержка SMP растут из полуоси от IBM.


                    А вот насколько оно реально (и насколько костыльно) было реализовано в, скажем, NT4 я не имею понятия. Потому и спрашивал.


                    В общем, ваш ответ, как минимум, предметный, так что ловите +1 в слово-которое-нельзя-называть.


                    1. sumanai
                      23.05.2017 17:45

                      А вот насколько оно реально (и насколько костыльно) было реализовано в, скажем, NT4 я не имею понятия.

                      Именно костылей там не было, но проблемы, точнее просчёты планирования или просто недоработки, присутствовали, хоть и не такие эпичные, как BLK.
                      Например в 2003 сервере ввели отдельный на каждое ядро список потоков, находящихся в состоянии отложенной готовности, чтобы не было глобальной спин-блокировки PRCB-блока. В семёрке так же избавлялись от некоторых блокировок или заменяли обычные блокировки на блокировки с заталкиванием указателя, которые быстрее.


                    1. khim
                      23.05.2017 18:00

                      IIRC портируемость и потенциальная поддержка SMP растут из полуоси от IBM.
                      Из техзадания на OS/2 3.0 (именно так называлось то, что потому превратилось в Windows NT 3.1 в момент начала разработки).

                      Это была вещь, которая должна была изначально поддерживать SMP и кучу процессоров (а потому разрабатывалась для 80860, а не для какого-нибудь распространённого процессора). Первая версия вышла для x86, MIPS и DEC Alpha. Причём именно из-за последнего в Windows 10 невозможно аллоцировать память с гранулярностью 4K.


    1. DrPass
      22.05.2017 11:14

      Справедливости ради, прямой путь для решения подобных проблем в случае закрытых исходников — не тот, который вы указали, а «написать в Майкрософт, с указанием примера, воспроизводящего проблему, и пусть они сами с ним разбираются».


      1. anatolymik
        22.05.2017 11:16
        +7

        Именно так я и поступил. Об этом было отрапартовано в Microsoft, еще год назад. И несколько месяцев назад я вел переписку с ними.


        1. xRay
          22.05.2017 11:36

          А какое решение приняло Microsoft? Баг будут исправлять?


          1. anatolymik
            22.05.2017 11:40
            +7

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


            1. MacIn
              22.05.2017 14:49

              Точно не надо никаких привилегий для открытия $mft?
              Наверняка, они имеют в виду, что если ты можешь выполнить подобный код, то ты УЖЕ на клиентской машине и можешь уже сделать и что-то более нехорошее. On the other side of airtight hatch, как пишет Рэймонд Чен.


              1. anatolymik
                22.05.2017 14:51
                +8

                Проверка привилегий выполняется после того как файл будет найден драйвером. А он не будет найден.


            1. monah_tuk
              23.05.2017 11:43

              Интересно, а такое является: https://htrd.su/wiki/zhurnal/2017/04/24/ideja_dlja_badusb? В посте озвучено описание проблемы (т.е. не совсем идея) с которой столкнулся на проекте.


              1. anatolymik
                23.05.2017 11:48
                +1

                Важно понимать вред. На вскидку сложно сказать. Я не догадывался как можно использовать описываемый баг на момент написания. Когда тут многие уже эксперементировали с html.


        1. FractalizeR
          22.05.2017 11:39

          И каковы результаты?


          1. anatolymik
            22.05.2017 11:40
            +1

            Пока никаких)


          1. rezdm
            22.05.2017 12:01
            +3

            На моей памяти, мы репортили три бага

            • Ошибка с таймаутом в NetBIOS/IPX/SPX в эээ NT4, кажись
            • В 2000 ошибка в MMC
            • Утечка в SQL Server где-то в 2001-2002г


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

            Если я правильно понимаю, политика принятия багов таки изменилась с тех пор.


            1. anatolymik
              22.05.2017 12:02
              +2

              Мне сложно судить, ибо как правило, мне приходилось адаптироваться под особенности ОС, если таковые выявлялись в процессе реверса.


            1. MacIn
              22.05.2017 14:50
              -1

              del.


        1. MacIn
          22.05.2017 14:51

          Каким образом (путем) вы репортили баги? Я пытался дважды зарепортить кое-что, ни разу не смог добиться какого-то ответа.


          1. anatolymik
            22.05.2017 14:53
            +1

            Один раз это было на форуме OSR. Давно. Человек из Microsoft, ответил что зафиксировал. Недавно была переписка через secure@microsoft.com.


          1. rezdm
            22.05.2017 15:00

            Тогда, давным-давно это было ссылкой в msdn-е, оттуда. Дальше — перепиской.


            1. MacIn
              22.05.2017 15:19

              Угу. А когда мне потребовалось, меня послали, ну не 3 буквы, но «пишите на форум technet, если никто не даст ответа, и это окажется действительно ошибкой, то мы свяжемся. Если тема „не взлетит“, создайте еще раз (sic)», потом послали меня в твиттер техподдержки клиентов, где пообещали выделить инженера для рассмотрения вопроса, но все так и осталось без ответа.


    1. semmaxim
      22.05.2017 11:43
      +3

      Реальная популярность Windows и Linux на десктопах несколько опровергает Ваше мнение о том, что именно первостепенно.


    1. gotch
      22.05.2017 13:24
      +4

      Доступ к исходникам можно получить — https://www.microsoft.com/en-us/sharedsource/
      Только это можно не всем и не всегда бесплатно. 10 000 рабочих станций под Windows и Enterprise Agreement, юридическое лицо в особо доверенной стране — и код ваш.


    1. red75prim
      22.05.2017 16:18
      +1

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


  1. VBKesha
    22.05.2017 11:41
    +1

    Простите что я написал не так:

    #include <stdio.h>
    #include <stdlib.h>
    #include <windows.h>
    
    int main()
    {
        CreateFileW(L"C:\\$mft\123", FILE_READ_ATTRIBUTES, 0, NULL, OPEN_EXISTING, 0, NULL);
        return 0;
    }
    
    

    Запускаю ничего не виснет ;(
    PS. Win XP SP3


    1. anatolymik
      22.05.2017 11:42

      В коде ошибка. Не L«C:\\$mft\123», а L«C:\\$mft\\123». Так заработает.


      1. VBKesha
        22.05.2017 11:48
        +1

        ХМ исправил, либо я не пойму что должно случится, либо ничего не происходит. Выложите свой тестовый пример в откомпилированном виде.


        1. anatolymik
          22.05.2017 11:53
          +1

          #include <stdio.h>
          #include <stdlib.h>
          #include <windows.h>
          
          int main() {
          	CreateFileW( L"C:\\$mft\\123", FILE_READ_ATTRIBUTES, 0, NULL, OPEN_EXISTING, 0, NULL );
          	return 0;
          }
          


          Просто скопируйте этот код, и соберите еще раз. После того как запустите, создайте папку на диске C. Должно зависнуть. Эффект не всегда мгновенный. Как правило, в пределах первой минуты будет результат.


        1. anatolymik
          22.05.2017 11:57

          Только что проверил на Windows XP. Действительно не зависает. Извиняюсь за ошибку.


        1. anatolymik
          22.05.2017 12:00

          Начиная с Windows Vista, зависает. Только что проверил. Спасибо.


          1. VBKesha
            22.05.2017 12:10
            +1

            На 10 протестили тоже не повисла.


            1. anatolymik
              22.05.2017 12:10

              Какой BUILD?


              1. VBKesha
                22.05.2017 12:14
                +2

                14.393.11.98


                1. anatolymik
                  22.05.2017 12:17
                  +3

                  Касательно 10, после обновления перестало виснуть. Видимо исправлено.


          1. VBKesha
            22.05.2017 12:16
            +7

            Проверил на Win7 достаточно в консоли написать cat c:\$mft\123


            1. anatolymik
              22.05.2017 12:19
              +2

              Откорректировал материал, Вам спасибо!


              1. VBKesha
                22.05.2017 12:38
                +5

                Ну тут всё ещё веселей если например использовать такой путь как url картинки, то Chrome нормально отрабатывает, а вот IE валит систему.


                1. anatolymik
                  22.05.2017 12:44
                  +1

                  Пишите статью, уверен будет интересно.


                1. Goodkat
                  22.05.2017 12:58
                  +9

                  Firefox тоже валит — я решил сперва протестировать на себе, прежде чем писать тут комментарий :)

                  <ims src="file://c:/$mft/123">
                  

                  Валит не сразу, примерно с минуту всё нормально, потом всё намертво висит.


                  1. anatolymik
                    22.05.2017 12:59
                    +6

                    Пошла импровизация)))


                    1. monah_tuk
                      23.05.2017 11:46
                      +2

                      Пошла эксплуатация :)


                  1. CaptainFlint
                    22.05.2017 14:54

                    Проверил у себя, Win7 со всеми обновлениями:
                    1. Opera 12.18, Firefox 53, Vivaldi 1.9 — валят систему ТОЛЬКО если файл с таким урлом открыт с локального диска. Если его же открыть по HTTP с удалённого веб-сайта, то доступ к локальному файлу не производится, и система не зависает.
                    2. IE 11 — плевать хотел на безопасность, даже при открытии по HTTP сразу лезет грузить локальную картинку и всё вешает.


                    1. Goodkat
                      22.05.2017 15:05

                      Попробуйте вместо картинки сделать редирект на этот адрес или открыть url в iframe.


                      1. CaptainFlint
                        22.05.2017 15:49

                        Аналогично. Нормальные браузеры послылают локальные ссылки лесом что в iframe, что в редиректе; IE радостно хавает и то, и другое. (Проверял только по HTTP.) Редирект смотрел только http-equiv. По-хорошему, надо бы потестить и через 301, и через JS, плюс картинку попробовать через тот же JS проинициализировать, но и так уже много времени убил.


                      1. sergey-b
                        22.05.2017 16:00

                        Я думал, браузеры уже давно не открывают локальные ресурсы по ссылкам с внешних страниц.


                        1. Goodkat
                          22.05.2017 16:07
                          +3

                          Ну я тоже так думал, но мы тут только что успешно завесили несколько Windows7-машин через урл в теге img :)


                          1. sergey-b
                            22.05.2017 16:17

                            Я бы предложил проверить Аутлук. Отправьте сами себе письмо со ссылкой на картинку с хитрым адресом.


                        1. CaptainFlint
                          22.05.2017 16:24

                          Ну так браузеры и не открывают. Открывает только IE. ;-)


                          1. sergey-b
                            22.05.2017 16:29

                            Точно. Кроме браузеров. Есть же и другие программы, которые по ссылкам умеют лазить, в том числе и производства Микрософт. Что у нас есть? Скайп какой-нибудь, антивирусы. Например, что-нибудь такое в архиве прислать, чтобы Windows Defender поискал хитрый путь. Есть что поисследовать.


                            1. CaptainFlint
                              22.05.2017 16:42

                              Это да, простор в любом случае открывается широкий.


                            1. Goodkat
                              22.05.2017 23:57

                              Ярлык.lnk можно сделать — я лет уже 17 назад как-то открыл файл ярлыка текстовым редактором доснавигатора и случайным образом потыкал в клавиши, а потом сохранил. После этого Windows Explorer и Windows Commander зависали в папке с этим ярлыком. Жаль, я не сохранил этот файлик себе на память.


                  1. sergey-b
                    22.05.2017 15:52
                    +6

                    Да это же знаменитый con/con bug из Windows 98!


            1. nwatch
              22.05.2017 13:13

              Win8.1 со всеми обновлениями dir c:\$mft\123 — зависает сразу-же, при попытке перезагрузки синий экран.


              1. anatolymik
                22.05.2017 13:14
                +1

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


            1. sergey-b
              22.05.2017 15:58

              Отформатировал флэшку под NTFS. Думал, выну ее из разъема после эксперимента, и все будет в порядке. Как бы не так. После выполения указанной вами команды съемный диск остается, explorer зависает, taskmgr не запускается.


  1. kernelconf
    22.05.2017 12:05
    +11

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


    1. anatolymik
      22.05.2017 12:06
      +1

      Вот об этом я не подумал.


  1. paranoik
    22.05.2017 12:16
    -5

    Ничего в мире не меняется, сразу вспомнил con bug.


    1. MacIn
      22.05.2017 14:53
      +1

      Это таки не баг.


      1. funny13
        23.05.2017 12:32

        смотря как использовать


  1. Goodkat
    22.05.2017 12:43

    c:\con\con 2.0


  1. smilyfox
    22.05.2017 12:55
    +6

    Если не считать это уязвимостью, при том, что удалённый доступ злоумышленнику по сути не нужен, то я теряюсь, что можно считать.


    1. anatolymik
      22.05.2017 12:55
      +1

      Если есть локальный, тогда да. Это уязвимость.


  1. Pochemuk
    22.05.2017 13:25
    +2

    Не понял всего ужаса фразы, но звучит устрашающе:

    "… если выполнить перезагрузку, то система повиснет на ней".

    Т.е. после таких экспериментов система перестает загружаться от слова «совсем»?

    Чем в таком случае лечить? Диагностика ФС из набора MS DaRT помогает? Или какие сторонние средства?


    1. anatolymik
      22.05.2017 13:28

      Диагностика ни чем не поможет. Говоря о повисании на перезагрузке, я имел в виду что экран перезагрузки будет висеть вечно. И поможет только hard reset. Далее система загрузиться нормально. Также, этот случай актуален только когда мы выполним обращение к такому файлу не на системном томе.


      1. Pochemuk
        22.05.2017 13:40
        +2

        У-ф-ф… Напугали… А я думал уже, что кирдык всей ФС, причем неремонтируемый даже при загрузке с диска MS DaRT. И Hard Reset не в помощь…

        Но все равно, если есть возможность внедрить это обращение в html любого сайта, то удовольствия мало. Особенно для терминальных серверов. Особенно работающих с локальными файл-серверными БД.


        1. Germanets
          22.05.2017 18:04

          Ну если уж веселиться — то можно добавить в автозапуск обращение к этому замечательному файлу, и результат для обычного пользователя будет недалёк от вечного зависания)


    1. Am0ralist
      22.05.2017 14:26
      +2

      Слушайте, ну я лично чинил комп, который не загружался (с ошибкой доступа к диску С, на котором была установлена винда). Процесс починки включил в себя — запуск SLAX с флешки, заход на диск С, чтоб проверить работает ли он и не накрылся ли диск вообще, перезагрузка и запуск винды в нормальном режиме. Простая перезагрузка не помогала совсем. Если не ошибаюсь — 10-ка была (но может и 8-ка, не помню уже)

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


  1. cyberonix
    22.05.2017 13:52

    создал html файл chrome — путь валит намертво систему, проверил на себе. Пришлось кнопкой перезагрузиться. Собрал исходник, синий экран мгновенно.

    Windows 7 Максимальная


  1. Gaikotsu
    22.05.2017 14:24

    Надеюсь MS выпустят вскоре фикс к этому, а то ведь сейчас 100% найдутся «особо одаренные», которые будут «развлекаться» этим способом, благо особых познаний в воспроизведении бага не требуется…


    1. ValdikSS
      22.05.2017 14:53

      В комментарии можно вставлять картинки-ссылки на file:// :)


      1. Goodkat
        22.05.2017 15:07

        Хабра попытается утянуть их к себе на хабрастораж.


        1. ValdikSS
          22.05.2017 15:08

          Но можно ей запретить!


          1. Goodkat
            22.05.2017 15:10

            Кто ж ей запретит? Она же хабра!


        1. kafeman
          22.05.2017 16:20

          Попытается, но не утянет. На Habrastorage грузятся только картинки.


  1. GrafDL
    22.05.2017 15:28

    Попробовал в опере. Если открыть html с такой картинкой с src на локальном диске, то система виснет. Если же открыть такую страницу по http, то не виснет.


    1. ValdikSS
      22.05.2017 15:40

      Да, будет работать только в IE.
      См. деанонимизируем пользователей Windows и получаем учетные данные Microsoft и VPN-аккаунтов. Там как раз картинка, которая не на habrastorage, и перенаправляет на file://, если статью открыть в IE.


  1. CMEPTbI4
    22.05.2017 16:49
    +4

    mkdir \\pcname\c$\$mft\text если хватит прав тоже вешает удаленный комп.


    1. Goodkat
      23.05.2017 00:07

      Эх, помню в детстве вешали удалённо комп отправив тупо FAR-ом файл с нультерминированной строкой на пайп \\%computername%\mailslot\messngr


  1. Carburn
    22.05.2017 19:01

    Еще одна вредоносная программа.


  1. alVV
    22.05.2017 21:48
    +3

    Маленький шаг человека, большой шаг для человечества маленький баг в драйвере — большое поле возможностей для вандалов всех мастей… хе-хе…
    В NTFS разделе вроде не только $mft служебный файл есть. К тому-же бывает NTFS-раздел примонтирован не только к букве раздела, а ещё и в каталог другого раздела ($mft в середине пути)
    Как я понял: достаточно запросить "запрещённый путь" к разделу смонтированному на запись и при следующей операции записи произойдет зависание драйвера.
    Из этого следуют потенциальные угрозы:


    1. Ярлык (на файл любого типа) ссылающийся на ресурс в запрещённый путь и/или в нем путь к иконке в запрещённом пути.
    2. Документ ЛЮБОГО типа, поддерживающий ссылки на ресурс в другом файле (не только HTML страницы).
    3. Сообщение в Мессенджере, делающем предварительный просмотр по ссылке ( Viber точно пытается показать картинку по ссылке)
    4. Браузеры + кэш файлов
      5 Все Редакторы к п.2 (MS офис, либре-офис и т.д.) + п.2
      6 Антивирусы + п.1, 2,4 (периодические и неожиданные зависания системы :)
      7 Служба индексирования + п.1, 2,4 (периодические и неожиданные зависания системы)
      8 Терминальные серверы и все выше описанное
      9 Кэширующий сервер на Windows + п 6, 7

      можно и дальше продолжить....


    1. sergey-b
      22.05.2017 22:33

      Можно еще добавить обычные почтовые клиенты. Получаешь письмецо, а там…

      Не очень понял про кэширующий сервер на Windows. Как вы представляете атаку на него? Или вы имеете в виду случай, когда NTFS-раздел примонтирован к каталогу?


      1. alVV
        23.05.2017 15:17

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


    1. alVV
      23.05.2017 16:26

      Как я понял: достаточно запросить "запрещённый путь" к разделу смонтированному на запись и при следующей операции записи произойдет зависание драйвера.

      Неправильно понял. Достаточно операции "я только посмотреть", и раздел может быть "только для чтения", прав не нужно никаких.
      TrueCrypt. Раздел ntfs только для чтения, как сменный носитель. При попытке чтения некорректного пути закрывается доступ к разделу.=> Попытка отмонтировать раздел убивает драйвер TrueCrypt и закрывается доступ к другим открытым разделам TrueCrypt. => Попытка доступа к любому разделу TrueCrypt вешает систему.
      Флешка: попытка доступа к неадекватному каталогу на ней убивает доступ (на время сессии) ко флешке. => Попытка "безопасно отсоединить" флешку убивает систему.


  1. Am0ralist
    23.05.2017 00:37
    -1

    Кстати, на XP был веселый глюк:
    — расшарил флешку на одном компьюетере в локальной сети и подключался с другого.
    — подключал флешку дома.
    — на флешку черви по сети (местячковые провайдеры с их любимым способом подключением клиентов через локальную сеть) постоянно скидывали свои екзешники обходя антивирусы (ну то есть те вопили об атаке, а потом при проверке находили этих червей и убивали).
    — через управление компьютером/общие папки факт того, что флешка расшарена — не отображалось, если не ошибаюсь.
    — почему думаю, что дело в этом — на другие диски и в другие папки ни разу черви не пробились, установка фаервола, а после и вовсе установка роутера — проблему решило.

    Вот и думаю, это баг был или фича? И не возможно ли это использовать тем, кто умеет как-то во вред?


  1. hddmasters
    23.05.2017 10:56

    Наверное не совсем корректно называть недостатки драйвера работающего со структурами NTFS багом самой NTFS.


    1. anatolymik
      23.05.2017 11:38

      О каком недостатке идет речь, когда ERESOURCE $mft файла не отпускается в случае fail?


      1. hddmasters
        23.05.2017 16:14

        О каком недостатке идет речь, когда ERESOURCE $mft файла не отпускается в случае fail?

        Не находите, что в этом нет вины самих структур NTFS?

        Если бы речь шла о недостатках самой файловой системы, то рассматривали бы здесь непосредственно структуры NTFS.



        1. anatolymik
          23.05.2017 16:19

          Я извиняюсь, а эти структуры тут причем?


          1. hddmasters
            23.05.2017 16:58

            Эта и прочие структуры и есть сама NTFS. В статье же говорят не совсем о файловой системе.


            1. anatolymik
              23.05.2017 17:04

              Мне казалось, что по ходу статьи я разъяснил что речь идет о реализации драйвера.


              1. hddmasters
                23.05.2017 17:56
                +1

                Ну так о чем и речь. Заголовок не совсем соответствует содержимому.


  1. Mogaba
    23.05.2017 12:31

    Получилось в WIndows 2008R2 с последними обновлениями. Зависает и при запуске программы из поста, и при выполнении dir, и при открытии html-файла c (проверял на Firefox ESR и на IE).
    Кстати, поверхностный поиск в гугле ничего не дал. Интересно, почему так — это же натурально бомба для тех же терминальных серверов. И защититься от этого, я так понимаю, невозможно?


    1. anatolymik
      23.05.2017 12:31

      Как только исправят


    1. Bronekalmar
      23.05.2017 17:02

      На терминальных серверах можно попробовать запретить пользователям чтение и запись С:/ не включая вложеные файлы и папки. А на остальные оставить как есть.


      1. mayorovp
        23.05.2017 17:12

        Не поможет. Ломается-то процесс поиска файла по указанному пути — а он выполняется до проверки прав.


        Но даже если бы получилось закрыть доступ к диску C: — как в таком случае предполагается этим сервером пользоваться?


        1. Bronekalmar
          23.05.2017 17:16

          Действительно, ошибся.

          Доступ запрещается только до корня диска С:/ а, доступ к остальным папкам и файлам в этом случае не меняется


          1. mayorovp
            23.05.2017 17:18

            Так проблема-то не в корне C:\, а в файле C:\$mft


            1. Bronekalmar
              23.05.2017 17:26

              Не так выразился… Доступ запрещается на чтение и запись файлов на диске С, но на папки не распространяется. Если я верно понимаю.
              Надо будет потестить на виртуалке


              1. Bronekalmar
                23.05.2017 17:36

                UPD.
                Проверил на виртуалке с Win 8.1 со всеми обновлениями — не помогло


                1. alVV
                  23.05.2017 18:32

                  Если не трудно, проверьте внешний запрос к IIS (internet server от микрософт) типа такого: http://%systemdrive%/$mft/testPath/TestPicture.jpg
                  Если уронит систему, то все…


                  1. alVV
                    23.05.2017 18:58

                    http:// ip-адрес/%systemdrive%/$mft/testPath/TestPicture.jpg
                    Опечатка в предыдущем тексте


                  1. Bronekalmar
                    23.05.2017 19:15

                    Установил компоненты IIS, потестил по всякому, пока все нормально, при этом dir c:$mft\123 в консоли так же перестал вешать систему, страно…
                    Завтра займусь тестированием на разных версиях Windows


                  1. mayorovp
                    23.05.2017 19:39
                    +1

                    А с какого перепугу IIS должен был выходить за пределы корня сайта при запросе с %systemdrive% в URL?


                    1. alVV
                      24.05.2017 20:02

                      Попытка чтения тоже не должна рушить систему, причем даже пользователю без прав. Не зря рекомендуется Гостевой доступ закрывать.
                      Драйвер ntfs-3g (ОС Linux Ubuntu 17.04) я на всякий случай протестировал — нормально.


                      1. mayorovp
                        24.05.2017 20:04

                        Не должна — но тут хоть механизм понятен.


                        А какой должен быть предполагаемый механизм у подобного запроса?


  1. Migalkin
    24.05.2017 19:47
    -2

    Был у меня сон " а ля Бальзаминов" — все спрашивают, как ты там- ответить не могу.


  1. 0serg
    26.05.2017 10:23
    +2

    Статья добралась до Ars Technica
    https://arstechnica.com/information-technology/2017/05/in-a-throwback-to-the-90s-ntfs-bug-lets-anyone-hang-or-crash-windows-7-8-1/
    Очень круто, спасибо за публикацию


    1. Pochemuk
      29.05.2017 12:44

      Да уже многие пишут:
      https://www.theverge.com/2017/5/26/15696704/microsoft-windows-7-windows-8-pc-crash-bug-ntfs

      На 4PDA есть перевод:
      http://4pda.ru/2017/05/29/342735/


  1. mixtape774
    29.05.2017 22:35

    не обязательно прогу создавать, подходит bat файл:
    echo "" >> c:\$fmt\0


    1. mixtape774
      30.05.2017 04:40

      уже увидел среди тонны комментов…


  1. Sabado
    29.05.2017 22:35
    -1

    Общий день, сэр / мадам


    Я господин Сабадо Б, Лингат. Частный инвестор, полный юридический и аккредитованный денежный кредитор. Я буду использовать этот носитель, чтобы сообщить вам, что я оказываю надежную финансовую помощь, так как я буду рад предложить вам кредит под 3% годовых.


    Если необходимо, предоставьте нам следующую информацию:


    Имя:
    Страна:
    Тел:
    Необходимая сумма кредита:
    Продолжительность кредита:


    (Нет социального обеспечения, Гарантированная предоплата 100%)


    Я с нетерпением жду, чтобы позволить мне быть полезным вам,
    Искренне Ваш
    Г-н Сабадо Бернардо Лингат.


    Имя кредитора: г-н Сабадо Бернандо
    Контактный адрес электронной почты: sabadobernadoloan@outlook.com


    1. anatolymik
      29.05.2017 22:39

      Прошу прощения, коллеги. Одобрил по инерции. Не специально.