线程的管理 用户态的多线程 内核态的多线程
    补:

    img_0588.jpg
    进程,这一章,需要一点操作系统知识,可以看到分布式系统知识,还是有点广的
    img_0589.jpg
    本章的重点是虚拟化那一节
    img_0590.jpg
    进程的组成:线程
    那分布式系统中的线程怎么说?
    img_0591.jpg
    处理器:提供一组指令以及自动执行一系列指令的能力
    线程:线程是CPU调度的最小单位(最小的软件处理器)
    进程:进程是资源分配的最小单位
    img_0592.jpg
    处理器上下文:存储在处理器寄存器中的值的最小集合,用来执行命令
    线程上下文:存储在处理器寄存器和内存中的值的最小集合,用来执行命令
    进程上下文:存储在处理器寄存器中的值的最小集合,用来执行线程命令
    img_0593.jpg
    观察1:一个进程里线程共享数据段、地址段
    观察2:进程的上下文切换需要涉及到内核,非常耗时间
    观察3:一般,进程要比线程消耗更多的计算机资源
    img_0594.jpg
    这里提到了一个现象:就是在大量的APP使用进程进行协作完成某项功能,使用进程间通信,这是非常耗费资源的
    第一步:从用户空间到内核空间
    第二步:进程上下文切换,从A到B
    第三步:从OS内核空间到用户空间
    img_0595.jpg
    那为了解决耗时间的问题,想到两个
    操作系统内核提供线程,还是将线程作为用户级软件包的一部分?
    上面介绍线程作为用户级软件包的一部分的优缺点:
    优点:可以在不支持OS下,也可以实现多线程
    缺点: 若是某个线程需要调用IO,后面线程因为操作系统不支持多线程,而被阻塞
    若操作系统不支持多线程,就不能将一个进程上的多线程在多个核上运行
    下面介绍操作系统内核提供线程的优缺点:
    img_0596.jpg

    img_0597.jpg
    下面介绍混合式操作线程(依然在用户空间实现线程调度,但是如果发生阻塞后,让内核参加进来进行调度)的优缺点:
    将用户空间的某个线程状态与内核空间内的轻量型进程进行绑定
    LWP

    缺点如下红字
    img_0598.jpgimg_0599.jpg
    分布式系统实现多线程的例子和好处
    img_0600.jpgimg_0601.jpgimg_0602.jpgimg_0603.jpgimg_0604.jpg
    多线程服务器的工作原理:
    有两种线程:(dispatch thread)(worker thread)
    img_0605.jpg
    下面介绍服务器的三种模型:
    1,多线程
    2,单线程进程模型
    3,有限状态机

    下面就是本节的重点:虚拟化。。。。。就是讲了虚拟化有哪些类别
    换了另外一个人的ppt
    img_0763.jpgimg_0764.jpgimg_0765.jpg
    传统计算机:硬件,操作系统,应用
    虚拟化后:用主操作系统跑的硬件,虚拟层,虚拟机(虚拟机里有:虚拟硬件,客户操作系统,应用)
    img_0766.jpg
    什么是虚拟化:一个使软件进行间接调用硬件的层
    操作系统运行在虚拟层上面,通过虚拟层来间接的调用下面的硬件
    img_0767.jpg
    虚拟化的种类:
    (1)虚拟机直接与硬件打交道,称为物理机
    (2)
    (3)虚拟机运行在主操作系统上,比如Docker,运行在Linux的VMM
    img_0768.jpg
    虚拟机定义:可以跑guest OS的软件
    GOS定义:一个运行在虚拟环境中的操作系统
    VMM:就是虚拟层
    img_0769.jpgimg_0770.jpgimg_0771.jpg
    这种低级别的虚拟化操作是云计算的基础
    VMM直接调用硬件层,根据需要分配所需storage
    img_0772.jpg
    VMM的操作之一:把Guest 操作系统和上面的APP 当做磁盘镜像,就可以随意复制,移动,迁移
    img_0773.jpgimg_0774.jpgimg_0775.jpg
    虚拟化的分类
    1,在应用层
    2,在函数层
    3,在操作系统层
    4,硬件抽象层做虚拟化:对各种硬件去做虚拟化
    5,在指令架构做虚拟化:把一个指令集翻译成另外一个指令集
    img_0776.jpg
    在指令架构上进行虚拟化
    将一个指令系统拦截翻译成另外一个指令系统
    优点:可以兼容大量旧的二进制代码
    缺点:性能损失较大
    img_0777.jpg
    在硬件层上做虚拟化,位虚拟机生成虚拟硬件环境,并通过虚拟化来管理硬件,,用的最广!
    优点:具有较高的性能和良好的应用隔离性
    缺点:由于硬件型号的复杂性,实施的成本也很高
    img_0778.jpg
    操作系统在虚拟化:是传统操作系统和用户位置之间的抽象层,在单个物理服务器和OS实例上创建容器,以利用数据中心的硬件和软件
    eg:创建虚拟环境
    img_0779.jpgimg_0780.jpgimg_0781.jpgimg_0782.jpg
    在函数层进行虚拟化(不用虚拟化整个操作系统了,减少工作量)
    img_0783.jpgimg_0784.jpg
    在应用层做虚拟化,是最经典的虚拟化
    将应用程序虚拟化为虚拟机
    优点:最高的应用程序隔离
    缺点:性能低,应用灵活性低,实现复杂
    img_0785.jpg
    从这里看出,还是硬件虚拟化的效率最高
    img_0786.jpg
    完全虚拟化:不需要修改GOS
    半虚拟化:需要修改GOS
    虚拟化与半虚拟化相比
    img_0787.jpgimg_0788.jpgimg_0789.jpgimg_0790.jpgimg_0791.jpgimg_0792.jpgimg_0793.jpgimg_0794.jpg

    img_0613.jpgimg_0614.jpgimg_0615.jpgimg_0616.jpgimg_0617.jpgimg_0618.jpgimg_0619.jpgimg_0620.jpgimg_0621.jpgimg_0622.jpgimg_0623.jpgimg_0624.jpgimg_0625.jpg
    注意服务器的定义:一个进程,在特定的传输地址上来等待传入服务请求
    img_0626.jpg
    服务器的类型:
    lterative:一次只能处理一个
    Concurrent:同时处理多个请求
    img_0627.jpgimg_0628.jpgimg_0629.jpgimg_0630.jpgimg_0631.jpgimg_0632.jpg
    集群,之前在系统体系里也提到了,属于集中式架构
    在这里分成三层
    第一层:利用负载平衡器分发请求
    第二层:服务器集群
    第三层:与数据打交道
    img_0633.jpgimg_0634.jpgimg_0635.jpgimg_0636.jpgimg_0637.jpgimg_0638.jpgimg_0639.jpgimg_0640.jpgimg_0641.jpgimg_0642.jpgimg_0643.jpg
    为什么要进行代码迁移?
    答:把代码从重载移到轻载上,减小通信成本,有些时候可以把代码移到数据服务器上,而不是把数据移到代码服务器上,因为代码一般很大,数据一般很小
    img_0644.jpgimg_0645.jpgimg_0646.jpgimg_0647.jpg

    img_0648.jpgimg_0649.jpgimg_0650.jpgimg_0651.jpgimg_0652.jpgimg_0653.jpgimg_0654.jpgimg_0655.jpgimg_0656.jpg