操作系统专栏2进程管理from 小林coding

进程管理

  • 基本概念
    • 进程控制
    • 进程上下文切换
  • 线程
  • 进程和线程的比较
  • 进程通信
    • 管道
    • 消息队列
    • 共享内存
    • 信号量
    • 信号
    • socket

基本概念

  • 进程:一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元.
  • 并行和并发:操作系统专栏2进程管理from 小林coding_第1张图片
  • 状态:
    操作系统专栏2进程管理from 小林coding_第2张图片
    其中挂起是指没有给程序分配实际的物理内存空间的情况(被交换到磁盘中)
  • pcb:进程控制块包含的信息有:进程描述信息,进程控制和管理信息,资源分配清单,cpu相关信息
  • pcb的组织:链表,分为就绪链表和阻塞链表
    操作系统专栏2进程管理from 小林coding_第3张图片

进程控制

  1. 创建进程:流程如下,申请一个空白的PCB,向PCB填入进程控制相关的信息,为进程分配运行时资源(如内存),将PCB插入到就绪队列,等待调度
  2. 终止进程:3种方式:正常结束,异常结束和外界干预,子进程终止时,将从父进程继承的资源归还给父进程,父进程终止,该进程变成孤儿进程,资源回收的任务交由init进程管理.流程如下:查找终止进程的PCB,处于执行态,立即终止进程,将CPU分配给其他进程,还有子进程则将子进程交由init进程接管,将该进程的全部资源交由操作系统管理,将PCB删除
  3. 阻塞进程:当进程需要等待某一事件完成时,调用阻塞语句将自己阻塞,一旦阻塞等待,只能由另一个进程唤醒.流程如下 找到进程PCB,运行态则保护现场转为阻塞态停止运行,将PCB插入到阻塞队列
  4. 唤醒进程:阻塞态需要别的进程唤醒自己,唤醒流程如下:在该事件的阻塞队列中找到对应的PCB,从阻塞队列中取出,置为就绪态,插入到就绪队列中

进程上下文切换

不同进程在CPU运行,一个进程切换到另一个进程需要进行上下文切换,进程的上下文切换不仅包含了虚拟内存、栈、全局变量等用户空间的资源,还包括了内核堆栈、寄存器等内核空间的资源。

线程

线程是调度的最小单位,是进程中的一条执行流程,每个线程有独立的寄存器和栈,共享代码段,数据段,打开的文件等资源

  • 优点:多个线程并发运行,共享地址空间
  • 缺点:一个线程崩溃,所属进程的其他进程也会崩溃

进程和线程的比较

  • 进程是资源的分配单位,线程是CPU的分配单位
  • 进程拥有完整的资源平台,线程只共享必不可少的资源,比如寄存器和栈
  • 线程能减少并发执行的时间和空间开销

线程能够减少开销体现在

  • 线程的创建比较快,进程在创建的过程中,需要资源管理信息,如页表,文件管理信息,创建线程时,这些东西是共享的
  • 终止时间快,因为线程释放资源相比进程少
  • 线程切换快,线程共享地址空间等,切换时不需要切换页表等
  • 数据交换的速率快

进程通信

管道

ps auxf | grep mysql

中间的竖线就是管道,功能为将前一个命令的输出作为后一个命令的输入,管道传输数据是单向的,如果想相互通信必须创建两个管道.这种管道由于没有名字,因此称为匿名管道,用完即销毁,还有另一种管道被称为FIFO,使用mkfifo命令创建
操作系统专栏2进程管理from 小林coding_第4张图片
pipe系统调用返回两个文件描述符1是写端,0是读端,如果适应shell命令创建管道,那么会开多个进程,命令管道可以在多个进程之间通信数据满足先进先出的顺序并且不支持lseek之类的操作

消息队列

管道不适合进程间频繁的交换数据,消息队列的通信模式就能解决这个问题,比如A进程要给B进程发送消息,那么A进程将数据放在消息队列之后就能返回了

  • 本质:内核中的消息链表
  • 限制:通信不及时,附件大小有限制,存在用户态与内核态的拷贝开销

共享内存

机制就是拿出一块虚拟的地址空间,映射到相同的物理内存中(mmap 和 shmget)
操作系统专栏2进程管理from 小林coding_第5张图片

信号量

主要用于进程之间的同步

信号

kill ...

唯一的异步通信机制,拿到信号之后,有以下几种应对方式

  • 执行默认操作
  • 捕捉信号
  • 忽略信号

socket

网络编程
操作系统专栏2进程管理from 小林coding_第6张图片
操作系统专栏2进程管理from 小林coding_第7张图片

你可能感兴趣的:(操作系统)