- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
利用管程同步进程
⑥ 等待超时。进程等待某事件的时间, 超过了规定的最大值; ⑦ 算术运算错。进程试图去执行一个被禁止的运算,例如,被0除; ⑧ I/O故障。这是指在I/O过程中发生了错误等。 利用记录型信号量解决生产者-消费者问题 公用缓冲区中有n个缓冲区 互斥信号量mutex 资源信号量empty表示缓冲区中空缓冲数量 资源信号量full表示满缓冲区的数量 Semaphore mutex=1,empty=n,full=0; Item buffer[n]; Int in=out=0 Void producer() { while(1) { produce an item in nextp; wait(empty); wait(mutex); buffer[in]=nextp; in =(in+1) mod n; signal(mutex); Singnal(full); } } 利用管程同步进程,须设2个原语wait和signal。 当请求的资源未能得到满足时,管程调用wait使进程等待, 当资源释放时,调用signal唤醒队首进程。 等待原因很多,引入条件变量condition,形式如:condition x y;用x.wait和x.signal表示。 3. 进程同步方式 发送进程阻塞、 接收进程阻塞。 (无缓冲,平时阻塞,直到有消息发送) (2) 发送进程不阻塞、 接收进程阻塞。 (如多个服务进程平时阻塞,直到有消息发来) (3) 发送进程和接收进程均不阻塞。 (它们之间有N个缓冲,都不阻塞) 2.7 线 程 2.7.1 线程的基本概念 1.线程的引入 进程是一个资源的拥有者,因而进程的创建、撤消、和切换中,系统要付出较大的时空开销。(内存,IO设备及PCB) 进程不宜太多,切换不宜太频繁,限制了并发程度。 为了减少进程的创建、撤消和切换时所付出的时空开销,使OS有更好的并发性 把资源分配单位和调度单位分开 线程的定义: 线程是进程的一个实体,是被系统独立调度和分派的基本单位。 2. 线程的属性 轻型实体。 只拥有少量资源:TCB、寄存器和堆栈 (2) 独立调度和分派的基本单位。 (3) 可并发执行。 同一进程的多个线程并发,不同进程的多个线程并发。 (4) 共享进程资源。 共享同一进程的资源 (5)每个线程有唯一的标识符和TCB (6)不同线程可以执行相同程序 (7)同一进程中的各个线程共享该进程的内存地址空间 (8)一个线程有生命周期 (9)一个线线程也有三个基本状态 3. 线程的状态 (1) 状态参数。 ① 寄存器状态,它包括程序计数器PC和堆栈指针中的内容; ② 堆栈, 在堆栈中通常保存有局部变量和返回地址; ③ 线程运行状态, 用于描述线程正处于何种运行状态; ④ 优先级, 描述线程执行的优先程度; ⑤ 线程专有存储器, 用于保存线程自己的局部变量拷贝; ⑥ 信号屏蔽, 即对某些信号加以屏蔽。 (2) 线程运行状态。 线程在运行时,也具有下述三种基本状态: ① 执行状态,表示线程正获得处理机而运行; ② 就绪状态, 指线程已具备了各种执行条件,一旦获得CPU便可执行的状态; ③ 阻塞状态,指线程在执行中因某事件而受阻,处于暂停执行时的状态。 4. 线程的创建和终止 线程的创建,应用程序启动时,先建一进程,同时为该进程建一“初始化线程”,由它再去创建若干个线程。 创建过程:利用线程创建函数(或系统调用),并提供相应的参数,如线程主程序的入口指针、堆栈的大小,以及用于调度的优先级等。并返回一个线程标识符 终止线程的方式有两种: 一种是在线程完成工作后自愿退出; 另一种是线程在运行中出现错误或由于某种原因而被其它线程强行终止。 5. 多线程OS中的进程 在多线程OS中,进程是作为拥有系统资源的基本单位,并为它的多个线程它们提供资源,但此时的进程就不再作为一个执行的实体。 多线程OS中的进程有以下属性: (1) 作为系统资源分配的单位。 (2) 可包括多个线程。 (3) 进程不是一个可执行的实体。 6.线程与进程的比较 (1)调度 同一进程中的线程切换不会引起进程切换,不同进程中的线程切换会引起进程
文档评论(0)