As you may be aware, there are a large number of different implementations of component based systems.
Especially in languages such as C++, the benefits of ECS designs can be the ability to employ contiguous memory. If you have each system allocate a pool of components, then you can reduce the frequency of cache misses, and hence improve performance of system updates.
Hence, when you register a component with an entity, it makes sense to request it from a system, which will maintain an internal pool (and therefore update internally) of components.
IComponent* physics_component = physics_system->create_component(); entity->components.push_back(physics_component); // Some time later double delta_time = 1.0/60; physics_system->update(delta_time);
This has its difficulties when you have systems which share components with other systems. Generally speaking, avoiding this dependency helps a great deal.