我自己对Linux源代码的注释 作者: 火
接触Linux内核已有一段时间了,算是对操作系统有了那吗一点点的认识,今天突然心血来潮,想把自己学的一点东西写出来.于是便来到了论坛,小可学艺未精,不当之处还请包涵.
下面先说一下操作系统存在的基础或理由:
计算机中最重要和最智能化的硬件部件是中央处理器(CPU),为什么这么说呢?原因是CPU提供了一套最基本的指令集,这个东西(指令集)是计算机能够进行数据处理的基础.举个例子,当你进行c语言编程时有一条最简单的赋值语句x=3,它是怎么被计算机执行的呢? 在计算机的CPU内部他是把3这个数送入x所在的内存单元,其中最重要的”送”这个命令是谁发出的呢?就是CPU的电子脉冲,CPU里面定义了很多这样的电子脉冲,比如'加'指令的电子脉冲,”跳转”指令(实现循环)的电子脉冲等.而这些电子脉冲合起来就是所谓的CPU指令集.它定义了计算机内部最基本的运算方式,计算机的所有的算法最后都被分解成这些最基本的运算方式,就像是数学上不管怎么难的算式最后都分解成加法,减法,乘法,除法等最基本的算式一样. 利用这些指令集定义的最基本的算法构建的更为复杂的算式就是所谓的计算机软件
操作系统以是一种软件,以是一大堆最基本的指令集的组合.只不过它是管理其它软件的软件,如果把操作系统看比做物理上的公式的话,那么一般的应用软件就好像是套用这公式的数据一样.现在应该知道操作系统存在的基础和理由了吧!
下面就开始说操作系统的部分了: 操作系统是由一大堆基本指令组成的更为复杂的程序,一般操作系统都是用c语言的编写的,c语言编写的操作系统在安装是被编译器编译成二进制代码存放在计算机的硬盘当中, 计算机打开电源的时候被读入内存,然后就由操作系统利用自己的程序控制整个计算机的软件和硬件. 操作系统是怎么控制整个计算机的软硬件的呢,当然是通过它自己的程序来控制计算机的,现在讨论的问题是操作系统通过什么样的程序来控制计算机的.
总的来说操作系统分为五大部分: 进程管理,内存管理,文件管理,网络管理,设备管理. 下面就以这五部分为总纲,我有一一道来:
进程管理:
什么是进程, 大家都用过计算机,知道什么是计算机程序.我们说写在纸上或者存储在计算机的硬盘上的一段代码就是程序.那什么是进程呢?我们说在计算机上运行的程序就是进程. 那进程和程序和什么区别呢?程序是写在纸上或者是存储在计算机硬盘上一段”死”的代码,当这段代码进入计算机内存被计算机执行的时候就变成了进程,进程是”活”的东西.因为进程是在计算机中被执行的程序,所以它比程序要多考虑的东西就是计算机内部的运行环境. 在操作系统中进程和任务是同一个概念.我们用的操作系统基本上都是多任务操作系统(window/Linux在同一时间有多个进程运行),那么这么多进程是怎么同时在CPU上运行的哪? 这就是进程管理要解决的问题. 在计算机中要执行一个程序,首先将程序的代码从硬盘读入到内存,然后CPU根据程序代码指令一条一条的执行,而这时候的程序就叫进程,计算机中同时存在多个进程在等待被执行,比如你在用window/Linux上网的时候,你一边用QQ和朋友聊天,一边在用MP3播放器听音乐,一边在浏览网页.那么这时候在计算机中就有三个进程在同时运行,一是QQ进程,二是MP3播放器进程,三是浏览器进程.但是计算机中只有一个CPU,在一个时间点上,它只能运行一个进程的指令,比如在2005/11/29/日 08/23/42/秒时计算机的CPU执行的是QQ进程的一条加法(mov)指令.那么计算机是怎样让三个进程同时运行起来的呢(至少我们看来是这样). 在计算机内部所有的正在运行的进程都在等待被CPU执行,操作系统按一定的规律让所有的进程都得到CPU的执行.方法是一会儿让QQ进程执行,过了一定时间后又让MP3播放器进程得到CPU的执行,再过一定时间后让浏览器进程得到CPU的执行.相对于人的反应,CPU的执行速度太快,所以人根本感觉不到这些进程的切换过程,也不会对人的操作产生影响 现在的问题是操作系统是按照什么样的规律给个各进程分配CPU资源的.操作系统是按照个各进程的属性来分配CPU资源的.那进程的属性在什么呢?当操作系统创建一个进程时都就为这个进程分配了一定的内存空间来存放它的属性.在Linux操作系统中,操作系统定义了一个数据结构task_struct来描述各个进程的进程属性,task_struct结构叫进程控制块(PCB), 它是操作系统中重要的数据结构之一.具体定义在/include/linux/sched.h中,注意在Linux操作系统中所有的操作系统源代码都在/usr/src目录下. task_struct结构的代码如下所示: (这里以2.40内核为准,可能不同版本的内核代码会有一点点的不同) (为了保持简洁,从宏关上把握,不拘泥于具体,这里只说一部分,其它的以后会讲到,这里只说功能)
|