LINUX.ORG.RU

вопрос по файловой системе

 ,


0

2

Что происходит, когда мы запускаем исполняемый файл ./myfile? Насколько я понимаю, текст файла компилируется, и загружается в оперативную память, а затем уже выполняется, так? Если так, то почему нельзя сделать вот так: ./myfile>>myfile? Зачем блокировать доступ, если файл для исполнения уже не нужен, все содержимое его уже считано к этому моменту?

Ответ на: комментарий от adamantan

А что он, по-твоему, с жесткого диска что-ли выполняется? Такое было лет 100 назад, разве что. сейчас файлы даже во время редактирования в буфер считываются.

filequest
() автор топика
Ответ на: комментарий от adamantan

Собственно, можешь попробовать. Запусти какой-нибудь демон, а потом открой файл этого демона и отредактируй, сохрани, и смотри на реакцию. Никакой реакции скорей всего не будет.

filequest
() автор топика

Что по-твоему означает «компилируется»? А то я путаюсь в твоих неформатированных мыслях

anonymous
()
Ответ на: комментарий от anonymous

Да какая разница? это в данном случае не имеет значения, важно что он считывается в оперативку, а уже затем исполняется. Компиляция, если по-простому — это трансляция в нейтив или код VM вкупе с препроцессингом, оптимизацией и тп.

filequest
() автор топика
Ответ на: комментарий от filequest

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

Не обязательно. Файл мапится в память, копирования целиком в оперативную память может и не быть. Плюс есть всякие Execute-in-place.

hateyoufeel ★★★★★
()

Насколько я понимаю, текст файла компилируется

Исполняемые файлы бывают разные. В бинарниках содержится машинный код напрямую исполняемый процессором и они просто маппятся в память. Это не значит что файл считан в неё полностью - страницы подгружаются по мере надобности, а при нехватки памяти могут и выкидываться из оперативки. По этой причине он и блокируется для записи, т.к. изменение скорее всего нарушит консистентность и приведёт к падению программы. Скрипты же можно исполнять разными способами. Кто-то читает текст в память и компилирует в байткод (тогда ./myfile>>myfile вполне себе можно сделать), кто-то также маппит (причём тут уже от записи не защититься и ./myfile>>myfile опять же можно сделать, но если просто изменить скрипт он как правило упадёт). Питон вон вообще байткод кладёт рядом в отдельный файл, который скорее всего маппит, но при изменении исходника наверняка переписывает полностью, поэтому таких проблем не иммеет (но это предположение, не пользуюсь питоном).

slovazap ★★★★★
()
Последнее исправление: slovazap (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.