用户态与内核态

内核:是一个计算机程序,它是操作系统的核心,提供了操作系统最核心的能力,可以控制操作系统中所有的内容

 

用户态和内核态

由于内核权限极高,可以控制cpu、内存、硬盘等,所以,出于对权限控制的考虑,将进程在系统上的运行分为两个级别,用户态(user mode)和系统态(kernel mode)

用户态:用户态运行的进程或程序,可以直接读取用户程序的数据

系统态(内核态):系统态运行的进程或程序几乎可以访问计算机的任何资源,不受限制

故此综合来看,操作的用户程序中,凡是与系统态级别的资源有关的操作(文件管理,进程控制,内存管理等),都必须通过系统调用方式向操作系统提出服务请求,然后,由操作系统代为完成相应操作

 

用户态和内核态切换

内核程序执行在内核态,用户程序执行在用户态。当应用程序使用系统调用时,会产生中断。发生中断后,CPU会中断当前在执行的用户程序,转而跳转到中断处理程序,即,开始执行内核程序,内核程序执行完毕后,主动触发中断,把CPU执行权限交回给用户程序,回到用户态继续工作
用户态 -> 内核态的转换,一般称之为trap进内核态,也被称之为陷进指令(trap instruction)

 

用户态切换到内核态的方式

系统调用:程序的执行一般是在用户态下执行的,但当程序需要使用操作系统提供的服务时,比如说打开某一设备、创建文件、读写文件(这些均属于系统调用)等,就需要向操作系统发出调用服务的请求,这就是系统调用。

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

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

 

什么是陷入内核

 

用户态与内核态是相对于CPU来讲的,指的是CPU运行在用户态(特权3级)还是内核态(特权0级)。所谓保护模式下的保护就体现在特权级上,如果用户程序想要访问操作系统资源时,会发起系统调用,陷入内核,这样 CPU 就进入了内核态,执行内核代码

库函数和系统调用的区别:

① 库函数是语言或应用程序的一部分,而系统调用是内核提供给应用程序的接口,属于系统的一部分。

② 库函数在用户地址空间执行,系统调用是在内核地址空间执行,库函数运行时间属于用户时间,系统调用属于系统时间,库函数开销较小,系统调用开销较大

③ 库函数是有缓冲的,系统调用是无缓冲的

④ 系统调用依赖于平台,库函数并不依赖

 

关于中断

中断的概念及作用:

① 当中断发生时,CPU立即进入核心态

② 当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理

③ 对于不同的中断信号,会进行不同的处理

发生了中断,就意味着需要操作系统介入,开展管理工作,由于操作系统的管理工作(比如进程切换、分配i/o设备等)需要使用特权指令,因此CPU要从用户态转为核心态。中断可以使CPU从用户态切换为核心态,使操作系统获得计算机的控制权。有了中断,才能实现多道程序并发执行

 

posted @ 2022-05-11 23:52  蚂蚁力量  阅读(259)  评论(0编辑  收藏  举报