1
wevsty 2017-12-28 17:53:44 +08:00
详细追究很麻烦,不过大致上是这样子的没错。
|
2
ryd994 2017-12-28 17:57:01 +08:00
我只说 linux 下
不是 linux 下内核态也是可以有进程上下文的,一定程度上可以说:读取文件的时候用户进程调用了一个特殊库(内核),只不过这个库有特权,而且内容不受进程控制。 另外,不是你要读文件了操作系统才去读,操作系统的缓存在尽量避免这个事。很大概率是 readahead 已经读进缓存里,你 read 的时候只是从缓存里复制一份给你。 如果缓存里没有怎么办呢,这个时候进程就被挂起,等读到了文件的时候会有 callback 把进程放回 cpu 队列。 内核线程主要是异步处理一些系统任务,特别是中断的实际处理。为了保证中断最短时间内被处理,很多时候中断函数只是把数据从设备缓冲里取出,新建一个任务,就尽快退出。对数据的实际处理由内核进程在后台处理这些任务。 |
3
easing 2017-12-28 18:09:02 +08:00 via Android
一个是考虑 io 缓存,一个是考虑是否 block io
|
4
ironx 2017-12-28 18:53:33 +08:00 via Android
简单的说。用户态通过某个系统调用主动进去入内核态,其实就是先进入一个软中断函数。这个函数会把用户线程 id 放到一个队列里面去,同时放入读取的信息,然后触发一个信号给某个内核线程,线程会根据队列里面存的文件信息,调用驱动读文件内容到内核的缓存空间,然后再复制到对应用户线程的用户态缓存中间里面去。
|