Replies: 2 comments 1 reply
-
3年前に修正した箇所ですので,すぐに状況を思い出せないのですが,hrmp3カーネルのdoc/hrmp3_design_memo.txtの「プロセッサ管理ブロック(PCB)」の節の(2-3)に理由が書いてあります。まず,これを読んでいただいて,疑問が残るようでしたら,再度ご質問ください。 |
Beta Was this translation helpful? Give feedback.
1 reply
-
はい。マルチコアは難しいです。 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
FMP3を利用してSMP対応RTOSのしくみを調査している者です。
update_schedtsk_dsp()の中で、p_pcb->p_schedtsk へアクセスするところでバリアを挿入していますが(下記342行)、これの必要性が理解できません。
[kernel/task.h]
カーネル全体の中で、p_schedtskへアクセスしている箇所は多々ありますが、ほとんど(update_schedtsk_dspも)は giant_lock 取得状態でアクセスしており、バリアは不要だと考えています(コア間のアクセス競合が起きないので)。
core_support.S の dispatcher_0 にて giant_lock 未取得の状態で p_schedtsk を参照しているので、おそらくは dispatcher_0 における参照と、update_schedtsk_dsp() でのアクセスが競合(たとえば、コア0が dispatcher_0 を実行、コア1がupdate_schedtsk_dsp() を実行し、p_pcb-> p_schedtsk へのアクセスが競合する)した時のために当該バリアが必要なんだろうと想像していますが、これ以上のことがわかりません。
当該バリアは「不具合対策」として v3.2.0 で追加になったものであることはversion.txtを見て承知しています(だから絶対に必要なバリアなのでしょうが自分には理解できずに悩んでいます)。
ご多用中恐れ入りますがSMP初心者にわかりやすく当該バリアの必要性をご教示願えないでしょうか。
なおバリア命令についてはARMのマニュアルや一般的な文献を読んで一応は理解して(いるつもりで)おります。
fxycw360
Beta Was this translation helpful? Give feedback.
All reactions