什么东西的状态?
答案是进程。
什么时候会切换这两个状态?
用户态下进行系统调用(syscall),就会进行内核态。
用户态和内核态有什么区别?
内核态有权利调用操作系统的内核指令,对系统发出更多操作。
为什么用户态不可以?
为了保证系统的安全,防止用户态下随意调用内核指令导致系统异常。
怎么保证系统安全?
cpu将指令分为ring0、ring1、ring2、ring3四个级别的指令,用户态只能调用ring3级别的指令,内核态能调用包括ring0在内的所有指令。比如用户态进程去操作文件、发送网络数据,会调用到read、write等syscall,那么必须切换到内核态才能执行。内核态操作完成之又切换回用户态。
图里的shell是什么?
shell是操作系统给用户提供的可以操作系统调用的操作界面,也就是我们在mac上看到terminal,windows上看到的cmd,shell有标准语法,可以通过编码shell脚本进行系统宏配置提高工作效率。
图里的公用函数库是什么?
用户程序可以直接调用syscall,有些操作也可以调用函数库,就像操作db数据,可以直接用原生jdbc,也可以用mybatis,你可以直接用nio,也可以用netty,反正后者是在syscall基础上包装的一层可用度更好的函数,减轻程序开发负担,常用的函数库有glibc、posix。