操作系统面试高频(四)linux基础
1.32位Linux系统的寻址空间是多大?进程能申请的内存有这么大吗?⭐
32位Linux系统的寻址空间是4GB(2^32)大小。
进程实际能够申请的内存大小不会达到整个寻址空间的大小。这是因为Linux内核需要使用一部分地址空间来映射内核空间和其他系统资源,因此用户进程可用的地址空间会受到限制。
通常情况下,32位Linux系统下,用户进程可用的地址空间大小在2GB至3GB之间。
但是,通过使用特殊的技术,比如PAE(Physical Address Extension),可以扩展32位系统的可用内存范围。PAE允许32位处理器处理超过4GB的物理内存,并提供更大的寻址空间,但是单个进程仍然受到32位寻址限制的限制。
2.Linux系统中进程默认栈空间是多大?如何修改?⭐
Linux系统中,进程的默认栈空间大小通常是由操作系统内核设置的,默认情况下是8MB。这个大小在不同的系统中可能会有所不同,但通常在2MB到10MB之间。
如果需要修改进程的栈空间大小,可以使用ulimit命令来进行调整。ulimit命令用于设置或显示进程资源限制。要修改栈空间大小,可以使用以下命令:
ulimit -s <stack_size>
其中,<stack_size>
是要设置的栈空间大小,以KB为单位。例如,要将栈空间大小设置为16MB,可以使用以下命令:
ulimit -s 16384
需要注意的是,ulimit命令是针对当前的shell会话生效的,修改只在当前会话中有效。如果需要永久修改栈空间大小,可以将相应命令添加到用户的shell配置文件中,如~/.bashrc
或~/.bash_profile
。这样,每次启动新的shell时都会生效。
3.Linux系统中调试崩溃问题的流程是?⭐
- 收集崩溃信息:当发生崩溃时,系统通常会生成一些崩溃信息,比如核心转储文件(core dump)或者错误日志。首先,需要收集这些信息,以便后续的调试工作。
- 分析核心转储文件:如果有核心转储文件生成,可以使用调试器(如GDB)来加载核心转储文件,并查看堆栈回溯、变量值等信息。这将有助于确定崩溃发生的位置和原因。
- 查看系统日志:检查系统日志(通常位于/var/log目录下)以获取任何与崩溃相关的信息,如错误消息、警告等。这些信息可能有助于确定崩溃的原因。
- 重现崩溃:如果崩溃问题是可以重现的,尽量复现崩溃,以便在调试时能够更好地观察和分析现象。
- 使用调试器:使用调试器(如GDB)来附加到崩溃的进程或执行崩溃的程序。通过观察程序的执行过程、设置断点、查看变量值等,可以深入分析问题,并找到导致崩溃的具体原因。
- 跟踪代码执行流:通过单步调试、观察变量值、堆栈跟踪等方式,跟踪程序的执行流,找到潜在的缺陷或异常情况。
4.用户空间与内核通信方式有哪些?⭐⭐⭐
- 系统调用:用户空间程序通过系统调用向内核请求执行特定的操作,如读写文件、创建进程等。
- 文件接口:用户空间程序通过文件接口读写文件来与内核进行通信,传递数据和命令。
- procfs:用户空间程序通过读写/proc文件系统的特定文件与内核通信,获取或修改内核状态和信息。
- sysfs:用户空间程序通过读写/sys文件系统中的文件与内核通信,查询或修改设备属性和参数。
- netlink套接字:用户空间程序通过netlink套接字与内核进行双向通信,用于网络配置、管理等任务。
- 共享内存:用户空间程序通过映射共享内存区域来读写数据,实现高效的数据交换。
- 设备文件:用户空间程序通过打开和读写设备文件与内核进行通信,如串口设备、字符设备等。
5.linux下检查内存状态的命令⭐⭐⭐
- free命令:用于查看系统内存的使用情况,包括总内存、已用内存、可用内存等。示例命令:free -h
- top命令:除了显示系统的整体资源使用情况外,还可以查看每个进程的内存使用情况。示例命令:top
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
本人2022年毕业于山东大学,目前就职国内某芯片厂。打算把之前校招时做的笔记通过专栏发出来,本专栏适合于C/C++、嵌入式方向就业的同学,本篇面经总结数千篇面经的知识集合,实时更新全网最新的嵌入式/C++最新内容,囊括了C语言、C++、操作系统、计算机网络、嵌入式、算法与数据结构、数据库等一系列知识点,在我看来这些是求职者在面试中必须掌握的知识点。最后呢祝各位能找到自己合适的工作。