✍个人博客:https://blog.csdn.net/Newin2020?type=blog
📣专栏地址:https://blog.csdn.net/newin2020/category_12820365.html
📚专栏简介:在这个专栏中,我将会分享操作系统面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪
25. 说说 CPU 层级的代码优化
CPU 具有三级缓存,对应的每一级缓存离 CPU 更近,传输距离更短,电子信号也就传输更快。一级快于二级三级,对应的一级缓存容量上也远远低于其他两级。
CPU 读取数据的时候一般都有预读功能,也就是不仅会读取需要的数据,还会把数据前后的位置的数据也也一并读取出来。因此在开发的时候可以利用这个特性进行代码优化,减少 CPU 从缓存或者从磁盘读取数据的次数,从而提高性能。
26. Linux 在内核初始化阶段,都做了哪些事情?
内核启动入口从 start_kernel() 函数开始,该函数内是调用各种初始化函数。包括创建 0 号进程,该进程是进程列表中的第一个,也是系统唯一一个没有通过 fork 创建的进程,创建 0 号进程之后开启系统的初始化工作。然后开启系统各种中断的初始化,内存模块初始化,调度模块初始化,其他方面初始化。其中其他方面初始化包括 1 号进程和 2 号进程,分别为用户态和内核态的总管,是其他进程的父进程,负责引导用户空间和内核空间的服务。
27. 用户态代码如何访问核心资源?
当用户进程执行到一半,想要访问核心资源,比如通过网卡发送数据。要先切换为优先级较高的内核态,暂停当前程序的执行,保存当前程序的执行现场状态信息到寄存器中,然后内核将用户进程发送的数据放到网卡上排队,发送完成之后系统调用结束,返回结果切换回内核态,暂停运行的程序从寄存器恢复状态,接着运行。
用户态 - 系统调用 - 保存寄存器 - 内核态执行系统调用 - 返回结果 - 恢复寄存器 - 返回用户态 - 程序继续运行