并发编程基础4用户态与内核态
【并发编程基础4】用户态与内核态
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
- 推荐: ,持续学习,不断总结,共同进步,活到老学到老
- 导航
- :全面总结 java 核心技术点,如集合,jvm,并发编程 redis,kafka,Spring,微服务,Netty 等
- :罗列常用的开发工具,如 IDEA,Mac,Alfred,electerm,Git,typora,apifox 等
- :详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
- :总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
- :总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨
博客目录
1.CPU 用户态和内核态?
在操作系统中,CPU 的运行模式分为用户态和内核态。
用户态是指 CPU 在执行进程的用户程序时所处的运行模式。在用户态下,CPU 只能访问该进程的用户空间,不能直接访问操作系统的内核空间。用户态下的程序运行速度较快,但是受到一些限制,例如无法直接访问硬件设备、无法执行特权指令等。
内核态是指 CPU 在执行操作系统内核代码时所处的运行模式。在内核态下,CPU 可以访问所有的内存空间和硬件设备,并且可以执行特权指令,例如修改内存映射、切换进程、中断处理等。因此,内核态下的程序具有更高的权限和更广的操作能力,但是运行速度较慢。
当进程需要执行一些需要特权级别的操作时,例如进行 I/O 操作、创建新进程、访问共享内存等,就需要切换到内核态。这时,进程会通过系统调用的方式进入内核态,请求操作系统执行特定的操作。操作系统会根据请求的操作类型进行相应的处理,并返回结果给进程。当操作完成后,进程再次切换回用户态,继续执行自己的程序。
在操作系统中,用户态和内核态的切换需要一定的时间和开销,因此尽可能减少进程在用户态和内核态之间的切换次数,可以提高系统的性能和响应速度。
2.用户态/内核态切换条件?
当在系统中执行一个程序时,大部分时间是运行在用户态下的,在其需要操作系统帮助完成一些用户态自己没有特权和能力完成的操作时就会切换到内核态。
用户态切换到内核态的 3 种方式
(1)系统调用:
这是用户态进程主动要求切换到内核态的一种方式.用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作.例如 fork()就是执行了一个创建新进程的系统调用.系统调用的机制是使用了操作系统为用户特别开放的一个中断来实现.
(2)异常:
当 cpu 在执行运行在用户态下的程序时,发生了一些没有预知的异常,这时会触发由当前运行进程切换到处理此异常的内核相关进程中,也就是切换到了内核态,如缺页异常。
(3)外围设备的中断:
当外围设备完成用户请求的操作后,会向 CPU 发出相应的中断信号,这时 CPU 会暂停执行下一条即将要执行的指令而转到与中断信号对应的处理程序去执行,如果前面执行的指令是用户态下的程序,那么转换的过程自然就会是由用户态到内核态的切换.如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后边的操作等。
这三种方式是系统在运行时由用户态切换到内核态的最主要方式,其中系统调用可以认为是用户进程主动发起的,异常和外围设备中断则是被动的.从触发方式上看,切换方式都不一样,但从最终实际完成由用户态到内核态的切换操作来看,步骤又是一样的,都相当于执行了一个中断响应的过程.系统调用实际上最终是中断机制实现的,而异常和中断的处理机制基本一致。
3.用户态切换内核态步骤?
当进程需要执行一些需要特权级别的操作时,例如进行 I/O 操作、创建新进程、访问共享内存等,就需要切换到内核态。下面是用户态切换到内核态的大致步骤:
- 用户程序执行系统调用指令,例如 int 0x80(Linux)、syscall(Mac OS X)、Trap(Windows)等,触发 CPU 从用户态切换到内核态。
- CPU 从用户态切换到内核态,将当前进程的状态(包括 PC、寄存器、栈指针等)保存在内核栈中,以便后续恢复。
- CPU 执行操作系统内核代码,开始进行系统调用的处理。操作系统会根据请求的操作类型进行相应的处理,例如 I/O 操作、进程调度、内存管理等。
- 当操作完成后,CPU 从内核态切换回用户态,将之前保存的进程状态恢复。此时,进程重新开始执行用户程序。
需要注意的是,由于用户态和内核态之间的切换需要一定的时间和开销,因此尽可能减少进程在用户态和内核态之间的切换次数,可以提高系统的性能和响应速度。
觉得有用的话点个赞
👍🏻
呗。❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄
💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍
🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