We present the lambda calculus with resources, and two variants of it: a deterministic restriction, the lambda calculus with multiplicities, and an extension with a convergence testing operator. These calculi provide control on the substitution process - deadlocks may arise if not enough resources are available to carry out all the substitutions needed to pursue a computation. The design of these calculi was motivated by Milner's encoding of the lambda calculus in the pi calculus. As Boudol and Laneve have shown elsewhere, the discriminating power of the lambda calculus with multiplicities (given by the contextual observational equivalence) over lambda terms coincides with that induced by Milner's encoding, and coincides also with that provided by the lazy algebraic semantics (Levy-Longo trees). The main contribution of this paper is model-theoretic. We define and solve an appropriate domain equation, and show that the model thus obtained is fully abstract for the calculus with convergence testing. The techniques used are in the line of those used by Abramsky for the lazy lambda calculus, the main departure being that the resource-consciousness of our calculi leads us to introduce a non-idempotent form of intersection types.