用户态,内核态相关问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
不要在回答技术问题时复制粘贴 AI 生成的内容
thomaswang
V2EX    程序员

用户态,内核态相关问题

  •  
  •   thomaswang 2017-12-28 17:40:24 +08:00 2345 次点击
    这是一个创建于 2893 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用户态进程用该进程的逻辑地址(记为 A)中的 0-3G 存东西,当执行到读取硬盘文件相关时候(假如读 10k 出来),切换到内核态,内核读到文件,把文件内容拷贝到 A 的(3G-4G)里面吗? ,切换到内核态,是不是: 把这个读取文件的任务给了某个内核线程,CPU 运行到这个内核线程了,就去干这个事儿
    5 条回复    2017-12-28 19:04:02 +08:00
    wevsty
        1
    wevsty  
       2017-12-28 17:53:44 +08:00
    详细追究很麻烦,不过大致上是这样子的没错。
    ryd994
        2
    ryd994  
       2017-12-28 17:57:01 +08:00
    我只说 linux 下
    不是
    linux 下内核态也是可以有进程上下文的,一定程度上可以说:读取文件的时候用户进程调用了一个特殊库(内核),只不过这个库有特权,而且内容不受进程控制。
    另外,不是你要读文件了操作系统才去读,操作系统的缓存在尽量避免这个事。很大概率是 readahead 已经读进缓存里,你 read 的时候只是从缓存里复制一份给你。
    如果缓存里没有怎么办呢,这个时候进程就被挂起,等读到了文件的时候会有 callback 把进程放回 cpu 队列。
    内核线程主要是异步处理一些系统任务,特别是中断的实际处理。为了保证中断最短时间内被处理,很多时候中断函数只是把数据从设备缓冲里取出,新建一个任务,就尽快退出。对数据的实际处理由内核进程在后台处理这些任务。
    easing
        3
    easing  
       2017-12-28 18:09:02 +08:00 via Android
    一个是考虑 io 缓存,一个是考虑是否 block io
    ironx
        4
    ironx  
       2017-12-28 18:53:33 +08:00 via Android
    简单的说。用户态通过某个系统调用主动进去入内核态,其实就是先进入一个软中断函数。这个函数会把用户线程 id 放到一个队列里面去,同时放入读取的信息,然后触发一个信号给某个内核线程,线程会根据队列里面存的文件信息,调用驱动读文件内容到内核的缓存空间,然后再复制到对应用户线程的用户态缓存中间里面去。
    ryd994
        5
    ryd994  
       2017-12-28 19:04:02 +08:00
    @ironx 实际还要更复杂,还有 block scheduler
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     837 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 22:07 PVG 06:07 LAX 14:07 JFK 17:07
    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