熬之滴水成石:最想深入了解的内容--windows内核机制(4)

                                                                                         56--关于进程和线程(1)

这两个东东应该是在编码生涯里用到最多了,我们知道进程其实包括了许多内容。最为核心的其实就是一个环境,这个环境就是进程依托的生存环境这里面包括了地址空间、句柄表等。每个进程都会有一个自己的线程,或者也可以拥有多个线程。我们知道进程在创建的时候,实际上就创建了一个线程。当进程自己的最后一个线程被over掉时那么就意味着这个进程也到了结束的时候了。线程实际上可以理解是一些方法,被放到一个栈里面,这个栈可以记录执行的历史。在windows中是一个多进程并行的系统环境,但处理器的调度则是线程来管理的。在面向对象设计的windowsOS中,进程是有父子关系,进程在许多属性不明确的时候,均继承父进程。不过这样的继承跟面向对象的设计还是不一样的,这样的父子关系仅仅只是相互记住了一个ID号而已。进程和线程的实现机制都是属于微内核的内容,而管理进程和线程则是在用户层的实现的。这种机制充分体现了面向对象的思想,机制和策略相分离。

我们来看看进程是怎么来的吧!进程的创建实际上是在PspCreateProcess的方法中完成的,这个过程通常是创建了一个进程对象,然后再初始化进程的状态,这里面其实就是创建了属于该进程的地址空间。而线程的创建则是在PspCreateThread完成的,也是先创建一个线程对象然后再初始化其域,这主要是维护线程与进程之间的关系。当然这里面涉及到一些复杂的情况,像windows子系统创建线程就远远比这个复杂些。windows子系统的进程就是大名鼎鼎的csrss.exe。它创造线程也许有些是在系统中的DLL完成的,通常要有内存区对象,然后再调用这些内核中的函数来创建进程。调用的过程也比较复杂,当线程开始执行的时候,总是从某个预定函数开始,这个函数还会从内核模式切换到用户模式,执行基本的进程初始化任务,包括加载必要的链接库,并执行每个库的初始化工作。当初始化完成后,最终控制权会进入用户指定的线程启动的入口。当然线程在windowsOS中是抢占式的调用方式,按照约定OS会赋予线程一个基本的优先级和动态优先级,我们在编码线程时是肯定会遇到这个参数的。这个参数从0到31逐渐加强,实际上只要线程被唤醒时这个线程的优先级是会一点点的增强的。优先级的增强也意味着处理器会尽早的处理该线程。线程实际上在执行中只有2种状态,被执行,被等待!执行时表示该线程符合了条件,反则不被符合。当然最为复杂的情况还是有多个线程队列的时候,CPU如何权衡多个队列之间的关系这里面的调度算法也是比较复杂的。对了,还有一个以前在课本上学到的概念:迁程。迁程的概念实际上相当于用户线程,它对于内核是不可见的。实际上我对它根本没使用过,很多时候都只是一种理论上的认识,没有真正实践过!

                                                            

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值