Linux 核心--3.软件基础( 二 )




2.2 操作系统概念
如果没有软件,计算机只不过是一堆发热的电子器件 。如果将硬件比做计算机的心脏则软件就是它的灵魂 。操作系统是一组系统程序的集合,它提供给用户运行应用软件的功能 。操作系统对系统硬件进行抽象,它提供给系统用户一台虚拟的机器 。大多数PC可以运行一种或者多种操作系统,每个操作系统都有不同的外观 。Linux由许多独立的功能段组成 。比如Linux内核,如果没有库函数和外壳程序,内核是没有什么用的 。为了理解操作系统到底是什么,思考一下当你敲入一个简单命令时,系统中发生了什么:


$ ls
Mailc imagesperl
docstcl
$


$符号是由用户登录外壳(这里指Bash)提供的提示符 。它表示正在等待用户敲入一些命令 。敲入ls命令,首先键盘驱动程序识别出敲入的内容 。然后键盘驱动将它们传递给外壳程序,由外壳程序来负责查找同名的可执行程序(ls) 。如果在/bin/ls目录中找到了ls,则调用核心服务将ls的可执行映象读入虚拟内存并开始执行 。ls调用核心的文件子系统来寻找那些文件是可用的 。文件系统使用缓冲过的文件系统信息,或者调用磁盘设备驱动从磁盘上读取信息 。当然ls还可能引起网络驱动程序和远程机器来交换信息以找出关于系统要访问的远程文件系统信息(文件系统可以通过网络文件系统或者NFS进行远程安装) 。当得到这些信息后,ls将这些信息通过调用视频驱动写到显示器屏幕上 。以上这些听起来十分复杂 。这个非常简单命令的处理过程告诉我们操作系统是一组协同工作的函数的集合,它们给所有的用户对系统有一致的印象 。


2.2.1 内存管理
由于资源的有限,比如内存,操作系统处理事务的过程看起来十分冗长 。操作系统的一个基本功能就是使一个只有少量物理内存的系统工作起来象有多得多的内存一样 。这个大内存叫为虚拟内存 。其思想就是欺骗系统中运行的软件,让它们认为有大量内存可用 。系统将内存划分成易于处理的页面,在系统运行时将这些页面交换到硬盘上去 。由于有另外一个技巧:多处理的存在,这些软件更加感觉不到系统中真实内存的大小 。


2.2.2 进程
进程可以认为是处于执行状态的程序,每个进程有一个特定的程序实体 。观察以下Linux系统中的进程,你会发现有比你想象的要多得多的进程存在 。比如,在我的系统中敲入ps命令,将得到以下结果:

$ ps
PID TTY STATTIME COMMAND
158 pRe 1 0:00 -bash
174 pRe 1 0:00 sh /usr/X11R6/bin/startx
175 pRe 1 0:00 xinit /usr/X11R6/lib/X11/xinit/xinitrc --
178 pRe 1 N 0:00 bowman
182 pRe 1 N 0:01 rxvt -geometry 120x35 -fg white -bg black
184 pRe 1 < 0:00 xclock -bg grey -geometry -1500-1500 -padding 0
185 pRe 1 < 0:00 xload -bg grey -geometry -0-0 -label xload
187 pp6 1 9:26 /bin/bash
202 pRe 1 N 0:00 rxvt -geometry 120x35 -fg white -bg black
203 ppc 2 0:00 /bin/bash
 1796 pRe 1 N 0:00 rxvt -geometry 120x35 -fg white -bg black
 1797 v06 1 0:00 /bin/bash
 3056 pp6 3 < 0:02 emacs intro/introduction.tex
 3270 pp6 3 0:00 ps
$

如果系统有许多个CPU,则每个进程可以运行在不同的CPU上 。不幸的是,大多数系统中只有一个CPU 。这样 操作系统将轮流运行几个程序以产生它们在同时运行的假象 。这种方式叫时间片轮转 。同时这种方法还骗过了进程使它们都认为只有自己在运行 。进程之间被隔离开,以便某个进程崩溃或者误操作不会影响到别的进程 。操作系统通过为每个进程提供分立的地址空间来作到这一点 。

推荐阅读