Q&A

内存管理

1.Linux系统的内存用掉了多少,还剩余多少?下面这个free命令每一个数字是什么意思?

2.为什么要有DMA、NORMAL、HIGHMEM zone?每个zone的大小是由谁决定的?

3.系统的内存是如何被内核和应用瓜分掉的?

4.底层的内存管理算法buddy是怎么工作的?它和内核里面的slab分配器是什么关系?

5.频繁的内存申请和释放是否会导致内存的碎片化?它的后果是什么?

6.Linux内存耗尽后,系统会发生怎样的情况?

7.应用程序的内存是什么时候拿到的?malloc()成功后,是否真的拿到了内存?应用程序的malloc()与free()与内核的关系究竟是什么?

8.什么是lazy分配机制?应用的内存为什么会延后以最懒惰的方式拿到?

9.我写的应用究竟耗费了多少内存?进程的vss/rss/pss/uss分别是什么概念?虚拟的,真实的,共享的,独占的,究竟哪个是哪个?

10.内存为什么要做文件系统的缓存?如何做?缓存何时放弃?

11.Free命令里面显示的buffers和cached分别是什么?二者有何区别?

12.交换分区、虚拟内存究竟是什么鬼?它们针对的是什么性质的内存?什么是匿名页?

13.进程耗费的内存、文件系统的缓存何时回收?回收的算法是不是类似LRU?

14.怎样追踪和判决发生了内存泄漏?内存泄漏后如何查找泄漏源?

15.内存大小这样影响系统的性能?CPU、内存、I/O三角如何互动?它们如何综合决定系统的一些关键性能?

进程管理

1.Linux进程和线程如何创建、退出?进程退出的时候,自己没有释放的资源(如内存没有free)会怎样?

2.什么是写时拷贝?

3.Linux的线程如何实现,与进程的本质区别是什么?

4.Linux能否满足硬实时的需求?

5.进程如何睡眠等资源,此后又如何被唤醒?

6.进程的调度延时是多少?

7.调度器追求的吞吐率和响应延迟之间是什么关系?CPU消耗型和I/O消耗型进程的诉求?

8.Linux怎么区分进程优先级?实时的调度策略和普通调度策略有什么区别?

9.nice值的作用是什么?nice值低有什么优势?

10.Linux可以被改造成硬实时吗?有什么方案?

11.多核、多线程的情况下,Linux如何实现进程的负载均衡?

12.这么多线程,究竟哪个线程在哪个CPU核上跑?有没有办法把某个线程固定到某个CPU跑?

13.多核下如何实现中断、软中断的负载均衡?

14.如何利用cgroup对进行进程分组,并调控各个group的CPU资源?

15.CPU利用率和CPU负载之间的关系?CPU负载高一定用户体验差吗?

zood