There are many possible definitions of Quality of Service (QoS), but for the purposes contrasting QoS to Junos Class of Service (CoS), QoS is the manipulation of aggregates of traffic such that each is forwarded in a fashion that is consistent with the required behaviors of the applications generating that traffic.
From an individual user’s point of view, QoS is experienced on the end-to-end flow of traffic. However, it is implemented as a set of behaviors at each hop – this is an important distinction that is absolutely fundamental to QoS.
In effect, this means that a single hop with no or wrongly configured QoS can destroy the end-to-end experience and nothing that subsequent nodes do can recover the end-to-end quality of experience for the user. That doesn’t mean that QoS must be configured at every hop (to the same extent). However, it’s critical to understand that a single unintentionally behaving hop can undermine the most intricate QoS design.
On the other hand, Class of Service (CoS) is a configuration construct used within the Junos CLI to configure an individual node to implement certain behaviors at that node, such that the end-to-end QoS is consistent with the desired end-to-end user experience or application behavior.
Each class is associated with an aggregate of traffic that requires the same behaviors as it flows through the network device. Classes do not relate implicitly to traffic belonging to a single application; rather, any application requiring the same behaviors generates traffic belonging to the same class.
Please see the following Day One Guide: http://www.juniper.net/us/en/training/jnbooks/day-one/fundamentals-series/deploying-basic-qos/