这部分有参考网上的记忆方法,记下来用以复习;
一。进程(process)和线程(thread)
进程(process)和线程(thread)是操作系统中的基本概念,但是比较抽象,不容易记忆和理解,接下来就一类比的的方式来阐述这些概念,以便于简单易懂。
计算机的核心是CPU,它主要工作是计算,时刻在运行,就像一座工厂。
在工厂中假设只有一个车间,车间就好比CPU,故单个CPU一次只能执行一个任务。
进程就好比工厂的车间,它代表CPU所能处理的单个任务。任意时刻,CPU总能运行一个进程,其他进程处于非运行的状态。
一个车间里,可以有很多工人。他们协作完成一个任务。工人就如同线程,一个进程可以包括多个线程
二。内存共享问题的解决
车间的空间是工人们共享的,比如许多房间是每个工人多可以出入的。这就象征一个进程内存空间是可以共享的,每个线程多可以使用这些内存。
可是房间大小是不同的,有些房间只能最多容纳一个人,比如厕所。里面的人出来才能让其他人进去。这就表明一个线程使用一些共享内存时,其他线程必须等它结束,才能使用这一块内存。
一个防止他人进入的简单方法是在门上加一把锁。先到的人锁上门,后到的人看到上锁,就在门口排队,等锁打开后再进去。这叫“互斥锁(Mutnal exclusion,缩写Mutex)”,防止多线程同时读写同一块区域。
还有一些房间,可以同时容纳n个人,比如厨房。也就是说,如果人数大于n,多出来的人只能在外面等着。这叫好比一些特殊区,只能提供给固定数量的线程使用。
这时解决方法是在门口挂n把钥匙,进去的人就取走一把钥匙,出来的时候再把钥匙挂回原处。厚道的人发现钥匙架空了,就知道必须在门口排队,这种做法就叫做“信号量(Semaphore)”,用来保证多个线程不会互相冲突。
不难看出,mntex是semaphore的一种特殊情况(n=1时)。也就是说,完全可以考虑用后者替代前者。但是,因为mutex比较简单,且效率高,所以在必须保证资源独占的情况下,还是采用这种设计。
操作系统的设计,因此可以归结为三点:
@1:以多线程形式,允许多个任务同时运行;
@2:以多线程形式,允许单个任务分成不同的部分运行;
@3:提供协调机制,一方面防止进程之间和线程之间发生冲突,另一方面允许进程之间和线程之间共享资源。