并发:是一个处理器在一段时间内处理多个任务
    并行:是多个处理器在同一时间同时处理多个任务

    进程的状态:运行、就绪、阻塞、创建和结束
    截屏2021-08-09 下午7.50.12.png
    在虚拟内存管理的操作系统中,通常会把阻塞状态的进程的物理内存空间换到硬盘,等到再次需要运行的时候,在从硬盘换入到物理内存。
    挂起状态:一个新的状态用来描述进程没有占用实际的物理内存空间的情况
    截屏2021-08-09 下午7.53.28.png

    进程控制块(PCB)用来描述进程
    PCB中包含的信息:

    • 进程描述信息 (进程标志符、用户标志符)
    • 进行控制和管理信息 (进程当前状态、进程优先级)
    • 资源分配清单
    • CPU相关信息

    创建进程
    操作系统允许一个进程创建另一个进程
    子进程被终止时,其在父进程处继承的资源应当还给父进程;同时父进程终止的时候,也会终止所有的子进程
    过程:首先分配一个唯一的进程标识号,同时申请一个空白的PCB,PCB有限,若申请失败就创建失败;然后为进程分配资源,如果资源不足,进程就会进入一个等待状态,以等待资源;初始化PCB;将进程插入到就绪队列(如果此时的调度队列能够接纳新的进程)

    终止进程
    三种方式:正常结束、异常结束、外界干预
    过程:寻找PCB;终止进程的执行,将CPU分给其他的进程;如果有子进程,递归进行终止;将该进程拥有的全部资源全都归还给父进程或者操作系统;将PCB从所在的队列中删除
    //TODO 阻塞和唤醒

    进程的上下文切换
    一个进程切换到另外一个进程,就是进程的上下文切换

    进程与线程的比较
    进程是资源分配的单位,线程是CPU调度的单位
    进程拥有一个完整的资源平台,而线程则只是独享必不可少的资源

    进程间的通信方式
    管道:传输数据是单向的 范围是存在父子关系的进程中
    命名管道:FIFO 可以在不相关的进程间进行通信

    消息队列
    消息队列的生命周期是随内核的,如果没有释放消息队列或者关闭操作系统,消息队列会一直存在的
    缺点:不适合较大数据的传输;存在用户态与内核态之间的数据拷贝开销

    共享内存
    拿出一快虚拟地址空间,映射到相同的物理内存中去,不需要拷贝来拷贝去,大大提升了进程间通信的速度。

    信号量
    是一个整型的计数器,主要用于实现进程间的互斥与同步,而不是用于缓存进程间的通信数据。
    两种原子操作:P操作(信号量减一)、V操作(信号量加一)

    信号
    在异常情况下的工作模式,需要用信号的方式来通知进程
    信号是进程通信机制中的唯一的异步通信机制,可以在任何时候发送信号给某一个进程
    用户进程对信号的处理方式:执行默认操作、捕捉信号、忽略信号

    Socket通信
    进行跨网络和不同主机上的进程之间的通信的

    进程调度算法
    先来先服务(FCFS):适用与CPU繁忙型的系统,不适合IO繁忙型的
    最短作业优先(Shortest Job First):优先选择运行时间最短的进程来运行
    高响应比优先调度算法:优先权=(等待时间+要求服务时间)/要求服务时间
    时间片轮转调度算法:每个进程被分配一个时间段,称为时间片
    最高优先级算法(Highest Priority First):静态优先级(创建进程的时候就确定了优先级,整个运行时间优先级不变)、动态优先级(会根据进程动态的调整优先级)
    也分为了两类:非抢占式和抢占式
    多级反馈队列调度算法:时间片轮转算法与最高优先级抢占算法的综合

    缺页异常
    当CPU访问的页面不在物理内存中的时候,就会产生一个缺页中断,请求操作系统将所缺页调入到物理内存

    内存页面置换算法
    最佳页面置换算法:置换在未来最长时间不访问的页面
    先进先出置换算法:选择在内存驻留时间很长的页面进行置换
    最久未使用的置换算法(LRU):选择最长时间没有被访问的页面进行置换
    时钟页面置换算法:将所有的页面都保存在一个环形链表中,当发生缺页的时候,算法会首先检查表指针指向的页面,如果访问位为0就淘汰该页面,同时将新的页面插入这个位置;如果访问位是1就清除访问位,同时找到前面为0的页面。
    最不常用置换算法:选择访问次数最少的页面进行淘汰

    磁盘调度算法
    先来先服务算法
    最短寻道时间优先算法:优先选择从当前的磁头位置所需寻道时间最短的请求(可能会产生饥饿,某些请求永远不会被访问到)
    扫描算法:解决上边产生的饥饿问题,磁头在一个方向上移动,访问所有未完成的请求,知道磁头到大该方向上最后的磁道,再调换方向
    循环扫描算法:对扫描算法进行改进;只在一边进行读取,读取完成之后立即返回,然后在开始读取
    LOOK与C-LOOK算法:对扫描算法和循环扫描算法进行的改进;磁盘不必移动到最始端或这最末端才开始调换方向;而是移动到最远的请求处就开始反向移动。