-->

进程和线程

2020-01-25 00:08发布


title: 2017-10-14进程和线程
tags: 现代操作系统,进程,线程
grammar_cjkRuby: true
---

1.进程(process)

定义:进程是一个正在运行的程序的一个实例,也就是程序的执行实体,拥有自己的地址空间。例如有个厨师他手上有一本烹饪食谱,厨房里有各种需要的食材,这个时候食谱就是程序,然后食材就是各种输入数据,厨师阅读食谱、准备食材、打开煤气等过程就是进程;如果这时候他的儿子被蜜蜂蛰伤,他急忙记录下自己照着食谱做到了那个位置,停下手中的事情,赶紧拿出急救手册,去给儿子包扎伤口,这个过程就相当于从一个进程(炒菜)中断执行另外一个进程(包扎伤口),其中每个进程都有自己的程序(烹饪食谱和急救手册)。

1.1 进程的创建

新的进程都是由一个父进程调用一个创建进程的系统调用所产生的
unix中只有一个系统调用可以创建新的进程:fork

1.2 进程的终止

kill

1.3 进程的层次结构

unix中父程序和他的子程序构成一个进程组,最开始的进程就是`init`,而window中没有程序进程层次的概念,都是平等的,用句柄来控制子进程。

1.4 进程的状态

运行态:该时刻进程实际占用CPU
就绪态:等待其他进程运行结束,处于暂停状态
阻塞态:除非有某外部事件发生,否则不会运行

1.5 进程的实现

进程表:操作系统管理和查看进程的一个集合
中断过程中操作系统底层操作
+ 硬件压入堆栈程序计数器、程序状态字等
+ 硬件从中断向量中载入新的PC
+ 汇编语言过程保存寄存器值以及新的堆栈
+ 运行新的程序

2. 线程(thread)

定义:是进程的一个实体,线程自己不拥有系统资源,与同属一个进程的其它线程共享进程所拥有的全部资源,可以并发执行。还是前面的那个例子,厨师参照着食谱做美食过程中,他烧开水的同时,还在洗菜,这时烧开水和洗菜(两个线程)就是并发进行的,同时共享一个时间点(资源)。

2.1 线程和进程的区别

多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配,这就是进程和线程的重要区别。

进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位。进程是把所有资源集中在一起,而线程是CPU被调度执行的实体。


==每个线程的堆栈都有一帧,供各个被调用但还没有从中返回的过程使用,存放着每个过程的局部变量和过程结束后的返回地址。线程没有层次关系,也就是说没有父子关系==
==线程包Pthread定义了几个函数:==

Pthread_creat
: 创建一个新的线程,返回一个线程标记符

Pthread_exit
: 结束一个线程,释放线程的寄存器

Pthread_join
: 等待一个特殊的线程结束,该线程处于阻塞状态

Pthread_yield
: 释放CPU来运行其他的线程

Pthread_attr_init
: 创建并初始化一个线程的属性结构

Pthread_attr_destroy
:删除一个线程的属性结构

标签: