关于操作系统进程切换的小疑问 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yinusxxxx
V2EX    问与答

关于操作系统进程切换的小疑问

  •  
  •   yinusxxxx 2021-09-18 05:35:46 +08:00 1594 次点击
    这是一个创建于 1491 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有进程 A 和 B,A 在运行,切换进程的时候需要把此刻 A 进程相关的寄存器的值放入系统内核栈或者别的什么地,然后把 B 进程相关的上下文填回寄存器,然而操作系统本身也是一个进程,那在这切换的过程中,操作系统的上下文放在了哪里?

    书本没有很好的描述这块,我知道中间有硬件的参与,但是书里只说了 CPU 有切换上下文的能力,所以想各位彦祖验证我的想法是

    1. 当中断发生时,硬件读取并执行中断处理程序,然后保存 A 进程的寄存器的值到某个存储空间 S
    2. 硬件把内核进程的上下文信息填回寄存器
    3. 内核进程把在某个地方的 A 的上下文保存到自己的内核栈
    4. 切换 TLB 等其他操作
    5. 内核从自己的内核栈中读取进程 B 的上下文放到某个存储空间 S
    6. 硬件从存储空间 S 把值填回寄存器
    trn4
        1
    trn4  
       2021-09-18 06:22:01 +08:00 via iPhone
    我的理解是非抢占式内核是不需要上下文的,每次陷入内核空间都不需要“从离开的地方开始”,而是根据陷入的条件从头开始处理。抢占式内核会有一小部分代码来保存 /恢复内核上下文,这一小部分代码自身也是可抢占的(自己可以保存恢复自己),所以总有机会不被抢占地完成任务(不需要保存 /恢复上下文)。
    yinusxxxx
        2
    yinusxxxx  
    OP
       2021-09-18 07:34:01 +08:00
    @xiadong1994 我又查了一些资料,是不是说并不能把操作系统理解为一个进程,而是操作系统对外的表现就是一些控制代码和数据结构,只能被动唤醒,然后进程之间切换只是硬件执行了某个代码片段,保存恢复用户进程上下文,优先级调度,刷新 TLB 的工作都是这个片段在做
    yinusxxxx
        3
    yinusxxxx  
    OP
       2021-09-18 07:39:36 +08:00
    @xiadong1994 我一开始陷入一个误区,就是操作系统是一个进程的话,它就有它自己的 PCB,我很疑惑这个 PCB 该被保存在哪里,又该怎么被调度
    xbtu
        4
    xbtu  
       2021-09-18 07:44:41 +08:00
    定时器->时间中断信号->CPU 根据中断号执行固定代码( os 启动时就设置好了在某个固定的 MEM 区域上)。
    中断代码完成以下工作:
    1.将 A 的上下文保存到 A 的栈顶
    2.将恢复 B 的上下文到寄存器
    3.设置寄存器,使 CPU 开始执行 B 的代码
    trn4
        5
    trn4  
       2021-09-18 08:11:24 +08:00 via iPhone
    @yinusxxxx 进程是内核所定义的概念,(宏)内核本身不能理解成一个进程
    yinusxxxx
        6
    yinusxxxx  
    OP
       2021-09-18 08:15:07 +08:00
    @xiadong1994 是的,非常感谢答疑
    ch2
        7
    ch2  
       2021-09-18 10:25:56 +08:00
    os 有自己的内核线程干一些例行的活,这种有自己的栈
    你的想法 3 里“内核进程”实际上是进程 A 的内核态
    比如说 A 要读取一个文件,是它自己切换身份为内核态,去执行高权限的代码
    如果此时需要等待磁头就位,就把此时的寄存器等数据保存在 A 自己的内核栈上
    os 不会用一个单独的“内核进程”去保存你设想中的其它进程的状态
    yinusxxxx
        8
    yinusxxxx  
    OP
       2021-09-18 10:53:16 +08:00
    @ch2 感谢答疑
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1519 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 16:37 PVG 00:37 LAX 09:37 JFK 12:37
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86