image.png
    什么东西的状态?
    答案是进程

    什么时候会切换这两个状态?
    用户态下进行系统调用(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。