用户态和内核态

操作系统会将内存分配为内核空间和用户空间

内核空间是由所有进程共享,每个进程通过系统调用进入内核
用户空间中各个进程相互独立,无法实现共享

当一个进程工作在内核空间的代码中,就成为内核态
工作在用户空间的代码中,就成为用户态


工作在内核态中的进程具有最高的级别Ring0
工作在用户态的进程具有最低的级别Ring3
Ring3不能访问Ring0中的数据,也就是说,进程在用户态下是没法访问到内核空间中的数据的

为了让用户安全的访问内核空间,操作系统提供了以下几种方式:

1.系统调用进入内核态:如调用write(),read(),send()等IO函数等操作,进程就会进入内核态使用内核代码去完成操作。

2.异常:当CPU在执行运行在用户态的程序时,发现了某些事件不可知的异常,这是会触发由当前运行进程切换到处理此异常的内核相关程序中,也就到了内核态,比如缺页异常。

3.外围设备的中断:当外围设备完成用户请求的操作之后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条将要执行的指令转而去执行中断信号的处理程序,如果先执行的指令是用户态下的程序,那么这个转换的过程自然也就发生了有用户态到内核态的切换。比如硬盘读写操作完成,系统会切换到硬盘读写的中断处理程序中执行后续操作等。

参考文章

你可能感兴趣的:(用户态和内核态)