当前位置: 首页高频题加分模版训练问题详情 【操作系统专题】内核态与用户态问题 本问题对应的项目链接:高频题回答模版训练 PS:这块相对问的比较少,如果问了,这块设计的内容比较深哦 1、介绍一下内核态与用户态? 2、为啥要区分内核态和用户态呢? 3、系统调用与库函数又有啥区别呢?
共以下 1 个回答
1、介绍一下内核态与用户态?
首先,操作系统的任务是管理计算机硬件,并件并提供服务给应用程序,为了完成这个任务,操作系统需要将软件运行时的状态分为两种模式:用户态和内核态。
用户态是指应用程序运行时的模式,此时应用程序只能访问自己的资源,无法直接访问操作系统的资源,比如访问内存或者打开文件等操作。也就是说,它的所有操作都会被操作系统限制在它自己的地址空间之内,以保证系统的稳定性和安全性。
内核态是指操作系统运行时的模式,此时操作系统拥有完全的控制权,可以访问系统的所有资源,包括内存、设备和外围硬件等。当应用程序需要进行一些特权操作,比如读取系统时间或访问网络等时,那么这个时候就必须进行从用户态到内核态的切换,进而有权限进行这些操作。
2、为啥要区分内核态和用户态呢?
主要还是考虑到安全性和稳定性,清内存,设置时钟等等都是比较危险的操作,都必须在内核态下进行,如果随便执行这些操作,系统就很容易崩溃。
3、系统调用与库函数又有啥区别呢?
https://haicoder.net/operation/system-library-differ.html
系统调用是面向底层硬件的,通过系统调用,可以使处在用户态的进程与计算机的硬件设备如 CPU,打印机等等进行交互。例如 open,close :打开,关闭文件或设;,fork,exit :创建和终止进程等等。由于系统调用需要调用内核相关的函数执行,如 sys_read( ) 等,用户程序在调用时通常需要通过软中断切换到内核态执行这些函数。
系统调用是指,向应用程序提供运行在系统内核中,需要更高执行权限的服务的接口。比如 open,close :打开,关闭文件,。由于系统调用需要在内核态执行,所以应用程序在调用时通常有从用户态到内核态的切换。
库函数是把一些函数放在一个库里,方便别人使用的一种方式。这些函数是基于系统调用之上的一层包装,当然也可能不包含系统调用。就比如 glibc,它是 Linux 下使用的开源标准 C 库,里面的 printf( ) 的实现最终还是调用了 write 这样的系统调用,而像 strlen( ), strcat( ) 等等就只涉及到字符串的长度,比较等等,不涉及系统调用。
总的来说,系统调用是与操作系统本身进行交互的接口,而库函数则是为了人们编程的方便。