无意中受libtask启发看到getcontext这函数,一下子学得我应该能自己写一个用户级线程库了.以前做个课程设计时写嵌入式操作系统内核,也写过进程调用的东西.看到getcontext函数后,我又想练练手了.getcontext把最难搞的保存上下文信息弄好了。若是自己写必须用汇编,还必须了解对应硬件体系结构的东西
有几个难点要处理:
- 栈大小不够时,如何自动增长?
- 是抢占式的还是协同式的?
采用不可剥夺,协同方式进行线程切换。因为在用户级上采用不可剥夺效率会更高。而且用户应该知道更合理的时机进行切换。提供taskyield函数
栈增长的方向要注意,应该是向下的.而数组的增长方向是向上的.
线程的数据结构组织方面
给一个tid,如何直接得到对应的task* ?
存一个task*的数组all,这样就可以通过tid直接得到对应的线程控制结构了.
ready队列搞一个.利用链表把就绪队列管理起来
freeslot分配task*的糟位
Read full article from 设计一个用户级线程库
No comments:
Post a Comment