✍个人博客:https://blog.csdn.net/Newin2020?type=blog
📣专栏地址:https://blog.csdn.net/newin2020/category_12820365.html
📚专栏简介:在这个专栏中,我将会分享操作系统面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
13. CPU 资源和内存资源的差异
CPU 可分配的是使用时间,也就是操作系统管理的时间片,每个进程在一定的时间片里运行自己的任务(另外一种方式是绑核,也就是把 CPU 完全分配给某个应用使用,但这种方式不够灵活会造成严重的资源浪费);而对于内存,系统提供的是内存大小。
CPU 的使用时间是可压缩的,换句话说它本身无状态,申请资源很快,也能快速正常回收;而内存大小是不可压缩的,因为它是有状态的(内存里面保存的数据),申请资源很慢(需要计算和分配内存块的空间),并且回收可能失败(被占用的内存一般不可回收)。
因此我们一般会认为 CPU 是可压缩资源而内存是不可压缩资源。
把资源分成可压缩和不可压缩,是因为在资源不足的时候,它们的表现很不一样。对于不可压缩资源,如果资源不足,也就无法继续申请资源(内存用完就是用完了),并且会导致应用运行产生无法预测的错误(应用申请内存失败会导致一系列问题);而对于可压缩资源,比如 CPU 时间片,即使应用使用的 CPU 资源很多,应用使用也可以按照权重分配给所有应用使用,虽然每个人使用的时间片减少,但不会影响程序的逻辑。
14. 为什么要划分用户态和内核态?区别是什么?
用户态是指在操作系统中运行的应用程序或用户进程所处的执行模式。在用户态下,进程只能访问受限的资源和执行受限的操作,不能直接访问或控制系统的关键资源和硬件设备。用户态下的进程不能执行特权指令,例如访问硬件设备、修改内存页表等操作,这些操作需要特权级别更高的内核态才能执行。
内核态是操作系统内核所处的执行模式。在内核态下,操作系统具有完全的控制权和访问权限,可以执行任意的特权指令,访问系统的关键资源和硬件设备。内核态下的操作系统可以管理进程、内存、文件系统、设备驱动等系统资源,处理中断和异常等系统级任务。
为了保证系统的稳定性、安全性,需要在系统中划分内核态、用户态。所有涉及 IO 操作、内存操作等,均在内核态中完成,因为当这些操作出现差错时,可能会导致整个计算机系统的崩溃。用户写的程序可能是含有导致这些操作出现差错的 bug 的,所以,用户编写的不涉及 IO、内存等操作的程序在用户态中完成,而涉及这些操作时,则需要进行用户态到内核态的切换。将实际操作交付给内核态,内核态完成操作后,将结果传递至用户态。
注意:用户态、内核态之间的切换是十分耗费性能资源的。
内核:从本质上看是一种软件——控制计算机的硬件资源,并提供上层应用程序运行的环境。
用户态:即上层应用程序的活动空间,应用程序的执行必须依托于内核提供的资源,包括 CPU 资源、存储资源、I/O 资源等。
备注:为了使上层应用能够访问到这些资源,内核必须为上层应用提供访问的接口,即系统调用。
15. 用户态和内核态的区别是什么?
- 权限和特权级别:用户态下的应用程序只能访问受限的资源和执行受限的操作,而内核态下的操作系统具有完全的控制权和特权级别,可以执行任意的特权指令。
- 可执行的操作:用户态下的应用程序不能直接访问硬件设备和系统关键资源,而内核态下的操作系统可以执行和管理这些操作。
- 安全性和稳定性:通过将操作系统和应用程序的运行环境隔离开来,用户态和内核态之间的切换提供了更高的安全性和稳定性,防止应用程序对系统造成破坏或崩溃。