Chinaunix

标题: Linux内核概述(3) [打印本页]

作者: wt_tokey    时间: 2009-01-24 08:15
标题: Linux内核概述(3)
    进程管理。Linux中每一个进程都有一个独立的数据结构,用来保存该进程的ID,优先级,地址空间等信息。所谓进程管理,就是对该数据结构的管理。
    进程ID是用来识别进程的编号,一个进程除了有进程ID,还有该进程所在组ID,会话ID。一般来说,拥有同一个控制终端的进程也同时拥有同一会话ID。而进行同一作业的进程拥有同一个进程组ID,也就是说,能够通过管道进行通信的进程拥有同一个组ID。组ID,会话ID与Linux中的信号机制有着很密切的关系。
    Linux中的进程一定是通过fork这个系统调用产生。调用fork的进程叫做父进程,生成的进程叫做子进程。一般来说,子进程在诞生之时,具有几乎与父进程完全一样的数据结构,一样的进程空间,一样的作用目录,一样的信号设定状态等等,唯一不同的就是进程ID。fork完之后,子进程马上被加到调度队列中。fork出一个子进程如果除了ID和父进程不同外,完全一样的话就没什么意义了,所以一般在fork完后再调用一个exec系统调用,来加载一个新程序,赋予该子进程新任务。exec所作的是对进程空间有关的信息进行重新赋值,而文件,作业目录等不会变化。exit系统调用可以结束一个进程的生命,并为其收尸。释放所用空间,关闭文件等回收工作。另外,由于子进程在被fork出来之后马上加入调度队列,而此时父进程和子进程又几乎一模一样,所以fork完之后的下一动作是父进程的还是子进程的往往不确定。如果在父进程中调用了wait这个系统调用的话,父进程将会体现出父爱的伟大,让子进程优先享有CPU,在子进程寿终正寝后,父进程才继续自己的路,并为已故子进程保留临终状态--正常死亡(正常结束),意外得病(异常结束),被人谋杀(被信号9干掉)等。
    信号是Linux中进程间异步通信的一种机制。任何进程都可以发出信号。任何进程也都可以接受信号,而接受信号后的动作可以是默认动作,无视或指定动作三种情况。不同种类的信号对应的默认动作往往也是不同的。无视就是不理它。指定动作就是指定一段代码,当相应信号来了就执行这段代码,停止当前动作,执行完之后再回到原来的执行轨迹上,这个和中断很相似。
    线程。Linux里的线程是模仿进程来实现的。所不同的是,线程间可以共享一个进程空间,还有就是多出了线程间关系信息。而从调度的角度看来,进程,线程没有区别。程序中所调用的线程函数往往是POSIX线程库中的函数,该库中的函数再去调用Linux内核里的东西。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/91477/showart_1807576.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2