I found this paper that explains the Krivine machine and relates it with the call-by-name lambda calculus:
Leonardo Rodríguez, Daniel Fridlender, and Miguel Pagano, "A Certified Extension of the Krivine Machine for a Call-by-Name Higher-Order Imperative Language", http://drops.dagstuhl.de/opus/volltexte/2014/4634/pdf/13.pdf
It defines a call-by-name lambda calculus of closures and then briefly describes the Krivine machine, that appears natural once you understand the calculus of closures. I found it readable and it can complement the very succint description of the Krivine machine in the slides proposed by Ankit. Note that it supposes that you already know what De Bruijn indices are. However the Krivine machine by itself is not very useful, since most programming languages have not call-by-name semantics (Algol 60 was one, and was deemed unusable exactly for this reason). You may therefore want to study the version of the Krivine machine for strict or lazy semantics. The paper above also discusses a Krivine machine for call-by-name with numbers and operations. For strict semantics the typical variant is the Krivine machine with marks on the stack; You can find a description of it at section 3.2 of the ZINC paper:
Xavier Leroy, "The ZINC experiment: An economical implementation of the ML language", http://gallium.inria.fr/~xleroy/publi/ZINC.pdf