操作系统学习笔记—-进程/线程模型

看到许多小程序里,点客服,提醒关注公众号,比如制作器里这些效应,能够自动指导关注公众号,图文体验相当好,研讨了小程序客服接口后,我们就协调把它做成一个工具了,方便小程序的运营人士。芝麻小客服 经验传送门
http://xiaokefu.hotapp.cn

经过/线程模型

统计 1

0. 概述

特点:

0.1 进程模型

多道程序设计
过程的定义、进程控制块

经过情况及转换、进程队列
进程控制—-进程创设、废除、阻塞、唤醒、…

  (1)不需要付出,只需要在微信的小程序后台配置就足以

0.2 线程模型

缘何引入线程
线程的组成
线程机制的落实
用户级线程、要旨级线程、混合格局

(2)补助图文和菜单自动回复效用

1. 进程的基本概念

(3)有用户留言和客服总括效用

1.1 多道程序设计

允许多少个程序同时跻身内存运行,目的是为了增进CPU系统效用

 

1.2 并发环境与并发程序

出现环境
一段时间间隔内,单处理器上有三个货三个以上的程序同时处于开端运行但从没终结的情状,并且次序不是优先确定的。

并发程序
在出现环境中施行的次序

微信配置页面截图,都不需要开销,真的很方便,不需要微信审核

1.3 进程的定义

定义:Process
经过是持有独立效率的顺序关于某个数据集合上的一回运行活动,是系统开展资源分配和CPU调度的单身单位。

进程又称任务

先后的三回执行进程
是正在运作程序的空洞
对CPU的悬空,将一个CPU变幻成四个虚拟的CPU
系统资源以进程为单位分配,如内存、文件、…
每个过程具有独立的地方空间
操作系统将CPU调度给急需的进程

查看当前系统中有微微个过程:
Linux:ps命令

什么安排,这里有个网址介绍https://wiki.hotapp.cn/xiao-ke-fu/ru-he-pei-zhi.html

1.4 进程控制块PCB

PCB:Process Control Block
又称:进程描述符、进程属性
操作系统用于管理控制进程的一个特地数据结构
笔录进程的各类性能,描述进程的动态变化过程

PCB是系统感知进程存在的唯一标志
过程与PCB是逐一对应的

进程表:所有进程的PCB集合
进程表的轻重相似固定
并发度:最多匡助多少个过程

PCB的情节涵盖哪些
经过描述消息
过程控制信息
所兼有的的资源和选择状态
CPU线程信息

进程描述音讯
经过标识符(process ID)唯一,平时是一个平头
经过名,平时给予可执行文件名,不唯一
用户标识符(user ID)
经过组关系

过程控制音讯
眼前境况
优先级
代码执行入口地址
次第的磁盘地址
运作总结音讯(执行时间、页面调度)
进程间协同和通信
经过的行列指针
进程的音讯队列指针

所所有的的资源和利用情形
虚拟地址空间的面貌
开辟的文书列表

CPU现场音讯
寄存器值(通用寄存器、程序计数器PC、程序状态字PSW、栈指针)
指向该过程也标的指针

Linux:task_struct

统计 2

2. 经过情状及气象转换

 

2.1 进程意况

运行态:进程占用CPU,并在CPU上运行
经过从稳妥状态被调度后,进程进入运行情状

就绪态:进程一度准备好,已分配到所需资源,只要分配到CPU就可知即刻运行

等待态(或阻塞态):正在推行的历程由于某些事件(I/O请求,申请缓存区失利)而临时不能运行,进程遭到阻塞。
在经过等待的原则满意时,进入就绪状态等待系统调用

创建态
已到位创造一个经过所必要的行事,PID、PCB
但从没同意实施该过程,因为资源有限

终止态:进程执行到位后,进程进入终止态
可完成部分数码总计工作
资源回收

挂起态(Suspend):用于调节负载
过程不占用内存空间,其过程影象交流来磁盘上保留

布置后的功效图

2.2 进程情形转换

  1. 就绪 –> 运行:调度程序选拔一个新的过程运行
  2. 运行 –> 就绪:只有二种情形

    1. 运作过程用完了时间片
    2. 统计,一个高优先级进程进入就绪状态,抢占正在周转的进程
  3. 运行 –> 等待:当一个过程等待某个事件暴发时
    1) 请求OS服务器
    2) 对资源的走访尚不可能拓展
    3) 等待I/O结果
    4) 等待另一个过程提供新闻

  4. 等待 –> 就绪:所等待的风波发生了

  5. 以下三种境况转换不可以暴发
    等候 –>
    运行:操作系统在拓展调度时不会从绿灯(等待)队列举办选拔过程执行,而是从稳妥队列中精选。
    就绪 –>
    等待:就绪态固然准备妥当,可是还并未履行,不能进入等待态。

