1.并发(Concurrence)
并发性是指两个或多个事件在同一时间间隔内发生;
并行指的是同一时刻,多个命令同时执行;
在多道程序环境下,并发性是指在一段时间内,宏观上有多个程序在同时运行;在现在多核CPU的情况下,这些并发执行的程序就可以由多个CPU分别运行,以达到并行的效果。
2.共享(Sharing)
共享指的是操作系统资源可以提供给内存中多个并发执行的进程或者线程共同使用。
由于资源性质的不同,导致进程对资源共享的方式也不同,主要的两种资源共享方式有:
1.互斥共享,它大概的意思就是某个时间段内,这个资源只允许一个进程(线程)访问。这个很好理解,比如我们常常见到的打印机,就是一种互斥共享方式。设想如果多个进程(线程)能够同时访问,那么打印机打印出来的内容必定会造成混淆。在Java中,有一种锁叫互斥锁,即Synchronized,这种锁实现的就是一种互持共享方式。而互持共享使用的这种资源,在操作系统中一般被称为临界资源或者独占资源,计算机中大多数物理设备都属于临界资源。
2.同时共享,同时共享即允许一段时间内,多个进程(线程)”同时”访问该资源,这里的同时指的是在宏观上,微观上可能是交替的对资源进行访问。Java中的共享锁即ReentrantReadrWriteLock中的读锁就是这样的实现方式。
并发和共享是操作系统的两个最基本的特征,它们又是互为存在的条件。
怎么理解这句话呢?在我看来,资源共享是以程序并发执行为条件的,如果不允许程序并发执行,那么也就不存在资源共享问题;如果对资源不加管控,那么并发程序可能也无法正常执行。
3.虚拟(Virtual)
在操作系统中,通过某种方式将一个物理实体映射为若干个逻辑上的对应物,这种方式就是虚拟技术。在操作系统中用了多种虚拟技术,分别实现了虚拟处理机(CPU),虚拟内存,虚拟外部设备,虚拟信道等。
主要有两种虚拟技术:(时间)时分复用技术和(空间)空分复用技术。
虚拟处理机就使用到了时分复用技术,虽然只有一个CPU,但是多个进程能在同一个处理器上并发执行,每个进程轮流占用处理器,每次只执行一小个时间片并快速切换。(这种每个进程执行一个时间片的算法叫_时间片轮转算法_)
虚拟内存使用了空分复用技术,实际的物理内存可能很小(可能2M左右),但是它可以允许可以比它大得多的用户程序。它将物理内存抽象为地址空间,每个进程都有各自的地址空间(进程私有,如程序计数器PC,栈等)。地址空间的页被映射到物理内存,地址空间的页(或者段)并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中,被成为换页。
4.异步(Asynchronism)
异步指进程不是一次性执行完毕,而是走走停停,以不可知的速度向前推进。
进程是以人们不可预知的速度向前推进,此即进程的异步性。尽管如此,但只要运行环境相同,作业(程序)经多次运行,都会获得完全相同的结果。因此,异步运行方式是允许的,是操作系统的一个重要特征。