作者:未知
出处:https://osu.redhat.com/content/courses-zh-cn/rha030-4/section_0001/tag_lessons/section_0002
二、内核、程序和进程
主要概念
讨论
Linux 内核
Linux 内核是一个操作系统,就像 Windows、MacOS 和 OS/2 等操作系统一样。操作系统是程序运行的环境,为程序和计算机硬件之间的交互作用提供机制。当键盘的键被按,当鼠标被移动,或当程序的信息包通过网络到达, 内核都会通知程序。内核允许程序访问硬盘,可能是为了读取配置文件或存储的数据
正如很难向只懂一门语言的人解释语言的概念一样,通常很难向计算机新手或者向只用过一种操作系统的人解释操作系统的概念。操作系统在底层运作,因此用户和它没有直接的交流,也经常意识不到他们所运行的程序在使用它。
Figure 1. 内核和进程
程序
程序是储存在计算机硬盘里的文件。一个程序是一系列非常基本的指令,非常详细、明确地告诉操作系统要做什么、何时去做。以下可能是写在文件 /usr/X11R6/bin/xcalc 上的指令,一个普通的计算器程序。
当然,这些指示不是用英文或者其它任何人类可读的语言写入的。在最低的层次,计算机只会执行少量的任务,即 256 个任务。想象一下,每个任务都被编号,从任务 0 到任务 255。程序看起来更象以下的指令:
由于计算机可执行的任务取决于不同的 CPU,而且由于不同的操作系统用不同的方式对任务进行编号,所以为一种操作系统编译的程序一般不能在另一种操作系统上使用。
进程
当用户指示内核运行一个程序时,内核会从程序文件上读取指令,并将这些指令装入内存,然后开始执行这些指令。在内存中运行的这个程序的副本叫做进程。注意,同一个程序可以装入内存并运行多次,所以任何时候内核可能都在运行同一程序的几个进程。
Linux 和大多数现代操作系统一样,是一个多任务操作系统。这说明,Linux 内核看起来好像在同时运行多个进程。事实上,内核运行一个进程的时间很短,通常是 50 毫秒。然后把这个进程切换出去,切入另一个进程,再运行 50 毫秒。最后,内核把所有的进程都运行了一遍,然后再重新开始运行。在进程之间的快速切换使用户感觉所有的进程都在同时运行。
shell
Linux 用户经常使用一种叫做 shell 的特殊程序,与内核进行交互作用。shell 在终端中运行时,会发布一个提示符并等待指示。接着用户输入一个程序的名称,让 shell 运行该程序。在下面的例子中,用户 elvis 让 shell 运行一个简单的日历程序 cal。shell 遵照指示执行程序,然后将程序的输出报告给终端:
[elvis@station elvis]$ cal
May 2003
Su Mo Tu We Th Fr Sa
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
[elvis@station elvis]$
由于用户可以使用 shell 执行系统中几乎所有的任务,所以它是一个既重要又先进的程序。我们这门课主要学习如何使用 shell 有效执行任务。
当用户要求 shell 运行程序时,我们说用户向 shell 指定命令。shell 通常被称作命令行界面(Command Line Interface)。
ps 命令
ps 命令通常用来列出在系统上运行的进程。没有参数的 ps 命令显示了从单个终端(或图形环境中的终端窗口)上启动的所有进程。在下面的例子中,elvis 发现他的终端上当前有两个运行的进程:bash shell 和 ps 命令本身。
[elvis@station elvis]$ ps
PID TTY TIME CMD
1378 pts/1 00:00:00 bash
1418 pts/1 00:00:00 ps
第一列显示进程的 PID,或者叫作进程 ID(Process ID)。在系统中运行的每个进程都由一个独特的 PID 所标识。第二列标识了 elvis 的终端,第三行报告了这个进程消耗了多少 CPU 时间。
ps aux 命令显示所有正在系统中运行的进程的详细列表。现在我们不详细讨论“aux”代表着什么,就当作魔法记住就行。我们也不详细讨论以下的每一列,所有这些都 会在以后的教程中讲授。现在只需知道,在任何时间,一般都会有大量的进程在 Linux 系统中运行。(注意,在下面的输出中删去了许多行,用 “…” 来代替。)
[elvis@station elvis]$ ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.1 1388 460 ? S 18:52 0:04 init [
root 2 0.0 0.0 0 0 ? SW 18:52 0:00 [keventd]
...
root 548 0.0 0.2 1460 580 ? S 18:53 0:00 syslogd -m 0
root 552 0.0 0.1 1384 428 ? S 18:53 0:00 klogd -x
rpc 570 0.0 0.2 1560 552 ? S 18:53 0:00 portmap
root 622 0.0 0.2 1496 632 ? S 18:53 0:00 /sbin/cardmgr
root 628 0.0 0.0 0 0 ? SW 18:53 0:00 [kapmd]
root 633 0.0 0.1 1380 484 ? S 18:53 0:00 /usr/sbin/apmd -p
root 644 0.0 0.5 3524 1512 ? S 18:53 0:00 /usr/sbin/sshd
root 655 0.0 0.3 2040 860 ? S 18:53 0:00 xinetd -stayalive
root 674 0.0 0.9 6204 2504 ? S 18:53 0:00 sendmail: accepti
smmsp 683 0.0 0.8 6004 2256 ? S 18:53 0:00 sendmail: Queue r
root 693 0.0 0.1 1424 444 ? S 18:53 0:00 gpm -t ps/2 -m /d
root 702 0.0 0.2 1580 672 ? S 18:53 0:00 crond
xfs 781 0.0 1.5 5272 4004 ? S 18:53 0:00 xfs -droppriv -da
root 800 0.0 0.2 3416 544 ? S 18:53 0:00 rhnsd --interval
root 807 0.0 0.1 1364 396 tty1 S 18:53 0:00 /sbin/mingetty tt
...
root 1375 0.0 0.3 4120 968 pts/1 S 20:11 0:00 su - elvis
elvis 1378 0.0 0.5 4324 1404 pts/1 S 20:11 0:00 -bash
elvis 1438 0.0 0.2 2648 696 pts/1 R 20:30 0:00 ps aux
问题
内核、程序和进程
A title
Question 1
以下哪个不是操作系统?
Question 2
对于 Linux 操作系统来说,以下哪种说法不正确?
Question 3
以下哪种说法是正确的?
Question 4
以下哪个是红帽企业版 Linux 的默认 shell?
Question 5
以下哪个命令会列出进程?