统计 3

统计 4

2.3 进程情状模型

统计 5

统计 6

统计 7

浅度睡眠可以吸纳信号,而深度睡眠不得以吸收信号

 

2.4 进程队列

经过队列:
操作系统为每一类经过建立一个或四个体系
队列元素为PCB
陪伴进程状况的变更,其PCB从一个类别进入另一个行列

等待态队列,六个等待队列等待的口径不同
就绪态队列也可以是多少个

统计 8

安排后台:修改分外便宜

3. 过程控制

经过控制操作完成经过各状态之间的更换,由所有特定功用的原语完成。

原语(Primitive)
做到某种特定效用的一段程序,具有不可分割或不足中断性。即原语的举办必须是连连的,在实施过程中不容许被搁浅。—-原子操作(atomic)

 

3.1 进程的创设

给新历程分配一个唯一标识以及经过控制块

为经过分配地址空间

最先化进程控制块
安装默认值(如:状态为New,…)

安装相应的体系指针
如:把新过程加到就绪队列链表中

统计 9

3.2 进程的吊销

撤销进程所占有的资源
闭馆打开的文本、断开网络连接、回收分配的内存

撤除该过程的PCB

 

3.3 进程阻塞

处在运行状态的过程,在其运转过程中希望某一时间发生,如等待键盘输入、等待磁盘数据传输完成、等待其他进程发送音讯。当被等候的轩然大波未暴发时,由进程自己履行阻塞原语,使自己由运行态变为阻塞态。

wait();

 心得传送门 http://xiaokefu.hotapp.cn

3.4 Unix的多少个过程控制操作

fork() 通过复制调用进程(父进程)来树立新的进程,是最基本的经过建立过程

exec()包括一多级系统调用,它们都是经过用一段新的程序代码覆盖原来的地方空间,实现进程执行代码的转移

wait() 提供起码进程同步操作,能使一个经过等待此外一个经过的完结

exit() 用来终止一个过程的运转

作为一个搞技术的创业者,能做出一个实惠的产品,其实是不行欢乐和喜悦的。

3.5 Unix的fork()实现

为子进程分配一个悠然的进程描述符
proc结构

分红给子进程唯一标识pid

以一回一页的方法复制父进程地址空间
弊病:Unix中从父进程复制到子进程的情节,好多都不需要。Linux拔取了写时复制技术COW加快创制过程
Copy-On-Write

从父进程处继承共享资源,如打开的文本和当前工作目录等

将子进程的事态设为就绪,插入到妥善队列

对子进程再次回到标识符0

向父进程再次回到子进程的pid

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
    pid_t pid;

    pid = fork();    // 创建一个子进程
    if (pid < 0) {    // 出错
        fprintf(stderr, "fork failed\n");
        exit(-1);
    } else if (pid == 0) {    // 子进程
        execlp("/bin/ls", "ls", NULL);
    } else {
        wait(NULL);    // 父进程等待子进程结束
        printf("Child process complete\n");
        exit(0);
    }

    return 0;
}

统计 10

父进程空间fork()再次回到的是子进程的PID号。
子进程空间fork()再次回到的是0

4. 时刻牵挂了然进程概念

4.1 关于进程的座谈

进程的分类

系统进程:操作系统为管理一些资源而设定的进程,特点是优先级比较高,相对于用户进程优先被调度
用户进程

前台进程:用户打交道的进程
后台进程:操作系统初始化后设定的进程,在后台为客户提供服务

CPU密集型进程:需要大量计算的进程,如:游戏、画面渲染等
I/O密集型进程:经常需要输入输出、读盘等操作

经过层次结构

Unix进程家族树:init为根

4.2 进程与程序的区分

过程更能规范刻画并发,而先后不能
次第是静态的,进程是动态的
经过有生命周期,有出生有毁灭,是一朝一夕的;而先后是相对长时间的
一个先后可对应多个过程
进程具有开创其他进程的效劳,而先后尚未

4.3 进程地址空间

操作系统给每个过程都分配了一个地点空间
各类过程有和好独立的地方空间,不同的地点空间的地点是虚拟地址

统计 11

