在学习操做系统的过程当中,"进程"、"线程"概念其实很模糊。不一样的上下文中,该名称指代的概念极可能是不一样的,概念的不清晰为学习和沟通带来障碍,因此,在最开始咱们先对齐概念。html
不少书籍、文章里会这样来定义进程和线程:linux
其实这样的描述依然是不够具体的。segmentfault
一个执行中的程序,实际上是由一组资源和(一个或者多个)执行实体组成的,每一个执行实体须要本身执行过程当中所必须的独有资源,全部的执行实体共享可共享资源。
这里的执行实体,就是线程;这里的执行实体和共享资源,就是进程。多线程
(用户)虚拟地址空间函数
信号相关布局
上述的全部资源中,加粗标记的为每一个线程中独有的资源,未加粗的为全部线程共享的资源。学习
关于虚拟地址空间,这里有张图比较方便咱们理解。这张图的详细解释spa
不少文章中会提到如下几个东西:操作系统
计数器和寄存器.net
寄存器
这其中,进程关系在 Linux 中实际上是使用独立的结构体进行存储的,经过内核提供的方法来获取,本质上不该该算是某种资源。其主体是内核 task_struct,后续咱们会展开详细描述。
而计数器和寄存器是体系结构相关的硬件实现,处于执行中的执行实体(线程)会使用这些硬件,因此也不能算是某种资源。
该段落拓展阅读:
Linux 只有一个结构体来描述进程/线程—— task_struct,该文件位于 /linux/include/linux/sched.h
。
这一结构体中有字段指向/描述相关资源和相互之间的关系,于是,该结构体更应该认为是一个“线程结构体”,而“线程结构体”上的这些对于相关资源和相互之间关系的描述,则构成了“进程”。
后面的笔记中会有对 task_struct 结构体的详细分析。