Flow of control, resource allocation, and the proper termination of programs