进程与线程等概念的形象类比解释

进程(process)和线程(thread)是操作系统的基本概念。
 

1.单核计算机(单核计算机的CPU数量为1)就像一座工厂。(计算机-->工厂)

2.计算机的CPU就像工厂内某个造价很高且数量为1工具A。(CPU-->数量为1的工具A)

3.工厂内有很多车间,它们都需要工具A才能运转工作,即每次只能把工具A供给一个车间使用,一个车间开工的时候,其他车间都停工。进程就好比工厂的车间,任一时刻,工具A总是被一个车间占有,即CPU总是被一个进程获取(或者说CPU只能运行一个进程),则该进程处于运行状态,其他进程处于非运行状态。(进程-->车间)

4.一个车间里,可以有很多工人,他们轮流使用工具A同时利用车间内的各种原料协同完成本车间的任务。线程就好比车间里的工人,即一个进程可以包含多个线程;而只有获取工具A的工人才能进行工作,即任意时刻只有一个线程(获得CPU)运行;工人们共享车间里的各种资源,这代表各线程共享进程的内存空间。(线程-->车间内的工人)

5.既然工具A这么抢手,各车间以及内部的工人都希望自己能获取工具A来工作,所以为了更好更合理的使用工具A,工厂里面有一个专门负责工具A使用的管理者,他来决定哪个车间、哪个工人在什么时候使用工具A以及使用多久,即管理工具A的使用。这个工具A的管理者就是操作系统内核(调度器),他根据调度规则决定工具A具体怎么分配使用,也就是大家的工作情况由它决定,即系统内核(调度器)决定哪个进程、线程在运行。(操作系统内核(调度器)-->工具A的管理者)

6.有些原料在被某个工人用工具A进行加工且进行到某一重要操作的时候,此时不允许其他工人用工具A接着对该原料进行加工,所以该工人在进行重要操作前先对工具A的管理者说明一下,必须等我完成我的重要操作并通知你后你才能根据调度规则把工具A传递给下一个人,以此来保证该工人进行重要操作过程中工具A不会被调度到其他人那里。这个原料就被称为临界资源,如某一块共享内存(变量),串口等,该工人进行重要操作前对工具A管理者的说明就是进入临界区,该工人完成重要操作后对工具A管理者的通知就是退出临界区

7.工人通过给工具A管理者说明的方法可以使工具A在自己进行重要操作的时候不会被调度出去,但是这样有时会导致工具A长时间在某个工人手里,其他工人只能干等着啥也做不成,影响到了生产效率,所以,工人们要尽量压缩这种独占工具A操作时间,不过还有另外一种方法。

工人在获取A对某一原料进行重要操作之前先对该原料进行加锁,然后再进行自己的重要加工操作,这样即使工具A被调度给了其他工人,因为原料被锁住了其他工人也无法对该原料进行操作,必须等加锁的工人获得工具A完成重要操作并解锁后才能对原料进行操作。以上便是互斥锁模型,某个工人对某一资源上互斥锁,可以理解为该工人把唯一的一把钥匙拿走了,后面的工人即使获得工具A,但是由于没有钥匙解锁,也无法对原料进行操作,需要等持有钥匙的工人归还钥匙。

8.还有一种原料,最多可以允许几个人分时操作,这时可以采用一把锁多个钥匙的解决方法。工人对这种原料操作前也是先去拿钥匙,拿到钥匙便能够对原料进行操作,没有钥匙之后便无法对原料进行操作,需等待获取钥匙的工人完成操作后归还钥匙。以上便是信号量模型,信号量有个计数上限,表示钥匙的个数,当数量为零时表示不可用。同时可以看出,互斥锁是信号量计数上限为1时的情形。但是,因为互斥锁较为简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。

(1)以多进程形式,允许多个任务同时运行;

(2)以多线程形式,允许单个任务分成不同的部分运行;

(3)提供协调机制,防止共享资源的访问使用产生冲突。


操作系统的概念还有很多,如死锁,优先级反转、继承机制,自旋锁,同步等。

猜你喜欢

转载自blog.csdn.net/u012308586/article/details/90169648
今日推荐