指令:指令就是机器语言的一个语句,它是一组有意义的二进制代码。因为是机器语言的一条指令,所以指令就可以等价于是原子性的,只有在执行完一条指令后才会去响应中断(如果有的话)。
原语:由若干条指令组成的,用户完成一定功能的一个过程。原语操作的一个特点就是“原子操作”,因此原语在执行的过程中不允许被中断。原子操作在系统态下执行,常驻内存。
同步机制应遵循的规则:
空闲让进:当临界区的“大门”敞开时,应当允许一个请求的进入临界区的进程立即进入临界区; 忙则等待:当临界区的“大门”关闭时,因而其他试图进入临界区的进程必须等待,以保证对临界资源的互斥访问; 有限等待:对要求进入临界区的进程,应保证在有限的时间能进入自己的临界区,一面陷入“死等”状态; 让权等待:当进程不能进入自己的临界区时,应立即释放处理机,以免进程陷入“忙等”状态。在这里解释一下“死等”和“忙等”两个状态,因为这两个状态在我们看来似乎是没有什么区别的,比如“死等”和“忙等”都是没能进入临界区,那两者的区别到底是什么呢?
死等:首先对于“死等”的进程来说,这个进程可能是处于阻塞状态,等着别的进程将其唤醒(Signal原语),但是唤醒原语一直无法执行,对于阻塞的进程来说,就是一直处于“死等”(睡死了,没有人喊你起床)的状态了,并且在死等状态,是没有获得处理机的;忙等:忙等状态比较容易理解,处于忙等状态的进程是一直占有着处理机去不断的判断临界区是否可以进入,在此期间,进程一直在运行(忙死了都,但是都是白忙),这也就是“忙等”状态,有一点需要注意的是,在单处理机系统中,忙等是非常可怕的,因为处于忙等的进程会一直霸占着处理机(不会去释放处理机,发生了忙等的单CPU OS,无法执行别的进程,除非系统重启,即忙等的状态在单CPU系统中是无法被打破的)。
其实不管是“忙等”还是“死等”,都是对OS有害的,都是应该努力避免的。
进程的同步机制包含软件同步机制、硬件同步机制、信号量机制、管程机制等,也就是这些机制,可以保证程序并发执行时的可再现性。
2.软件同步机制
其实说到使用软件来实现同步机制,大家想到的最多的应该就是Java多线程了,Java通过锁、synchronized、信号量等机制实现了线程的同步,但是线程间是共享父进程中的所有资源的,就比如多个职员坐在一间办公室里,大家可以面对面的交谈,这样可以方便的解决共享资源的问题;但是在线程之间(就像是分布在世界各地的多个办公室),如果需要共享系统资源时,进程之间很难直接通过软件来进行交流,对系统资源的互斥共享就很麻烦了,需要借助硬件资源来完成同步了,需要在内存中单独使用一块区域来保存进程是否在临界区内的标志。










