OS回顾---用户态和内核态

是什么

  • 用户态:非特权的执行状态,只能完成一般性的操作和任务,不能对系统中的硬件和软件直接进行访问,其对内存的访问范围也局限于用户空间。内核禁止此状态下的代码进行潜在危险的操作,比如写入系统配置文件、杀掉其他用户的进程、重启系统等。
  • 内核态:是操作系统内核所运行的模式,运行在该模式的代码,可以无限制地对系统存储、外部设备进行访问。

为什么

为了限制用户程序的权限,保护系统安全,保证系统不被应用程序有意或无意地破坏。

如果用户运行了一些恶意的程序,它们可能就会进行一些危险操作,如果不对用户程序的权限进行限制,那么这些恶意程序可能就会对操作系统造成破坏。

用户态转换为内核态的方式

系统调用

原因

  • 系统提供了保护机制,防止应用程序进行一些敏感操作,以保证系统安全性
  • 应用程序某些功能又必须取得操作系统提供的服务

系统调用这是用户态进程主动要求切换到内核态的一种方式,用户态进程通过系统调用申请使用操作系统提供的服务程序完成工作。而系统调用的机制其核心还是使用了操作系统为用户特别开放的一个中断来实现,例如Linux的int 80h中断。

异常

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

中断

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

这3种方式是系统在运行时由用户态转到内核态的最主要方式,其中系统调用可以认为是用户进程主动发起的,异常和外围设备中断则是被动的

猜你喜欢

转载自blog.csdn.net/why1092576787/article/details/114848154