The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"программа в памяти"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"программа в памяти"
Сообщение от Tors emailИскать по авторуВ закладки on 09-Сен-04, 18:39  (MSK)
Допустим есть прога1 которая запускает другую прогу2 многократно.
Можно ли зделать так, чтобы при необходимости прога1 загружала образ проги2 в память и запускала ее.
После завершения проги2, она остается в памяти и ждет следующего запуска.
И по завершении прога1 удаляет прогу2 из памяти.
Т.е. запускать прогу2 не з диска, а из памяти
  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "программа в памяти"
Сообщение от Maxim Kuznetsov Искать по авторуВ закладки on 10-Сен-04, 01:10  (MSK)
>Допустим есть прога1 которая запускает другую прогу2 многократно.
>Можно ли зделать так, чтобы при необходимости прога1 загружала образ проги2 в
>память и запускала ее.
>После завершения проги2, она остается в памяти и ждет следующего запуска.
>И по завершении прога1 удаляет прогу2 из памяти.
>Т.е. запускать прогу2 не з диска, а из памяти

а вообще-то так оно и происходит на самом деле ;-))
есть еще много чего разного интерестного - почитайте побольше про архитектуру unix

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "программа в памяти"
Сообщение от Murr Искать по авторуВ закладки(??) on 10-Сен-04, 15:09  (MSK)
>Допустим есть прога1 которая запускает другую прогу2 многократно.
>Можно ли зделать так, чтобы при необходимости прога1 загружала образ проги2 в
>память и запускала ее.
>После завершения проги2, она остается в памяти и ждет следующего запуска.
>И по завершении прога1 удаляет прогу2 из памяти.
>Т.е. запускать прогу2 не з диска, а из памяти


Теоретически можно превратить ELF в сырой образ с помощью objcopy и выполнять его из своего контекста, но там будут свои проблемы (например, как отловить выход программы2; в принципе это можно сделать, запустив ее из дочернего процесса-нити - в Linux).

В принципе, вы сильно много этим не выиграете, даже если закрепить образ в памяти.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "программа в памяти"
Сообщение от Maxim Kuznetsov Искать по авторуВ закладки on 10-Сен-04, 19:14  (MSK)
>>Допустим есть прога1 которая запускает другую прогу2 многократно.
>>Можно ли зделать так, чтобы при необходимости прога1 загружала образ проги2 в
>>память и запускала ее.
>>После завершения проги2, она остается в памяти и ждет следующего запуска.
>>И по завершении прога1 удаляет прогу2 из памяти.
>>Т.е. запускать прогу2 не з диска, а из памяти
>
>
>Теоретически можно превратить ELF в сырой образ с помощью objcopy и выполнять
>его из своего контекста, но там будут свои проблемы (например, как
>отловить выход программы2; в принципе это можно сделать, запустив ее из
>дочернего процесса-нити - в Linux).
>
>В принципе, вы сильно много этим не выиграете, даже если закрепить образ
>в памяти.
вообще ничего не выиграет - из контекста процесса, управлять памятью и исполнением эффективнее чем из ядра - не выйдет. Да и бредовая эта затея - если запускается второй экземпляр программы, то код лишний раз в память не считывается - проверьте, потрассируйте системные вызовы..много чего неожиданного можно узнать

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "программа в памяти"
Сообщение от Murr Искать по авторуВ закладки(??) on 11-Сен-04, 00:59  (MSK)
>вообще ничего не выиграет - из контекста процесса, управлять памятью и исполнением
>эффективнее чем из ядра - не выйдет. Да и бредовая эта
>затея - если запускается второй экземпляр программы, то код лишний раз
>в память не считывается - проверьте, потрассируйте системные вызовы..много чего неожиданного
>можно узнать


как это считывается или не считывается? :)
если отбросить вопросы кэширования, то сэкономить
можно только на динамической компоновке и всем, что с ней связано(+создании нового процесса).

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

единственное - это не очень технически просто и не очень переносимо. :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "программа в памяти"
Сообщение от Murr Искать по авторуВ закладки(??) on 11-Сен-04, 01:13  (MSK)
>
>как это считывается или не считывается? :)
>если отбросить вопросы кэширования, то сэкономить
>можно только на динамической компоновке и всем, что с ней связано(+создании нового
>процесса).
>
>можно один раз проделать эту самую компоновку внутри контекста своего процесса, сохранить
>результаты и поднимать их каждый раз, когда нужно запускать соответствующую программу.
>
>
>единственное - это не очень технически просто и не очень переносимо. :)
>

В принципе, можно найти символ main в программе2, поставить там breakpoint, запустить ее и из точки breakpoint делать fork.

Тогда на создании процесса не сэкономить, но это уже несложно реализовать технически. :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "программа в памяти"
Сообщение от Maxim A.Kuznetcov Искать по авторуВ закладки on 11-Сен-04, 02:38  (MSK)
>если отбросить вопросы кэширования, то сэкономить
>можно только на динамической компоновке и всем, что с ней связано(+создании нового
>процесса).
>
>можно один раз проделать эту самую компоновку внутри контекста своего процесса, сохранить
>результаты и поднимать их каждый раз, когда нужно запускать соответствующую программу.

чтобы экономить на динамической компановке при запуске можно
1) собрать программу статичной (-static)
2) использовать prelink
но уж никак не такие изощренные методы ;-)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "программа в памяти"
Сообщение от Murr Искать по авторуВ закладки(??) on 11-Сен-04, 11:09  (MSK)

>чтобы экономить на динамической компановке при запуске можно
>1) собрать программу статичной (-static)
>2) использовать prelink
>но уж никак не такие изощренные методы ;-)


Безусловно... если есть исходный код. :)

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру