如果你走入我们的内核之旅网站http://www.kerneltravel.net/ ,静下心阅读并动手实践,或许,流逝的时间,让你手捧沉甸甸的果实。 欢迎在讨论区http://www.lupaworld.com/bbs/forum-255-1.html提问。
如果你希望加入Linux内核学习圈,请到http://blog.chinaunix.net/group/group_1475.html
释义Linux内核(5)-操作系统基本概念(2)
上一篇 /
下一篇 2007-07-10 22:21:39
/ 个人分类:释义Linux内核
查看( 2374 ) /
评论( 2 )
进程
所有的操作系统都使用一种基本的抽象:进程(process)。一个进程可以定义为:“执行程序的一个实例”,或者一个运行程序的“执行上下文”。在传统的操作系统中,一个进程在地址空间(address space)中执行一个单独的指令序列。地址空间是允许进程引用的内存地址集合。现代操作系统允许具有多个执行流的进程,也就是说,在相同的地址空间可执行多个指令序列。
QUOTE:
所谓进程就是跑起来的程序.一个程序一旦跑起来,就需要内存空间,CPU环境(一组寄存器和堆栈),如果进程打开了文件,还涉及磁盘操作。
多用户系统必须实施一种执行环境,在这种环境里,几个进程能并发活动,并能竞争系统资源(主要是CPU)。允许进程并发活动的系统称为多道程序系统或多处理技术系统(注6)。区分程序和进程是非常重要的:几个进程能并发地执行同一程序,而同一个进程能顺序地执行几个程序。
QUOTE:
实际上,一个程序运行一次就是一个进程,再运行一次,又是一个进程。
在单处理器系统上,只有一个进程能占用CPU,因此,在某一时刻,只能有一个执行流。一般来说,CPU的个数总是有限的,因而,只有少数几个进程能同时执行。操作系统中叫做调度程序(scheduler)的部分决定哪个进程能执行。一些操作系统只允许有非抢占式进程,这就意味着,只有当进程自愿放弃CPU时,调度程序才被调用。但是,多用户系统中的进程必须是抢占式的;操作系统记录下每个进程占有的CPU时间,并周期性地激活调度程序。
QUOTE:
当大家都去强一个资源(CPU)时,想想看,调度有多重要。
Unix是具有抢占式进程的多处理操作系统。即使没有用户登录,没有程序运行,也还是有几个系统进程在监视外围设备。尤其是,有几个进程在监听系统终端等待用户登录。当用户输入一个登录名,监听进程就运行一个程序来验证用户的口令。如果用户身份得到证实,那么监听进程就创建另一个进程来执行shell,此时在shell下可以输入命令。当一个图形化界面被激活时,有一个进程就运行窗口管理器,界面上的每个窗口通常都由一个单独的进程来执行。当用户创建了一个图形化shell,那么,一个进程运行图形化窗口,而第二个进程运行用户可以输入命令的shell。对每一个用户命令,shell进程创建另一个进程来执行相应的程序。
QUOTE:
用ps命令 察看进行的运行情况,实际感受多进程系统中多个进程怎样同时存在
类Unix操作系统采用进程/内核模式。每个进程都自以为它是系统中唯一的进程,可以独占操作系统所提供的服务。只要进程发出系统调用(即对内核提出请求),硬件就会把特权模式由用户态变成内核态,然后进程以非常有限的目的开始一个内核过程的执行。这样,操作系统在进程的执行上下文中起作用以满足进程的请求。一旦这个请求完全得到满足,内核过程将迫使硬件返回到用户态,然后进程从系统调用的下一条指令继续执行。
QUOTE:
进程不断在两种状态下转换,想想什么情况下进行CPU状态的转换
内核体系结构
如前所述,大部分Unix内核是单模块:每一个内核层都被集成到整个内核中,并代表当前进程在内核态下运行。相反,微内核操作系统只需要内核有一个很小的函数集,通常包括几个同步原语、一个简单的调度程序和进程间通信机制。运行在微内核之上的几个系统进程实现从前操作系统级实现的功能,如内存分配程序、设备驱动程序、系统调用处理程序等等。
尽管关于操作系统的学术研究都是面向微内核的,但这样的操作系统一般比单模块的效率低,因为操作系统不同层次之间显式的消息传递要花费一定的代价。不过,从理论上来说,微内核操作系统比单模块有一定的理论优势。微内核操作系统迫使系统程序员采用模块化的方法,因为任何操作系统层都是一个相对独立的程序,这种程序必须通过定义明确而清晰的软件接口与其他层交互。此外,已有的微内核操作系统可以很容易地移植到其他的体系结构上,因为所有与硬件相关的部分都被封装进微内核代码中。最后,微内核操作系统比单模块更加充分地利用了RAM,因为暂且不需要执行的系统进程可以被调出或撤消。
QUOTE:
微内核与单模块之争,是学术之争,也是理论与实际之争。想知道Linus的老师为什么对Liuns很不满意,但Linux操作系统依然那么流行吗?
为了达到微内核理论上的很多优点而又不影响性能,Linux内核提供了模块(module)。模块是一个目标文件,其代码可以在运行时链接到内核或从内核中取下。这种目标代码通常由一组函数组成,用来实现文件系统、驱动程序或其它内核上层功能。与微内核操作系统的外层不同,模块不是作为一个特殊的进程执行的。相反,与任何其他静态链接的内核函数一样,它在内核态代表当前进程执行。
使用模块的主要优点包括:
模块化方法
因为任何模块都可以在运行时被链接或卸下,因此,系统程序设计员必须提出明确定义的软件接口以访问由模块处理的数据结构。这使得开发新模块变得容易。
平台无关性
即使模块依赖于某些特殊的硬件特点,但它不依赖于某个固定的硬件平台。例如,符合SCSI标准的磁盘驱动程序模块,在IBM兼容PC与惠普的 Alpha机上都能很好地工作。
节省内存使用
当模块功能被需要时,把它链接到正在运行的内核中,否则,卸下该模块。这种机制也可以对用户透明,因为链接和卸下可以由内核自动完成。
无性能损失
模块的目标代码一旦被链接到内核,其作用与静态链接的内核目标代码完全等价。因此,当模块的函数被调用时(注7),无须显式地消息传递。
QUOTE:
附件中是进程一章的内容。
注6:一些多处理技术操作系统不是多用户的,其中一个例子就是微软公司的Windows 98。
注7:当模块被链接或被卸下时,性能稍有影响。但是,在微内核操作系统中,系统进程的创建和删除也是这样的。[
本帖最后由 陈莉君 于 2007-7-11 10:17 编辑 ]
process.rar
(2007-07-11 10:17:33, Size: 39.2 kB, Downloads: 0)
论坛模式
推荐
收藏
分享给好友
管理
TAG:
-
黄富强
发布于2007-07-10 22:37:07
-
支持
微内核与宏内核,我认为这个说法恰当一些,直译要有语境约束。
消息传递机制是OS的神经网络.
事件驱动----->消息传递.
[ 本帖最后由 黄富强 于 2007-7-11 10:46 编辑 ]
-
yyfiby发布于2007-07-11 10:00:31
-
强烈的支持~~~~~~