An algorithm is a sequence of well-defined steps that produce a result in finite time.
Well-defined step: That's something you can do, or calculate, that is precisely defined. Just by reading the step you know what you have to do and how to do it. Specifically, you can write it in a programming language you know, and be sure the program fragment matches the step exactly.
Sequence: The steps are executed in an order that is specified. Steps may be executed more than once depending on the data (loops) or not executed at all depending on the data (if statements). Parallel algorithms impose only a partial order on the steps, so I'm oversimplifying here. It would be more correct to describe it as a partially-ordered set than a sequence, but I wanted to keep the words a little simpler. Besides, it's easily possible to embed a partially-ordered set in a full order.
Result: An ending state or value. It doesn't have to be predictable in advance, but it does have to be a definite end satisfying some condition. This does mean that an operating system is not an algorithm, although it uses a whole lot of them.
Finite: An algorithm is guaranteed to stop sometime, at least on a machine that can run long enough. It isn't necessarily guaranteed to stop in a predictable time, and it isn't guaranteed that it would stop before the sun expands and turns red on any existing machine. This also means an operating system is not an algorithm, as ideally it will run forever. I've seen the word "procedure" used to describe something that would be an algorithm if we were sure it would stop sometime. (It is possible to have an algorithm that will stop in an unknown amount of time. Suppose, say Goldbach's conjecture was proved mathematically false, in a nonconstructive proof, so there was an even number > 2 that wasn't the sum of two primes. An algorithm that simply tested even numbers would then eventually terminate, although nobody would know when.)
The algorithm is an intentionally abstract sort of thing, so we don't consider questions like "Is it physically possible to execute this before the heat death of the Universe?". They'd be too hard to answer. If it relates to computer operations, it's easy to implement it in a programming language.