由于Linux内核支持对称多处理器(SMP),并且支持内核抢占,这样可以让多个进程并发的执行。当然这也带来了一些影响,就是当多个进程可以对相同的数据进行访问和操作时,会产生一些意料之外的结果。例如,在火车站的售票系统中,多个窗口发售相同车次的车票。当只有最后一张票时,多个窗口同时查询数据库(类似多处理器),发现有一张票,若此时同时出售,就会出现一张票被出售多次的现象。通常称这为竞争条件,而火车票的剩余数则为临界区。那内核如何避免这种现象发生,即防止竞争条件,就是解决内核同步问题。
1.进程创建
Linux/Unix中进程创建分为两部分:1)fork(),拷贝当前进程,创建一个子进程。(父进程与子进程的区别只有PID、PPID和某些资源和统计量);2)exec(),读取可执行的文件并将其载入地址空间开始运行。
1.进程
进程是处于执行期间的程序以及执行该程序需要资源的总称。在操作系统中,提供了两种虚拟机制:虚拟处理器和虚拟内存。这两种抽象机制目的是让进程"独立"享有处理器以及整个内存资源。
虽然LKD这本书非常适合初学者学习Linux内核,但要读懂它,还是需要一些基础知识的。如果仅是了解一些Linux命令,以及一些计算机的基本知识,学习这本书时也是会很吃力的。接下来要分享我个人认为需要的基础知识,以及自己的学习路线。
LKD即Linux Kernel Development,一本介绍Linux内核的经典入门之作。大学期间,曾经多次研读该书,但总感觉自己没有真正理解其中的内容。究其原因主要是当时是以了解知道为目的,而不是理解运用为目的;另外只是在图书馆或自习室去读书,而未对照着源码进行通读。一直想着有一天可以读懂Linux内核,因此现在计划从LKD开始,每周会抽出一点时间,从零开始去学习linux内核,也会将自己的学习过程以及心得记录下来。