- 内核编程与在用户层编程有什么区别?
1)内核编程时既不能访问C库也不能访问标准的C头文件。
2)内核编程时必须使用GNU C。
3)内核编程时缺乏像用户空间那样的内存保护机制。
4)内核编程时难以执行浮点运算。
5)内核给每个进程只有一个很小的定长堆栈。内核栈的大小一般是两页,意味着32位机的内核栈是8KB。
6)由于内核支持异步中断、抢占和SMP,因此必须时刻注意同步和并发。
7)要考虑可移植性的重要性。 - 什么是“写时拷贝”技术?
写时拷贝是一种可以推迟甚至免除拷贝数据的技术,fork时内核并不复制整个进程地址空间,而是让父进程和子进程共享同一个拷贝。只有在需要写入的时候,数据才会被复制,从而使各个进程拥有各自的拷贝。 - kmalloc 和vmalloc的区别?
vmalloc分配的内存虚拟地址是连续的,而物理地址则无须连续。kmalloc确保两个地址都是连续的。