Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ограничение памяти [D7, WinXP]


Страницы:   1 2

stin10 ©   (2005-06-14 09:49:00) 

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


pasha_golub   (2005-06-15 15:51:00) [1]

Andy BitOff ©   (15.06.05 11:52) [37]
Поддерживаю. Хочется увидеть прямой линк


Andy BitOff   (2005-06-15 11:52:00) [2]

Неужели теперь в msdn пишу так; "...Поищи какой-нить пример по CreateJobObject. По аналогии воткни нужные значения в описанные выше структуры.
Просто сделано не для программистов, а для системы, чтобы ей было удобно. Зато можно ограничивать почти все. Кроме памяти можно задать максимальное время работы, что можно, а что нельзя юзать, приоритет, запретить юзать клипборд, изменение системных параметров, юзать чужие окна, и многое другое.
Система навороченная, поэтому все не так просто. Нужно повозиться. С чем и желаю успехов. Прямая тебе дорога в MSDN за инфой..."


stin10   (2005-06-15 11:05:00) [3]

msdn


Andy BitOff   (2005-06-15 10:56:00) [4]

stin10   (15.06.05 10:10) [33]

Копирайт, пожалуйста, и ссылку на источник.


TUser   (2005-06-15 10:34:00) [5]

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

SoftICE забыл.


stin10   (2005-06-15 10:10:00) [6]

а что вы скажите по поводут этого
Ограничения на процессы можно накладывать в WinNT системах.
Системы 9х не поддерживают данных функций.
Чтобы ограничить процесс или процессы, их помещают в задание.
На задание накладываются всевозможные ограничения, помещают в него процессы.
Ищи в инете функцию CreateJobObject
В структурах OBOBJECT_EXTENDED_LIMIT_INFORMATION и JOBOBJECT_BASIC_LIMIT_INFORMATION (это часть предыдущей структуры) нужно выставлять флаги ограничения на минимальный и максимальный объем памяти на процесс или общей памяти на все процессы в задании, выставить значения ограничений в ProcessMemoryLimit или JobMemoryLimit. Потом присвоить эти ограничения хэндлу задания через SetInformationJobObject. Потом создать новый процесс и воткнуть его в это задание.
Слишком много информации ковырять нужно. Сейчас времени на это нет.
Поищи какой-нить пример по CreateJobObject. По аналогии воткни нужные значения в описанные выше структуры.
Просто сделано не для программистов, а для системы, чтобы ей было удобно. Зато можно ограничивать почти все. Кроме памяти можно задать максимальное время работы, что можно, а что нельзя юзать, приоритет, запретить юзать клипборд, изменение системных параметров, юзать чужие окна, и многое другое.
Система навороченная, поэтому все не так просто. Нужно повозиться. С чем и желаю успехов. Прямая тебе дорога в MSDN за инфой...


pasha_golub   (2005-06-14 17:31:00) [7]

ulimit - ограничить ресурсы под Линью.


pasha_golub   (2005-06-14 17:25:00) [8]

О, нашел.

Вот тут об ограничении для пользователей:
http://www.linux.com/howtos/Xterminals/advanced.shtml


pasha_golub   (2005-06-14 17:21:00) [9]

По поводу 5 пункта.

Можно запустить через system, но, ИМХО, лучше через fork, а в теле основной программы ждать завершения работы через waitpid


pasha_golub   (2005-06-14 17:19:00) [10]

Не могу найти исходников, но идея такова:

1. Сервис слушает и заливает полученные исходники, например, в /tmp/practice

2. Затем переходим в этот каталог chdir("/tmp/practice")

3. Переопределяем корень системы для заданного процесса chroot("/tmp/practice")

4. "Понижаем пользователя" setuid(500)

5. Компилируем и запускаем полученные исходники.

6. ПРоверяем вывод программы.

7. После чего все грохаем.

Можно ограничить и память и дисковое пространство для процесса, но я в упор не помню как...

