四个民主化

韩化英有四个特定的民主化,建立次序如下表所示:

2号民主化,KProcess,为Mach态根民主化.开启操作过程中建立.

0号民主化,KIdle为Mach态第三个民主化,它是透过KProcessfork 得来的.这有点儿难认知.

1号民主化,init,为使用者态根民主化.由各项任务SystemInit建立.

自动草稿

辨认出没在图中看不出0号民主化,在看完第一集后请再说为何?

家族企业化管理工作

民主化(process)是家族企业化管理工作,整体分成两大族企业,使用者态家族企业和Mach态家族企业.

使用者态的民主化是军人社会阶层,干着各个领域的活,基本权利非常有限,数目为数众多,公益活动覆盖范围非常有限.北京饭店的确无法就行了出入.那个社会阶层有位协力的后人g_userInitProcess (1号民主化).

自动草稿

Mach态的民主化是贵族社会阶层,管理工作军人社会阶层的,维持军人生活秩序的,拥有超级权限,数目不多.那个社会阶层后人是 g_kernelInitProcess(2号民主化).

自动草稿

这两个社会阶层可以相互流动吗,有没可以透过高考改变命运的机会? 答案是: 绝对不可能!!! 龙生龙,凤生凤,老鼠生儿会打洞.从后人建立的那一刻起就被刻在基因里了,抹不掉了. 因为所有的民主化都是由这两位老同志克隆(clone)来的,继承了这份基因.LosProcessCB有专门的标签来processMode区分这两个社会阶层.整个韩化英Mach源代码并没提供改变命运机会的set函数.

自动草稿

2号民主化 KProcess

2号民主化为Mach态的后人,也是Mach建立的第一个民主化,源代码操作过程如下表所示,省略了不相干的代码.

自动草稿

自动草稿

解读

main函数在系列篇中会单独讲,请留意自行翻看,它是在开机之初在SVC模式下建立的.

Mach态后人的名字叫KProcess,优先级为最高 0 级.”KProcess”民主化是长期活跃的,很多重要的各项任务都会跑在其之下.例如:

Swt_Task

oom_task

system_wq

tcpip_thread

SendToSer

SendToTelnet

eth_irq_task

TouchEventHandler

USB_GIANT_Task此处不细讲这些各项任务,在其他篇幅有介绍,但光看名字也能猜个八九,请自行翻看.

紧接着KProcessCLONE_FILES的方式 fork了一个 名为”KIdle”的子民主化.

Mach态的所有民主化都来自2号民主化这位老同志,子子孙孙,代代相传,形成一颗家族企业树,和人类的传承所不同的是,它们往往是白发人送黑发人,子孙民主化往往都是短命鬼,后人最能活,子孙都死绝了它还在,有些收尸的工作要交给它干.

0 号民主化 KIdle

0号民主化是Mach建立的第一个民主化,在OsKernelInitProcess的末尾将2号民主化设为当前民主化后,紧接着就fork了0号民主化.为何一定要先设置当前民主化,因为fork需要一个父民主化,而此时系统处于开启阶段,并没当前民主化. 是的,你没看错.民主化是操作系统为方便管理工作资源而衍生出来的概念,系统并不是非要民主化,各项任务才能运行的. 开机阶段就是啥都没,默认跑在svc模式下,默认指定了入口地址reset_vector都是由硬件上电后规定的. 民主化,线程都是跑起来后慢慢赋予的含义,OsCurrProcessSet是从软件层面赋予了此为当前民主化的那个概念.此处是Mach设置的第一个当前民主化.

自动草稿

自动草稿

解读

看过fork篇的可能辨认出了一个参数,KIdle被建立的方式和透过系统调用建立的方式不一样,一个用的是CLONE_FILES,一个是CLONE_SIGHAND具体的建立方式如下表所示:

自动草稿

KIdle建立了一个名为Idle的各项任务,各项任务的入口函数为OsIdleTask,这是个空闲各项任务,啥也不干的.专门用来给cpu休息的,cpu空闲时就待在那个各项任务里等活干.

自动草稿

fork Mach态民主化和fork 使用者态民主化有位地方会不一样,就是SP寄存器的值.fork使用者态的民主化 一次调用两次返回(父子民主化各一次),返回的位置一样(是因为拷贝了父民主化陷入Mach时的上下文).所以只能透过返回值来判断是父还是子返回.那个在fork篇中有详细的描述.请自行翻看. 但forkMach态民主化虽也有两次返回,但是返回的位置却不一样,子民主化的返回位置是由Mach指定的.例如:OsIdleTask就是入口函数.详见代码:

自动草稿

自动草稿

结论是建立0号民主化中的OsCreateIdleProcess调用LOS_Fork后只会有一次返回.而且返回值为0,因为g_freeProcess中0号民主化还没被分配.详见代码,注意看最后的注释:

自动草稿

自动草稿

1号民主化 init

1号民主化为使用者态的后人源代码操作过程如下表所示, 省略了不相干的代码.

自动草稿

自动草稿

自动草稿

自动草稿

自动草稿

解读

从代码中可以看出使用者态的后人建立操作过程有点儿意思,首先它的源头和Mach态后人一样都在OsMain.

透过建立一个分离模式,优先级为10的系统各项任务SystemInit,来完成.各项任务的入口函数SystemInit()的实现由平台集成商来指定. 第一集采用了hi3516dv300的实现.也就是说使用者态祖宗的建立是在sysTask.uwStackSize = LOSCFG_BASE_CORE_TSK_DEFAULT_STACK_SIZE;//16K栈中完成的.那个各项任务归属于Mach民主化KProcess.

使用者态后人的名字叫Init,优先级为28级.

使用者态的每个民主化有独立的虚拟民主化空间vmSpace,拥有独立的内存映射表(L1,L2表),申请的内存需要重新映射,映射操作过程在内存系列篇中有详细的说明.

init建立了一个各项任务,各项任务的入口地址为__user_init_entry,由编译器指定.

使用者态民主化是指应有程序运行的民主化,透过动态加载ELF文件的方式开启.具体加载流程系列篇有讲解,不细说.使用者态民主化运行在使用者空间,但透过系统调用可以陷入Mach空间.具体看这张图:

自动草稿

想了解更多精彩内容,快来关注计算机java编程

举报/反馈

1.本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2.分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3.不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4.本站提供的源码、模板、插件等其他资源,都不包含技术服务请大家谅解!
5.如有链接无法下载或失效,请联系管理员处理!
6.本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!