2 votes

Une interruption peut-elle être programmée de cette manière ?

Je suis en train de créer un shell qui peut lancer des programmes en arrière-plan. Lorsqu'un programme commence à utiliser une certaine quantité de mémoire, par exemple 100 Mo, je veux qu'une interruption soit déclenchée et qu'une fonction soit exécutée. L'alternative est d'avoir un processus qui continue à tourner et à vérifier l'état des processus d'arrière-plan. L'utilisation d'une interruption semble utiliser moins de ressources CPU. Est-ce exact ? Est-il possible de procéder ainsi ?

J'essaie de le faire sous Linux.

1voto

ousoo Points 974

Sous Linux, vous pouvez fixer une limite de ressources pour un processus à l'aide de la commande setrlimit . Dans votre cas, RLIMIT_AS o RLIMIT_DATA peut être utilisé. malloc qui utilise brk L'utilisation d'un système de gestion de l'eau, de l'air et de l'eau, échouera lorsque la limite sera atteinte. Vous pouvez contrôler la valeur renvoyée par malloc et de lancer vous-même un signal.

1voto

Jerry Coffin Points 237758

Une façon de procéder sous Linux serait d'utiliser ptrace . Vous utiliserez alors PTRACE_PEEKUSER pour examiner les valeurs que l'enfant fournit au noyau lorsqu'il effectue des appels système. Vous chercheriez des choses comme mmap et/ou brk. La fonction appelée est définie par la valeur de EAX lorsque int 80 est exécuté (désolé, je ne connais pas les nombres pour chaque mmap ou brk).

1voto

Lorsqu'un programme commence à utiliser une certaine quantité de mémoire, par exemple 100 Mo, je veux qu'une interruption soit déclenchée et qu'une fonction soit exécutée.

Selon les besoins. Si la capture des appels à malloc est suffisante, vous pourriez être intéressé :

Si vous souhaitez capturer brk(2) également - ( article connexe ), vous pouvez suivre certaines des solutions de traçage.

ou l'instrumentation binaire

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X