操作系统简单总结之线程简介

操作系统简单总结——线程简介

  • 进程和线程
  • 线程分类

进程和线程

进程和线程对比

  • 进程是资源分配的单位,不频繁切换(OS控制)。
  • 线程是被调度运行的单位。不拥有资源,可频繁调度切换(由进程本身控制)。

我觉得首先要明白线程是进程所拥有的,受进程管理。然后进程是OS管理的,是分配资源,被调度的对象。正如OS通过PCB管理进程,进程通过TCB管理线程。

我觉得很重要的是因为线程是最小被调度运行单元,然后每一个线程都会有自己的工作栈(进程从OS分配的堆栈段再分给每个线程),线程切换主要是SS段寄存器改变。

  • 进程调度,切换进程上下文,包括分配的内存,包括数据段,附加段,* 堆栈段,代码段,以及一些表格。
  • 线程调度,切换线程上下文,主要切换堆栈,以及各寄存器,因为同一个进程里的线程除了堆栈不同,其他区别不大。

实现切换其实就是改变SS甚至其他段寄存器的值。这过程其实跟函数传地址很像。

对进程不熟悉的,可以先看看进程简单总结

举个JAVA程序例子说明一下:
进程从OS那里取到了资源和执行时间片,然后进程被执行,首先启动了一个主线程,主线程负责去完成一些管理类的重要工作,然后因为有图形化界面,所以会有一个专门负责去渲染组件的线程,然后还有很多去完成计算任务的线程。当然,这些主要的必需线程是JAVA底层控制的。这些线程都分享JAVA进程的内存,都可以拿到进程的数据集,然后他们的运行时间是看OS给进程分配的时间片(总和)再分(进程负责,JAVA里可以为线程指定优先级,根据优先级高低可以得到不同的时间片长度)。

这里再需要区分的就是线程与子进程,子进程会有自己的内存,而线程没有(尽管线程是轻量级进程)。


线程分类

  • 用户级线程(进程独自管理)
  • 内核级线程(OS把它当进程一样管理)

关于线程,主要是这样。