Linux相关问题

2018-07-26  本文已影响32人  cunfate

Linux的面试相关问题,持续更新

一. Linux的那些命令

二. 线程和进程相关问题

1. 进程的那些状态

2. 进程的调度策略

老版O(1)调度策略

老版的调度策略是基于动态优先级和静态优先级来计算出最终的优先级nice值,来决定调度到谁身上的。
使用两个拉链表(就是链表的数组,一个数组下标对应一个链表)和两个bitmap分别保存运行中的Task和过期的Task。然后使用一个CPU指令找到bitmap的为1的最高位,从这个位对应的链表中取头部的那一个出来调度。
具体就不细说了,可以看深入解析Linux内核那本书。

现代CFS调度策略

不再区分脚本、交互进程、后台进程等几种类型,采用完全公平的调度方式,也不再追踪陷入睡眠状态的时间来计算动态优先级。所有可运行进程挂到红黑树上,占用CPU时间越长越靠右,调度器取最左边的进程来调度。

3. 进程和线程的区别

进程是资源占有的基本单元。
线程是调度的基本单元。
Linux线程很多实现都是clone出来的进程,只不过通过几个VM参数让多个线程共享资源。

4. fork的时候发生了什么

父子进程采用copy-on-write技术,在需要修改内存之前双方都是共享进程内存空间,等到真的需要修改的时候吗,才会真的执行内存空间的复制。

5. vfork和fork之间的区别

6. 进程间通信手段?

7. 线程间通信/同步手段?

8. 信号有哪些常用的?

9. 具名管道怎么用?匿名管道怎么用?

10. 进程的虚拟内存空间

最高1GB给dang,阿不,内核。
剩下3GB是用户空间。
从上到下是:环境变量,栈,动态链接库,堆,BSS, DATA段,elf,保护区

11. gdb原理是什么?

直接通过gdb启动程序是启动gdb后fork出一个子进程运行目标程序,如果使用gdb调试正在运行中的程序,则是利用ptrace(PTRACE_ATTACH, pid, 0, 0)attach到目标程序上。

断点则是利用了ptrace这个系统调用,其原理就是在打断点的地址写入0xCC,运行到这个地方目标程序就会触发SIGTRAP信号,然后gdb截获这个信号,检查一下断点链表里确实有这个地址,就会认为断点命中,然后就暂停进程。

12. 如何查看运行中的进程的堆栈?

三. 内存分配相关问题

1. 伙伴系统

为了避免出现内存碎片,Linux内核中引入了伙伴系统算法(buddy system)。把所有的空闲页框分组为11个块链表,每个块链表分别包含大小为1,2,4,8,16,32,64,128,256,512和1024个连续页框的页框块。最大可以申请1024个连续页框,对应4MB大小的连续内存。每个页框块的第一个页框的物理地址是该块大小的整数倍。

在申请分配页框的时候就由小往大找。分裂页框。归还的时候可能自动合并连续的页框。

2. slab

特定对象的内存池。

四. CPU架构带来的相关问题

1. 64位CPU和32位CPU编程时有什么区别?

上一篇下一篇

猜你喜欢

热点阅读