Download
Magazine
Develop
Account
Download
Magazine
Develop
Login
Forgot Account/Password
Create Account
Language
Help
Language
Help
×
Login
Login Name
Password
×
Forgot Account/Password
Category:
Software
People
PersonalForge
Magazine
Wiki
Search
OSDN
>
Find Software
>
System
>
Operating System Kernels
>
Hyper Operating System(ITRON仕様OS)
>
Forums
>
Help
>
メールボックスでSUNPENDED
Hyper Operating System(ITRON仕様OS)
Fork
Description
Project Summary
Developer Dashboard
Web Page
Developers
Image Gallery
List of RSS Feeds
Activity
Statistics
History
Downloads
List of Releases
Stats
Source Code
Code Repository list
Git
hos-v4a
CVS
View Repository
Ticket
Ticket List
Milestone List
Type List
Component List
List of frequently used tickets/RSS
Submit New Ticket
Documents
Communication
Forums
List of Forums
Developers (758)
Help (688)
Open Discussion (342)
Mailing Lists
list of ML
hos-cvs
hos-git
News
Forums:
Help
(Thread #1321)
Return to Thread list
RSS
メールボックスでSUNPENDED (2002-10-29 16:54 by
hamayan
#2441)
Reply
Create ticket
お世話になっています。いつも質問ばかりで貢献できなくてすいません。
今、H8/3069でHOS-V4を使ってプログラムを作っています。
その中でtrcv_mbxを使ってメッセージ待ちを行っていると、時折、と言いますか、結構高い頻度でそのタスクがSUSPENDEDに陥っています。
コード上には一切sus_tskを使っていないので・・・、暫くこれで嵌まっています。
別タスクでモニターして、rsm_tskをすると、復帰します。
例えば、の話しなのですが、
mwup_tsk.c中でタスクの状態を調べるのに、
if ( mtcb->tskstat == TTS_WAI )
{
mtcb->tskstat = TTS_RDY; /* 待ち解除なら実行可能状態 */
}
else
{
mtcb->tskstat = TTS_SUS; /* 二重待ち状態なら強制待ち状態 */
}
となっていますが、この寸前に待ち状態が解除される事は無いのでしょうか?
すんません。
Reply to #2441
×
Subject
Body
Reply To Message #2441 > お世話になっています。いつも質問ばかりで貢献できなくてすいません。 > > 今、H8/3069でHOS-V4を使ってプログラムを作っています。 > その中でtrcv_mbxを使ってメッセージ待ちを行っていると、時折、と言いますか、結構高い頻度でそのタスクがSUSPENDEDに陥っています。 > コード上には一切sus_tskを使っていないので・・・、暫くこれで嵌まっています。 > 別タスクでモニターして、rsm_tskをすると、復帰します。 > > 例えば、の話しなのですが、 > mwup_tsk.c中でタスクの状態を調べるのに、 > if ( mtcb->tskstat == TTS_WAI ) > { > mtcb->tskstat = TTS_RDY; /* 待ち解除なら実行可能状態 */ > } > else > { > mtcb->tskstat = TTS_SUS; /* 二重待ち状態なら強制待ち状態 */ > } > となっていますが、この寸前に待ち状態が解除される事は無いのでしょうか? > > すんません。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-29 17:31 by
hamayan
#2442)
Reply
Create ticket
自己フォローになってしまいますが、
先のファイルを
if ( mtcb->tskstat == TTS_WAI )
{
mtcb->tskstat = TTS_RDY; /* 待ち解除なら実行可能状態 */
}
else if( mtcb->tskstat == TTS_WAS )
{
mtcb->tskstat = TTS_SUS; /* 二重待ち状態なら強制待ち状態 */
}
else{}
と直しましたら、今の所嵌まっていません。
だからと言って自信は全然無いのですが。
Reply to
#2441
Reply to #2442
×
Subject
Body
Reply To Message #2442 > 自己フォローになってしまいますが、 > 先のファイルを > if ( mtcb->tskstat == TTS_WAI ) > { > mtcb->tskstat = TTS_RDY; /* 待ち解除なら実行可能状態 */ > } > else if( mtcb->tskstat == TTS_WAS ) > { > mtcb->tskstat = TTS_SUS; /* 二重待ち状態なら強制待ち状態 */ > } > else{} > > と直しましたら、今の所嵌まっていません。 > だからと言って自信は全然無いのですが。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-29 18:29 by
m-arai
#2443)
Reply
Create ticket
こりゃバグでしょうね。待ち状態以外でmknl_wup_tsk()
したら、必ず強制待ち状態で嵌ってしまうわけで。
hamayanさんの対処で問題ないように思えますが…。
src/kernel/tsk/wup_tsk.cの
/* 起床要求キューイングのチェック */
if ( !(mknl_get_tskstat(&tcb_ram->mtcb) & TTS_WAI)
|| mknl_get_tskwait(&tcb_ram->mtcb) != TTW_SLP )
に、!(mknl_get_tskstat(&tcb_ram->mtcb)&TTS_WAS
を加えるという解もあるかな?
いづれが適切かは、設計者のご意見を伺わないと。
だけど、お忙しいようですからね。
#いや、別に催促はしてませんよ!本当に。
Reply to
#2442
Reply to #2443
×
Subject
Body
Reply To Message #2443 > こりゃバグでしょうね。待ち状態以外でmknl_wup_tsk() > したら、必ず強制待ち状態で嵌ってしまうわけで。 > hamayanさんの対処で問題ないように思えますが…。 > > src/kernel/tsk/wup_tsk.cの > /* 起床要求キューイングのチェック */ > if ( !(mknl_get_tskstat(&tcb_ram->mtcb) & TTS_WAI) > || mknl_get_tskwait(&tcb_ram->mtcb) != TTW_SLP ) > に、!(mknl_get_tskstat(&tcb_ram->mtcb)&TTS_WAS > を加えるという解もあるかな? > > いづれが適切かは、設計者のご意見を伺わないと。 > だけど、お忙しいようですからね。 > #いや、別に催促はしてませんよ!本当に。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-29 20:50 by
m-arai
#2444)
Reply
Create ticket
いや、やはりmknl_wup_tsk()が呼ばれる時は、必ず
TTS_WAIかTTS_WASでないといけないような気が
してきました。だから、src/kernel/tsk/wup_tsk.c
の方を修正すべきでしょう。
しかし、私が先ほど示したものは誤りです。あれは忘れて
ください。(--;
オブジェクト状態チェックの所で待ち状態(当然、二重待
ちも含まれる)以外を弾くようにするのが正しい…
のかなぁ?
て見てて、別のバグ発見。
return E_OK; /* オブジェクト未生成 */
は、
return E_NOEXS; /* オブジェクト未生成 */
Reply to
#2443
Reply to #2444
×
Subject
Body
Reply To Message #2444 > いや、やはりmknl_wup_tsk()が呼ばれる時は、必ず > TTS_WAIかTTS_WASでないといけないような気が > してきました。だから、src/kernel/tsk/wup_tsk.c > の方を修正すべきでしょう。 > > しかし、私が先ほど示したものは誤りです。あれは忘れて > ください。(--; > > オブジェクト状態チェックの所で待ち状態(当然、二重待 > ちも含まれる)以外を弾くようにするのが正しい… > のかなぁ? > > > て見てて、別のバグ発見。 > return E_OK; /* オブジェクト未生成 */ > は、 > return E_NOEXS; /* オブジェクト未生成 */
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-30 09:04 by
hamayan
#2446)
Reply
Create ticket
ただ、mknl_wup_tsk()自体複数の(20個位)から呼ばれているので、そのへん大丈夫でしょうか。
Reply to
#2444
Reply to #2446
×
Subject
Body
Reply To Message #2446 > ただ、mknl_wup_tsk()自体複数の(20個位)から呼ばれているので、そのへん大丈夫でしょうか。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-30 09:47 by
m-arai
#2447)
Reply
Create ticket
wup_tsk()以外は、待ちキューから取ってきた、オブジェ
クト状態がTTS_WAIかTTS_WASであるタスクに対する操作
に限られる筈なので、特に問題無いかと思います。
#多分 (^^;
と、よく考えてみると、hamayanさんはwup_tsk()を使っ
ているとは一言も書いておられなかったのですね。
ざっと見て、mknl_wup_tsk()でオブジェクト状態が
不正になりえるのはwup_tsk()しかないように見えたの
で、丸っきり決めこんでました。
wup_tsk()、使っているんですよね?
Reply to
#2446
Reply to #2447
×
Subject
Body
Reply To Message #2447 > wup_tsk()以外は、待ちキューから取ってきた、オブジェ > クト状態がTTS_WAIかTTS_WASであるタスクに対する操作 > に限られる筈なので、特に問題無いかと思います。 > #多分 (^^; > > と、よく考えてみると、hamayanさんはwup_tsk()を使っ > ているとは一言も書いておられなかったのですね。 > ざっと見て、mknl_wup_tsk()でオブジェクト状態が > 不正になりえるのはwup_tsk()しかないように見えたの > で、丸っきり決めこんでました。 > > wup_tsk()、使っているんですよね?
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-30 10:11 by
hamayan
#2448)
Reply
Create ticket
wup_tsk()は使っていないタスクがサスペンデッドになっています。trcv_mbx()です。
私の考えた理由は、snd_mbx()の最初の辺りでシステムがロックされますが、この間にシステムタイマーを更新する割り込みが入って来て、ロック解除を待ちます。
trcv_mbx()なのでsnd_mbx()でメッセージを送信すると、すかさず、待ち状態を解除され、レディとなると思いますが、その操作の直後に、ロック解除となるので、この時、たまたまタイムアウト処理が行われると、先のサスペンデッドに陥るのでは?と考えていたんですが、甚だ自信無い話しです。
Reply to
#2447
Reply to #2448
×
Subject
Body
Reply To Message #2448 > wup_tsk()は使っていないタスクがサスペンデッドになっています。trcv_mbx()です。 > > 私の考えた理由は、snd_mbx()の最初の辺りでシステムがロックされますが、この間にシステムタイマーを更新する割り込みが入って来て、ロック解除を待ちます。 > trcv_mbx()なのでsnd_mbx()でメッセージを送信すると、すかさず、待ち状態を解除され、レディとなると思いますが、その操作の直後に、ロック解除となるので、この時、たまたまタイムアウト処理が行われると、先のサスペンデッドに陥るのでは?と考えていたんですが、甚だ自信無い話しです。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-30 10:37 by
m-arai
#2450)
Reply
Create ticket
しかし、snd_mbx内において待ち状態を解除される場合、
レディ状態にされたタスクは既にタイムアウト待ち行列か
ら削除されるので、タイムアウト処理には引っかからない
ような?
Reply to
#2448
Reply to #2450
×
Subject
Body
Reply To Message #2450 > しかし、snd_mbx内において待ち状態を解除される場合、 > レディ状態にされたタスクは既にタイムアウト待ち行列か > ら削除されるので、タイムアウト処理には引っかからない > ような?
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-30 10:45 by
hamayan
#2451)
Reply
Create ticket
そうなんですよね。私も今snd_mbx()のコードを見ていてそれに気付きました。
と言う事は別経路が有るんだろうか。
いやそもそも、mknl_loc_sys()でちゃんと割込みを止めているのだろうか?
怪しくなってきました。
Reply to
#2450
Reply to #2451
×
Subject
Body
Reply To Message #2451 > そうなんですよね。私も今snd_mbx()のコードを見ていてそれに気付きました。 > > と言う事は別経路が有るんだろうか。 > > いやそもそも、mknl_loc_sys()でちゃんと割込みを止めているのだろうか? > > 怪しくなってきました。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-30 11:17 by
m-arai
#2452)
Reply
Create ticket
本筋には関係ないけど、忘れないように。
2度目のmknl_ref_qhdは不要ですね。
kernel/mbx/snd_mbx.c:
mtcb = mknl_ref_qhd(&mbxcb_ram>que); /* 待ち行列先頭タスクを取得 */
if ( mtcb != NULL )
{
/* 待ちタスクがあれば開放 */
mtcb->data = (VP_INT)pk_msg; /* メッセージを渡す */
mtcb = mknl_ref_qhd(&mbxcb_ram->que); /* 待ち行列先頭からタスク取り出し */
Reply to
#2451
Reply to #2452
×
Subject
Body
Reply To Message #2452 > 本筋には関係ないけど、忘れないように。 > > 2度目のmknl_ref_qhdは不要ですね。 > kernel/mbx/snd_mbx.c: > > mtcb = mknl_ref_qhd(&mbxcb_ram>que); /* 待ち行列先頭タスクを取得 */ > if ( mtcb != NULL ) > { > /* 待ちタスクがあれば開放 */ > mtcb->data = (VP_INT)pk_msg; /* メッセージを渡す */ > mtcb = mknl_ref_qhd(&mbxcb_ram->que); /* 待ち行列先頭からタスク取り出し */
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-30 21:29 by
m-arai
#2453)
Reply
Create ticket
そういえば、そもそも嵌る時にmknl_wup_tsk(mtcb,ercd)
で渡されるmtcb->tskstatって何なのでしょうか?
tskstat自体、更新されている場所は全部を見ても10ヶ所位
しかないから、見るべきところはそうないと思うのですが
…う~む。あ、後、使っている全部のサービスコール
を教えていただけると。使っているサービスコール∩
嵌る時のtskstatを考えれば見るべきところが絞られる
ので。既に検討済みかと思いますが。
忘れないように記録(2)
kernel/tsk/ter_tsk.c:
/* 実行タスクの終了 */
mknl_rmv_tmout(&tcb_ram->mtcb); /* タイムアウト待ち行列につながれていれば解除 */
mknl_ter_tsk(&tcb_ram->mtcb); /* タスクを削除 */
だが、
mknl/tsk/mter_tsk.c:
/* タスクの終了 */
void mknl_ter_tsk(
T_MKNL_TCB *mtcb) /* 終了させるタスク */
{
/* タイムアウトキューにあれば削除 */
mknl_rmv_tmout(mtcb);
2度のmknl_rmv_tmoutは無意味。mknl_ter_tskは他に
exd_tsk、ext_tskで呼び出されるが、これらは自タスク
に対する処理なので、タイムアウトキューに関しては
必要ないだろう。従ってmknl_ter_tskのmknl_rmv_tmout
は削除すべきか。
Reply to
#2452
Reply to #2453
×
Subject
Body
Reply To Message #2453 > そういえば、そもそも嵌る時にmknl_wup_tsk(mtcb,ercd) > で渡されるmtcb->tskstatって何なのでしょうか? > > tskstat自体、更新されている場所は全部を見ても10ヶ所位 > しかないから、見るべきところはそうないと思うのですが > …う~む。あ、後、使っている全部のサービスコール > を教えていただけると。使っているサービスコール∩ > 嵌る時のtskstatを考えれば見るべきところが絞られる > ので。既に検討済みかと思いますが。 > > > 忘れないように記録(2) > kernel/tsk/ter_tsk.c: > > /* 実行タスクの終了 */ > mknl_rmv_tmout(&tcb_ram->mtcb); /* タイムアウト待ち行列につながれていれば解除 */ > mknl_ter_tsk(&tcb_ram->mtcb); /* タスクを削除 */ > > だが、 > > mknl/tsk/mter_tsk.c: > > /* タスクの終了 */ > void mknl_ter_tsk( > T_MKNL_TCB *mtcb) /* 終了させるタスク */ > { > /* タイムアウトキューにあれば削除 */ > mknl_rmv_tmout(mtcb); > > 2度のmknl_rmv_tmoutは無意味。mknl_ter_tskは他に > exd_tsk、ext_tskで呼び出されるが、これらは自タスク > に対する処理なので、タイムアウトキューに関しては > 必要ないだろう。従ってmknl_ter_tskのmknl_rmv_tmout > は削除すべきか。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-30 22:00 by
hamayan
#2454)
Reply
Create ticket
システムコールの数え上げ了解です。ちょっとサイズがかなりでかくなっているので、時間をください。
しかし、初めは私の戯言から、既にm-araiさんのカーネルコードチェックになっちゃっていますね。
Reply to
#2453
Reply to #2454
×
Subject
Body
Reply To Message #2454 > システムコールの数え上げ了解です。ちょっとサイズがかなりでかくなっているので、時間をください。 > > しかし、初めは私の戯言から、既にm-araiさんのカーネルコードチェックになっちゃっていますね。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-30 22:23 by
m-arai
#2455)
Reply
Create ticket
あ、済みません。そんなに大きくなりますか。マップ
ファイルを軽くgrepして出たものを必要に応じて少し
編集する位で良いと思っていたんですが。
お手間をかけてお役に立てなかったら…(--;…mOm。
Reply to
#2454
Reply to #2455
×
Subject
Body
Reply To Message #2455 > あ、済みません。そんなに大きくなりますか。マップ > ファイルを軽くgrepして出たものを必要に応じて少し > 編集する位で良いと思っていたんですが。 > > お手間をかけてお役に立てなかったら…(--;…mOm。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-30 22:56 by
hamayan
#2456)
Reply
Create ticket
成る程、全然気づきませんでした。
ではmapを編集した結果を書きます。
chg_pri,clr_flg,dis_dsp,dly_tsk,ena_dsp,
ext_tsk,get_mpf,get_tid,get_tim,isig_tim,
loc_cpu,mknl_add_que,mknl_add_tmout,mknl_adf_que,
mknl_adp_que,mknl_chg_pri,mknl_ctx_stat,mknl_dly_dsp,
mknl_exe_dsp,mknl_exe_tex,mknl_ext_startup,mknl_idl_loop,
mknl_idl_stk,mknl_idl_stksz,mknl_idlctx,mknl_ini_sys,
mknl_rdq_cnt,mknl_rdq_tbl,mknl_rmv_que,mknl_rmv_tmout,
mknl_rsm_tsk,mknl_run_mtcb,mknl_srh_top,mknl_sta_startup,
mknl_sta_tsk,mknl_ter_tsk,mknl_tic_tmout,mknl_timout_head,
mknl_wai_tsk,mknl_wup_tsk,pol_flg,rcv_mbx,ref_tst,rel_mpf,
rsm_tsk,set_flg,sig_sem,slp_tsk,snd_mbx,sta_hos,sta_tsk,
trcv_mbx,twai_flg,unl_cpu,wai_sem,wup_tsk
となりました。
よろしくお願いします。
Reply to
#2455
Reply to #2456
×
Subject
Body
Reply To Message #2456 > 成る程、全然気づきませんでした。 > ではmapを編集した結果を書きます。 > > chg_pri,clr_flg,dis_dsp,dly_tsk,ena_dsp, > ext_tsk,get_mpf,get_tid,get_tim,isig_tim, > loc_cpu,mknl_add_que,mknl_add_tmout,mknl_adf_que, > mknl_adp_que,mknl_chg_pri,mknl_ctx_stat,mknl_dly_dsp, > mknl_exe_dsp,mknl_exe_tex,mknl_ext_startup,mknl_idl_loop, > mknl_idl_stk,mknl_idl_stksz,mknl_idlctx,mknl_ini_sys, > mknl_rdq_cnt,mknl_rdq_tbl,mknl_rmv_que,mknl_rmv_tmout, > mknl_rsm_tsk,mknl_run_mtcb,mknl_srh_top,mknl_sta_startup, > mknl_sta_tsk,mknl_ter_tsk,mknl_tic_tmout,mknl_timout_head, > mknl_wai_tsk,mknl_wup_tsk,pol_flg,rcv_mbx,ref_tst,rel_mpf, > rsm_tsk,set_flg,sig_sem,slp_tsk,snd_mbx,sta_hos,sta_tsk, > trcv_mbx,twai_flg,unl_cpu,wai_sem,wup_tsk > > となりました。 > よろしくお願いします。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-30 23:07 by
m-arai
#2457)
Reply
Create ticket
度々すみませんが、嵌る時のmtcb->tskstatは何でした?
RUNかRDYかDMTだとは思いますが。
Reply to
#2456
Reply to #2457
×
Subject
Body
Reply To Message #2457 > 度々すみませんが、嵌る時のmtcb->tskstatは何でした? > RUNかRDYかDMTだとは思いますが。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 00:11 by
hamayan
#2458)
Reply
Create ticket
遅くなりました。今デバックしているのは、比較的症状を発祥し難い、SH2だったのですが、漸く2回確認しました。
レディの時に発生しています。
なんか、もっと、どういう経路を通って来たのか、判る様なアイディアが有りましたら仰って下さい。
どうも発想が貧困で。
Reply to
#2457
Reply to #2458
×
Subject
Body
Reply To Message #2458 > 遅くなりました。今デバックしているのは、比較的症状を発祥し難い、SH2だったのですが、漸く2回確認しました。 > レディの時に発生しています。 > > なんか、もっと、どういう経路を通って来たのか、判る様なアイディアが有りましたら仰って下さい。 > どうも発想が貧困で。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 00:35 by
m-arai
#2459)
Reply
Create ticket
う~む。まだ全然見えてきません。今思いついたのは、
mknl_tic_tmout()において多重割りこみを許す期
間があり、そこで起きた割り込み処理でタイムアウトキュ
ーへの操作が起こると、mknl_timout_headの更新が生じ
る場合がある。
mknl_tic_tmoutに帰ってくるとmknl_timout_headが、
*多重割りこみ前のタイムアウトキュー*に対する操作
の結果としてのもので上書きされる。
結果としてイムアウトキューにゾンビが残ったり、追加
操作が失敗する。ゾンビは既にmknl_wup_tskされていれ
ばTTS_RDYになってしまっている。
ゾンビに対するタイムアウト処理が行われると嵌る。
というものですが、システムタイマより上位の優先度を
持つ割りこみあり、その処理中にタイムアウトキューへ
の操作が起こる場合があり得ますか?そうでなければ
この考えは廃棄です。そうでなくても穴があるかも
しれませんが。
Reply to
#2458
Reply to #2459
×
Subject
Body
Reply To Message #2459 > う~む。まだ全然見えてきません。今思いついたのは、 > > mknl_tic_tmout()において多重割りこみを許す期 > 間があり、そこで起きた割り込み処理でタイムアウトキュ > ーへの操作が起こると、mknl_timout_headの更新が生じ > る場合がある。 > > mknl_tic_tmoutに帰ってくるとmknl_timout_headが、 > *多重割りこみ前のタイムアウトキュー*に対する操作 > の結果としてのもので上書きされる。 > > 結果としてイムアウトキューにゾンビが残ったり、追加 > 操作が失敗する。ゾンビは既にmknl_wup_tskされていれ > ばTTS_RDYになってしまっている。 > > ゾンビに対するタイムアウト処理が行われると嵌る。 > > というものですが、システムタイマより上位の優先度を > 持つ割りこみあり、その処理中にタイムアウトキューへ > の操作が起こる場合があり得ますか?そうでなければ > この考えは廃棄です。そうでなくても穴があるかも > しれませんが。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 01:01 by
hamayan
#2460)
Reply
Create ticket
SH2に関してはシステムタイマーが最上位です。
H8は、多分割込みのネストを出来る様に設定していない?
多重割り込みが原因と言う訳では無さそうですね。
まだ、メールボックスの使い方に問題が有るのかなあ。
Reply to
#2459
Reply to #2460
×
Subject
Body
Reply To Message #2460 > SH2に関してはシステムタイマーが最上位です。 > H8は、多分割込みのネストを出来る様に設定していない? > > 多重割り込みが原因と言う訳では無さそうですね。 > > まだ、メールボックスの使い方に問題が有るのかなあ。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 04:00 by
m-arai
#2464)
Reply
Create ticket
いや、サービスコールだけを使っている限り、キュー
にゾンビが発生することがあってはならないでしょう。
あ、私の思考は「タイムアウトキューからは本来削除さ
れているべきものが不正に残ってしまっているために、
タイムアウト処理のmknl_wup_tskでありうべからざ
るTTS_RDYになってしまっている」に固まってしまって
ます。
#それ以外の理由はもう考えられません。(--??
タスクコントロールブロックが、伸びるスタックとか、
アプリの不測な振る舞いで破壊されているというのは、
hamayanさんの対策でTTS_SUSを回避した場合にかなり
悲惨なことになる筈なので、ありそうもないですしね
…ん、tskstatは頭に近いからそうですが、tm_prevはか
なり尻の方ですね。tm_prevあたりだけ破壊されていて、
0になってるなんて事はないですか?
タイムアウト処理が始まる"前に"タスクコントロール
ブロックのtm_prevが0で破壊されてしまうと、処理
が行われる際、正しくタイムアウトキューからの削除
が行われません。破壊の程度が尻の方だけで留まって
いれば、タスクに処理が移っても致命的にはならない
可能性があります。
…ダメでしょうね…う~む(--???
Reply to
#2460
Reply to #2464
×
Subject
Body
Reply To Message #2464 > いや、サービスコールだけを使っている限り、キュー > にゾンビが発生することがあってはならないでしょう。 > > あ、私の思考は「タイムアウトキューからは本来削除さ > れているべきものが不正に残ってしまっているために、 > タイムアウト処理のmknl_wup_tskでありうべからざ > るTTS_RDYになってしまっている」に固まってしまって > ます。 > #それ以外の理由はもう考えられません。(--?? > > タスクコントロールブロックが、伸びるスタックとか、 > アプリの不測な振る舞いで破壊されているというのは、 > hamayanさんの対策でTTS_SUSを回避した場合にかなり > 悲惨なことになる筈なので、ありそうもないですしね > …ん、tskstatは頭に近いからそうですが、tm_prevはか > なり尻の方ですね。tm_prevあたりだけ破壊されていて、 > 0になってるなんて事はないですか? > > タイムアウト処理が始まる"前に"タスクコントロール > ブロックのtm_prevが0で破壊されてしまうと、処理 > が行われる際、正しくタイムアウトキューからの削除 > が行われません。破壊の程度が尻の方だけで留まって > いれば、タスクに処理が移っても致命的にはならない > 可能性があります。 > > …ダメでしょうね…う~む(--???
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 09:41 by
hamayan
#2466)
Reply
Create ticket
おはようございます。と言いますか、m-araiさん、こんな夜更かしで大丈夫なんですか?
いやー!かなりm-araiさんの御指摘の通りだと思えています。タイムアウトキューを破壊する恐れがある!うーん!!それでもH8のボードは一晩放って置いても動いているのがビミョーですが(-_-;)。
多分これは待ち状態に入っているタスクの数が1個とか、2個とか少ない為かと。
そこで、基本に立ち返ろうと思います。
つまり、メールボックスとメモリプールの使い方の再確認。
今トラブルになっているのが、固定長メモリプールで取得した領域をメールボックスで送信しています。
ソースコード読めよ!と言われそうですが、ちょっと教えて下さい。
固定長メモリプールは静的に生成されるので、どっかに管理テーブルを作成しているものと思い込んでいますが、実際に固定長メモリプールの領域を見てみると、
_kernel_mpf?_heap
ですが、先頭にはリンクリストの管理と思われる、次のメモリブロックへのポインタらしき物が格納されています。やはりこのメモリプールもリンクリストで管理されているのでしょうか?
Reply to
#2464
Reply to #2466
×
Subject
Body
Reply To Message #2466 > おはようございます。と言いますか、m-araiさん、こんな夜更かしで大丈夫なんですか? > > いやー!かなりm-araiさんの御指摘の通りだと思えています。タイムアウトキューを破壊する恐れがある!うーん!!それでもH8のボードは一晩放って置いても動いているのがビミョーですが(-_-;)。 > 多分これは待ち状態に入っているタスクの数が1個とか、2個とか少ない為かと。 > > そこで、基本に立ち返ろうと思います。 > つまり、メールボックスとメモリプールの使い方の再確認。 > 今トラブルになっているのが、固定長メモリプールで取得した領域をメールボックスで送信しています。 > > ソースコード読めよ!と言われそうですが、ちょっと教えて下さい。 > 固定長メモリプールは静的に生成されるので、どっかに管理テーブルを作成しているものと思い込んでいますが、実際に固定長メモリプールの領域を見てみると、 > _kernel_mpf?_heap > ですが、先頭にはリンクリストの管理と思われる、次のメモリブロックへのポインタらしき物が格納されています。やはりこのメモリプールもリンクリストで管理されているのでしょうか? >
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 10:22 by
m-arai
#2467)
Reply
Create ticket
固定長メモリプールの管理は単方向リストと言っていいで
しょうか。最初の初期化で、
mpfcb->free
↓
[ → ][ → ]…[NULL]
[ -- ][ -- ]…[ -- ]
…………………………
[ -- ][ -- ]…[ -- ]
(うう…分かりづらい図だ)
のようになっていて、mpfbc->freeが先頭の空きブロック
へのポインタで(無ければNULL)さらにブロックの先頭に
次の空きブロックへのポインタ(無ければNULL)が格納され
ています。当然最後のブロックの先頭はNULLです。
取得、返却は常にリストの先頭に対して行われます。
以上から、現在自タスクが獲得していない固定長メモリプ
ールのブロックに操作を加えることは、そのブロックを
他タスクが獲得している場合は、他タスクにおける使用上
の予期せぬ内容の破壊、
未使用の場合は、先頭を0にするといくつかのブロックが
その後獲得できなくなる、先頭に0以外の値を書いてしま
うとリンクリストが破壊され、以降のメモリブロック
取得操作で縁もゆかりも無いメモリ領域を破壊、等の可能
性があります。
確実に現在自タスクで獲得しているブロック以外にアク
セスしてはいけません。
こんなとこで如何でしょう。間違っていたら訂正してくだ
さい。
Reply to
#2466
Reply to #2467
×
Subject
Body
Reply To Message #2467 > 固定長メモリプールの管理は単方向リストと言っていいで > しょうか。最初の初期化で、 > > mpfcb->free > ↓ > [ → ][ → ]…[NULL] > [ -- ][ -- ]…[ -- ] > ………………………… > [ -- ][ -- ]…[ -- ] > > (うう…分かりづらい図だ) > > のようになっていて、mpfbc->freeが先頭の空きブロック > へのポインタで(無ければNULL)さらにブロックの先頭に > 次の空きブロックへのポインタ(無ければNULL)が格納され > ています。当然最後のブロックの先頭はNULLです。 > > 取得、返却は常にリストの先頭に対して行われます。 > > 以上から、現在自タスクが獲得していない固定長メモリプ > ールのブロックに操作を加えることは、そのブロックを > 他タスクが獲得している場合は、他タスクにおける使用上 > の予期せぬ内容の破壊、 > 未使用の場合は、先頭を0にするといくつかのブロックが > その後獲得できなくなる、先頭に0以外の値を書いてしま > うとリンクリストが破壊され、以降のメモリブロック > 取得操作で縁もゆかりも無いメモリ領域を破壊、等の可能 > 性があります。 > > 確実に現在自タスクで獲得しているブロック以外にアク > セスしてはいけません。 > > こんなとこで如何でしょう。間違っていたら訂正してくだ > さい。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 10:32 by
m-arai
#2468)
Reply
Create ticket
書き忘れましたが、SHの方が全く同じプログラムでも
スタック伸びは大きいはずです。
スタック領域は本当に十分ですか?出来るだけ贅沢に
確保してやると、うまくいったりしませんか?
(--??う~む…。
Reply to
#2467
Reply to #2468
×
Subject
Body
Reply To Message #2468 > 書き忘れましたが、SHの方が全く同じプログラムでも > スタック伸びは大きいはずです。 > スタック領域は本当に十分ですか?出来るだけ贅沢に > 確保してやると、うまくいったりしませんか? > > (--??う~む…。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 10:41 by
hamayan
#2469)
Reply
Create ticket
成る程、やはり管理で使用している領域が先頭に有ると言う事ですね。
所で、μITRONの仕様書でもメールボックスの一般的?な利用方法として、メモリプールから取得したメモリブロックにメッセージを入れて、メールボックスで送信し、受け側ではメールボックスで受け取って処理が済んだら開放、
つまり
送信側----------
get_mpf(MPID,&blk);
何らかの処理;
snd_mbx(MID,(T_MSG *)blk);
-------------
受信側----------
rcv_mbx(MID,(T_MSG **)&blk);
何らかの処理;
rel_mpf(MPID,blk);
-------------
の様な手順で行って行くのかと思っていました。
しかし、これでは、get_mpfで獲得した領域の先頭を、
次のsnd_mbxで破壊してしまうと言う事になりますね。
Reply to
#2467
Reply to #2469
×
Subject
Body
Reply To Message #2469 > 成る程、やはり管理で使用している領域が先頭に有ると言う事ですね。 > > 所で、μITRONの仕様書でもメールボックスの一般的?な利用方法として、メモリプールから取得したメモリブロックにメッセージを入れて、メールボックスで送信し、受け側ではメールボックスで受け取って処理が済んだら開放、 > つまり > 送信側---------- > get_mpf(MPID,&blk); > 何らかの処理; > snd_mbx(MID,(T_MSG *)blk); > ------------- > > 受信側---------- > rcv_mbx(MID,(T_MSG **)&blk); > 何らかの処理; > rel_mpf(MPID,blk); > ------------- > > の様な手順で行って行くのかと思っていました。 > しかし、これでは、get_mpfで獲得した領域の先頭を、 > 次のsnd_mbxで破壊してしまうと言う事になりますね。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 10:45 by
m-arai
#2470)
Reply
Create ticket
そのようなプログラムをするなら、送信側のタスクでは
送信の都度、メモリブロックを取得すべきでしょう。
Reply to
#2469
Reply to #2470
×
Subject
Body
Reply To Message #2470 > そのようなプログラムをするなら、送信側のタスクでは > 送信の都度、メモリブロックを取得すべきでしょう。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 10:54 by
hamayan
#2471)
Reply
Create ticket
え!その!送信側でメモリブロックの獲得をやっているつもりなんですが(~_~;)
SHもH8も充分メモリが有るので、スタック領域に余裕を持たせています。
時折デバッカでスタックの使用状況を確認したり。
Reply to
#2470
Reply to #2471
×
Subject
Body
Reply To Message #2471 > え!その!送信側でメモリブロックの獲得をやっているつもりなんですが(~_~;) > > SHもH8も充分メモリが有るので、スタック領域に余裕を持たせています。 > 時折デバッカでスタックの使用状況を確認したり。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 11:20 by
m-arai
#2472)
Reply
Create ticket
#う…何かがおかしい…どうもSF.jpへの要求がしばしば
#失敗する。メッセージのポストに失敗すると、せっかく
#書いた文章が消えて(TT)
その例では、受信側のタスクでメッセージ領域として
使用したメモリブロックを開放することにしています。
そのような場合、送信側では、メッセージが受信されたか
どうかに関わらず、一度snd_mbxに使用したメモリブロッ
クに触れてはいけません。snd_mbx以降、ポインタ変数blk
はもう無効です。
再び送信側から送信を行いたい場合は、改めてメモリブロ
ックを取得して、そこにメッセージを作成してやらなけ
ればなりません。送信の都度というのはそういう意味で
す。
Reply to
#2471
Reply to #2472
×
Subject
Body
Reply To Message #2472 > #う…何かがおかしい…どうもSF.jpへの要求がしばしば > #失敗する。メッセージのポストに失敗すると、せっかく > #書いた文章が消えて(TT) > > その例では、受信側のタスクでメッセージ領域として > 使用したメモリブロックを開放することにしています。 > そのような場合、送信側では、メッセージが受信されたか > どうかに関わらず、一度snd_mbxに使用したメモリブロッ > クに触れてはいけません。snd_mbx以降、ポインタ変数blk > はもう無効です。 > > 再び送信側から送信を行いたい場合は、改めてメモリブロ > ックを取得して、そこにメッセージを作成してやらなけ > ればなりません。送信の都度というのはそういう意味で > す。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 11:33 by
hamayan
#2473)
Reply
Create ticket
>再び送信側から送信を行いたい場合は、改めてメモリブロ
>ックを取得して、そこにメッセージを作成してやらなけ
>ればなりません。送信の都度というのはそういう意味で
>す。
多分、これはやっている、つもりなのです。
それでちょっと気になるのが、get_mpfで獲得した領域をメールボックスに入れてしまうと、前回のメールボックスの時に教えてもらった、領域の先頭にリンクリストの管理領域が設けられる、その部分です。
ひょっとして、メモリブロックの管理領域をメールボックスの管理領域で上書きされる?んでしょうか。
そうすると、メモリブロックの管理領域分オフセットした領域アドレスをメールボックスに渡して、受信側ではオフセット分戻したアドレスを使って、メモリブロックの開放を行わないといけなくなるのかなあ。
Reply to
#2472
Reply to #2473
×
Subject
Body
Reply To Message #2473 > >再び送信側から送信を行いたい場合は、改めてメモリブロ > >ックを取得して、そこにメッセージを作成してやらなけ > >ればなりません。送信の都度というのはそういう意味で > >す。 > 多分、これはやっている、つもりなのです。 > > それでちょっと気になるのが、get_mpfで獲得した領域をメールボックスに入れてしまうと、前回のメールボックスの時に教えてもらった、領域の先頭にリンクリストの管理領域が設けられる、その部分です。 > ひょっとして、メモリブロックの管理領域をメールボックスの管理領域で上書きされる?んでしょうか。 > > そうすると、メモリブロックの管理領域分オフセットした領域アドレスをメールボックスに渡して、受信側ではオフセット分戻したアドレスを使って、メモリブロックの開放を行わないといけなくなるのかなあ。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 11:40 by
m-arai
#2474)
Reply
Create ticket
その必要はありません。返却は、mpfcb->freeの内容を
帰すブロックの先頭にコピーし、帰すブロックの先頭
アドレスをmpfcb->freeに格納することで行われます。
リンクリストの先頭に挿入する操作ですね。
従って、メモリブロック先頭がどう使われていようが
無問題です。
Reply to
#2473
Reply to #2474
×
Subject
Body
Reply To Message #2474 > その必要はありません。返却は、mpfcb->freeの内容を > 帰すブロックの先頭にコピーし、帰すブロックの先頭 > アドレスをmpfcb->freeに格納することで行われます。 > リンクリストの先頭に挿入する操作ですね。 > 従って、メモリブロック先頭がどう使われていようが > 無問題です。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 11:49 by
hamayan
#2475)
Reply
Create ticket
そうですか、安心しました。
折角獲得したメモリも、管理領域ばかりじゃどうしようかと思っていた所です。
原因の究明に繋がるか判らないのですが、mknl_wup_tskを呼び出す複数有る関数で、サスペンデッドに陥らせる典型的な関数が判りました。
mtic_tmo.cのmknl_tic_tmoutです。
これは確かisig_tim.cからの呼び出しです。
Reply to
#2474
Reply to #2475
×
Subject
Body
Reply To Message #2475 > そうですか、安心しました。 > 折角獲得したメモリも、管理領域ばかりじゃどうしようかと思っていた所です。 > > 原因の究明に繋がるか判らないのですが、mknl_wup_tskを呼び出す複数有る関数で、サスペンデッドに陥らせる典型的な関数が判りました。 > mtic_tmo.cのmknl_tic_tmoutです。 > これは確かisig_tim.cからの呼び出しです。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 12:05 by
m-arai
#2476)
Reply
Create ticket
そうなると、やはりタイムアウトキューに本来削除され
ているべきものが残っている線が濃厚…?。
う~ん。(-_-??????
これは多分無いと思うんですが、_HOS_ERCHK_LEVELを
なんらかの定義しているということはないですよね?
オブジェクト状態チェックが殺されている場合、
タイムアウト待ちをしているタスクをsta_tskしても弾
かれず、タイムアウトキューにゴミが残る可能性が
あるかも。まず無いと思うので、この件に関してはリプ
ライ不要です。(^^;;
Reply to
#2475
Reply to #2476
×
Subject
Body
Reply To Message #2476 > そうなると、やはりタイムアウトキューに本来削除され > ているべきものが残っている線が濃厚…?。 > > う~ん。(-_-?????? > > これは多分無いと思うんですが、_HOS_ERCHK_LEVELを > なんらかの定義しているということはないですよね? > オブジェクト状態チェックが殺されている場合、 > タイムアウト待ちをしているタスクをsta_tskしても弾 > かれず、タイムアウトキューにゴミが残る可能性が > あるかも。まず無いと思うので、この件に関してはリプ > ライ不要です。(^^;;
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 18:18 by
hamayan
#2481)
Reply
Create ticket
先程からずっと、自分の作成したコードを眺めていたり、スタックを倍に増やしたりと、色々やっているのですが、芳しくありません。
それで、ちょっと判った事が、
サスペンデッドに陥らせているシステムコールは、どうやらsnd_mbxみたいなのです。
そこで、こんな事を考えてみました。
まず、送信と、受信の二つのタスクの関係は、メールボックスでメッセージを受け取る。送信側の方が優先順位が高い、受信側はtrcv_mbxで待つ。送信側の起動は別の割り込みに起因する。
まずシステムタイマーの更新の割り込みが入力します。
isig_timからタイムティックの減算の為にmknl_tic_tmoutが呼ばれて、この中でタイムアウトとなります。
この時点ではウエイトからレディに遷移します。
ディスパッチが行われますが、実はこの時送信側タスクを起動する割り込みが保留されています。
mknl_tic_tmoutの最後で割り込みが受け付けられます。
初めのタイマー割り込みの最後でディスパッチが行われ、直後に、より優先順位の高い送信側タスクがランニングとなります。
その中でsnd_mbxシステムコール中に受信タスクは、再度mknl_wup_tskで状態遷移をさせられてしまう。
そう言えば、trcv_mbxがタイムアウトした時に、メールボックスのキューからは削除されていませんよね。
どうでしょうか。(・・;)
Reply to
#2475
Reply to #2481
×
Subject
Body
Reply To Message #2481 > 先程からずっと、自分の作成したコードを眺めていたり、スタックを倍に増やしたりと、色々やっているのですが、芳しくありません。 > > それで、ちょっと判った事が、 > サスペンデッドに陥らせているシステムコールは、どうやらsnd_mbxみたいなのです。 > > そこで、こんな事を考えてみました。 > まず、送信と、受信の二つのタスクの関係は、メールボックスでメッセージを受け取る。送信側の方が優先順位が高い、受信側はtrcv_mbxで待つ。送信側の起動は別の割り込みに起因する。 > > まずシステムタイマーの更新の割り込みが入力します。 > > isig_timからタイムティックの減算の為にmknl_tic_tmoutが呼ばれて、この中でタイムアウトとなります。 > > この時点ではウエイトからレディに遷移します。 > > ディスパッチが行われますが、実はこの時送信側タスクを起動する割り込みが保留されています。 > mknl_tic_tmoutの最後で割り込みが受け付けられます。 > > 初めのタイマー割り込みの最後でディスパッチが行われ、直後に、より優先順位の高い送信側タスクがランニングとなります。 > > その中でsnd_mbxシステムコール中に受信タスクは、再度mknl_wup_tskで状態遷移をさせられてしまう。 > > そう言えば、trcv_mbxがタイムアウトした時に、メールボックスのキューからは削除されていませんよね。 > > どうでしょうか。(・・;)
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 20:27 by
m-arai
#2482)
Reply
Create ticket
おお!?確かにtrcv_mbxがタイムアウトする場合、
mknl_wup_tskでレディキューに繋がれてはいますが、
それまで接続していたキューからの削除がケアされて
いません!これでは、次にそのキューへの操作が行われ
る際に破綻が生じます。
今回の件も、既にメッセージ待ち状態は終わってRDY状態
になっているのに、snd_mbxがメールボックスのキューか
ら受信タスクを発見してしまい、RDYなタスクに対して
mknl_wup_tskを実行してしまっているという説明がつく
…。
となれば話は簡単。
Index: mwup_tsk.c
===================================================================
RCS file: /cvsroot/hos/hos/hos-v4/src/mknl/tsk/mwup_tsk.c,v
retrieving revision 1.3
diff -u -r1.3 mwup_tsk.c
--- mwup_tsk.c 11 Aug 2002 20:06:46 -0000 1.3
+++ mwup_tsk.c 31 Oct 2002 11:23:34 -0000
@@ -18,6 +18,7 @@
{
/* タスクのスリープ解除 */
mtcb->ercd = ercd;
+ mknl_rmv_que(mtcb);
mknl_adf_que(&mknl_rdq_tbl[mtcb->tskpri - TMIN_TPRI], mtcb);
if ( mtcb->tskstat == TTS_WAI )
{
解決の予感(^^)
以下は余談。
「送信タスク(TXTSK)の起動は別の割りこみ(以下INT_A)に
起因する」というのが気になったのですが、INT_Aのハン
ドラでTXTSKをsta_tskなりact_stkなりしているんです
か?
INT_Aが発生する時、TXTSKは常にDMTとは限らないので
すよね?つまり、前に発生したINT_Aの為に起動して
RUNなりRDYなりWAIになっている場合もあると。
しかし、それにしてもTXTSKがDMTでない場合には、
sta_tskなら起動に失敗、act_tskなら起動要求がキュー
イングされるだけであり、INT_Aが発生したからといっ
てisig_tic終了直後のディスパッチでTXTSKが起動する
とは限りませんね。
それに仮に起動したところでメッセージのキューがちゃ
んとしていれば、受信タスクをmknl_wup_tskしてしまう
おそれは多分ありません。
Reply to
#2481
Reply to #2482
×
Subject
Body
Reply To Message #2482 > おお!?確かにtrcv_mbxがタイムアウトする場合、 > mknl_wup_tskでレディキューに繋がれてはいますが、 > それまで接続していたキューからの削除がケアされて > いません!これでは、次にそのキューへの操作が行われ > る際に破綻が生じます。 > > 今回の件も、既にメッセージ待ち状態は終わってRDY状態 > になっているのに、snd_mbxがメールボックスのキューか > ら受信タスクを発見してしまい、RDYなタスクに対して > mknl_wup_tskを実行してしまっているという説明がつく > …。 > > となれば話は簡単。 > > Index: mwup_tsk.c > =================================================================== > RCS file: /cvsroot/hos/hos/hos-v4/src/mknl/tsk/mwup_tsk.c,v > retrieving revision 1.3 > diff -u -r1.3 mwup_tsk.c > --- mwup_tsk.c 11 Aug 2002 20:06:46 -0000 1.3 > +++ mwup_tsk.c 31 Oct 2002 11:23:34 -0000 > @@ -18,6 +18,7 @@ > { > /* タスクのスリープ解除 */ > mtcb->ercd = ercd; > + mknl_rmv_que(mtcb); > mknl_adf_que(&mknl_rdq_tbl[mtcb->tskpri - TMIN_TPRI], mtcb); > if ( mtcb->tskstat == TTS_WAI ) > { > > 解決の予感(^^) > > 以下は余談。 > > 「送信タスク(TXTSK)の起動は別の割りこみ(以下INT_A)に > 起因する」というのが気になったのですが、INT_Aのハン > ドラでTXTSKをsta_tskなりact_stkなりしているんです > か? > > INT_Aが発生する時、TXTSKは常にDMTとは限らないので > すよね?つまり、前に発生したINT_Aの為に起動して > RUNなりRDYなりWAIになっている場合もあると。 > > しかし、それにしてもTXTSKがDMTでない場合には、 > sta_tskなら起動に失敗、act_tskなら起動要求がキュー > イングされるだけであり、INT_Aが発生したからといっ > てisig_tic終了直後のディスパッチでTXTSKが起動する > とは限りませんね。 > > それに仮に起動したところでメッセージのキューがちゃ > んとしていれば、受信タスクをmknl_wup_tskしてしまう > おそれは多分ありません。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 20:30 by
m-arai
#2483)
Reply
Create ticket
×おお!?確かにtrcv_mbxがタイムアウトする場合、
○おお!?確かにタイムアウトが発生する場合、
Reply to
#2482
Reply to #2483
×
Subject
Body
Reply To Message #2483 > ×おお!?確かにtrcv_mbxがタイムアウトする場合、 > ○おお!?確かにタイムアウトが発生する場合、
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-31 21:14 by
hamayan
#2484)
Reply
Create ticket
うーん!m-araiさん、鋭過ぎ。
確かに先の話の送信タスクは実際には割り込みから起動されていません。話が長くなるので、話を端折ってしまったのですが、返って悪かったみたいですね。
実際にはこの割り込みと言うのは、Ethernetの受信割り込みで、まずこの割り込みから最大優先度のタスクをwup_tskします。
そのタスクでとりあえず、取り込むだけ取り込んだら、次の優先度のプロトコル処理を行うタスクに、データを渡して終了してしまいます。
このプロトコル処理をするのが、送信タスクと呼んでいるタスクです。
受信タスクはサーバーアプリケーションで、リアルタイムな処理を要求されないので、ずうっと下の優先度に設定されています。
この辺が、割り込みに”起因する”と書いた由縁です。
Reply to
#2482
Reply to #2484
×
Subject
Body
Reply To Message #2484 > うーん!m-araiさん、鋭過ぎ。 > > 確かに先の話の送信タスクは実際には割り込みから起動されていません。話が長くなるので、話を端折ってしまったのですが、返って悪かったみたいですね。 > > 実際にはこの割り込みと言うのは、Ethernetの受信割り込みで、まずこの割り込みから最大優先度のタスクをwup_tskします。 > そのタスクでとりあえず、取り込むだけ取り込んだら、次の優先度のプロトコル処理を行うタスクに、データを渡して終了してしまいます。 > このプロトコル処理をするのが、送信タスクと呼んでいるタスクです。 > 受信タスクはサーバーアプリケーションで、リアルタイムな処理を要求されないので、ずうっと下の優先度に設定されています。 > > この辺が、割り込みに”起因する”と書いた由縁です。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED のパッチ、結果 (2002-10-31 22:54 by
hamayan
#2486)
Reply
Create ticket
従来なら、とっくにサスペンデッドに陥っているだろう回数、試験してみましたが、現在の所快調に動いています。
やっぱり、これでしょうかね。
Reply to
#2482
Reply to #2486
×
Subject
Body
Reply To Message #2486 > 従来なら、とっくにサスペンデッドに陥っているだろう回数、試験してみましたが、現在の所快調に動いています。 > > やっぱり、これでしょうかね。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED のパッチ、結果 (2002-10-31 23:21 by
m-arai
#2487)
Reply
Create ticket
そうですか!良かった。きっと解決でしょう。(^^)
mknl_wup_tskにmknl_rmv_queを入れるのは、起床待ち
→起床の際に呼ばれる場合には無意味なので、実は
最適ではないのです。が、他にも同じ病を抱えたサービ
スコールはあるでしょうし、レディキューに繋ぐ直前
に(あれば)現在繋がっているキューから削除する処理が
あるほうが分かりやすいという考え方もあり…。
また、このようにするなら、他のサービスコール内で
のmknl_wup_tskの前のmknl_rmv_queは削除できますから
…
とにかく、途中で間違った方向(タイムアウトキュー)へ
行ってしまったりして若干遅くなりましたが、いくつか
他の収穫もありましたので良しとしましょう。
Developersに場所を移して他の方々のコメントをいただ
く方向で、得られた宿題は整理しますか。
あ、OpenDiscussionの方で始まったコンフィグレータ
関連の事柄もDevelopersの方がフォーラムの趣旨との
整合性が良いかもしれませんね。
Reply to
#2486
Reply to #2487
×
Subject
Body
Reply To Message #2487 > そうですか!良かった。きっと解決でしょう。(^^) > > mknl_wup_tskにmknl_rmv_queを入れるのは、起床待ち > →起床の際に呼ばれる場合には無意味なので、実は > 最適ではないのです。が、他にも同じ病を抱えたサービ > スコールはあるでしょうし、レディキューに繋ぐ直前 > に(あれば)現在繋がっているキューから削除する処理が > あるほうが分かりやすいという考え方もあり…。 > また、このようにするなら、他のサービスコール内で > のmknl_wup_tskの前のmknl_rmv_queは削除できますから > … > とにかく、途中で間違った方向(タイムアウトキュー)へ > 行ってしまったりして若干遅くなりましたが、いくつか > 他の収穫もありましたので良しとしましょう。 > > Developersに場所を移して他の方々のコメントをいただ > く方向で、得られた宿題は整理しますか。 > あ、OpenDiscussionの方で始まったコンフィグレータ > 関連の事柄もDevelopersの方がフォーラムの趣旨との > 整合性が良いかもしれませんね。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED のパッチ、結果 (2002-10-31 23:26 by
hamayan
#2488)
Reply
Create ticket
Developersへの展開、賛成です。
あの方のご意見も聞きたいところ。
Reply to
#2487
Reply to #2488
×
Subject
Body
Reply To Message #2488 > Developersへの展開、賛成です。 > あの方のご意見も聞きたいところ。
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel
RE: メールボックスでSUNPENDED (2002-10-30 10:14 by
m-arai
#2449)
Reply
Create ticket
あれ…寝ていないタスクに対する要求はキューイングし
なけりゃならないのか。だから、オブジェクト状態チェ
ックでTTS_WAIが立っていないものを弾いてはいけない
んだ。
それに、TTS_WAIが立っていなければ、起床要求キュー
イングのチェック所で弾かれるから、TTS_WAIが立ってい
ないタスクがmknl_wup_tsk()に渡されるはずがない!!
Reply to
#2447
Reply to #2449
×
Subject
Body
Reply To Message #2449 > あれ…寝ていないタスクに対する要求はキューイングし > なけりゃならないのか。だから、オブジェクト状態チェ > ックでTTS_WAIが立っていないものを弾いてはいけない > んだ。 > > それに、TTS_WAIが立っていなければ、起床要求キュー > イングのチェック所で弾かれるから、TTS_WAIが立ってい > ないタスクがmknl_wup_tsk()に渡されるはずがない!!
You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.)
Login
Nickname
Preview
Post
Cancel