This is the mail archive of the
ecos-discuss@sources.redhat.com
mailing list for the eCos project.
Re: new kernel: question
- From: Nick Garnett <nickg at ecoscentric dot com>
- To: 张 亮 <johnsonest at hotmail dot com>
- Cc: jifl at eCosCentric dot com, ecos-discuss at sources dot redhat dot com
- Date: 07 Mar 2003 15:13:19 +0000
- Subject: Re: [ECOS] new kernel: question
- References: <F126dbnGzRZML6rD1ME00004821@hotmail.com>
张 亮 <johnsonest at hotmail dot com> writes:
> Hi, Jonathan, After thinking carefully about new kernel of eCos, I
> feel that allowing to rescheduling when scheduler is locked is more
> safe for tcp/ip stack and other complex app,but NOT safe to this case:
> system has three threads: (1) thread1 (2) thread2 (3) system
> idle thread thread2 is sleeping for resource which will given by
> thread1,thread1 is running.Before thread1 active thread2, it wants to
> wait a event(post by DSR) with scheduler's lock >1, so thread1 is
> rescheduled,but during rescheduling, *the* DSR was post,but because
> new lock!=0,DSR will not be called,so only idle thread is
> active.thread1 and thread2 will be dead locked unless other ISR and
> DSR was post again.Of course,real time clock will unlock this
> state.hehe! It is a challenge to fix this problem. BRS/johnsonest
No, the scheduler lock is essentially a per-thread variable. When
control eventually passes to the idle thread, the lock will be zeroed
and the DSR will run. It will then wake up thread1.
--
Nick Garnett eCos Kernel Architect
http://www.ecoscentric.com/ The eCos and RedBoot experts
--
Before posting, please read the FAQ: http://sources.redhat.com/fom/ecos
and search the list archive: http://sources.redhat.com/ml/ecos-discuss