Начать поиск можно отсюда: http://www.linuxfocus.org/English/January2002/article225.shtml

ЗЫ В папке /tmp должны быть все необходимые файлы для компиляции, или можно скомпилить исходники до установки chroot.


pasha_golub   (2005-06-14 16:58:00) [11]

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

Посему:
1. Использовать FreePascal
2. Использовать Linux

Щас я поищу у себя, может даже дам готовый вариант


evvcom   (2005-06-14 16:14:00) [12]


> то ей можно подсунуть другой Memory Manager

Да какой ему менеджер? Во первых, автор не понимает элементарных вещей, а во вторых, далеко не каждый программист пользует Дельфовый менеджер. Хотя можно, конечно, и API перехватить, но рано автору это еще. Имхо.


-=XP=-   (2005-06-14 16:11:00) [13]

Кроме того возможно стоит понизить приоритет выполнения.

Как это отразится на использовании памяти приложением?

Вобщето если программа компилируется то ей можно подсунуть другой Memory Manager

Один из возможных оговоренных вариантов, если не используются механизмы выделения памяти ОС, типа VirtualAlloc, GlobalAlloc и пр.


Erik1   (2005-06-14 15:59:00) [14]

Вобщето если программа компилируется то ей можно подсунуть другой Memory Manager. Кроме того возможно стоит понизить приоритет выполнения.
 А о выполнения Delphi кода скриптом стоит подумать, поскольку такие движки уже есть.


-=XP=-   (2005-06-14 14:10:00) [15]

сколько памяти на каждую проги

Еще раз. Не путайте виртуальную память с физической памятью. Ни одно приложение Win32 не работате с физической памятью. Вся выделяемая приложению память - виртуальная. Распределением памяти управляет ОС. Она же может (и часто делает), без ведома приложения, скинуть страницы памяти в Swap-файл на диск.
Еще раз: 4 ГБайта - виртуальноеадресное пространство. И, сколько бы памяти не было установлено на конкретно взятом компьютере, каждое приложение получает 4 ГБайтное адресное пространство, из которых 2 ГБайта отводится приложению, 2 ГБайта - системе. Приложение вольно брать для своих нужд из этих 2 ГБайт столько памяти, сколько ему нужно. И никто не ограничивает приложение в аппетитах.

Можно еще ограничить размер стека директивой компилятора {$m MinStackSize, MaxStackSize}, но это, опять же, чревато плачевными последствиями.

Хотите ссылки - поищите в Google.
Для начала, прочитайте хотя бы вот это: http://itc.ua/article.phtml?ID=539&IDw=1&pid=15


Alexander Panov   (2005-06-14 14:07:00) [16]

stin10   (14.06.05 14:00) [22]
уважаемый XP, с этого места поподробнее и по конкретнеее и ссылками  если можно т.е если запусть десять прог одновременно что получиться сколько памяти на каждую проги


на каждую по 4Гб.


stin10   (2005-06-14 14:00:00) [17]

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


Digitman   (2005-06-14 13:39:00) [18]


> stin10   (14.06.05 13:21) [19]



> нет ли чего нибудь в роде это функции, но относительно оперативки


не было, нет и не предвидится.


-=XP=-   (2005-06-14 13:37:00) [19]

нет ли чего нибудь в роде это функции, но относительно оперативки

Да что Вам эта оперативка сдалась? Программа работает в виртуальном адресном пространстве, и объем доступной программе памяти не зависит от объема установленной на машине физической оперативной памяти. У каждого приложения 4 ГБайтное адресное пространство, из которого программе доступно 2 ГБайта. Так уж устроена 32-разрядная Windows. Единственное, что Вы можете сделать - так это заставить ОС скинуть занятую процессом память в Swap-файл при помощи функции SetProcessWorkingSetSize() - но это полумера, для "отвода глаз".


stin10   (2005-06-14 13:21:00) [20]

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо