作者:iz76mww | 来源:互联网 | 2023-07-29 13:42
目的与要求:了解并行程序的高级语言表示与操作系统支持;了解并发(并行)执行引起的同步与互斥问题。重点与难点:可并行程序的同步与互斥。两个层次的并发需求: 应用编程要利用操作系
目的与要求:了解并行程序的高级语言表示与操作系统支持;了解并发(并行)执行引起的同步与互斥问题。
重点与难点:可并行程序的同步与互斥。
两个层次的并发需求:
应用编程要利用操作系统对并发的支持(进程或者线程),安排可并行事物并发执行。
操作系统核心程序也要尽可能的并发运行。
并发编程:
计算任务存在可并行的成分。(并行指的是进程或者线程在宏观或者微观上都在同时进行,并发指的是在宏观上进行同时运行,而在微观上是轮换运行。)
并发编程的三种方法:
程序员写顺序程序,用自动识别工具识别可并行成分,组织使用操作系统的进程或线程实现并发。(对自动识别的工具要求很高,这个工具本身的开发难度很高,这个工具也不可能从顶级,也就是从算法上实现从串行到并行,只是从语言层面进行并行转换。)
由程序员识别可并行成分,用并发程序设计语言设计并发程序,由编译系统安排使用进程或线程。
在传统语言基础上,利用操作系统的进程或线程“系统调用”设计并发程序。(用的最多的方式,利用操作系统的函数来设计并发程序)
并发执行的机制:
实现并发执行,必须通过操作系统支持的进程或者线程机制。
操作系统提供了进程(线程)创建,结束和同步的系统调用,可直接提供给用户编写并行程序;或由并行语言编辑器将并发语言的语句转换为对操作系统的系统调用。
与进程相关的系统调用:
Linux提供了如下的系统调用:
-fork():创建了一个新进程。该系统调用执行完后,系统已创建了一个子进程,该子进程逻辑上复制(共享)了父进程的程序,复制了父进程的数据段和栈段(实际上是内存的共享)。也就是说不管是父进程还是子进程,在被调度后,都从操作系统调用的返回点开始运行,父进程系统调用的返回值是子进程的进程标识pid;子进程的返回值是0,子进程从trap指令后一条指令开始运行。
进程的同步(一个进程等另外一个进程结束,等待数据)与互斥(资源独占):
同步关系(也称直接制约关系):指完成同一任务的伙伴进程间,因需要某位置上协调他们的工作而等待、传递信息产生的制约关系(数据依赖的关系,也就是等待数据的关系)。
互斥关系(也称作制约关系):即进程间因相互竞争使用独占型资源(互斥资源)所产生的制约关系。
同步的例子
互斥的例子
临界资源(critical resource):一次仅允许一个进程使用的资源。
临界段:相关进程必须互斥执行的程序段。