浅谈linux线程切换问题

作者:jingxian 时间:2021-05-04 11:54:33 

处理器总处于以下状态中的一种:

1、内核态,运行于进程上下文,内核代表进程运行于内核空间;

2、内核态,运行于中断上下文,内核代表硬件运行于内核空间;

3、用户态,运行于用户空间;

一个进程的上下文可以分为三个部分:用户级上下文、寄存器上下文以及系统级上下文。

用户级上下文:  正文、数据、用户堆栈以及共享存储区;

寄存器上下文:  通用寄存器、程序寄存器(IP)、处理器状态寄存器(EFLAGS)、栈指针(ESP);

系统级上下文:  进程控制块task_struct、内存管理信息(mm_struct、vm_area_struct、pgd、pte)、内核栈。

当发生进程调度时,进行进程切换就是上下文切换(context switch).操作系统必须对上面提到的全部信息进行切换,新调度的进程才能运行。而系统调用进行的模式切换(mode switch)。模式切换与进程切换比较起来,容易很多,而且节省时间,因为模式切换最主要的任务只是切换进程寄存器上下文的切换。系统中的每一个进程都有自己的上下文。一个正在使用处理器运行的进程称为当前进程(current)。当前进程因时间片用完或者因等待某个事件而阻塞时,进程调度需要把处理器的使用权从当前进程交给另一个进程,这个过程叫做进程切换。此时,被调用进程成为当前进程。在进程切换时系统要把当前进程的上下文保存在指定的内存区域(该进程的任务状态段TSS中),然后把下一个使用处理器运行的进程的上下文设置成当前进程的上下文。当一个进程经过调度再次使用CPU运行时,系统要恢复该进程保存的上下文。所以,进程的切换也就是上下文切换。在系统内核为用户进程服务时,通常是进程通过系统调用执行内核代码,这时进程的执行状态由用户态转换为内核态。但是,此时内核的运行是为用户进程服务,也可以说内核在代替当前进程执行某种服务功能。在这种情况下,内核的运行仍是进程运行的一部分,所以说这时内核是运行在进程上下文中。内核运行在进程上下文中时可以访问和修改进程的系统数据。此外,若内核运行在进程上下文中需要等待资源和设备时,系统可以阻塞当前进程。

Linux下的线程实质上是轻量级进程(light weighted process),线程生成时会生成对应的进程控制结构,只是该结构与父线程的进程控制结构共享了同一个进程内存空间。 同时新线程的进程控制结构将从父线程(进程)处复制得到同样的进程信息,如打开文件列表和信号阻塞掩码等。创建线程比创建新进程成本低,因为新创建的线程使用的是当前进程的地址空间。相对于在进程之间切换,在线程之间进行切换所需的时间更少,因为后者不包括地址空间之间的切换。

线程切换上下文切换的原理与此类似,只是线程在同一地址空间中,不需要MMU等切换,只需要切换必要的CPU寄存器,因此,线程切换比进程切换快的多。

标签:linux,线程,切换
0
投稿

猜你喜欢

  • 事半功倍做营销:“转化率”再优化

    2009-03-16 09:39:00
  • 十二问让你全面了解跨站脚本攻击

    2009-12-24 16:27:00
  • 针对google adsense在dz论坛不能正常显示的解决方法

    2009-08-22 09:26:00
  • 防不胜防 了解DNS缓存中毒攻击原理

    2010-02-21 10:17:00
  • 视频网站为什么这么火

    2008-09-02 11:42:00
  • VirtualBox 在Centos 7 中安装增强功能图解 (共享文件夹)

    2021-03-07 21:04:24
  • 中国10大站长论坛排行榜

    2008-03-11 18:02:00
  • 浅谈高手是如何针对DDos部署防御措施的

    2009-12-24 13:53:00
  • 淘宝封百度?必须的。

    2008-09-08 12:53:00
  • 搜索引擎优化释疑:五个角度认识优化工作

    2009-01-14 10:29:00
  • 最完善方法 优化Windows服务器磁盘性能

    2007-09-06 14:47:00
  • Linux lseek函数的使用详解

    2022-07-28 22:14:18
  • GG收入半月过两千,竟然到现在都没被K

    2007-11-25 11:56:00
  • 李彦宏:中国互联网将从模仿进入创新井喷期

    2008-05-06 12:55:00
  • 站长们,大家七夕打算怎么过哈?

    2008-08-06 20:33:00
  • 识别常见的Web应用安全漏洞

    2008-04-15 11:18:00
  • 小说站新手的经验 献给广大想作文学站的朋友

    2009-03-05 13:17:00
  • 10条方法让网民在你的网站待的更久

    2008-03-10 12:33:00
  • centOS6中使用crontab定时运行执行jar程序的脚本

    2023-11-03 01:23:50
  • Linux中samba服务器的基本配置

    2010-08-17 18:22:00
  • asp之家 网站运营 m.aspxhome.com