>> При том что я описывал загрузку образа Portable Executable в NT, а
>> именно, что содержимое файла считывается по мере надобности, при доступе к
>> соответствующим страницам ОЗУ. Про невозможность удаления файла указано в скобочках и
>> как следствие. Сам файл, кстати, закрывается; но счётчик ссылок на связанный
>> объект ядра ненулевой и не то что удалить, даже переоткрыть файл
>> с несовместимыми правами нельзя.
> я, собсно, обострился на фразу "(поэтому невозможно удалить запущенный экзешник)". не поэтому,
> а потому что вообще любой открытый файл в винде удалить нельзя. Только выглядело обострение так: "А чо, в линуксе возможно удалить запущенный бинарник?" :) https://www.opennet.ru/openforum/vsluhforumID3/125112.html#168
Что касается "любых файлов", это верно в первом приближении. Если детальнее, то не всё так однозначно:
1. Формально, указанный при открытии файла флажок FILE_SHARE_DELETE позволяет успешно отработать функции удаления; последующие попытки открыть файл обломятся -- с точки зрения пользователя, файл удалён. Подсчёт ссылок на нижележащем уровне -- это отдельная тема, в т.ч. "If you rename or delete a file and then restore it shortly afterward, the system searches the cache for file information to restore. Cached information includes its short/long name pair and creation time." https://docs.microsoft.com/en-us/windows/win32/api/fileapi/n...
2. Файл "экзешника" закрывается сразу после создания секции. Именно права на секцию не позволяют сделать с файлом ничего лишнего, иначе это нарушит работу менеджера памяти. Для OpenNet-а этот нюанс не важен, но механизм напрямую с файлами не связан, просто так совпало.
>> При чём тут нынешнее положение дел в Linux и inode -- понятия
>> не имею. Эксперт же написал https://www.opennet.ru/openforum/vsluhforumID3/125112.html#102
>> что в _то_время_ mmap() не было -- стало быть и открытым файл
>> некому держать.
> mmap тут я вообще хз причем.
Про mmap() я написал как об аналоге, поскольку используемая в Виндосе NtMapViewOfSection() здесь мало кому понятна.
> при загрузке elf бинарника в память
> грузятся все сегменты PT_LOAD, elf должен запускаться даже там, где mmap
> нет в принципе.
Да. Поэтому, когда типовой объём ОЗУ был мал, NT немножко экономила память и выигрывала. Ныне наоборот выгоднее сразу считать весь файл.