3 geekos进程源代码分析及实验

3 geekos进程源代码分析及实验

ID:19989326

大小:156.00 KB

页数:29页

时间:2018-10-08

3 geekos进程源代码分析及实验_第1页
3 geekos进程源代码分析及实验_第2页
3 geekos进程源代码分析及实验_第3页
3 geekos进程源代码分析及实验_第4页
3 geekos进程源代码分析及实验_第5页
资源描述:

《3 geekos进程源代码分析及实验》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Ch2GeekOS进程源代码分析及实验沈峰shenfeng@163.com目录第一部分进程源代码分析第二部分进程源代码实验第一部分进程源代码分析GeekOS中与进程相关的代码位于KThread.h,KThread.c文件中。下面的讨论主要围绕这两个文件进行的。GeekOS进程状态转换图Current:正在占有CPU状态Run:就绪状态Wait:等待状态currentrunwait出现需要等待的事件等待的事件发生调度时间片到GeekOS系统最早创建的内核进程有Main、Idle和Reaper三个进程,它们由Ini

2、t_Scheduler函数创建。首先创建并初始化一个内核进程mainThread,然后将该进程作为Current进程,最后调用Start_Kernel_Thread函数创建了两个系统进程Idle和Reaper。Init_Scheduler源代码如下(位于src/geekos/kthread.c中)voidInit_Scheduler(void){//创建第一个系统进程mainThreadstructKernel_Thread*mainThread=(structKernel_Thread*)KERN_THREA

3、D_OBJ;//初始化mainThreadInit_Thread(mainThread,(void*)KERN_STACK,PRIORITY_NORMAL,true);//使进程mainThread成为当前正在运行的进程g_currentThread=mainThread;//把进程放入队列s_allThreadList中Add_To_Back_Of_All_Thread_List(&s_allThreadList,mainThread);//创建idle进程Start_Kernel_Thread(Idle,0

4、,PRIORITY_IDLE,true);//创建Reaper进程Start_Kernel_Thread(Reaper,0,PRIORITY_NORMAL,true);}进程控制块Kernel_Thread(1/2)定义在include/kthread.h中structKernel_Thread{ulong_tesp;//进程的内核堆栈esp指针volatileulong_tnumTicks;//计时器intpriority;//进程优先级DEFINE_LINK(Thread_Queue,Kernel_Thre

5、ad);//指针字段void*stackPage;//内核堆栈页指针structUser_Context*userContext;//用户进程上下文structKernel_Thread*owner;//父进程指针进程控制块Kernel_Thread(2/2)intrefCount;//引用计数boolalive;//是否活跃structThread_QueuejoinQueue;//加入队列intexitCode;//返回代码intpid;//进程IDDEFINE_LINK(All_Thread_List,K

6、ernel_Thread);//全局进程链表指针#defineMAX_TLOCAL_KEYS128constvoid*tlocalData[MAX_TLOCAL_KEYS];//本地信息};GeekOS进程分类GeekOS中每个进程都是一个Kenerl_Thread对象进程分类:用户进程:运行于用户态的普通进程。此时Kenerl_Thread结构中的userContext!=null。系统进程:系统中一些进程完全运行于内核态。此时Kenerl_Thread结构中的userContext==null。判断一个进程

7、是内核进程还是用户态进程的方法判断userContext字段是否为空GeekOS中队列类型定义Kthread.h定义两个队列类型:Thread_Queue和All_Thread_List通过include/geekos/list.h中的如下三个宏定义队列。这里定义的队列是双向链表。DEFINE_LIST(……)//队列定义DEFINE_LINK(……)//结点指针域定义IMPLEMENT_LIST(……)//定义施加在队列上的操作Thread_Queue宏替换示例structThread_Queue{//队列定

8、义structKernel_Thread*head,*tail;}structKernel_Thread{//结点定义ulong_tesp;structKernel_Thread*prevThread_Queue,//结点指针域*nextThread_Queue;…}//定义施加在队列上的操作static__inline__structKernel_Thread*Get_Front_O

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。