百科问答小站 logo
百科问答小站 font logo



操作系统多进程多线程的相关问题? 第1页

  

user avatar   cloudclear 网友的相关建议: 
      

1.大多数调度器是按照线程调度的,而且,是的,你的线程越多你抢到的cpu也会越多,不过大多数情况下cpu是不用抢的,而计算密集的程序因为时刻处于就绪态也会比io密集的程序获得多得多的时间片,虽然通常计算密集程序的优先级更低

2.不过切个cr3没那么慢吧,而且触发各种中断的时候也可能切cr3,所以感觉对性能没多大影响……tlb不命中的开销确实是有一些的,不过切换线程也可能触发tlb不命中

3.调度肯定最终是调度到线程的,因为只有线程才有rip的值,没有rip就没办法iret。通常内存中会保存所有进程控制块和线程控制块,因通常os是不允许自己的内存被swap的,会大幅度降低效率,页表可以被换出。

每个核心的的调度过程其实可以说是独立的,每个核心的时钟中断是独立的,然后在触发调度时调度程序会在触发调度的那一个核心上进行,所以基本上调度器不需要考虑其他核心的调度情况,然后,因为每个核心都有自己的cr3寄存器,所以,任意4个线程,cpu不在乎是否来自同一个进程,一般调度器也不在乎

4.没必要,切cr3没多少时间,tlb缓存吧反正中断和系统调用都有可能tlb不命中呢,os只能把自己常用的东西放到tlb里面,不可能全放。再说现在内存这么大,tlb不命中还有内存呢,到需要访问swap中的页表的时候就是相对比较少的情况了。

5.异步时钟可以,cpu一个核心有几个可编程时钟,定时的长度可以调的。

6.大多数情况核心是互相独立的,中断,系统调用这些东西都是独立进行,cpu 0上可以运行控制其他核心的特权指令

7.没啥大区别,ipc是在内存中进行的,多核需要一些特殊的lock技巧什么的


user avatar   bei-ji-85 网友的相关建议: 
      
1.对于单核CPU,多线程程序和多进程程序调度是一样的吗?即例如最开始系统中有50个进程,加进来一个进程,每个进程的调度频率是1/51,再加进来一个进程,每个进程调度频率是1/52,所以对于一个多进程的程序,如果最开始它开启了2个进程,那么它的调度频率就是2/52。那么如果这个程序是一个进程中开启的是两个线程,那么它的调度周期是2/52,还是1/51,即操作系统是以线程调度还是进程调度。同时对于一个程序是不是开的进程或线程越多,那么一般情况下(不考虑进程线程创建,和特殊情况),这个程序的效率就越高(同一个调度周期内,它能够上CPU的机会更多)

绝大多数操作系统调度单位是线程,不是进程。

但跟你想象的不同,绝大多数的情况下CPU是闲着的而不是满着,你自己看任务管理器就知道了,在有些OS上时间片的长度不一定固定,如果真是计算密集型任务(需要吃CPU),操作系统会让它多占一会的。

2.对于问题1,如果是以线程为调度单位,那么操作系统会不会优化让连续一个进程的多个线程依次调度,这样就可以节省进程上下文的时间。

对于x86的CPU来说,切进程无非是换页+刷TLB这些,动作其实很快。你打开Windows任务管理器,看上去似乎很多进程,但多数进程都是闲着不干活的。

任务都是有一定优先级的,操作系统考虑的是根据优先级来调度,而不是切换上下文的时间,切换上下文的这点时间不算什么时间。

3.对于多核的CPU(例如4核),是以进程为调度单位,还是以线程为调度单位?如果以进程为调度单位,那么是不是内存中要同时保持4个进程的上下文?如果是以线程为单位,那么是否必须是同一个进程的4个线程,还是可以是4个不同进程的4个不同线程?

不管单核多核,调度单位都是线程,跟进程没关系。具体每个核是同一个进程还是不同进程,操作系统不关系,CPU也不关心,每个CPU都有寄存器能保存当前任务状态,其余的状态都在内存里。

4. 对于3的情况,如果是以线程为调度单位,操作系统是否可以优化,让一个进程的多个线程首先占据4个核,然后下一个调度周期优先让这个进程的其余线程继续跑,余下来的核再给其他进程的线程用,这样可以节省进程上下文的时间。

前面说了,进程切换的代价很低,而且多数情况下一个线程不可能跑满一个时间片,如果一个进程把全部核都占满,如果某些线程跑完了需要释放时间片怎么办?怎么解决每个线程占用时间片长度不同问题?

现场跑完了不释放CPU?浪费。

释放?又不符合你的模型,调度单位又变成线程了。

所以进程不作为调度的单位看待。

5. 多核CPU的每个核能否做到异步时钟?

可以。

6. 多个核,每个核操作系统是统一管理还是分别管理,总感觉对于每个进程在单核CPU中和多核CPU中的管理不同,正所谓4个核 != 一个核*4(效率方面)?

基于线程的调度效率比基于进程的效率高,因为一个进程的各个线程占用时间片是不同的,基于进程的调度会造成极大的CPU时间浪费。

7. 多个核,对于进程通信与线程同步有什么影响?

多核对于操作系统调度、锁的写法方面比较麻烦,对于上层应用,不需要考虑这些问题。按正常多线程加保护就够用了。

-------------------------------------

你的问题里,觉得任务切换的开销很大,实际上任务切换代价再大,也比浪费一个时间片要小

基于进程的多核调度,就意味着某些情况下,某些核的时间片被浪费掉,这种性能损失比任务切换要大得多。

一个时间片内做几百次任务切换都没问题,与其减少任务切换,不如把浪费的时间片都用上。

任务切换的代价比中断切换的代价要小,操作系统中各种外设的中断(时钟、PCI、DMA等)比任务切换的代价要大的多。




  

相关话题

  几个 G 大的 Windows 操作系统纯代码核心部分有多大? 
  win10为什么不能一键关机? 
  为什么汇编语言的功能在高级语言中一部分成为了关键字,一部分封装成了函数? 
  最早的操作系统API出现在什么时候? 
  Windows系统中软件的默认安装目录为何是Program Files这个名字? 
  未来操作系统如何应对全 nvram 体系? 
  如何不依赖任何外界现成软件和其他计算机设备运行没安装操作系统的电脑? 
  鸿蒙 OS 2.0 正式发布,能否与Android,iOS三足鼎立? 
  计算机怎么知道用户态和内核态? 
  学编程什么的需要专业版Windows吗? 

前一个讨论
银道面与黄道面的夹角是多少?
下一个讨论
龙芯采用intel x86的指令界面,也算是侵权吗?





© 2024-05-18 - tinynew.org. All Rights Reserved.
© 2024-05-18 - tinynew.org. 保留所有权利