4.4 进程映像(Image)

对经过执行活动全经过的静态描述:
由进程地址空间内容、硬件寄存器内容及与该过程有关的内核数据结构、内核栈组成。

用户相关:进程地址空间(包括代码段、数据段、堆和栈、共享库…)
寄存器相关:程序计数器、指令寄存器、程序状态寄存器、栈指针、通用寄存器等的值
水源相关:
静态部分:PCB及各个资源数据结构
动态部分:内核栈(不同进程在进入基础后采用不同的内核栈)

4.5 上下文(Context)切换

将CPU硬件状态从一个经过换来另一个经过的经过称为上下文切换。

进程运行时,其硬件状态保存在CPU上的寄存器中
寄存器:程序计数器、程序状态寄存器、栈指针、通用寄存器、其他控制寄存器的值

次第不运行时,这些寄存器的值保存在进程控制块PCB中;当操作系统要运行一个新的历程时,将PCB中的相关值送到相应的寄存器中。

5. 线程

5.1 线程的引入

布局服务器的二种办法

模型 特性
多线程 有并发、阻塞系统调用
单线程进程 无并发、阻塞系统调用
有限状态机 有并发、非阻塞系统调用、中断

付出的设想

进程有关的操作:
创办进程
收回进程
进程通信
经过切换

时间/空间开发大,限制了并发度的加强。

线程的付出小
制造一个新线程话费时间少,裁撤也是
五个线程切换花费时间少
线程之间相互通信无须调用内核(同一进程内的线程共享内存和文书)

属性的设想

三个线程,有的统计,有的I/O

六个电脑

5.2 线程的基本概念

过程的多少个基本特性
资源的拥有者—-进程依旧资源的拥有者
CPU调度单位—-线程继承了这一性能

线程:进程中的一个运行实体,是CPU的调度单位,有时将线程称为轻量级进程。

在相同进程扩展了两个执行系列(线程)。

5.3 线程的性质

线程:

有标识符ID
有动静及气象转换
不运行时需要珍重的上下文
有上下文环境:程序计数器等寄存器
有温馨的栈和栈指针

同一个历程的例外线程,共享所在过程的地方空间和其他资源

可以创造、撤消另一个线程
程序最先是以一个单线程进程形式运行的。

6. 线程机制的贯彻

6.1 线程的落实

用户级线程

在用户空间建立线程库:提供一组管理线程的过程。

运转时系统:完成线程的管理工作(操作、线程表)

基础管理的要么经过,不了解线程的留存

线程切换不需要内核态特权

多线程编程接口,以线程库形式提供给用户,pthread

pthread_create()
pthread_exit()
pthread_join()
pthread_yield()

6.2 用户级线程小结

优点
线程切换快
调度算法是用用程序一定的
用户级线程可运行在其他操作系统上(只需要贯彻线程库)

缺点
水源只将总括机分配给进程,同一进程中的六个线程无法而且运行与五个CPU上
大部分体系调用是阻塞的,由此,由于水源阻塞进程,所以经过中存无线程也被打断

6.3 主题级线程

水源管理所无线程,并向应用程序提供API接口
基本维护过程和线程的上下文
线程的切换需要内核匡助
以线程为根基举办调度:
如:Windows

掺杂模型

线程成立在用户空间形成
线程调度等在焦点态完成
六个用户级线程多路复用四个内核级线程

7. 本章重点总括

7.1 进程

并发性 任何进程都得以与任何进程一起向前推动实施
动态性 进程是正值执行顺序的实例
经过是动态爆发、动态消亡的
进程在其生命周期内,在二种为主气象之间转移
独立性 进程是资源分配的一个单身单位
各进程的地方空间互相独立
交互性 指进程在履行过程中可能与此外进程暴发直接或直接的涉嫌
异步性 每个过程皆以其相对独立的、不可预知的速度前进推动
经过印象 程序 + 数据 + 栈(用户栈、内核栈) + PCB

7.2 线程

多线程应用场景
线程基本概念、属性
线程实现机制

可再入程序(可重入)
可被五个经过同时调用的先后,具有下列性质:
是纯代码的,即在进行进程中我不更改;调用它的过程应该提供数据区

8. 重大概念

经过、进程情状及气象转换、进程控制、进程控制块(PCB)、进程地址空间、进程上下文环境
线程、线程属性、用户级线程、主题级线程、pthreads、可重入程序、原语、Web服务器

参照:Coursera香水之都大学操作系统课程笔记