首页 文章
  • 0 votes
     answers
     views

    线程上下文切换和进程上下文切换

    我记得,对于Linux调度程序线程和进程是相同的(任务),当中断到达或线程等待事情发生时,调度程序将执行另一个任务 . 在我看到this question之前,我完全没有意识到线程和进程上下文切换 . 答案解释了每个开关的详细成本,但是有两种类型的开关的想法对我来说是模糊的 . 这两种类型都涉及将控制权交给操作系统 如果两个交换机都将控制权交给操作系统,那么在线程切换期间虚拟内存空间如何保持不...
  • 2 votes
     answers
     views

    上下文切换开启时间中断

    从操作系统引用以下段落:三个简单的部分, 请注意,在此协议期间会发生两种类型的寄存器保存/恢复 . 第一种是定时器中断发生时;在这种情况下,运行进程的用户寄存器由硬件隐式保存,使用该进程的内核堆栈 . 第二种是OS决定从A切换到B;在这种情况下,内核寄存器由软件(即OS)显式保存,但这次是在进程的进程结构中的存储器中 . 阅读关于上下文切换的其他文献我明白定时器中断会将cpu引入内核模式,然后...
  • 0 votes
     answers
     views

    调度 - 每个进程具有一个或多个内核堆栈的上下文切换

    考虑到Linux的情况,我们有每个用户堆栈的内核堆栈,据我所知,每当发生上下文切换时,我们都会切换到当前进程的内核模式 . 在这里,我们保存当前进程的当前状态,寄存器,程序数据等,然后调度程序(不确定它是否在此内核中运行)保存PCB并加载下一个要调度的进程的PCB . 现在第一个问题是,如果上面的解释似乎对你有意义,考虑一个上下文切换,其中每个进程也有一个“专用”内核堆栈 . 我的问题的另一部分是...
  • 27 votes
     answers
     views

    来自linux内核的schedule()switch_to()函数如何实际工作?

    我试图了解linux内核中的调度过程是如何工作的 . 我的问题不是调度算法 . 它的功能 schedule() 和 switch_to() 如何工作 . 我会试着解释一下 . 我看到了: 当进程耗尽时间片时,标志 need_resched 由 scheduler_tick() 设置 . 内核检查标志,看到它已设置,并调用 schedule() (与问题1相关)切换到新进程 . 此标志是一个消息,应...
  • 6 votes
     answers
     views

    系统调用没有上下文切换?

    当我遇到这个时,我只是在阅读我的操作系统中的linux如何工作 . [...]内核创建为单个单一二进制文件 . 主要原因是提高性能 . 由于所有内核代码和数据结构都保存在单个地址空间中,因此当进程调用操作系统函数或传递硬件中断时,不需要上下文切换 . 这听起来对我来说非常了不起,当然它必须存储进程的上下文才能运行到内核模式来处理中断..但好吧,我现在就买它 . 在描述进程的调度上下文时,有几页...
  • 59 votes
     answers
     views

    上下文切换内部

    在这个问题的帮助下,我想学习并填补我的知识空白 . 因此,用户正在运行一个线程(内核级),它现在调用 yield (我假设的系统调用) . 调度程序现在必须将当前线程的上下文保存在TCB中(存储在内核中的某个地方)并选择另一个线程来运行并加载其上下文并跳转到其 CS:EIP . 为了缩小范围,我正在开发基于x86架构的Linux . 现在,我想了解详细信息: 所以,首先我们有一个系统调用: 1)...
  • 3 votes
     answers
     views

    谁在Linux内核中进行上下文切换后调用IRET?

    我一直试图理解上下文切换在Linux内核中是如何工作的 . 在我看来,有一种情况(后面会解释)导致在中断后没有调用IRET指令(我确信有些东西我错过了!) . 我假设在中断之后调用IRET是非常必要的,因为在调用IRET之前你不能得到相同的中断 . 我只担心在x86 arch上运行的单处理器内核 . 我认为可能导致所述行为的情况如下: 进程在内核模式下运行会自动调用 schedule() (例...
  • 1 votes
     answers
     views

    上下文切换的非明显成本

    我试图向某人解释为什么由于上下文切换的开销,每个消息使用一个线程的模型停止在高消息速率下缩放 . 我告诉他们,上下文切换的成本比调度程序的开销和保存/恢复所有寄存器要多 . 在上下文切换期间,TLB可能会或可能不会在Intel X64 CPU上完全/部分刷新 . 这取决于芯片的版本以及OS是否利用了新的TLB标签 . 有谁知道Windows是否支持这个?在我看来,分支预测器表(我假设在Intel ...
  • 0 votes
     answers
     views

    内核如何有效地管理如此多的进程上下文切换并一次又一次地为不同的进程加载页表?

    内核如何有效地管理这么多进程的上下文切换 . 我特别好奇的是,在多处理器系统中几乎所有时间都在切换的情况下,大型页面表是如何随时切换的?我假设每个上下文切换后从磁盘加载每个进程的页表 . 如果我错在这里,请更正我 .
  • 0 votes
     answers
     views

    如何确定进程是否在C中空闲

    我怎么知道进程闲置? 假设我的程序产生了许多进程,我想知道它们中的任何进程是否处于空闲状态,所以我可以让它们做额外的工作,但问题是如何确定进程在分配的时间片内是否空闲 . 我可以在整个系统中找到cpu利用率((总时间 - 空闲时间)/总时间),但不知道如何为进程获取它 . 因为(如果我错了,请纠正我)一个进程如果在时间片中空闲,会自愿放弃剩余的cpu时间,因此获得该进程的cpu时间并不好 . 一个...

热门问题