Answer:
b) A separate part of the program that performs a specific task.
Step-by-step explanation:
A subroutine is a portion of the program that can be invoked to perform a specific task. Typically, it performs that task and returns execution control to the point immediately following its invocation. It may or may not maintain "history" or "state", and it may or may not throw exceptions.
A well-behaved subroutine will only operate on data passed to it, will not maintain any internal history or state, and will have only one exit.