目录
网络原理
用户态与内核态
操作系统将对进程在内存空间上的分配分为用户态和内核态。内核态的执行权限高于用户态。
-
不同主机上的进程与进程之间的通信主要是想传输用户态的数据。
主机1上的进程A要先经过【用户态 -> 内核态】的数据复制,内核态再将此数据交由网卡实现【数字信号 -> 物理信号】的转换,由光纤等物理传输介质负责传输物理信号,到达主机2的网卡,再由主机2的网卡实现【物理信号 -> 数字信号】的转换,将数据向上交给内核态,最终由内核态将数据返回给用户态。
-
当数据到达时,会产生一个中断信号,让CPU中断当前正在执行的任务,而去执行一段提前准备好的代码(中断处理程序),将数据从网卡复制到内核态的内存区中。
状态转换
由于用户态的权限不够,不足以完成某些任务时,需切换至内核态。以下是 【用户态 -> 内核态】 的三种方式:
- 系统调用:用户态进程主动要求切换到内核态。用户进程通过系统调用申请使用操作系统提供的服务程序完成工作。
- CPU中断:当外设完成用户请求的操作后,会向CPU发出相应的中断信号,使CPU暂停执行下一条即将要执行的指令,转而去执行中断信号相应的中断处理程序。若CPU中断前执行的指令是用户态下的程序,则这个过程自然就发生了由用户态到内核态的切换。如硬盘读写的操作完成后,系统会切换到硬盘读写的中断处理程序中执行后续操作。
- 异常:CPU在执行用户态程序时,发生了某些事先不可知的异常,如缺页异常,此时会触发进程的切换,由当前运行进程切换到处理此异常的相关内核程序,也就从用户态切换到了内核态。