对内核态和用户态的疑问

FrankJT 2020-05-24 09:56:55
最近在看Linux用户态和内核态,看的是一头雾水,现在有几个疑问,想要问问:
1. 在网上查到,“每个用户进程,都映射在0-3GB的用户地址,而上层的第4GB,则是映射着内核地址”。
那么对于一个进程,内核态和用户态是相互对立的吗?也就是说当该进程被OS调用中断,要进入内核态处理时候,该进程就从用户态跳出,进入内核态?或者说,本来代码是映射在0-3GB的一段,此时进入内核态,地址映射到了4GB空间了,0-3GB就没有该进程了,在4GB的内核空间执行完后,该进程再映射回去,是这样吗?
2. 网上查到的”所有用户态的进程,都对应着同样的内核段“,也可以说就那么一个内核空间,而用户空间是对每个用户态进程都有的虚拟的0-3GB。假如是这样,那么假设有100个进程,全都发生中断要进入内核段,那是不是就发生了阻塞,处理完一个,下一个再进入内核态?那这样循环往复,内核态不是在不停的处理中断,内核态本来应该做的事情呢,不做了吗?
3. 在不处理中断时候,内核态在干嘛?
4. 从用户态到内核态,有好几种方式,例如可以通过调用ioctl函数。当使用此函数,将对应的module写入fd,然后内核态读取,处理。按照这种通信方式,让我感觉用户态和内核态好像又是独立的或许所有用户态都是通过把中断写入ioctl文件,内核在不停的读取ioctl,当读取到,就去执行对应的要求。是这样吗?

综上4点疑问,其实主要对立的就是对内核态和用户态的性质的疑问,他们到底是对立的还是共存的?
...全文
211 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
水滴重甲 2020-05-25
  • 打赏
  • 举报
回复
1.内核态和用户态就是进程的的状态,需要调用操作系统的操作的时候,就是内核态,调用用户程序的时候就是用户态。0-4G的虚拟地址空间都是该进程的,所以不说在运行3-4G的内核代码,0-3G就没有进程了,这个理解是错误的。
2.看你是什么中断,一般来说中断优先级最高,你所谓100个中断全部发生中断,对于cpu来说也是个一个一个处理的,由于cpu很快,用户一般是体验不到延迟的,
3.不处理中断,运行操作系统在监听

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