_ RU.LINUX (2:5077/15.22) ___________________________________________ RU.LINUX _
From : Cyril Rotmistrovsky 2:463/59.60 22 Jun 97 11:08:16
Subj : что-то вpоде insmod ?
________________________________________________________________________________
Comment tu vas, Konstantin?
En 18 Jun 97 01:23:06, Konstantin Kivi as ecrit a Cyril Rotmistrovsky:
[.. ушло в /dev/null ..]
CR>>>> Тут уже объясняли, что в Linuxе (как, навеpное, и в большинстве
CR>>>> совpеменных юниксов на том железе, котоpое это позволяет) в
CR>>>> память гpузятся те и только те стpаницы кода/данных
CR>>>> пpогpаммы/dll, к котоpым идет обpащение, и только в момент
CR>>>> самого обpащения.
CR>> Естественно, такую экзотику, как самомодифицирующийся код, я во
CR>> внимание не принимаю ;). Даже не знаю, можно ли такое под Линуксом
CR>> сделать ;) (под пополамой 3.0 только ценой очень крутых извращений).
KK> С помощью make :-). У меня нам "раз" пересобирается запущенная
KK> программа. Кто бы объяснил ...
Сейчас все объясню. И то, как пересобирается, и то, как при этом HЕ
модифицируется.
Дело в том, что *nix, когда ты открываешь файл (а файл - это i-node + data
blockи, на которые он ссылается) в памяти размещается структурка, связанная с
ним. И в inode, и в структурке в числе прочих данных хранятся счетчики: в i-node
счетчик ссылок (сколько хард-линков на этот i-node существует), а в памяти -
счетчик обращений (сколько процессов открыло этот файл).
Так вот, когда ты запустил программу - файл с ее текстом (т.е.кодом) был открыт.
Записать в него тебе никто не даст, но удалить ссылку на него (на i-node) - без
проблем. При удалении всех ссылок файл все равно останется, потому, что счетчик
обращений в памяти HЕ 0 (файл же открыт). make (точнее, gcc) создает новый файл
(i-node), правда, его имя в каталоге то же, что и у старого, но файл это
_другой_.
А когда программа завершает работу, счетчик обращений обнуляется, и поскольку
счетчик ссылок на старый файл уже равен нулю, система освобождает блоки, которые
он занимал на винте.
Поэтому, btw, в *nix нет понятия "удалить файл". Ты можешь только удалить ссылку
на него (unlink, man 2 unlink), а файл удалит уже операционка тогда, когда
заметит, что больше он никому не нужен.
KK> Sincerely Yours, Konstantin.
Bon chance,
Cyril
: Протокол IPX/SPX является быстрым маршрутизируемым протоколом для небольших
сетей, но у него есть один недостаток - он разработан фирмой Novell...
(c) "Секреты Windows NT 4.0 Server"
--- Individualists, unite! (QDed/QEcho)
* Origin: Microsoft free station @ 2:463/59.6o (2:463/59.60)