一.同步和并发(内核很容易产生竞争条件,内核很多特征要求能够并发的访问共享数据,这就要求有同步机制)
竞争尤其是:
1.Linux是抢占多任务操作系统
2.Linux内核支持多处理系统
3.中断是异步到来的,完全不顾当前正在执行的代码
4.Linux内核可以抢占
解决竞争的方法:自旋锁(后面会了解到),信号量
二.Linux内核的一些性质
1.没有内存保护
2.没有Libc库:标准C函数库(其他库)都不能被内核链接,因为大小和速度的要求
但是,C库函数在内核中都已经实现了,只是包含的头文件有点变化
比如:操作字符串的函数组位于lib/String.c文件中,在linux下只要包含<linux/string.h>头文件就可以使用它
3.内核编程必须使用GNUC( 比如:gcc),缺乏像用户空间那样的内存保护机制(用户态和内核态,这方面如果网友不清楚的可以去百度下)
4.1 用户空间:可以从栈中分配大量空间来存放变量,甚至巨大的结构体,是因为用户空间的栈很大,而且还能动态增长
4.2 内核栈:随体系结构而变的大小,在X86上,栈的大小在编译时配置,可以是4KB也可以是8KB,32位机内核栈是8KB,64位机内核栈是16KB,这是固定不变的
每个处理器都有自己的栈