当前的线程通过系统调用read函数,从用户态切换到内核态,如果有内核态有数据,操作系统将数据从内核复制到线程/进程中,如果没有数据,那么进程就会被阻塞,此时还是处于内核态,用户态的线程让出CPU进入阻塞状态???对吗??
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您的描述基本正确,但需要一些澄清和补充来更准确地理解这个过程:
从用户态到内核态的切换:当一个线程执行系统调用如read
时,确实会触发从用户态(User Mode)到内核态(Kernel Mode)的转换。这是通过硬件机制实现的,比如陷阱或系统调用指令,使得CPU权限级别提升,从而允许访问受保护的内核资源。
数据处理:
阻塞状态:
总结来说,当线程因read
调用而无数据可读时,它会被操作系统置于阻塞状态,这是一个内核管理的状态变化,而非线程主动“让出”CPU。整个过程中,CPU资源的分配和线程状态的管理都是由操作系统内核根据其调度策略来决定的。