00:02
那刚才我们已经给大家介绍了进程,包括内核里面如何处理进程若干个概念,包括它背后的工作逻辑啊,进程呢,它在运行的时候是有多种状态的切换啊,这个状态呢,大体上可以分成创建、就绪、执行、阻塞和终止。这个状态。是一个粗略的分类,并不详细啊,第一个呢叫创建,就是进程啊,要想运行先把它创建出来。创建完了以后呢,我们。到达就绪这个状态。就绪这个状态,那就意味着我们要把所有的资源都准备好了,就等着什么呢CPU时间片的分配了啊,就是万事皆给,只欠东风。
01:06
当CPU。发现这个进程符合调度的执行的条件之后,就会把这个进程加载到CPU里面进行运行。那这个就是执行的过程,在执行这个进程的过程中,有可能会涉及到磁盘IO或者网络IO啊,比方说从磁盘上读文件。或者从网络中要处理网络中发过来的数据,我们都知道,网络也好,磁盘也好,是比较慢的。所以他要。等待磁盘和网络的数据的到来,所以这时候进程就不会始终霸占着CPU,因为CPU现在没什么事可干,就等着磁盘和网络的数据处理。
02:03
所以它就会进入到另一种状态,叫阻塞态。一旦阻塞态,CPU那就腾出来,可以干别的事了,CPU就可以运行别的进程了。而当前这个进程就处于阻塞态。阻塞态,等着磁盘IO或者网络IO完成,数据都准备好了,它又可以进入到旧序态,那又等到等着CPU分配时间片了,明白吧?当然进程运行终究有结束的时候,所以如果执行完成了,那就终止了啊,这就是进程执行的的多种状态。这个切换呢,彼此之间这个切换图。大家要有有所了解啊,这个有些状态之间的切换,它是有规则的,并不是说你随便就能。切换到另一种状态的啊,那你像下面这些切换运行到就绪,运行到就绪就可以。
03:13
右续就续到运行,运行到左侧这些都是可以的。但是有些状态是不能直接切的啊。那比方说阻塞直接运行是不行的,阻塞心理到就绪以后才能执行啊,所以它这个切换是有一定的。规则。那当然,我们在Linux中刚才说了,这个状态只是一个粗略的分类,那我们在Linux命令中,我们在执行是可以看到它更为丰富的。状态的,比方说运行态。运行态就表示程序正在加载到内存里面,正在运行。加入到CPU里面。正在运行就绪态。
04:04
那就是表示他。等待着CPU的调度。还有主色态。那这个这个叫睡眠态啊,睡眠太阳又可以分成可中断和不可中断,可中断呢,就是你可以睡眠,睡眠不就停在这了吗?睡着了,睡着了不干不干活了,那可中断就是可以把它打断,别睡了起来干活,那另一个呢,不可中断,那不可中断就是你换没法把他叫醒。啊,他一直睡,但是这个一直税,也并不是说永远睡啊,就达到一定的条件下,就是人你不能唤醒啊,但是程序它自身有一些条件满足了,他也能醒过来。啊,所以它并不是永远沉睡,而还有一种呢,叫停止,停止说的是什么呢?停止就是相当于。
05:01
八。即将死去的人,哎,给他利用冰柜给他冻住了,大家知道有一种那个科好像是一种科学技术啊,就假如有有些人哎得了重症,得了绝症,现有的医学条件解决不了。就把它冷冻在一个冰冰柜里面,哎,然后一冻好长时间,然后冻上100年,冻上100年以后,100年再把它医疗条件满足情况下,可以治这个病了,再把它唤醒了,再把它解冻,是不是就可以治好它了啊,这就是那个停止它啊停,当然这个停止态呢,是需要人工把它唤醒的,他既自己醒不了了啊,自己醒不了了啊,你冻在那了,你不不不把它,呃,100年以后把它解冻,它是一直在那。停着的啊,这叫停止。
06:04
还有第最后一种状态呢,叫僵尸太啊,僵死太,僵尸太僵尸太啊,就是大家看了那个那个僵尸电影吧,或者电电视电视连续剧之类的。那个香港有一个演员特别喜欢演僵尸电影啊,林正英是吧,很有名啊,那个僵尸什么意思?尸就是死而不僵是吧?啊,实际上已经死了,他已经没有生命了,他已经不是人类了,但是呢,他又在那站着,他有那个东西,甚至还蹦蹦跳跳的,那吓人不吓人是吧?那这个进程里面的姜斯姜世太,姜世太倒不至于那么严重,就是他进程已经死了,但是他仍然在内存,就是进程列表,你还能看得到他啊,但是呢,他基本上也不占什么资源,就是让你看着,就相当于人死了,尸体在那摆着,你不收尸,不收尸,你不觉得他看着有点别扭吗?
07:11
啊,身边有人死了,然后老在那身边尸体在那摆着,你不看着他难受啊,啊天天陪着你是吧?那我们是不是正正常情况下进程死了,是不是应该把它回收了,比方说火化了呀,埋葬了是吧,入土为安对不对,你不能摆在那啊,那是那是像什么样啊,那僵石太就是出现这种情况。僵尸太太出现原因呢?通常来讲可能就是因为特殊情况导致进城无法回收他的尸体。结果就造成死是死了,但是进程列表里还能看得见,不过这个倒不是大问题,就是让你看着不舒服而已,它实际上本身已经不占内存了,因为什么呢?因为他已经死了,他也不占资源了啊,所以但是像这种进程啊,不好处理,为什么你杀也没法杀。
08:11
因为。他本身已经是死的了。啊,要想杀怎么杀,除非你把他的附近城,因为他是依赖于附近城,他还挂在那个附近城里面,他实际上已经死了,你杀他杀不动了,他已经死了,杀谁杀他的父近。你杀了父进程,是不是它这个数就断了,相当于他和那个进程数就连不上了,连不上的进程就看不见了,也就关了,理解了吧。但是附近城能杀吗?那你得看清楚了,看他的父亲是谁,有没有势力了啊,如果足够势力强大,你是不能杀人家,比方说CND。CDD是系统的第一个进程,结果那个僵尸太的父进程就是CCD,你说你把CD杀了吗?你父进程杀了得,大家都别玩了。对不对,哎,所以能不能杀还是要看情况的是吧,那不能杀你就别杀了,反正他也就占个地儿。
09:06
啊,大不了下次重启的时候它也就没了,明白了吧,哎,这就是僵尸态,那么僵尸态呢,表现为这种状态,大家看这有个ZZ,这个就是加时态。啊,ZZ字母就是这样状态,那这里面有大量的进程状态啊,那么我要想查看状态,咱们有一个命令可以帮我们来观察到,就这个命令,这个命令呢,在这儿列出的就是各种状态。这就是那个state status状态的意思,大家看它,它有什么S呀,I呀,小于号啊,这些实际上都是代表了一定的信息,那么状态有哪些呢?咱们这儿可以提前让大家看一下,那状态有以下这些状态啊。一大堆啊,比方说。大家觉得这个进程当前最多的进程状态应该是哪种,你觉得?
10:06
哪个状态最多?啊,那刚才看了一眼嘛,你看这是啥图S。最多了是吧,那S是啥呀?S是可中断的睡眠。这啥意思啊,就是他没事干啊,没事干就睡觉呗,所以咱们系统中有大量的,但是对于我们现在来讲,确实就你人用,你也布置任务,你不给他任务,他是不是就没事干,没事干他不得待着吗,睡觉,但是如果有事干,他是不是可以醒过来。对不对啊,当然现在我们可以看到这里面还有D的状态啊,啊,什么I这种状态,I状态好像也不少,I状态呢,表示的是这是森度S8里面的新特性啊,你说度七上真的没有这个I啊,这个度七。
11:05
你看上面没有,哎。没有,这是新特性啊,它代表着空闲的内核线程。那就是他空闲空闲没事干没没事干好,那我也得给你分配一个县场啊,表示你是空闲。表示你的空闲。那说明我们现在系统很空闲,爱越多越空闲啊,那刚才我们说了这个不是僵尸态吗?啊,上十台。这个就是那个停止停止。那你把它冻住了啊,拿那个,呃,这个这个。冷冻箱。把人给冻姿。但需要人工呢才能把它。放心啊。那这个僵尸态呢,这边有一个小例子,可以让大家来构建出来啊,那怎么构建出来这个僵尸态呢?哎,我们这有一个小例子,大家可以看一下。
12:03
啊,我们开一个大这个进程呢,它的进程编号假设是1809。然后他的父进程是1436。然后我们现在利用这个命令,把1436给他发了个19信号,这个19信号呢,是让它进入到停止态,就相当于拿一个冰箱给它冻住了,他就进为进入一种停止态。那么这个1436是负进程,你想你把父进程给停了,这时候你再杀子进程。杀了紫禁城,理论上紫禁城关闭是不是附近给他回收尸体?对吧?他死了是不是要回收尸体?谁回收?附近程回收,但是附近程无能为力,为什么你把附近城给冻住了?是不是给停了,哎,你把它给拿冰柜给冻住了,它冻不了了,这时候他回收不了尸体,就造成这个紫禁城变成了僵尸太啊死了,但是没人回收尸体啊,附近城已经被冻住了,受不了了,那这时候不要想回收方法就是把附近城杀死。
13:20
或者恢复附近城。刚才不是冻住他了吗?你恢复他,他活过来了,他一看,哎,这不是有一个自己的是吧?紫禁城儿子死了,那是帮他收尸体吧,搜了搜了是不是就没有这个僵尸太的进程了?大家明白了吗?啊,这就是他背后的逻辑啊,那咱们来试试啊,让大家来体会体会啥叫僵尸啊,这个僵尸生产中金不沾你还真见不着,这是我们故意构建你不构建你还真是轻易碰不上啊,碰不上好,让大家瞅一瞅僵尸太的进程啊。好,首先我先看一下当前的进程,当前的进程B是PID是31523152,我们用能够看到它。
14:13
那萨尔。3125是吧,这个31253125好,现在呢,我要开一个紫禁城。好,开了一个紫禁城,开了紫禁城以后,那么在3125的后面就应该多了一个紫禁城。看到。是不是有一个3457,是不是3125的子进程对吧?哎,好,那现在呢,我们把负进程给它冻僵了啊,给它然后用一个命令可以做到Q-19,哎,312啊,这时候呢,它的进程将处于stop状态啊,我们可以看一下。
15:05
过滤一下,大家看目前他的状态是可停,可这个可唤醒的睡眠就停止开啊,就是应该是停止态是吧,就是好,然后现在我们把它变成了。Stop太看stop,看是不是T了,看到没有T,当然那这个3157现在还是没问题的啊,3157是没有问题的。啊,33457。三十五七。啊,大家看3457目前是正常运行啊。好,接下来我们就杀掉这个紫禁城,就是把这个杀了,杀的话呢,用这个。来杀三四。
16:01
五七这个命令可以把他杀了。当然,由于要杀,真杀死了,傅金城得回收,但是傅京城已经没有能力来收了。好,现在我们看到3457还在这儿看他的状态。啊,没反应是吧,是不是3457不接收好,那么我们就再来一个强一点的杀,来个减九,减九呢是强杀。哎,你看我这已经终端卡在这儿了,说明它真的不行了啊,那么看一下状态。好,把刚才那个命令复制一下吧。好,大家看这时候我们看到这是不是Z出现了3457,是不是就僵尸态了啊,僵尸态了,他现在是僵尸派,所以既然僵尸了,你看你这都没反应了啊,就是死了,已经虽然死了,但是他仍然残留着尸体。
17:10
但注意大家看它是不是已经不消耗内存了,这就是消耗内存啊。所以这个尸体。还在啊,但是这个进程已经死了,那怎么回收它呢?你把它的附进程恢复就可以了,或者杀掉附进程,我就用恢复的方法啊,恢复呢用十八十八呢是可以恢复附进程的,是3125。恢复了,一旦恢复,你再来看3457,诶3457是不是没了,为什么没了?有人回头有人他的附近程,他的傅城醒过来了,发现他儿子死了,就收尸体收走了,是不是明白意思了吧?哎,进城里面永远是白发人,哎,送黑发人啊,这个进程里面永远是这样的啊。
18:05
进程里面是父进程收子进程。啊,和我们生活中不太一样啊,生活不太一样,好,这是刚才我们给大家说的这个状态的切换啊。好,那接下来呢,咱们来看一下这个LRU。LRU呢?这是我们后面学习的很多,尤其和缓存相关的技术中经常用到的一种算法。Ru叫。近期或者最近。最少使用算法。啊,我一般翻译成近期最少使用算法。说的就是最近之间,最笨,最近的这段时间之内啊,比方说最近多长时间之内。啊,有哪些资源是使用最少的?
19:02
如果使用最少。我就把它。杀了,释放掉。啊,不要了。啊,大家想想你在生活中可能也有这样的一个这样的一个习惯。比方说现在你在你的书桌上摆了很多工作学习用的一些物品,然后有电脑啊,有笔记本啊,是吧,我说的本是那个纸的本儿啊,啊,还有其他的一些东西。那这些东西都是你常用的。但是过了一段时间,你发现有些东西不常用。比方说买了一些零食。不喜欢吃了。老摆在桌子上碍事,是不是在一段时间之内发现这些东西不用了?不用了,你是不是就应该把它及时处理掉?那处理来,腾出空间来,你放你最常用的东西。
20:00
那这种算法就是LRU算法。啊,LL算法呢,也可以认为是喜新厌旧。啊,因为新的东西刚买过来,你肯定会摆桌上把完是吧。啊,不会说新的东西就直接扔一边吧。你怎么也得用两天,用两天发现不喜欢了,扔一边去了。所以这个L呢,又称为喜新厌旧的算法啊,喜新厌旧算法那逻辑上是怎么工作的呢?是这样的,我这有一块内存空间,这个用格来表示啊,用格来表示这是内存空间,这内存空间假设我们有八个壳,就代表着八个内存空间可放数据。现在这个数据来一个数据,我就放到这个格里去。而且从上往下放。
21:02
第一个数据放在这儿来了就放在这儿了。第二个数据再来的时候,它是个队列,所以他就会把第一个数据往下压。把第二个数据放在这个地方。那就往前走嘛。大家按照这个逻辑的话,我来了八个数据。是不是就把这个东西给撑满了啊,那这是不是就是第一个数据来的,这是最后一个八第八个数据啊。中间就是13578嘛。啊,当然这中间再来第九个,我是不是已经没地儿放了,没地放了怎么办?按照刚才的逻辑,是不是就只能牺牲它了?这是不是就变成第二个,这是不是就是第九个。大家想想,这是不是就是把那个在这段时间之内最少使用的第一个就淘汰了,是不是喜新厌旧啊?你想想那新的留下来,旧的淘汰了,当然那么并不是说所有的旧的都淘汰。
22:13
哎。比方说突然我们现在九在这,二在这中间是3456,结果人家如果再来一个数据,理论上应该把二淘汰。但是人家恰恰访问的就是二。如果就想访问二,你这个是不是不应该淘汰人家,那不应该淘汰,但是你想已经不是第一次访问二了,刚才已经访问过二,这次又访问二呀,我们有理由怀疑,看来二的这个需求量比较大。二既然这个用户访问访问的比较多,那我们是不是就应该把二给他重新考虑,就不要让他尽早被淘汰掉,那我们就把二放在这个位置,把九往下压,听懂了吧,这样就变成了三,那就把二调到最上面去了。
23:08
我们都知道,卖这个图的话,调到最上面被淘汰几率越低。是不是这个道理啊?啊,所以这就是L的算法,明白了吧。只要你访问,比方说我这回又访问了一个三,那就把三又挪到上面去,其他的往下压,就这意思。那这种算法LS算法是我们以后使用缓存。的重要算法啊,背后就是用这种逻辑来实现。好,这是刚才给大家讲的,那接下来我们来看一下进程之间的通讯。进程和进程之间就像两个公司一样。是隔离的,但并不代表着没有机会通讯。还是有机会通讯的,那怎么通讯呢?我们这边列出了一些方法。
24:05
如果两个进程在同一个主机通讯。它的通讯方法可以利用管道。大家记得管道吗?哎,我们用管道符左边一个命令,右边一个命令,你想他俩是不是正好通讯了。他的通讯逻辑是不是就是把左边命令的标准输出传给了管道符,右边的命令作为它的标准输入,你想这两边不就是进程通讯了吗?啊,当然我们这个管道符。是匿名管道,因为没有起名,就是写了个竖线。我们实际上也可以用命名管道,所以命名管道就是你专门起一个文件名,就叫管道文件,然后实现两个文件的通讯,那这种管道文件可以自己来创建,咱们系统中实际上咱们讲过磁盘里面有多少种文件类型啊,七种文件类型,其中就有管道文件啊,看这里面呃,有P开头的P实际上就是管道文件,管道文件又称为先进先出,也就是他是。
25:17
队列形式。先进先出。那么如何创建这种P开头的管道文件呢?非常简单,用make fio命令就可以创建。比方说我创建一个文件叫test。建了一个管道文件,好,大家看这文件是不是就生成了。那注意,这个管道文件能够连接两个程序,所以我们自然有一个文件命令可以往这个文件里写东西,它可以拿另外一个程序从这个文件里读数据啊,比方说我现在往里写数据,我这写一行LINE1。
26:04
写进去了,大家注意到这个管道文件和我们一般文件是不是感觉不一样?嗯。然后现在放进去以后,那一般的文件的话,这个文件里面是不是就会保留赖一这个内容啊。那我们现在看一下这个烂衣有没有。你看它里面。大小是多大?零没东西啊,那没东西能不能读出来呀。真的可以不死?是不是神奇啊,这和我们一般文件不一样嘛,一般文件不可能是零嘛,对不对是吧,零的话就真的没有。哎。而且呢,你这边写,这边可以接着读。看到没?
27:03
是不是就是单攻的行为,就一边写一边读,一边写一边读。当然了,我这都已经读过了,我是否还可以再读一次呢?我能不能再开个终端再读一次呀,读不了。明白吧,读过了就读过了,不会再读第二次了。当然,我再来个第三行,你看这边就没了。是不是被他堵了?被另一个读了,那原来的人就读不着了。看到了吧,这就是。管道文件。好了解一下这个概念啊。好,此外呢,我们还有一种叫socket socket呢是我们说过的套接字。
28:04
好些字。它也是一种文件,不过这个文件呢,它可以实现两个进程的双向传递数据。刚才说的那个管道是单向的啊。啊,可以双向你给我传,我也给你传啊。So文件呢,这个是通过写软件的时候写代码它可以生成的啊,写代码可以生成。So,文件好看一看这个命令。这个命令可以找到咱们系统中的so文件。你看它type类型是S。那看能不能找到。哎,这些全是搜文件,你看它表现为S开头。大S抬头。好,So文件呢,通常来讲就是两个软件在同一台主机上,利用so文件来相互通讯,你给我发,我给你发都行。
29:07
真。好,还有就是咱们在同一个主机上,它可以用文件映射的方式来实现。互相通讯。就是把一个文件的。一段数据给它放到物理内存里面,然后大家都从这同一个内存空间去读取。大家想,既然大家都懂一个物理内存图,那不就可以共享数据了吗啊?还有就是共享内存,共享内存呢,他说的是大家共用一块内存空间。共用一那一块内存空间,那事实上咱们Linux里你会发现有一个共享空间在哪呢?Share。看到没有线的,你看有一块空间是不是就是被多个程序共用的啊C。
30:01
还有信号,信号实现的就是我们在上午讲那个捕捉。当我们给某个进程发信号,是不是他也能够收到这个信号,并且执行这个信号该干的事?对吧。啊,所以不也实现了进程之间的通讯吗?还有就是lock锁,锁是什么意思呢?所大家生活中的锁是干嘛的?锁住了就是不让别人用,你用呗,锁的目标就是为了防止资源被别人使用。避免冲突,我加个锁就我一人用,等我用完了释放锁你才能用啊,就这意思。还有就是。信号量,信号量呢,它是一种计数器,这个计数器呢,说白了就是比方说我们这个座位,咱们教室座位啊,座位假设八十八十多个座位就坐80吧,80个座位最多坐80个人。
31:06
你来一个,那我这个座位就少一个。现在坐满了,再来人就进不来,做不了了,但是如果走一个,是不是就腾出一个位置来,是不是又可以做别的人了,这就是计数器,明白吧,哎,信号量。由此来使控制资源的使用。当然,这是在同一个主题啊,如果两个进程它不在同一个主机,那我们可以通过socket来实现跨网络的主机通讯。而so的呢,它的实现除了有刚才的so文件,还有一种呢,就是IP和端口。IP。通过IP是不是可以找到你这个程序所在的主机?通过端口是不是就可以找到这个主机上的每个程序,因为每个程序都有自己的端口。
32:00
联合起来就叫。从而实现了跨网络通讯。当然so通讯呢,是太过于底层的,真正工作中我们很少基于so,直接用这个so的开发软件。我们更多的会用一些别的技术,比方说RC。RPCMQ等等啊RPC呢叫进程过程调用,进程过程调用说的是什么呢?就是我这有一个程序。这个程序呢,是在这个机器上来运行。啊。我这有一个程序,这个程序在左边右边各有两个主机,这两个主机上面运行了一个各自的程序,比方说这个叫P,这个程序运行到这的时候,突然发现要它有一些功能需要借助于第二个主机。这是第一个主机,这是第二个主机,它上面的程序来运行,所以这时候他就会发一个指令说诶二请你帮我执行一个命令,这时候它就会调用这个指令,然后执行,它执行完了以后呢,把这个结果返还给第一个P1。
33:17
啊,然后接着继续往下执行,那么这时候这段代码就这个执行过程是在第二个记忆上完成的。啊,这就叫远程过程交易啊,远程过程。啊,网上有一个形容这个消这个远程过程调用的一个小例子,啊,说的就是这个你。出去玩了。啊,然后突然想起来家里碗还没洗呢,然后呢,你就打个电话给家里的人,说帮忙把碗洗一下。然后家里人听你的话把碗洗了,这就是远程过程调用啊。
34:01
当然了,一般情况下。我们大部分情况下,应该说你就是那个被调动的人,打电话的人是你的老婆是吧?媳妇,人家在外面逛街呢,突然想,哎呀,家里晚上没洗呢,给你打个电话,你洗了吧,你乖乖的洗了是吧?这么解说的应该不是我啊。啊,当然还有一个叫MQMQ呢,说的是消息队列,消息队列说的是什么呢?有一个服务器专门跑消息队列服务,这个消息队列服务呢,我们后面会接触一些服务啊,比方说卡夫卡呀,Rabbit MQ啊,Active active MQ MQ就是消息队列的简称。
35:09
Query,啊,消息队列,那么这个消息队列呢,他是有些人负责把数据写到这个服务器上。写到这个里面。有些人负责把数据从消息队列里面拿出来啊,所以从而最终是不是就实现了两个主机之间的通变相通讯,就这意思。那么其中提供数据的咱们叫生产者,这叫生产者,那么获取数据的就叫消费者,明白了吧,消费者啊,比方说咱们去那个那个网站,有时候增为了这个这个买一些便宜东西,我们可能会参加秒杀活动,那这个秒杀活动他这个商品可能就100件或者1000个,结果呢,网上一下来了1万个10万个用户。
36:09
那这时候他是怎么来处理这个请求的?那实际上呢,他一下来把把10万个都放进来吗。10万个真机来,服务器崩了,受不了,这时候呢,它实际上它有一个队列,这个队列呢,第一个来的就放在这,第二个来在这,反正我就十个,呃就就比方说我们就100个100个这个呃商品,那我就给他放上200个进来,听懂了吗?200个能进来,其他的人都进不来了,你想就200个你的机器是不是能承受的了,哎,进来以后我们再慢慢处理吗?啊慢慢处理,当然这200个有的人可能放弃了。有人不买了,是不是有可能,对不对,我多放点嘛。然后把这200个陆陆续续的进行处理,完成他的订单,这样的话,这不就秒杀就结束了,所以秒杀说的是理论上啊,这个瞬间高峰这么多量,他怎么处理的,实际上他并不是说真的都处理了。
37:14
啊,其他人呢,可能就给你,尤其比方说过节的时候,过年,过年有钱买火车票,大家都知道,有的时候那个火车票他就会在那提示你等待是吧,那等待干嘛,就是排队呢,现在。他不会都给你放进来,他前面有个队列,有一个队列服务器,你来这么多人,不是说都搭搭到那个订单系统里面啊,如果真的来这么多人,他交易他受不了的,他给你排队放在队列服务器上,你就排队等等着就行了,但是在等待过程中,有人可能就着急的就放弃了。是吧,当然也有人,有人等着,那就等着等着呗,轮着你啥时候算上,把这消息队列排队。啊,这就是这样的一些进程间通讯的背后的逻辑啊,当然这些概念呢,大家了解一下知道就可以了。
38:02
啊,这是。这个消息队列的处理。哎。这个这个画图的这个东西怎么又看不见了,去哪了。看不见了,我又没法把它关了。就没法点了,翻页也不让我翻了。这这个软件升级的很糟糕,这腾讯课堂,你看我点一下那个退出,哎,重新重新分享一下吧。哎,出来了没?在这儿往这儿这儿着呢,这藏,但是我好像点不了,哎,可以了,在这藏着呢。
39:05
这个不好用别的东西。好了,接下来我们来说一下这个进程的优先级啊,进程的优先级进程呢,它执行是可以设置优先级的,当然我们一说优先级肯定是那优先级高的就优先处理你呗,啊就是我们生活中有的时候排队,大家都在那排队,银行取钱,结果有人就插队,人家优先级高啊,人家是VIP啊是吧VIP。啊插队,那么咱们在进程管理的时候,也存在这种优先级的功能,那么这个优先级呢,系统分成了两大类优先级一类呢,啊,我们叫静态优先级。还有一种呢,叫。动态优先级。那么这个优先级可以分成。总共是零到139个优先级,它分成了零到139个优先级,总共这么多优先级。
40:09
这个。从这到这其中零到99,这个就是静态优先级。静态优先级。啊,应该说是这个静态和实时优先级啊两种啊,实时优先级说的是零到99,还有个叫静态优先级说的是呃,99往后也就一百一百到199之间,这个是静态油机啊,这个是静态油机,这个呢是那个所谓的实时油机,分成两两类是十元,总共加起来139个,决列139个优先级。这个优先级呢,零优先级最高,139优先级最低,数字越小,优先级越高,这个意思。当然预算越高,那理论上就是优先系统会处理它。
41:01
啊,这叫实时优先级,其中这一部分,那么优先级呢,是这样的,在不同的命令里面,它的这个数字表示方法是不一样的。有些命令里面,你看到的优先级数字并不是用零到139,比方说我们后面会学一个命令叫nice nice这个命令里面它可以设优先级,但是他设的优先级的数字不是零到139之间,他设的是负20到正19,而负20到正19它和我们刚才讲的这个优先级之间是有对应关系的,什么关系呢?就是负20对应这个100。正19对应这个139是这个意思。那么我们nice优先级这个命令它。平常我们运行的命令默认都是在这个级别,就120。也就是耐资源集里面的零。你可以把那原极设为最低,最小负20,最大正19。
42:04
还有一些命令里面也会看到一些优先级的数字,比如说我们后面学top命令,Top命令呢,它的范围是零到39之间。那至于其他的,它就会显示RTRT,就是实时问级的意思,因为我们零到99之间是实时级啊。那么在这个区域内的优先级它是显示不出来的。它只能显示RT。那么优先级它的这个。优先级决定了CPU会优先处理谁,那理论上如果我的电脑上有1000个进程,那么1000个进程接下来时间片。要执行下一个进程了,那么运行的是这1000个进程的哪一个呢?是不是我们就要比较一下这1000个进程谁的级高对吧?但是我们按照上午讲的那个冒泡法还记得吗?那冒泡法我要把这1000个进程比出来一个最高的,这中间这个比较是不是会比较慢呀?大家想想1000个进程比,那万一我要2000个进程也这么比。
43:19
我们发现进程越多比较是不是就越来越慢?效率就会越来越低。那为了提高进程的比较效率的优先级的效率,我们可以这么来设计这样的一种比较算法,怎么算呢?这么来算,总共我们刚才说了,领导139,不是140个队列嘛,就140个优先级嘛,那我就设计140个队列。我就设计140个队列。第一个队列。假设我们就放啊。零号对零号优先级的第二个队列,我就放一优先级的,总共我们就140个队列啊,最下面这个是140。
44:09
139。总共140度队列,如果我们这里面都有进程,假设这一个P进P1进程,这有个P2进程,这有个P3进程。现在时间片到了,那么理论上显而易见,预先高的是不是应该先运行,是不是应该先运行P1,对吧,但是P1运行的时候,它有可能时间会比较久,在一个时间片内它无法完成,那无法完成P1结束不了,但是我也不能老是运行P1,所以这时候我们就怎么样呢,把它放到另外一个队列里。这个队列也是零号进程,零号优先级的,把它放到这里面来了,这就没了,这没了,当然这这后面还有可能还有零号进,零号应该级的其他进程啊,比方说是四号,那么这就没了,没了没了,它挪到这里面了,挪到这里面这是什么呢?这叫啊就绪队列,这叫就绪队列啊就绪队列,这个就绪队列或者叫过期队列,这叫过期队列,而上面这个呢,叫运行队列。
45:19
这是预警队列。一旦有一个进程没执行完,但时间片到了,他必须要释放CPU,它就会挪到这个过期队列里面,而过期队列里面也有01234139,总共139个队列。啊,140个队列,好,当然P4运行了一下,发现时间到了,运行完了,完了那就没了,没了以后呢,现在这个零号队列里面已经没有进程了,那么没有进程,那这时候这里面没东西了,没东西了它就会把下面那个零号的。过期队列变成运行队列。
46:04
而上面这个自然就变成了过期队列,就这个列表就真成过期队列,然后接下来是不是就开始运行P1了,理解了吧,这是这个逻辑。由,因为我们总共运行队列只有140个,所以我们是不是只需要比140个队列就行了,谁的先急就行。那么用这种逻辑,大家想我1000个进程和2000个进程,它的比较效率一样不一样。1000个进程都放在这,假设零到三一百三十九个队列里,2000个进程也放在这里面。接下来时间到了,我要选出其中要运行其中的一个进程,你觉得他们花的时间一样,不一样。啊,1000个进程,2000个进程一样不一样。实际上一样啊,因为我管你1000还是2000,反正都比的是什么,还是这一百三一百四十个队列嘛,是不是因为你不是败在第一个,你后面的我是不管你的,所以这样的话呢,带来的好处是不是就是进程再多,我们比较的效率是固定的,花的时间是一样的。
47:16
那么我们把时间和规模之间的关系就称为所谓的时间复杂度。当然有的时候可能会以空间来说。那这个复杂度是做开发里面经常喜欢讨论的一个概念。他说的就是我这儿有一个时间轴。这个时间轴。还有一个纵向方向的轴,这个轴呢,就是啊,他画的这样的一个啊,这个规模,规模和时间之间的对应关系啊,比方说我们这个横轴是规模,就是你认为就是数据量,数据量啊规模。
48:04
而上面这个是时间啊时间。一般的情况下就是数据量越大,那么我要处理花的时间是不是就越长?啊,当然我们在处理的时候,它有多种所谓的时间复杂度的算法,他们的效率是不一样的,最理想的算法就是管你的规模有多大,反正我花的时间都不变,听了吧,这是一个恒定值。这是这种复杂度,咱们称为O复杂度O1。还有第二种呢,叫log n log n呢,就是随着规模变大,它会逐渐的花的时间越来越长,但是呢,它的增长没那么明显啊,没那么明显,比方说哎,慢慢长,慢慢长,慢慢长。但是慢慢长,是不是终究有一时间会超过他啊,对吧,可能会有个交集就把它超了是超了。
49:09
啊,还有一个是ononon,那就是线性,线性啥意思呢?这是直直接一根线啊一根线这叫线性,还有一个呢,叫抛物线啊,就那个N的二次方,N的二次方,二次方它是不是长得特别快,相对来讲。是不是长得比较快,还有指数性增长,指数增长涨得更更快了,都上去了,大家想显而易见。如果按照刚才我画图描述的,我们数据量越大。它消耗的资源越多,那么理论上O的算法是最优秀的是吧,下面这个是不是就越糟糕啊糟糕,那当然这个地方呢。
50:00
怎么能够?用更好的时间复杂度,这个就和算法有关。不同的算法,它的时间复杂度,空间复杂度是不一样的啊。所以将来呢,你们尤其将来可能会将来学开发,学点Python之类的,那你们就要,如果你要把脚本程序要写的好一些,你就得背后考虑它的复杂度。啊,不同的算法,它的复杂度是不一样的,效率是不一样的。好,这个呢,作为一个了解知识啊。好,接下来我们来看一下进程的分类,进程早期的操系统,它是叫协作式多任务。现在传统都是叫抢占式做任务。协作式做任务。比方说早期的Windows。那么一个任务,一个进程,得到了CPU。除非他主动放弃CPU,否则别人是无法夺取他的CPU控制权的。
51:09
那这时候就可能会带来一个问题,就是万一这个程序死了。他是不是就有可能会霸占着CPU不释放?别的人啥也干不了。所以早期的时候,Windows经常容易死机。所以养成一个习惯,按三个键重启,Ctrl delete是吧?后期应该感觉是从什么时候开始啊。呃,从叉p windows2000之后开始,WINDOW2000之后就慢慢就稳定多了。啊,以前9598的时候,动不动就重启,按三个键就重启啊。那就是因为后期的操系统就变成了抢占式多任务,抢占式多任务呢,就是CPU的分配权不是程序说了算,是由操系统说了算,操系统会轮流的将不同的进程分配对应的时间片。
52:11
时间偏到,我立即回收,不让你运行了,停下来,我去运行别的进程。那这样的话呢,不至于说造成一个进程霸占CPU不释放。这样从而就造成各个进程都能得到运行的时间。达到啊类似的什么雨露均沾的效果是吧。好,那么咱们的进程在Linux里运行的时候有两种类型,一种呢叫守护进程,还有一种呢叫前台的进程。守护进程说的就是它不占用终端资源,不占用终端资源那意味着你的终端关了,和我没关系。大家看到当前系统中是不是有好多进程,那么这些进程它和终端有关系吗?你把这个终端关了,是不是它该运行运行啊,你看从哪能看出来它和终端有关无关呢?在这这有一个TT看到没TT这个地方问号的就是和终端无关。
53:18
啊。就是用户你登录不登录你开登录不登录,你打开终端不打开和他没关系啊,计算机启动它就运行起来了,这就叫守护进程,当然我们现在用的进程,比方说我这开启了一个P,这个P命令它是依赖于这个终端的。啊,所以如果这个P命令对应的终端关了,比方说PINPIN在这大家看它是依赖于PS1这个终端的,如果把PS1这个终端的窗口吧一插,它运行吗?是不是它就不运行了,因为它是依附于这个终端的,你看我把这个窗口一关,你再看这里面是不是就没有P了,对吧?所以它是依附于终端的。
54:10
好,两者之间事实上将来是可以通过一些方法来进行转换的。那么进程呢,还有就是它的和资源使用的角度来讲划分分类,一种呢叫CPU密集型,还有一种呢叫IO密集型,这两种呢,它对计算机的优化方式是不一样的。CPU密集型说的就是需要大量的计算啊,比方说我们要压缩。啊,我们要去。进行加密,那这些呢,它需要消耗大量的CPU做运算,这个过程中我们不需要人机交互啊,因为CPU密集型,你手敲你也跟不上,说实在的都是计算机自动处理的,批量处理。
55:01
而IO密集型说的就是和磁盘IO或者网络IO相关啊。大家想。我要去打开一个磁盘文件,或者从网上去访问一个页面,这时候是不是要人机交互,那么人机交互,那这是IO密集型,IO密集型大家想过没有?IO密集型它对于人机交互来讲,人的感受是很重要的,你不能太慢吧。你不能说让我打开一个网页等个十十分钟,十秒钟十秒钟我都慢,是不是我等一会儿我就。等太长我就放弃了啊,我打开一个磁盘文件,如果这个文件半天打不开,是不是我就不打开了。对不对,它对时间是有要求的,而加密和压缩,加密压缩,比方说我把一个大文件压缩压缩压缩压呗,你慢慢等着呗,你是不是可以等待啊啊,你不等也没办法啊,它就中间要压缩的,要花时间的,所以CPU移型它通常来讲是非交互的,对时间的要求没那么高。
56:11
而IO密集型需要交互,需要交互的话呢,就需要及时响应键盘鼠标操作,因为你要手工敲东西。啊,如果CPU不去处理键盘的行为,不去响应鼠标的操作,那用户感觉是不是就卡在这死了,对吧,你动一下鼠标没反应都不行,所以他要及时响应啊,及时响应。那么在Linux中关于IO调度它有多种算法啊,这个算法呢,我在这儿就不详细展开说了,它这有no,有CFQ,有带line,带line就是死线啊,那当然这个我们这种L,比方说我们在磁盘上要读文件。那读文件的时候,我们到底怎么个这个执行,有多个程序都要从磁盘上读文件,那到底先执行谁,后执行谁,它这个地方有一个调度算法啊,那调度算法呢,比方说这个no p OPP呢,就是什么也不干,什么也不干,那就是先来的先给你,后来的后给你嘛,就排队呗,大家均匀的嘛,这是不是,这对于CPU来讲,实际上那内核他也不用什么考虑算法了,是不是就排队就行了,对吧,这个东西基本上很简单。
57:28
而FCFQCFQ呢,叫完全公平队列啊,他说的就是它会并不按照所谓的呃,你发过来的请求的次序来进行响应,它是它会把IO访问的地址来进行排序,比方说你访问磁盘的啊,某一个盘片啊,那么如果有多个进程恰恰访问的地方是挨着的,它就会尽可能把你们在一起执行,因为你放在一起统一执行效率高,等你把你执行完了以后,我再去找一个和这个磁盘空间离得比较远的地方,我再挪动磁盘对应的这个句磁头,哎,再把它寻到,然后找找。
58:14
啊,但是如果大家挨的近的话,我就一块做了一块访问了,就是。这是CFCFQ。还有其他的,比方说deadline之类的,这里面都有介绍,那么默认情况下,咱们磁盘用的是哪个调度算法?这个和版本有关,比方Ubuntu用的是CFQ啊,SS8用的是deadline deadline这个可以看一下。看到没有就不同的。主机它用的算法是不一样的啊。好,这个了解一下就行了啊,那这个偏底层偏底层。这个将来你可以根据自己的生产的需要来修改这个啊值,修改这个值,你觉得哪个好,你可以用用哪个,比方说将来生产中。
59:09
你的网络中希望能够进行啊,这个网络的书箱传输数据,传输数据的话呢,你就希望他们按排队先来,我就先响应,后来就会响应,这时候你就可以采用这种算法就行了,O op啊,所以这个呢,你看你的业务,你的业务适合哪种算法,你可以调这个参数。好,接下来呢,咱们来看一下进程管理的工具集,大家看这就是。我们可能接触到的各种命令,这边有一个网站啊,这个网站这个图就是这个网站发布的,大家可以看一下。
60:11
啊,大家看这个是一个英文网站啊,叫Linux性能。啊,那这个网站里面就提供了。啊,做好的一些工具界面,它这个网站打开比较慢,这国外的一个网站。怎么都这样了?显示不出来了。你们那儿能打开吗?这儿呢?看吧,这不有些图片吗?啊,你们下来有时间可以打开看一看啊。啊,这个图就是从这个网站拿下来的,那这里面呢,就把我们很多性能相关的工具做了一个整合啊,当然命令太多了,我们不可能都给他介绍啊,我们挑一些内容来给大家说。
61:11
以下这就是我们接下来要给大家介绍的命令了啊,要这么做这么做。那有些命令咱们实际上前面都用过了,比方说PPS。啊,这命令我们有的都已经给大家介绍过了。那接下来我们把这些命令的具体用法来给大家详细说一说,尤其这个呢,我们用的非常多,和P这些都是用的比较多的。把回答换成一个单多糖。所以这章呢,我们学的命令不少啊。
62:07
爱好健康全面的工作。那接下来我们先说PP呢,这个命令它可以显示出技能数,这个我们选项刚才用过P,那事实上它可以加一些选项,比方说可以显示出用户的。进程身份的切换可以加上U,我们还可以直接只显示某一个进程,比方说我们后面跟一个数字,只是显示这个进程本身啊,比方说我们这有这样的一个进程,现在我们看到这有一个3111,那我这就可以只显示3111。看懂了吗?只显示它,而不是整个技能数。
63:00
而且呢,我们还能看到他的身份的切换啊,身份的切换,那现在我看一下当前的进程的编号是多少,是3499就在这。啊就在这,那如果我现在切换一下身份,比方说切换成王。那切完以后呢,你再看一下PS3111。啊,在这大家看是不是有一个Su切换身份了,但是这看不到切换成谁了,所以我们这加个U。加个U的话,你能看到A。在这是不是已经变成王了,之前都是一个人,现在切成王了,当然我们如果再切回来他也能看到,比方说我们再切黄中柱切换来,切换来以后呢,你在这你能再加个U,你能看到,诶是不是这又切换身份了。是吧,就换身份了啊,就可以看的很清楚好,另外呢,还有一些TT是不显示线程。
64:07
啊,只显示就是不显示线程,默认是显示线程啊,你把这个T1加,那就不显示了。这时候就光是进程没有线程啊。啊,这个呢,是可以显示高度的指定进程和。啊,指定进程和前辈进程,前辈进程。应该这个是指定进程和前辈进程,就是他的上级进程啊,上级进程。比方说我们就拿这个吧。这个是3670啊,3670好,我们这儿加一个大H3670好,那3670。
65:10
在哪儿呢?大家看这个颜色是不是变了。它是有点加重的颜色,是不是就是3670往后的就是往上机进程。是不是就是显示了它的负进程高亮显示啊,所以这个应该是高亮,别写错了高度。高亮。显示指定的进程及负前辈进程。好,这个就是我们刚才举的例子啊。好多量显示,前辈进。
66:08
好。啊,命令呢,这个用的非常多。命令,它的全称叫process state,就是进程状态,它会瞬间把当前的进程信息在评论打印,显示的信息可以人为去指定,挑一些字段。命令呢?它的用法很灵活,可以支持三种选项,三种选项第一种选项叫unix风格的选项。那它的语法呢,就是一个字母前面加个横线,还有一种呢,是编风格,是一个字母,然后还有一个是金庸风格,是两个横线加个单词。所以呢,我们将来要执行杠A和A的含义是不一样的,因为它是不同风格,所以不统一啊,比方说A和杠A,你看它的效果是不是不一样啊,所以不要认为杠A和A是在一起啊,不一样。
67:17
好,那这里面呢,我们有一些选项,默认情况下显示的进程非常少,大家看就两个。为什么就两个呢?因为它只是显示了当前这个终端打开的进程,比方说我再开一个啊,再开一个,这时候你用看就能看到了,但是我在别的终端里面执行的命令它是看不到的啊,比方说在这个命令里面,在这个中窗口里面,我就执行了一个P啊,你看在这儿根本就不显示。显示。当然,我更关心不仅自己执行的进程有谁,我还关心别人正在执行的进程有谁。那怎么做呢,有P。
68:02
X。A。A呢,表示的是别的终端上执行的进程,大家看这是不是有别的终端的终端编号,这是不是就能看到刚才的PIN了,但是我们都知道是不是有些进程和终端无关,对吧?有些进程它不是终端依赖的,就开机自动就启动了,不是人开启起来的,这就和终端无关,那终端无关那怎么弄呢?一。XX呢,就是它会显示那些和终端无关的进程,大家看这时候呢,我们现在问号出来的是不是也出来了,问号就是和终端无关。还有一个呢叫UU什么意思呢?U是会显示这个进程是以谁的身份执行的,那现在我们看到它只显示了四列,这四列是进程间编号,在哪个终端里面,它的状态,它的运行时间啊,这个是它的命令本身。
69:05
那我可以再加个U,就可以看出来到底是以谁的身份执行的,哎,加个U,加个U,我们看到它显示的东西更全了,它不仅有运行的身份,还增加了CPU内存的使用情况啊,这个注意这个表示什么,这是百分比啊,就内存用了多少,CPU用了多少百分之多少,这个就是我们说的那个虚拟内存,而这个呢,是真正你物理内存用的空间。虚拟内存说的就是你向仓总申请,说我将来可能会用到一个G,参与总说行,那我就给你分一个G,这就是虚拟内存,而这个叫真正的内存,这个真正内存就是过了一段,哎,我发现我需要,刚才不是向你申请一个G吗?你也答应了,现在我马上就需要500兆,你给我500兆,这500兆马上就要用,那么曹旭总给他分配了500兆,那么这就是真正使用的内存空间,明白白吧,所以呢,大家明白意思了,这个叫你老板承诺给你的工资和你实际到手的工资知道吗?知道区别了吧?嗯,等你上班以后是吧,哎,觉得你这个水平不错,就想让你去,就给你承诺了,说你到我们公司吧,是吧,这个年底咱们有分红啊,年底有奖金啊,年底要上市了,还有股票呢,你赶紧来吧。
70:35
哎,你就看到了这个虚拟内存,那么到了年底的时候,公司黄了倒闭了是吧,这就是实际的东西。那这个呢,就是所谓的终端,这是它的状态,就是我说过了,这个是什么时候启动的,大家看。08:46什么意思,那这个机器启动的时候是08:46启动。
71:05
08:46启动啊,哎呀,这个我连一下我那个机器啊。我这个机器,我那个机器是啥时候启动的。SSH。呃,你入的身份连呃端口号是。9527是吧,9527。密码密码啥来着?密码。这是啥意思?这是这是这打印什么东西,这是这是把什么东西给显示出来了,这把我密码泄露了,这还了得,哎呀,那我这设一个啥吧,啊,算了,那我就不看了啊,就泄露密码了,这还了得,攻击一下啊。
72:26
啊,不过呢,这个可以看啊,这个机刚这个是刚开的啊,这个是刚开没多久,这个你看你看这是下午开的是吧,下午开的。他他这个是不能设置吗?这个是啊,在哪可以设呀,画中画是吧?呃,画中画啊,这个显示按键增增强啊,这就行了。
73:06
啊对,这样就行了啊,可以了,那我们就可以放心的连一下了,问题是我的密码啥呀,这是我真的是不太想起来。是这个,哎,真是这个看看啊,看我这个系统开机了多长时间了,这写着呢看。多少住22,那你应该知道了,我这个程序已经运行的时候是6月22号吧,6月22号,6月20号俩月了吧,俩月了啊,用这个病例也可以看啊,这个up time up time就可以看,你看跑了六六十五天了,已经65天了啊啊65天,那这个是什么呢?这个是累积起来的时间片分配,就是刚才这个CPU到了时间片了,我分配你一个时间片,哎,下回又分配你个时间片,累积起来的时间片啊,总的时间啊,那就是它的这个概念啊好,那现在咱们这个呢,ASU这个显示的结果就看的非常清楚了,实际上还有一个常用的组合,也有很多喜欢用的同学,就是EF。
74:32
EF也有很多人喜欢用,不过呢,EF这个命令它的显示的内容比AUX要少,它显示了哪些内容,我们来看,这是所有用户,这个是进程的编号,它是上级进程,这个应该是他使用的那个CPU利用率啊,这个CPU利用率比较低啊,所以呢,这个地方就都是零,都是零啊,当然我也可以让他忙一些,比方说忙一点。
75:01
让他忙一点,扔到垃圾箱里,这时候他就很忙,那这时候一忙,你看一下他这个,呃,看一下他的值。看90这里面是不是C利用率,利用率90啊。这就可以看到这个是CPU利用率,这是它的开启的时间,这是它这个终端,这是它累积起来的时间片啊,这个呢是它的命令本身,所以它显示的内容相对不多,为什么最关键的有一些东西没显示出来,例如占用内存多大没有啊。占用的CPU的详细信息只是个粗略的,而AX呢显示的更加详细,AUX呢,这里面它能够显示出CPU的利用率的百分比,而且精确到小位数,个位数啊,就是小于小数点后面一位,然后这还有内存的使用情况,这个是AX它的功能比较好的地方。当然了,那这个CPU利用率粗略看也无所谓,AUX和EF都有人用,这就是不同的习惯了啊,当然他们显示的内容是一样的,你看它有几个进程,这个是。
76:17
都是153个对不对,哎,都是全的啊,都是全的。当然这个命令呢,用法非常丰富啊,这里面有很多选项,刚才我们用了这几个,事实上你还可以做一些排序,看排序,这个排序还是很有意义的啊,排序的话呢,比方说我们可以用啊杠杠杠T来进行排序啊。排序的话呢,我们可以。加一个这样的东西K排序。排序的时候,你需要指定对谁排序。比方说对CPU66排序,那你就写百分号CPU,如果你要对内存排序,那就是百分号。
77:04
Memory内存加个横线表示逆序排序的意思啊,逆序排序,比方说这样啊K,然后我们百分号memory。啊,你看看他是不是对内存做了一个正序排序,大家这是内存的最低使用率,再往下大家看内存是不是越来越高,越来越高,越越高,最高的是3.9。看到了吧。是不是对内存就排序了。啊,当然你也可以看CPU排序CU,那CPU排序的话呢,排在最下面的,你看这个命令是不是99.2了,有CPU率。对吧?哎,那事实上呢,啊,我们还可以支持逆序排序,加个横线,那就是倒过来排了。啊,倒过来排,那显而易见利用率最高的排在上面去了。
78:00
下面看懂了吧。那这就是按照CPU利用率正序倒序排序。刚才这个这个呢是杠O-O是挑了一些字段来显示啊,我刚才没有挑,我就是用默认的。默认。那这个杠O呢,表示的是可以指定字段,因为有的时候我们并不希望所有字段都看,我们可以挑一些字段,那这时候呢,就用oo呢,后面跟上字段名,你想显示哪个就挑就行了,比方说我关注的并不是所有内容,我只关注。进程编号、CPU利用率。还有就是内存使用率。还有命令本身。还有就是用户你看是不是我就挑了一些字段列出来。
79:05
那这些字段列出来。啊。那列出来以后,这里面需要注意,这有一个用户的问题啊,这个用户呢,是这样的用户呢,它这它又分成啊这个ru的。这个r user和user。和还有一个叫e user的,这两个是同一个东西吗?诶那我们就来看一下,比方说我们这以王的身份登录去执行这样的命令,然后你再来看一下他们能不能对上号,大家看有一条命令有问题了。看看到这了吗?这个对不上号了啊,U和R不都不一样,那RU和U是啥区别,这是。
80:03
实际上,Ru表示是真正的用户的意思。就是真正运行程序的人。而UR表示的是当前生效的人啊,为什么叫生效的和真正用其他不是同一个人吗?真的是这样,大家知道王账号执行帕P的时候,虽然是他运行的,但是它生效的是以王的身份生效的吗?大家记得我们曾经给大家说过,Pass WD上面它是有特殊属性的,是不是那个suidd。也就是说当用户去执行判断B是不是会变成root身份,所以这就是他最终生效的用户是root,但是身份执行的人是以王,所以这个这个叫R说的就是王,而生效的是以入的身份生效,明白了吗?这是不一样啊,不一样了。
81:02
啊,另外呢,我们这边还可以看父子关系,有一个FF是可以看父子关系的啊,我们也不用非得去用PT,用它也可以看父子关系,你看没,是不是父子关系也看得很清楚啊,这是父进程子进程,子子进程吗?对不对,F也能看。好,当然下面这些命令呢,你先来自己了解一下,这还有一些例子,大家有时间可以看一下。这是之前讲过的。就是找到未知进程的程序路径,假如说你知道它的进程编号,但是不知道他程序路径,这么找就行了。啊,另外呢,我们还可以看这个优先级和CPU的对应关系啊,这边有一个叫P。P呢是优先级,还有PSR是CPUCPU是这样的啊,每个进程运行的过程中,它。
82:03
我的电脑上有多个CPU,那么我们这个CPU有多个的话,到底我这个进程是运行在哪个CPU上?是不是系统自动分配的?假如我有俩CPU,我这个程序运行的时候,到底运行在第一个CPU还是运行在第二个CPU啊。那么在运行起来以后,它会不会变化呀,比方说刚开始在零号CP上运行,待会他有没有可能跑到一号CPU上。有没有可能?必须有啊,因为我们说过CPU分配时间片,那不是过一会就要重新调度了,所以下次一调度保不齐给你调到哪去了,那这个东西我们怎么去看呢?比方说我们就以P命令为说啊P命令。那这个P命令我们看一下当前它目前是跑在哪个CPU上,那么要想看这个东西,我们就可以用p axo,然后看进程的命令和它的CPU叫PSR。
83:11
那我们去找一下咱们刚才说的那个P。啊,目前来讲它是零号,CPU一直是零号,好像没有变化,没有变化。好,那现在我们不行了,怎么让它变一变呢?好,我们再来一个命令,让他忙一些。好,再来看。First。还是你。还是零,诶,变了,终于碰到了,看到没,是不是这个P现在跑到一号CPU去了啊,零号不在了,这是不是就换了CPU了?
84:05
但是这个换CPU大家觉得。好还是不好啊,为什么不好啊?缺点在哪啊?在第一天我们讲计算机基础,就是张老师给大家讲的是吧?那讲的时候讲过CPU它是有那个缓存的。缓存,它CPU有缓存,有一级缓存,二级缓存,三级缓存,还记得吗?其中一级缓存二级缓存是和CPU密切相关的,比方说我这有一号CPU,有零号CPU,零号CPU有自己的一级缓存,二级缓存。一号CPU也有自己的一级缓存、二级缓存、三级缓存,是所有CPU共享的。现在你当前的这个进程运行在零号CPU上,那么它的数据是不是就缓存在了零号CPU的一级缓存,二级缓存,那这个缓存我们用命令LSCPU是可以看的清清楚楚的,大家看这是不是有这个CPU缓存。
85:06
L1呢,就是一层L的缓存,又分成数据缓存和指令缓存。所以如果你运行在零号CPU上,那么零号CPU的一级缓存和二级缓存是可以使用的,结果呢?结果你跑到一调度,跑到第二个CPU上去了,而第二个CPU你需要的数据还在零号CPU的缓存中居中,那是不是一号CPU没有这个缓存,那你是不是被迫就只能跑到内存里拿数据了?这样的话效率就又降低了。所以如果能够保证一颗CPU上面这个一个进程尽可能只运行在某一颗CPU上,是不是就可以提高效率啊,所以这就是CPU绑定。我可以把一个进程绑在某一个CPU上,这样的话效率可以提高,减少CPU切换造成缓存失效啊,这是一个提高效率的手段。
86:01
咱们后面讲。有些服务会这么干,比方说NGS服务,NGS服务呢,我们是可以在NGS配置文件里面,把CPU和进程之间给他绑定在一起,绑在一起不让他写这个,我们后面到时候再说啊,后面再说。啊。啊,进程和实际上用这个命令也可以进绑,叫task set,这个命令是可以来实现CPU和进程的绑定的。把这个表绑定关系呢,大家有时间可以自己看一下,我在这就不展开说了,这个你记录有个命令可以做,这个可以做。不过一般来讲,我们都是在配置文件里写,因为这是命令,是临时性的,临时性。好,这是给大家讲的这两个工具啊和还有大量的工具,我们休息会待会再说啊,呃,15回来吧,15。
我来说两句