連続書き込みご容赦ください。

スタックオーバーフローという言葉を耳にしますが
スタック領域が足らず、コードやデータを破壊してしまう
ことだと認識しています。

スタックが上方、下方どちらに伸張するかを別にしても
CS=DS=SS=ESの場合、スタックとコードの区分けは誰が管理
しているのでしょうか。
OS、CPU、各アプリケーション?

またタスク切り替え時には、スタックの切り替えが必須ですが
タスクAのスタックとタスクBのスタック
区別・管理するはOSという認識であっていますでしょうか。

この辺のことはおそらく基礎の基礎だと思うのですが
理解できていません、どなたかアドバイスをいただけないでしょうか。