操作系统——进程管理

文章目录

  • 进程和线程
    • 进程的概念
    • 进程和程序的区别
    • PCB(进程控制块)
    • 程序是如何运行的
    • 进程的特征
    • 进程的状态和状态转换
      • 五态模型
    • 进程控制
      • 进程状态装换为啥需要保证原子性
      • 如何实现原语的原子性?
    • 进程控制相关原语
      • 进程创建
      • 进程终止
      • 进程的阻塞和唤醒
      • 进程的唤醒
      • 进程的切换
    • 进程通信
      • 共享存储
      • 消息传递
      • 管道通信
    • 线程概念
    • 为啥要引入线程
    • 线程的属性
    • 线程的实现方式
      • 用户级线程
      • 内核级线程
    • 多线程模型
      • 一对一模型
      • 多对一模型
      • 多对多模型
    • 线程的状态和转换
    • 线程的组织与控制
    • 进程和线程的区别


进程和线程

进程的概念

程序:是静态的,就是一个存放在磁盘里的可执行文件,就是一系列的指令集合。

进程:是动态的,是程序的一次执行过程。在现在的操作系统中,用户程序以进程方式占用系统资源。

典型的进程定义:

  1. 进程是程序的一次执行
  2. 进程是一个程序以及其数据在处理机上顺序执行时所发生的活动
  3. 进程是系统进行资源分配和调度的一个独立单位

操作系统负责创建进程,为进程分配资源调度进程占用处理机等。

进程和程序的区别

  1. 进程是动态的,程序是静态的:程序是有序代码的集合,通常对应着文件、静态和可以复制。进程是程序的执行
  2. 进程是暂时的,程序是永久的,进程是一个状态变化的过程,程序可长久保存。
  3. 进程与程序组成不同:进程的组成包括程序、数据和PCB(进程控制块)PCB是进程存在的唯一标志
  4. 进程与程序的对应关系:进程是程序在数据集上的一次执行,通过多次执行,一个程序可以对应多个进程,通过调用关系,一个进程可以包括多个程序。

举个例子:正在运行的QQ音乐是一个进程,正在登录微信也是一个进程。同时登录多个QQ就是多个不同的进程。

PCB(进程控制块)

PCB是进程存在的唯一标志,当进程被创建时,操作系统就会为其创建PCB,但你进程结束时,会回收其PCB。

当进程被创建时,操作系统会为该进程分配一个唯一的、不重复的进程id,叫做pid

  • 操作系统要记录PID、进程所属用户ID(UID),PID用来区分不同的进程
  • 还要记录给进程分配了哪些资源(如:分配了多少内存、正在使用哪些I/O 设备、正在使用哪些文件),可以用于实现操作系对资源的管理
  • 还要记录进程的运行情况(如:CPU使用时间、磁盘使用情况、网络流量使用情况等),可以用于实现操作系统对进程的调度

这些信息都要被保存在一个数据结构PCB中,PCB也叫做进程控制块。操作系统需要对各个并发运行的进程进行管理,但凡管理时所需要的信息,都会被放到PCB中

PCB包含以下信息:

  1. 进程标识符

    • 外部标识符:创建者提供,便于记忆,比如进程名(可以基于执行的文件名)
    • 内部标识符:系统为每个进程分配一个唯一的pid
  2. 处理机状态信息

    处理机在运行时,许多信息都放在寄存器中。当处理机被中断时,所有这些信息都必须保存在PCB 中,以便在该进程重新执行时,能从断点继续执行。

    • 通用寄存器:用户访问,用于暂存信息(进程运行的现场信息
    • 指令计数器:存放了进程下执行的下一条指令的地址
    • 程序状态字:含有状态信息,如条件码,执行模式,中断屏蔽标志
    • 用户栈指针:指每个用户进程都有一个或若千个与之相关的系统栈,用存放过程和系统调用参数及调用地址,栈指针指向该栈的栈顶。过程调用/系统调用/中断处理和返回时需要用
  3. 进程调度(控制和管理)信息

    • 进程状态,指明进程的当前状态,作为进程调度和对换时的依据;
    • 进程优先级,用于描述进程使用处理机的优先级别的一个整数,优先级高的进程应优先获得处理机;
    • 进程调度所需的其它信息,它们与所采用的进程调度算法有关,比如,进程已等待 CPU 的时间总和、进程已执行的时间总和等;事件,阻塞原因
  4. 进程控制信息(资源分配清单)

    • 程序和数据的地址;
    • 进程同步和通信机制:
    • 资源清单:除CPU以外的全部资源及已经分配到该进程的资源清单
    • 链接指针:本进程PCB所在队列中的下一个进程的PCB的首地址

PCB其实就是一个C语言的结构体,这个结构体里存放着一个进程的信息

struct task_struct {
   
    // 进程标识符
    pid_t pid;
    // 当前进程的状态
    volatile long state;
    //打开文件信息
	struct 

你可能感兴趣的:(操作系统,操作系统,进程,线程)