进程表###
Linux进程表就像一个数据结构,它把当前加载在内存中的所有进程的有关信息保存在一个表中。
其中包括:进程PID,进程的状态、命令字符和其他一些ps命令输出的各类信息。
操作系统通过继承的PID对它们进行管理,这些PID是进程表的索引。
早期的进程表的长度是有限制的,所以支持同时运行的-进程也是有限的。早期的UNIX系统只能够同时运行256个进程。最新的实现版本已大幅度放宽这一限制,可以同时运行的进程数可能只与用于建立进程表项的内存容量有关,而没有具体的数字限制了。
查看进程###
ps 命令显示我们正在运行的进程,其他用用户正在运行的进程或者目前在系统上运行的所有进程。样本:
TTY 一列显示进程是从哪一个终端启动的(这里是mac,??应该是图形界面启动),TIME一列是进程目前为止所占用cpu时间,CMD一列显示启动进程所使用的命令。
默认情况下,
ps程序只显示与终端、主控制台、串行口和伪终端保持连接的进程的信息。
其他的进程在运行时不需要通过终端与用户进行通讯,它们通常都是一些系统进程,Linux用他们管理共享的资源。可以使用ps -a 查看所有进程,用-f显示进程的完整信息。
11.2.3 系统进程
STAT一列表明进程的当前状态。
STAT中常见的代码:
其他的系统里面可能显示为:1 ? Ss 0.03 init [5]
一个进程一般是由父进程来进行启动的,被父进程启动的进程是子进程。linux启动的时候会运行一个init程序,它的进程号为1。【可以将init进程看作为进程的管理器,它是其他所有进程的祖先进程】所以,其他进程要么是被init进程启动,要么是被init进程启动的其他进程启动的。
eg: 用户登录的处理过程。
init进程为每个用户用来登录的串行终端或拨号调制解调启动一次getty程序。对应的ps命令输出如下:
9619 tty2 Ss+ 0:00 /sbin/mengetty tty2
getty 进程等待来自终端的操作,向用户显示熟悉的登录提示符,然后把控制移交给登录程序,登录程序设置用户环境,最后启动一个shell。用户退出系统时,init进程将再次启动另外一个getty进程?。
启动新进程等待它们结束的能力是整个系统的基础。
11.2.4 进程调度
这表明进程2195处于运行状态(R),正在运行的命令是ps ax。(也就是这个进程出现在自己的输出结果中)[这个状态指示符只表示已准备好运行,并不意味它正在运行](在一台但处理器的计算机上,同一时间只能有一个进程可以运行,其他进程处于等待状态,每个进程轮到的运行时间(时间片)是相当短暂的),这就给我们一种多个程序在同时运行的假象。状态R+只是表示这个程序是前台任务,它不是在等待其他进程结束或等待输入输出完成。这就是为什么我们可能在ps命令的输出结果中可以看到两个这样的进程的愿意(另一个常见的标记为正在运行的继承是X显示服务器)【一个x 服务,一个是当前自己的进程】???
????但是这里还是有点不是很懂!!!
Linux内核决定了下一个时间片段该分配给哪一个进程,它的判断依据是进程的优先级(第4章讲到)【优先级高的进程运行的更加频繁,低级的就没有这么频繁】
linux中的进程的运行时间不可能超过分配给他们的时间片段,Linux上是使用抢先式多任务处理,所以,任务的挂起和继续运行是不需要彼此之间的协作。
(nice值的意思)
linux是一个多任务系统,所以进程之间可能存在竞争统一资源的问题。这种情况下,执行短期的突发性工作并暂停运行来等待输入的程序,要比持续占用处理器进行计算或不断轮询系统来查看是否有新的输入到达的程序更好。(√)表现良好的程序为nice程序,而且在某种意义上,这个nice是被计算出来的。
操作系统根据这个进程的nice值来决定它的优先级,一个进程的nice值默认是0并将根据这个程序的表现而不断变化。(长期不间断的运行的程序优先级一般比较低,eg:暂停来等待输入的程序会得到奖励), 这样就可以帮助与用户进行交互的程序保持及时的响应性。在程序等待用户输入程序的时候,系统会增加它的优先级,这样子,当他准备运行的时候,它就会有较高的优先级而能够优先执行。
[nice命令设置nice的值,是用renice命令调整他的值]若是,nice命令将进程的nice值增加10 ,就会降低该进程的优先级。ps -l 或者-f查看nice值。
若是使用下面命令启动:
nice oclock &
它将会被分配到+10的nice值。
上图可以查看到对应的nice的值都会增加10,这个是时钟程序就不会运行得那么频繁了。状态栏(S列)含有N表示这个进程的nice值已经被修改了(不是默认值了)
PPID 为父进程的ID,它是启动这个进程的PID,如果原来的进程已经不存在了,该栏就显示为init进程的进程ID(PID=1)