【操作系统】区分系统进程、用户进程,内核线程、用户线程

1,395 阅读2分钟

「这是我参与2022首次更文挑战的第5天,活动详情查看:2022首次更文挑战」。

进程与线程

  • 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,它是系统进行资源分配和调度的一个独立单位
  • 线程是进程的一个实体,是CPU调度和分配的基本单位,线程自己基本上不拥有系统资源,只拥有一些在运行中必不可少的资源(如程序计数器、一组寄存器和栈),但是,它可以与同属一个进程的其他的线程共享进程所拥有的全部资源。

系统进程与用户进程

  • 系统进程:可以执行内存资源分配和进程切换等管理工作;该进程的运行不受用户的干预,即使是root用户也不能干预系统进程的运行。
  • 用户进程:通过执行用户程序、应用程序或内核之外的系统程序而产生的进程,此类进程可以在用户的控制下运行或关闭。

内核线程与用户线程

  • 内核线程:内核线程的建立和销毁都是由操作系统负责、通过系统调用完成的
    • 操作系统在调度时,参考各进程内的线程运行情况做出调度决定
    • 如果一个进程中没有就绪态的线程,那么这个进程也不会被调度占用CPU
  • 用户线程:指不需要内核支持而在用户程序中实现的线程
    • 其不依赖于操作系统核心,用户进程利用线程库提供创建、同步、调度和管理线程的函数来控制用户线程
    • 可以在不支持线程的操作系统中实现
    • 不需要用户态/核心态切换,创建和销毁线程、线程切换等线程管理的代价比内核线程少得多
    • 操作系统内核不知道多线程的存在,因此一个线程阻塞将使得整个进程(包括它的所有线程)阻塞
    • 由于处理器时间片分配是以进程为基本单位的,所以每个线程执行的时间相对减少
    • 用户线程多见于一些历史悠久的操作系统,如UNIX操作系统

在linux里面,没有区分线程和进程。linux用一个 task_struct 来管理控制执行代码的实体(线程),相当于线程控制块,当执行 fork 等系统调用时,一个新的task_struct 会被创建