第十章:大分子溶液(6个)复习进程

第十章:大分子溶液(6个)复习进程
第十章:大分子溶液(6个)复习进程

第十章:大分子溶液

(6个)

第十章 大分子溶液

一、本章基本要求

1.掌握大分子平均摩尔质量的表示方法及常用的测定方法;大分子电解质溶液的特性;Donnan 平衡以及测定大分子电解质溶液渗透压的方法。

2.熟悉大分子的溶解特征及其在溶液中的形态;大分子溶液的渗透压及其测量方法;大分子溶液黏度的几种表示方法和用黏度法测定大分子的平均摩尔质量的原理;大分子溶液的流变性和几种典型的流变曲线。

3.了解大分子溶液与溶胶性质的异同;大分子溶液的光散射现象;沉降速率法和沉降平衡法在生物大分子研究中的应用;区带电泳和稳态电泳在生物学和医学方面的应用;凝胶的分类、形成、结构及性质。

二、基本公式和内容提要

(一)基本公式 数均摩尔质量公式

1122B B

n 12B

B B B

N M N M N M M N N N N M N

+++=+++=

∑∑

可用依数性测定法和端基分析法测定。

质均摩尔质量公式

1122B B

m 12B

2

B B B B

B

B

B

m M m M m M M m m m m M N M m

N

M +++=+++=

=

∑∑∑∑

可用光散射法测定。

z 均摩尔质量公式

23B B B B 2B B

B

B

B B

B

z

m M N M M m M N

M z M z

=

=

=

∑∑∑∑∑∑

可用超离心沉降法测定。

黏均摩尔质量公式

1/1/(+1)

B B B B ηB B B N M m M M N M m

α

α

αα

??

??==

?

? ?

??

??

?

∑∑∑∑

可用黏度法测定。

大分子溶液渗透压公式

2n

RT RTA c c M P =+ 适用于大分子稀溶液。

大分子溶液散射光强公式 ()()

22220,0421cos 2πr

cRT n n I I L r c /c θθλ+???

= ???∏??? 适用于入射光的波长大于大分子的情况。

光散射法测定大分子分子质量的基本公式

o 2901

2Kc A c R M =+

Newton 黏度公式

d d F v D A x

t h h ===

式中η称为黏度系数,简称黏度。其物理意义是使单位面积的液层,保持速度梯度为1时所施加的切力。

沉降系数公式

21

2

21ln

()x x S t t ω

=- 沉降速率法求大分子平均摩尔质量公式

212

0B 210B ln

(1)()(1)

x RT x RTS

M D V t t D V ρωρ==---

沉降平衡法求大分子平均摩尔质量公式

()()

21

2

2

2

0B 212ln

1c RT c M V x x ρω=

--

适用于平均摩尔质量不太大的大分子溶液。

Donnan 平衡时膜两边小离子浓度之比计算公式

2211

22

1c c x c c c c x c c +===+外内- 大分子电解质溶液渗透压公式

21121211212

2222c c c c c

RT c RT c c c c ++∏==++

(二)内容提要

1.大分子溶液的特征 大分子溶液由于分子大小已进入胶体分散度范围,具有扩散速度慢、不能透过半透膜等胶体溶液的特性。但大分子溶液是分子分散且热力学稳定的均相系统,对电解质不敏感,这使它与溶胶又有本质的区别。

2.大分子的平均摩尔质量 大分子的分子质量是多分散的,其摩尔质量只有统计意义,是统计平均值。测定分子质量的方法不同,统计处理方式不同,获得的平均值也不同。常用的平均摩尔质量有数均摩尔质量、质均摩尔质量、z 均摩尔质量和黏均摩尔质量。数均摩尔质量通常用依数性方法测定;质均摩尔质量用光散射方法测定;z 均摩尔质量用超离心沉降法测定;黏均摩尔质量用黏度法测定。

摩尔质量是大分子化合物的重要参数,它不仅能影响其溶液的物理化学性质,而且还会影响到某些药用大分子在体内的代谢。

3.大分子的溶解特征 大分子化合物在溶剂中具有先溶胀后溶解的特性,是由于大分子化合物的结构与其巨大分子质量所决定的。大分子链中成千上万个C —C 键围绕固定键角不断内旋转可以有无数个形态,在溶液中的主要构象有无规线团、螺旋状和棒状,实际上大分子都是卷曲的,分子链的柔顺性越好,越容易卷曲形成无规线团;分子链的刚性越强,越不容易卷曲,极端情况下可能成为棒状。

4.大分子溶液的渗透压 大分子的柔顺性和溶剂化,使大分子溶液的渗透压比相同浓度的小分子溶液大。在依数性方法中,只有渗透压法适合测定大分子的数均摩尔

质量。渗透压的实验测量方法有渗透平衡法、速率终点法和升降中点法等。对于稀溶液,以Π/c 对c 作图为一直线,外推到c =0处,直线的截距为RT /M n ,由此可计算出数均摩尔质量M n 。从直线的斜率RTA 2可以求出维利系数A 2。

5.大分子溶液的光散射 大分子溶液的光散射是由两方面涨落产生的,一是溶剂的密度涨落,一是大分子的浓度涨落。通过测定溶液的光散射,可以求出大分子的分子质量。根据光散射法测定大分子分子质量的基本公式,在不同浓度下测定R 90°,以Kc /R 90°对c 作图得一直线,外推至c =0处,其截距为1/M ,即可求得大分子的质均摩尔质量。

6.大分子溶液的流变性 在外力作用下物质发生形变与流动的性质称为流变性,研究物质流变性的科学称为流变学。以生物体和人体为研究对象的称为生物流变学。大多数纯液体,如水、汽油、乙醇以及小分子物质的稀溶液,都具有牛顿流体的特点。对于大分子溶液,它们的流变性比较复杂,其黏度往往不符合牛顿公式,通常称为非牛顿型流体,可以用流变曲线进行研究。根据流变曲线形状的不同,流体可以分为牛顿型、塑流型、假塑流型、胀流型及触变流型等。流变学的研究对象和应用范围十分广泛,几乎包括了所有物体。在制剂学中很多剂型,如乳膏剂、糊剂、混悬剂、乳剂等。在处方设计、质量评定及工艺设计中均涉及流体的流变性,所以流变学的基本原理对很多剂型的制备、贮存、稳定以及使用都具有重要的指导意义。

7.大分子溶液的黏度 大分子溶液的黏度不仅与分子大小、形状、温度、浓度有关,而且与大分子和溶剂间的相互作用等有关。常用的黏度表示方法有相对黏度、增比黏度、比浓黏度和特性黏度。大分子溶液具有很高的黏度,不服从Newton 黏度公式,但符合Huggins 和Kraeme 公式,即

[][]2

sp 1k c c

h h h =+

[][]2

r 2ln k c c

ηηη=- 在一定温度下,大分子溶液平均摩尔质量与其特性黏度[η]之间的关系为 []KM a h =

式中M 为大分子化合物的黏均摩尔质量,K 和α为与溶剂、大分子化合物及温度有关的经验常数。

8.大分子溶液的超离心场沉降在超离心力场下,每个大分子质点的沉降速率与其质量相关。利用超离心技术不仅可以测定大分子平均摩尔质量,而且可以对其分离、提纯和进行物理化学分析。离心力场中的沉降速率处理方法与重力场的相似,超离心技术分为沉降速率法和沉降平衡法两种。

9.大分子电解质溶液大分子电解质溶液具有可电离基团,在水溶液中可以电离成带电离子的大分子化合物称为大分子电解质。大分子电解质溶液除了具有一般大分子溶液的通性外,它还具有自身的特性,主要包括高电荷密度、高度水化、电泳、电黏效应和Donnan平衡等。

10.电泳在电场作用下,大分子电解质溶液会产生电泳现象。影响电泳速率的因素除了大分子本身所带电荷多少、分子大小和形状结构外,还与溶液pH值、离子强度等有关。按电泳的原理可分为移动界面电泳、区带电泳和稳态电泳三种形式,广泛应用于蛋白质、多肽、氨基酸、糖、酶、DNA、病毒、药物及其代谢产物等的分离与分析。

11.Donnan平衡 Donnan平衡是大分子电解质溶液的另一重要特性。如果用水和其他小分子能透过,而大分子电解质不能透过的半透膜把容器隔成两部分,一边放大分子电解质水溶液,另一边放小分子电解质稀溶液,平衡后发现,小分子电解质离子在膜两边溶液中的浓度并不相同。这种因大分子离子的存在而导致小分子离子在半透膜两边分布不均匀的现象称为Donnan效应,或Donnan平衡。Donnan平衡的存在会影响溶液渗透压的准确测定,因此,在测定大分子电解质溶液渗透压时,应当设法予以消除。

Donnan平衡是生物体内常见的一种生理现象。生物的细胞膜相当于半透膜,细胞内的大分子电解质与细胞外的体液处于膜平衡状态。这就保证了一些具有重要生理功能的金属离子在细胞内外保持一定的比例。同时,膜平衡的条件还能使细胞在周围环境改变小分子成分时,确保内部组成相对稳定。这对维持机体正常的生理功能是很重要的。

10.凝胶在一定条件下,大分子溶质或溶胶粒子相互连接,形成空间网状结构,而溶剂小分子充满在网架的空隙中,成为失去流动性的半固体状态,这种体系称为凝胶,这种凝胶化过程称为胶凝。凝胶是介于固体和液体之间的一种特殊状态,一方面

显示有弹性、强度、屈服值和无流动性等固体的力学性质,另一方面又具有与固体不同的物理特性。明胶、琼脂、果胶等大分子水溶液在冷却时都可以形成凝胶。

根据分散相质点的性质以及形成凝胶结构时质点联结的结构强度,凝胶可以分为刚性凝胶和弹性凝胶两类。凝胶具有膨胀作用、触变作用、离浆作用、扩散作用等性能,广泛用于蛋白质、酶、核酸、维生素、多糖、激素等生物物质的分离。

三、概念题和例题

(一)概念题

1.大分子溶液与溶胶有什么异同?

2.大分子的近程结构和远程结构分别研究什么?影响大分子柔顺性的主要因素有哪些?

3.大分子的平均摩尔质量有哪些表示方法?各采用何种实验方法测定?

4.大分子的溶解特征是什么?大分子的溶剂选择有哪些原则?

5.什么是大分子溶液的流变性?几种常见的流变曲线各有什么特点?

6.黏度有几种表示方法?如何用黏度法测定大分子的平均摩尔质量?

7.大分子电解质溶液的电泳主要有哪几种形式?请各举1个应用实例。

8.什么是大分子电解质溶液的电黏效应?电黏效应会导致什么结果?

9.在测定大分子电解质溶液渗透压时,为什么要设法消除Donnan平衡的影响?

10.凝胶内部形成的网状结构主要有哪些形式?凝胶有哪些重要性质?

选择正确答案的编号,填在各题之后的括号内:

11.在一种大小均一的大分子化合物中,若混入少量摩尔质量低的组分,这时几种平均摩尔质量的大小顺序是()

A. M n、M m、M z

B. M z、M m、M n

C. M n、M z、M m

D. M z、M n、M m

12.大分子溶液和普通小分子非电解质溶液的主要区分是大分子溶液的()

A. 丁达尔效应显著

B. 渗透压大

C. 不能透过半透膜

D. 对电解质敏感

13.测定大分子溶液中大分子化合物的平均摩尔质量不宜采用的方法是()

A. 渗透压法

B. 光散射法

C. 冰点降低法

D. 黏度法

14.下列性质中大分子溶液不具备的是()

A. 系统具有很大的相界面

B. 扩散慢

C. 不能透过半透膜

D. 具有丁达尔效应

15.当液体的切变速率与切应力的关系为一不通过原点的曲线时,该流体为()

A. 牛顿型

B. 塑流型

C. 假塑流型

D. 胀流型

16.与大分子化合物的黏均分子量有定量关系的是()

A. 相对黏度

B. 增比黏度

C. 比浓黏度

D. 特性黏度

17.相同物质的量浓度下,大分子溶液的渗透压与溶液的渗透压之间的大小关系是

()

A. 前者大于后者

B. 前者小于后者

C. 一样大

D. 不能确定

18.测定大分子电解质溶液的渗透压时,必须考虑Donnan平衡,产生Donnan平衡的根本原因在于()

A. 大分子电解质溶液的黏度大

B. 大离子浓度大,影响小离子通过半透膜

C. 小离子浓度大,影响大离子通过半透膜

D. 大离子不能透过半透膜,而其静电作用使小离子在半透膜两边浓度不均

19.将大分子电解质NaR的水溶液与纯水用半透膜隔开,达到Donnan平衡后,膜外水的pH值()

A. 大于7

B. 小于7

C. 等于7

D. 不能确定

20.凝胶是介于固体和液体之间的分散系统,下列关于刚性凝胶的描述,不正确的是()

A. 是非膨胀性的

B. 具有多孔性的结构

C. 凡是能润湿的液体,其吸收作用并无选择性

D. 线性大分子所形成的凝胶多属刚性凝胶

(二)概念题答案

1.大分子溶液与溶胶的相同点有:分散相粒子大小在1~100 nm之间,扩散速率较慢,不能透过半透膜。

不同点有:大分子溶液是热力学稳定的均相系统,能自动溶解在溶剂中形成溶液,服从相律,丁铎尔效应弱。对电解质不敏感,将溶剂蒸发出去后,成为干燥的大分子化合物,再加入溶剂,又能成为大分子溶液,具有可逆性。大分子溶液渗透压和黏度较大。溶胶是多相的热力学不稳定系统,不能自动分散在分散介质中形成溶胶,不服从相律,丁铎尔效应强。对电解质敏感,加入微量电解质就会聚沉,沉淀物经过加热或加入溶剂等处理,不会复原成溶胶,具有不可逆性。溶胶渗透压和黏度较大。

2.大分子的链结构包括近程结构和远程结构。近程结构主要研究大分子的组成与构型。组成包括大分子链结构单元的化学成分、连接顺序、链的交联和支化等;构型主要研究取代基围绕特定原子在空间的排列规律。远程结构则包括大分子的大小和分子链在整体范围内的结构状态,即大分子的构象。影响大分子柔顺性的主要因素有主链结构、取代基、交联、温度和溶剂。

3.大分子的平均摩尔质量有四种常用的表示方法:数均摩尔质量M n、质均摩尔质量M m、z均摩尔质量M z和黏均摩尔质量Mη。用依数性测定法和端基分析法测得的为数均摩尔质量;用光散射法测得的为质均摩尔质量;用超离心沉降法测得的为z均摩尔质量;用黏度法测得的为黏均摩尔质量。

4.大分子的溶解特征为在溶剂中先溶胀后溶解。大分子化合物的溶剂选择有三条原则,即极性相近原则、溶度参数近似原则和溶剂化原则。

5.大分子溶液的流变性是指在外力作用下大分子发生黏性流动和形变的性质。牛顿型流体的黏度不随切力变化,定温下有定值,流变曲线是一条通过原点的直线;塑性流体的特点是外加的切力小于某一数值τ时,就不能流动,大于τ后才开始流动,流变曲线为一条不通过原点的曲线;假塑性流体流动特点是没有塑变值,一旦施加外力就能流动,其黏度随着剪切速率的增加而减小,即流动越快显得越稀,流动曲线为通过坐标原点的凹形曲线;胀流型流体与假塑流型流体的流变曲线相似,其流变曲线是一条通过原点的凸形曲线,胀流型的特点是没有塑变值,黏度随着切速率的增加而增

大,即流动越快显得越稠。触变流型流体的特征是静置时呈半固体状态,振摇或搅动时成流体。

6.常用的黏度表示方法有四种,分别为相对黏度ηr、增比黏度ηsp、比浓黏度ηc 和特性黏度 [η]。用黏度法测定大分子的平均摩尔质量方法是在不同浓度c下测定大分子溶液黏度,以ηsp/c、lnηr/c为纵坐标,浓度c为横坐标作图,用外推法求得[η]

h=(K 值。通常采用双线法求外推值,两直线的截距应相等。再根据经验公式[]KM a

和α为与溶剂、大分子化合物及温度有关的经验常数)就可求得黏均摩尔质量Mη。

7.按电泳的原理可分为移动界面电泳、区带电泳和稳态电泳三种形式。例如Tiseliu电泳仪就属移动界面电泳;毛细管电泳属于区带电泳;等电聚焦电泳属于稳态电泳。

8.大分子电解质溶液的电黏效应是指由大于分子链上的高电荷密度及高度水化,在溶液中链段间的相斥力增大,分子链扩展舒张,溶液黏度迅速增加的现象。电黏效应导致两个结果。其一,大分子电解质溶液的ηsp /c对c 作图,曲线出现反常,不成线性关系,无法用外推法求[η]。其二,一些大分子电解质溶液的黏度具有明显的pH 依赖性。

9.在测定大分子电解质溶液的渗透压时,受Donnan效应的影响,平衡时在半透膜两侧NaCl浓度不相同,从而产生额外的渗透压,影响渗透压的准确测定。

10.凝胶内部形成的网状结构大致可以分为四种情况,它们分别是球形质点形成链条状网架型;针片状质点结成网架线型;大分子联成微晶区与无定型区相间隔的网状构型;质点成桥联状。凝胶的性质主要有膨胀作用、离浆现象、扩散作用以及在凝胶中的物质通过扩散可以发生化学反应。

11.A

12.C

13.C

14.A

15.B

16.D

17.A

18.D 19.A 20.D (三)例题

例1 将某聚合物5.0×10-3 kg 分各种级别,用渗透压法测出各级分的数均摩尔质量M n ,所得结果见下表:

假设每个级别的摩尔质量是均匀的,试计算原聚合物的m M 、n M 和m M /n M 。

解:

因为 B B B n M m = 所以

2

B B B B

m

B

B

B

n M

m M M n M

m

=

∑∑∑∑=

33323

025102065105022010110510

...----??+??+???=? 3232333

121021005510510015101105010....----???+???+???+? 218410kg/mol .=?

B B B

n B

B

B

n M m M n M

n

=

=

∑∑∑∑

3

333333

2223

501002510055102201012100551001510

250110210510110.......-------???????+++++????= 299mol/kg .=

2

m n 184********

M ..M .?== 例2 异丁烯聚合物的苯溶液在25℃时测得各浓度的渗透压如下:

c ×10-1 kg/m 3 0.5 1.00 1.25 1.50 2.00

Π Pa 49.45 100.94 126.96 154.84 210.70

求聚异丁烯的平均摩尔质量。

解:

由已知数据处理得

c ×10-1 kg/m 3 0.5 1.00 1.25 1.50 2.00

Π Pa 49.45 100.94 127.75 154.84 210.70 Π/c Pa ·m 3/kg 9.890 10.094 10.220 10.323 10.535

由公式

2RT A RTc c M P =+知,以c

∏对c 作图为一直线, 其截距等于RT / M ,于是可求得M 。由图得截距为9.67Pa ·m 3·kg -1 (图略)。 即

967RT

.M

=

967

8314298

967256kg mol

RT M ...=

?=

=? 例3 在25℃时聚苯乙烯溶于甲苯中,测得其黏度如下 C kg/m 3 0 2.0 4.0 6.0 8.0 10.0 η×10-4 kg/(m ·s ) 5.57 6.14 6.73 7.33 7.97 8.62

已知该体系的k =3.70×10-5 m 3/kg ,α=0.62。试由此求出聚苯乙烯的摩尔质量。

解:

由已知数据处理得

C kg/m 3 0 2.0 4.0 6.0 8.0 10.0

η×10-4 kg/(m ·s ) 5.57 6.14 6.73 7.33 7.97 8.62 ηr 1.102 1.208 1.316 1.431 1.548

ηsp 0.102 0.208 0.316 0.431 0.548 ηsp /c ×102 5.12 5.20 5.27 5.39 5.48 ln ηr /c ×102 4.86 4.72 4.58 4.48 4.37

以ηsp /c 对c 或以ln ηr /c 对c 作图得一直线,其截距=[η](图略)。由图知[η]=5.01×10-2 m 3/kg 。对公式[η]=kM α取对数,并代入数据,则 ln [η]=ln k +αln M

[]()()

25ln 50110ln 37010ln ln ln 062

..k

M .ηα

--?-?-=

=

=11.6305

M =112 kg/m 3

例4 羧络血红蛋白的浓度为0.99%,在磷酸缓冲液中ρ0 = 1×103 kg/m 3,V B = 0.7515×10-3 m 3/kg ,T = 303.2K ,扩散系数D = 8.52×10-11 m 2/s 。离心实验数据如下: (t 2 -t 1)/s d x /m x /m 转速/(转/分)

60×30 8.0×10-4 4.91×10-2 38750

求羧络血红蛋白的摩尔质量。 解:

已知 x = 4.91×10-2 m

238750

40579rad/s 60

.πω?=

=

所以

ω2x = 4057.9 2×4.91×10-2

= 8.085×105 rad 2 ·m /s 2

4

7d 8010444410m/s d 6030

x ..t --?=

=?? 根据沉降系数公式

27

5131

d d 1444410808510549710s

x

S x t

...ω--=

?=???=?

线程实现邮箱通信-实验报告

进程通信实验报告 一、实验名称:进程通信 二、实验目的:掌握用邮箱方式进行进程通信的方法,并通过设计实现简单邮箱理解进程通信中的同步问题以及解决该问题的方法。 三、实验原理:邮箱机制类似于日常使用的信箱。对于用户而言使用起来比较方便,用户只需使用send ()向对方邮箱发邮件 receive ()从自己邮箱取邮件, send ()和 receive ()的内部操作用户无需关心。因为邮箱在内存中实现,其空间有大小限制。其实send ()和 receive ()的内部实现主要还是要解决生产者与消费者问题。 四、实验内容:进程通信的邮箱方式由操作系统提供形如send ()和receive ()的系统调用来支持,本实验要求学生首先查找资料了解所选用操作系统平台上用于进程通信的系统调用具体形式,然后使用该系统调用编写程序进行进程间的通信,要求程序运行结果可以直观地体现在界面上。在此基础上查找所选用操作系统平台上支持信号量机制的系统调用具体形式,运用生产者与消费者模型设计实现一个简单的信箱,该信箱需要有创建、发信、收信、撤销等函数,至少能够支持两个进程互相交换信息,比较自己实现的信箱与操作系统本身提供的信箱,分析两者之间存在的异同。 五、背景知识介绍: 1、sembuf 数据结构 struct sembuf { unsigned short int sem_num; //semaphore number short int sem_op; //semaphore operation short int sem_flg; //operation flag }; sem_num :操作信号在信号集中的编号,第一个信号的编号是0。 进程A 进程B 信箱A 信箱B Send() Send() receive() receive()

实验三 进程通信doc(DOC)

实验三进程通信(二) 实验目的: 1、理解进程通信原理和基本技术 2、了解linux系统进程间通信机构(IPC); 3、理解linux关于共享内存的概念; 4、掌握linux支持进程间共享内存的系统调用; 5、巩固进程同步概念。 实验内容: (一)闹钟。用c语言编程,实现进程间通过信号进行通信。 用fork()创建两个进程,子进程在等待5秒后用系统调用kill()向父进程发送SIGALRM 信号,父进程用系统调用signal()捕捉SIGALRM信号。参考程序如下: #include #include #include static int alarm_fired = 0; //闹钟未设置 //模拟闹钟 void ding(int sig) { alarm_fired = 1; //设置闹钟 } int main() { int pid; printf("alarm application starting\n"); if((pid = fork( )) == 0) { //子进程5秒后发送信号SIGALRM给父进程 sleep(5); kill(getppid(), SIGALRM); //exit(0); return 0; } //父进程安排好捕捉到SIGALRM信号后执行ding函数 printf("waiting for alarm to go off\n"); (void) signal(SIGALRM, ding); pause(); //挂起父进程,直到有一个信号出现 if (alarm_fired) printf("Ding!\n"); printf("done\n");

实验四父子进程通信

Linux进程通信 【实验程序及分析】 2. 父子进程同步 修改父进程创建子进程程序,使用exit()和wait()实现父子进程同步,其同步方式为父进程等待子进程的同步,即:子进程循环输出5次,然后父进程再循环输出5次。给出源程序代码和运行结果。 wait的函数原型是: #include /* 提供类型pid_t的定义 */ #include pid_t wait(int *status); 返回值:如果执行成功则返回子进程识别码(PID),如果有错误发生则返回-1。失败原因存于errno中。 进程一旦调用了wait,就立即阻塞自己,由wait自动分析是否当前进程的某个子进程已经退出,如果让它找到了这样一个已经变成僵尸的子进程, wait 就会收集这个子进程的信息,并把它彻底销毁后返回;如果没有找到这样一个子进程,wait就会一直阻塞在这里,直到有一个出现为止。 参数status用来保存被收集进程退出时的一些状态,它是一个指向int类型的指针。但如果我们对这个子进程是如何死掉的毫不在意,只想把这个僵尸进程消灭掉,(事实上绝大多数情况下,我们都会这样想),我们就可以设定这个参数为NULL,就象下面这样: pid = wait(NULL); 如果成功,wait会返回被收集的子进程的进程ID,如果调用进程没有子进程,调用就会失败,此时wait返回-1。 通过执行系统调用exit来终止一个进程。进程可以显示的调用exit系统调用来终止一个进程,也可以通过在程序结束时的return来实现。 调用exit方式如下: exit(status); status是返回给父进程的终止code。当一个进程exit后,这个进程处于zombie state。一般情况下exit(0)表示正常退出,exit(1),exit(-1)为异常退

Linux系统编程实验六进程间通信

实验六:进程间通信 实验目的: 学会进程间通信方式:无名管道,有名管道,信号,消息队列, 实验要求: (一)在父进程中创建一无名管道,并创建子进程来读该管道,父进程来写该管道(二)在进程中为SIGBUS注册处理函数,并向该进程发送SIGBUS信号(三)创建一消息队列,实现向队列中存放数据和读取数据 实验器材: 软件:安装了Linux的vmware虚拟机 硬件:PC机一台 实验步骤: (一)无名管道的使用 1、编写实验代码pipe_rw.c #include #include #include #include #include #include int main() { int pipe_fd[2];//管道返回读写文件描述符 pid_t pid; char buf_r[100]; char* p_wbuf; int r_num; memset(buf_r,0,sizeof(buf_r));//将buf_r初始化 char str1[]=”parent write1 “holle””; char str2[]=”parent write2 “pipe”\n”; r_num=30; /*创建管道*/ if(pipe(pipe_fd)<0) { printf("pipe create error\n"); return -1; } /*创建子进程*/ if((pid=fork())==0) //子进程执行代码 {

//1、子进程先关闭了管道的写端 close(pipe_fd[1]); //2、让父进程先运行,这样父进程先写子进程才有内容读sleep(2); //3、读取管道的读端,并输出数据 if(read(pipe_fd[0],buf_r, r_num)<0) { printf(“read error!”); exit(-1); } printf(“%s\n”,buf_r); //4、关闭管道的读端,并退出 close(pipe_fd[1]); } else if(pid>0) //父进程执行代码 { //1、父进程先关闭了管道的读端 close(pipe_fd[0]); //2、向管道写入字符串数据 p_wbuf=&str1; write(pipe_fd[1],p_wbuf,sizof(p_wbuf)); p_wbuf=&str2; write(pipe_fd[1],p_wbuf,sizof(p_wbuf)); //3、关闭写端,并等待子进程结束后退出 close(pipe_fd[1]); } return 0; } /*********************** #include #include #include #include #include #include int main() { int pipe_fd[2];//管道返回读写文件描述符 pid_t pid; char buf_r[100]; char* p_wbuf; int r_num;

进程管理实验报告文档

实验一进程管理 1.实验目的: (1)加深对进程概念的理解,明确进程和程序的区别; (2)进一步认识并发执行的实质; (3)分析进程争用资源的现象,学习解决进程互斥的方法; (4)了解Linux系统中进程通信的基本原理。 2.实验预备内容 (1)阅读Linux的源码文件,加深对进程管理概念的理解; (2)阅读Linux的fork()源码文件,分析进程的创建过程。 3.实验内容 (1)进程的创建: 编写一段程序,使用系统调用fork() 创建两个子进程。当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”,子进程分别显示字符“b”和“c”。试观察记录屏幕上的显示结果,并分析原因。 源代码: #include <> #include <> #include #include <> main() {

int p1,p2; p1=fork(); ockf()函数是将文件区域用作信号量(监视锁),或控制对锁定进程的访问(强制模式记录锁定)。试图访问已锁定资源的其他进程将返回错误或进入休态,直到资源解除锁定为止。而上面三个进程,不存在要同时进入同一组共享变量的临界区域的现象,因此输出和原来相同。 (3) a) 编写一段程序,使其实现进程的软中断通信。 要求:使用系统调用fork() 创建两个子进程,再用系统调用signal() 让父进程捕捉键盘上来的中断信号(即按DEL键);当捕捉到中断信号后,父进程用系统调用Kill() 向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Process 1 is killed by Parent! Child Process 2 is killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent Process is killed!

进程间通信实验报告

进程间通信实验报告 班级:10网工三班学生姓名:谢昊天学号:1215134046 实验目的和要求: Linux系统的进程通信机构 (IPC) 允许在任意进程间大批量地交换数据。本实验的目的是了解和熟悉Linux支持的消息通讯机制及信息量机制。 实验内容与分析设计: (1)消息的创建,发送和接收。 ①使用系统调用msgget (), msgsnd (), msgrev (), 及msgctl () 编制一长度为1k 的消息的发送和接收程序。 ②观察上面的程序,说明控制消息队列系统调用msgctl () 在此起什么作用? (2)共享存储区的创建、附接和段接。 使用系统调用shmget(),shmat(),sgmdt(),shmctl(),编制一个与上述功能相同的程序。(3)比较上述(1),(2)两种消息通信机制中数据传输的时间。 实验步骤与调试过程: 1.消息的创建,发送和接收: (1)先后通过fork( )两个子进程,SERVER和CLIENT进行通信。 (2)在SERVER端建立一个Key为75的消息队列,等待其他进程发来的消息。当遇到类型为1的消息,则作为结束信号,取消该队列,并退出SERVER 。SERVER每接收到一个消息后显示一句“(server)received”。 (3)CLIENT端使用Key为75的消息队列,先后发送类型从10到1的消息,然后退出。最后的一个消息,既是 SERVER端需要的结束信号。CLIENT每发送一条消息后显示一句“(client)sent”。 (4)父进程在 SERVER和 CLIENT均退出后结束。 2.共享存储区的创建,附接和断接: (1)先后通过fork( )两个子进程,SERVER和CLIENT进行通信。 (2)SERVER端建立一个KEY为75的共享区,并将第一个字节置为-1。作为数据空的标志.等待其他进程发来的消息.当该字节的值发生变化时,表示收到了该消息,进行处理.然后再次把它的值设为-1.如果遇到的值为0,则视为结束信号,取消该队列,并退出SERVER.SERVER 每接收到一次数据后显示”(server)received”. (3)CLIENT端建立一个为75的共享区,当共享取得第一个字节为-1时, Server端空闲,可发送请求. CLIENT 随即填入9到0.期间等待Server端再次空闲.进行完这些操作后, CLIENT退出. CLIENT每发送一次数据后显示”(client)sent”. (4)父进程在SERVER和CLIENT均退出后结束。 实验结果: 1.消息的创建,发送和接收: 由 Client 发送两条消息,然后Server接收一条消息。此后Client Server交替发送和接收消息。最后一次接收两条消息。Client 和Server 分别发送和接收了10条消息。message 的传送和控制并不保证完全同步,当一个程序不再激活状态的时候,它完全可能继续睡眠,造成上面现象。在多次send message 后才 receive message.这一点有助于理解消息转送的实现机理。

实验一 和实验二

实验一熟悉Windows2000/XP中的进程和线程 一、实验目的 1、熟悉Windows2000/XP中任务管理器的使用。 2、通过任务管理器识别操作系统中的进程和线程的相关信息。 3、掌握利用spy++.exe来察看Windows中各个任务的更详细信息。 二、实验理论基础 1、实验理论基础: (1)操作系统中的进程和线程的概念; (2)进程PCB的各项指标含意; (3)操作系统中的进程和线程的概念; (4)进程的各种控制; 三、实验内容与步骤 1、启动操作系统自带的任务管理器: 方法:直接按组合键Ctrl+Alt+Del,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe”。如下图所示:

2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息, 并完成下表(填满即可): 表一:统计进程的各项主要信息

3、从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结 束掉。再从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是无法中止进程,原因是该程序为关键系统进程,任务管理器无法结束进程。 4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开 的所有窗口最小化,看看你的计算机系统起来什么样的变化桌面所有的快捷图标消失,任务栏消失、得到的结论是这个进程用于显示桌面上的图标和开始菜单(说出explorer.exe进程的作用)。 5、运行“spy++.exe”应用软件,点击按钮“”,切换到进程显示栏上,查看进程“explorer.exe”的各项信息,并填写下表: 表二:统计线程的各项信息 进程:explorer.exe 中的各个线程

Linux进程间通信(2)实验报告

实验六:Linux进程间通信(2)(4课时) 实验目的: 理解进程通信原理;掌握进程中信号量、共享内存、消息队列相关的函数的使用。实验原理: Linux下进程通信相关函数除上次实验所用的几个还有: 信号量 信号量又称为信号灯,它是用来协调不同进程间的数据对象的,而最主要的应用是前一节的共享内存方式的进程间通信。要调用的第一个函数是semget,用以获得一个信号量ID。 int semget(key_t key, int nsems, int flag); key是IPC结构的关键字,flag将来决定是创建新的信号量集合,还是引用一个现有的信号量集合。nsems是该集合中的信号量数。如果是创建新集合(一般在服务器中),则必须指定nsems;如果是引用一个现有的信号量集合(一般在客户机中)则将nsems指定为0。 semctl函数用来对信号量进行操作。 int semctl(int semid, int semnum, int cmd, union semun arg); 不同的操作是通过cmd参数来实现的,在头文件sem.h中定义了7种不同的操作,实际编程时可以参照使用。 semop函数自动执行信号量集合上的操作数组。 int semop(int semid, struct sembuf semoparray[], size_t nops); semoparray是一个指针,它指向一个信号量操作数组。nops规定该数组中操作的数量。 ftok原型如下: key_t ftok( char * fname, int id ) fname就是指定的文件名(该文件必须是存在而且可以访问的),id是子序号,虽然为int,但是只有8个比特被使用(0-255)。 当成功执行的时候,一个key_t值将会被返回,否则-1 被返回。 共享内存 共享内存是运行在同一台机器上的进程间通信最快的方式,因为数据不需要在不同的进程间复制。通常由一个进程创建一块共享内存区,其余进程对这块内存区进行读写。首先要用的函数是shmget,它获得一个共享存储标识符。 #include #include #include int shmget(key_t key, int size, int flag); 当共享内存创建后,其余进程可以调用shmat()将其连接到自身的地址空间中。 void *shmat(int shmid, void *addr, int flag); shmid为shmget函数返回的共享存储标识符,addr和flag参数决定了以什么方式来确定连接的地址,函数的返回值即是该进程数据段所连接的实际地

实验三 进程通信(一)

操作系统实验报告 实验三、进程通信(一) ——管道及共享内存 一、实验目的 熟悉和掌握LINUX系统的管道通信和共享内存通信。 二、实验内容 (一)、管道通信 1、实验原理: 管道是半双工的,数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统。 数据的读出和写入:一个进程向管道中写的内容被管道另一端的进程读出。 利用系统调用pipe()可创建一个简单的管道。 int fd[2]; pipe(fd); 调用成功,fd[0]存放供读进程使用的文件描述符(管道出口),fd[1]存放供写程使用的文件描述符(管道入口)。 一个进程在由pipe()创建管道后,一般再fork()一个子进程,然后通过管道实现父子进程间的通信,子进程将从父进程那里继承所有打开的文件描述符。则父子两个进程都能访问组成管道的两个文件描述符,这样子进程可以向父进程发送消息(或者相反)。 发送进程利用文件系统的系统调用write(fd[1],buf,size),把buf中size个字符送入fd[1],接收进程利用read(fd[0],buf,size),把从fd[0]读出的size个字符置入buf中。这样管道按FIFO(先进先出)方式传送信息。 2、实验内容: #include main() { int x,fd[2]; char buf[30],s[30]; pipe(fd); while ((x=fork())==-1);

if (x==0) { close(fd[0]); printf("Child Process!\n"); strcpy(buf,"This is an example\n"); write(fd[1],buf,30); exit(0); } else{ close(fd[1]); printf("Parent Process!\n"); read(fd[0],s,30); printf("%s\n",s); printf("x value in Parent Process:%d!\n",x); } } (1)阅读上述父子进程利用管道进行通信的例子,写出程序的运行结果并分析。 程序运行x=fork()后,创建里一个子进程,在子进程里x的返回值为0,在父进程里x的返回值为7684,则子进程会执行if语句里的代码段,先关闭了管道的读入端,再在屏幕上输出“Child Process!”,然后将“This is an example\n”存入buf数组中,通过调用write()函数将buf数组的内容从管道的写入端写入,而父进程会执行else语句里的代码段,先关闭了管道的写入端,再在屏幕上输出“Parent Process!”,然后通过调用read ()函数将buf数组的内容从管道的读入端读入冰存储在s数组里,接着通过printf()函数将s数组里的内容输出到屏幕上,最后在屏幕上输出父进程中x的值。 (2)编写程序:父进程利用管道将一字符串交给子进程处理。子进程读字符串,将里面的字符反向后再交给父进程,父进程最后读取并打印反向的字符串。 #include main() { int i,x,fd[2]; char buf[20],s[20],cpy[20],m[20]; strcpy(buf,"This is an example\n"); pipe(fd); write(fd[1],buf,20);

李建伟版实用操作系统第二版最新习题 3 进程同步与通信

李建伟版实用操作系统第二版最新习题 3 进程同步与通信 一、选择题 题号1 2 3 4 5 6 7 8 9 10 答案A D D C B C A B A A 题号11 12 答案D C 二、综合题 1、答:临界资源也称独占资源、互斥资源,它是指某段时间内只充许一个进程使用的资源。比如打印机等硬件资源,以及只能互斥使用的变量、表格、队列等软件资源。各个进程中访问临界资源的、必须互斥执行的程序代码段称为临界区,各进程中访问同一临界资源的程序代码段必须互斥执行。 为防止两个进程同时进入临界区,可采用软件解决方法或同步机构来协调它们。但是,不论是软件算法还是同步机构都应遵循下述准则: ①空闲让进。②忙则等待。③有限等待。④让权等待。 2、答:忙等待意味着一个进程正在等待满足一个没有闲置处理器的严格循环的条件。因为只有一个CPU 为多个进程服务,因此这种等待浪费了CPU 的时钟。 其他类型的等待:与忙等待需要占用处理器不同,另外一种等待则允许放弃处理器。如进程阻塞自己并且等待在合适的时间被唤醒。忙等可以采用更为有效的办法来避免。例如:执行请求(类似于中断)机制以及PV 信号量机制,均可避免“忙等待”现象的发生。 3、答: 在生产者—消费者问题中,Producer 进程中P(empty)和P(mutex)互换先后次序。先 执行P(mutex),假设成功,生产者进程获得对缓冲区的访问权,但如果此时缓冲池已满,没有空缓冲区可供其使用,后续的P(empty)原语没有通过,Producer 阻塞在信号量empty 上,而此时mutex 已被改为0,没有恢复成初值1。切换到消费者进程后,Consumer 进程执行P(full)成功,但其执行P(mutex)时由于Producer 正在访问缓冲区,所以不成功,阻塞在信号量mutex 上。生产者进程和消费者进程两者均无法继续执行,相互等待对方释放资源,会产生死锁。 在生产者和消费者进程中,V 操作的次序无关紧要,不会出现死锁现象。 4、答:

进程同步与通信作业习题与答案

第三章 一.选择题(50题) 1.以下_B__操作系统中的技术是用来解决进程同步的。 A.管道 B.管程 C.通道 2.以下_B__不是操作系统的进程通信手段。 A.管道 B.原语 C.套接字 D.文件映射 3.如果有3个进程共享同一程序段,而且每次最多允许两个进程进入该程序段,则信号量的初值应设置为_B__。 4.设有4个进程共享一个资源,如果每次只允许一个进程使用该资源,则用P、V操作管理时信号量S的可能取值是_C__。 ,2,1,0,-1 ,1,0,-1,-2 C. 1,0,-1,-2,-3 ,3,2,1,0 5.下面有关进程的描述,是正确的__A__。 A.进程执行的相对速度不能由进程自己来控制 B.进程利用信号量的P、V 操作可以交换大量的信息 C.并发进程在访问共享资源时,不可能出现与时间有关的错误 、V操作不是原语操作 6.信号灯可以用来实现进程之间的_B__。 A.调度 B.同步与互斥 C.同步 D.互斥 7.对于两个并发进程都想进入临界区,设互斥信号量为S,若某时S=0,表示_B__。 A.没有进程进入临界区 B.有1个进程进入了临界区 C. 有2个进程进入了临界区 D. 有1个进程进入了临界区并且另一个进程正等待进入 8. 信箱通信是一种_B__方式 A.直接通信 B.间接通信 C.低级通信 D.信号量 9.以下关于临界区的说法,是正确的_C__。

A.对于临界区,最重要的是判断哪个进程先进入 B.若进程A已进入临界区,而进程B的优先级高于进程A,则进程B可以 打断进程A而自己进入临界区 C. 信号量的初值非负,在其上只能做PV操作 D.两个互斥进程在临界区内,对共享变量的操作是相同的 10. 并发是指_C__。 A.可平行执行的进程 B.可先后执行的进程 C.可同时执行的进程 D.不可中断的进程 11. 临界区是_C__。 A.一个缓冲区 B.一段数据区 C.一段程序 D.栈 12.进程在处理机上执行,它们的关系是_C__。 A.进程之间无关,系统是封闭的 B.进程之间相互依赖相互制约 C.进程之间可能有关,也可能无关 D.以上都不对 13. 在消息缓冲通信中,消息队列是一种__A__资源。 A.临界 B.共享 C.永久 D.可剥夺 14. 以下关于P、V操作的描述正确的是__D_。 A.机器指令 B. 系统调用 C.高级通信原语 D.低级通信原语 15.当对信号量进行V源语操作之后,_C__。 A.当S<0,进程继续执行 B.当S>0,要唤醒一个就绪进程 C. 当S<= 0,要唤醒一个阻塞进程 D. 当S<=0,要唤醒一个就绪 16.对临界区的正确论述是__D_。 A.临界区是指进程中用于实现进程互斥的那段代码 B. 临界区是指进程中用于实现进程同步的那段代码 C. 临界区是指进程中用于实现进程通信的那段代码 D. 临界区是指进程中访问临界资源的那段代码 17. __A__不是进程之间的通信方式。 A.过程调用 B.消息传递 C.共享存储器 D.信箱通信 18. 同步是指进程之间逻辑上的__A__关系。

实验6 进程及进程间的通信之共享内存

实验6 进程及进程间的通信 ●实验目的: 1、理解进程的概念 2、掌握进程复制函数fork的用法 3、掌握替换进程映像exec函数族 4、掌握进程间的通信机制,包括:有名管道、无名管道、信 号、共享内存、信号量和消息队列 ●实验要求: 熟练使用该节所介绍fork函数、exec函数族、以及进程间通信的相关函数。 ●实验器材: 软件: 1.安装了Ubunt的vmware虚拟机 硬件:PC机一台 ●实验步骤: 1、用进程相关API 函数编程一个程序,使之产生一个进程 扇:父进程产生一系列子进程,每个子进程打印自己的PID 然后退出。要求父进程最后打印PID。 进程扇process_fan.c参考代码如下:

2、用进程相关API 函数编写一个程序,使之产生一个进程 链:父进程派生一个子进程后,然后打印出自己的PID,然后退出,该子进程继续派生子进程,然后打印PID,然后退出,以此类推。

要求:1) 实现一个父进程要比子进程先打印PID 的版本。(即 打印的PID 一般是递增的) 2 )实现一个子进程要比父进程先打印PID 的版本。(即打印的PID 一般是递减的) 进程链1,process_chain1.c的参考代码如下:

进程链2,process_chain2.c的参考代码如下:

3、编写程序execl.c,实现父进程打印自己的pid号,子进程调用 execl函数,用可执行程序file_creat替换本进程。注意命令行参数。 参考代码如下: /*execl.c*/ #include #include #include

Linux进程通信实验报告

Linux进程通信实验报告 一、实验目的和要求 1.进一步了解对进程控制的系统调用方法。 2.通过进程通信设计达到了解UNIX或Linux系统中进程通信的基本原理。 二、实验内容和原理 1.实验编程,编写程序实现进程的管道通信(设定程序名为pipe.c)。使 用系统调用pipe()建立一条管道线。而父进程从则从管道中读出来自 于两个子进程的信息,显示在屏幕上。要求父进程先接受子进程P1 发来的消息,然后再接受子进程P2发来的消息。 2.可选实验,编制一段程序,使其实现进程的软中断通信(设定程序名为 softint.c)。使用系统调用fork()创建两个子进程,再用系统调用 signal()让父进程捕捉键盘上来的中断信号(即按Del键),当父进程 接受这两个软中断的其中一个后,父进程用系统调用kill()向两个子 进程分别发送整数值为16和17的软中断信号,子进程获得对应软中 断信号后分别输出相应信息后终止。 三、实验环境 一台安装了Red Hat Linux 9操作系统的计算机。 四、实验操作方法和步骤 进入Linux操作系统,利用vi编辑器将程序源代码输入并保存好,然后 打开终端对程序进行编译运行。 五、实验中遇到的问题及解决 六、实验结果及分析 基本实验 可选实验

七、源代码 Pipe.c #include"stdio.h" #include"unistd.h" main(){ int i,j,fd[2]; char S[100]; pipe(fd); if(i=fork==0){ sprintf(S,"child process 1 is sending a message \n"); write(fd[1],S,50); sleep(3); return; } if(j=fork()==0){ sprintf(S,"child process 2 is sending a message \n"); write(fd[1],S,50); sleep(3); return;

第3章 进程同步与通信 练习题答案

第3章进程同步与通信练习题 (一)单项选择题 1.临界区是指( )。 A.并发进程中用于实现进程互斥的程序段 B.并发进程中用于实现进程同步的程序段 C.并发进程中用户实现进程通信的程序段 D.并发进程中与共享变量有关的程序段 2.相关临界区是指( )。 A.一个独占资源 B.并发进程中与共享变量有关的程序段 c.一个共享资源 D.并发进程中涉及相同变量的那些程序段 3.管理若干进程共享某一资源的相关临界区应满足三个要求,其中( )不考虑。 A一个进程可以抢占己分配给另一进程的资源 B.任何进程不应该无限地逗留在它的临界区中c.一次最多让一个进程在临界区执行 D.不能强迫一个进程无限地等待进入它的临界区4、( )是只能由P和v操作所改变的整型变量。 A共享变量 B.锁 c整型信号量 D.记录型信号量 5.对于整型信号量,在执行一次P操作时,信号量的值应( )。 A.不变 B.加1 C减1 D.减指定数值 6.在执行v操作时,当信号量的值( )时,应释放一个等待该信号量的进程。 A>0 B.<0 c.>=0 D.<=0 7.Pv操作必须在屏蔽中断下执行,这种不可变中断的过程称为( )。 A初始化程序 B.原语 c.子程序 D控制模块 8.进程间的互斥与同步分别表示了各进程间的( )。 A.竞争与协作 B.相互独立与相互制约 c.不同状态 D.动态性与并发性 9并发进程在访问共享资源时的基本关系为( )。 A.相互独立与有交往的 B.互斥与同步 c并行执行与资源共享 D信息传递与信息缓冲 10.在进程通信中,( )常用信件交换信息。 A.低级通信 B.高级通信 c.消息通信 D.管道通信 11.在间接通信时,用send(N,M)原语发送信件,其中N表示( )。 A.发送信件的进程名 B.接收信件的进程名 C信箱名 D.信件内容 12.下列对线程的描述中,( )是错误的。 A不同的线程可执行相同的程序 B.线程是资源分配单位 c.线程是调度和执行单位 D.同一 进程中的线程可共享该进程的主存空间 13.实现进程互斥时,用( )对应,对同一个信号量调用Pv操作实现互斥。 A.一个信号量与一个临界区 B.一个信号量与—个相关临界区 c.一个信号量与一组相关临界 区 D一个信号量与一个消息 14.实现进程同步时,每一个消息与一个信号量对应,进程( )可把不同的消息发送出去。 A.在同一信号量上调用P操作 B在不同信号量上调用P操作 c.在同一信号量上调用v操作D.在不同信号量上调用v操作 (二)填空题 1.目前使用的计算机的基本特点是处理器______执行指令。 2.进程的______是指进程在顺序处理器上的执行是按顺序进行的。 3.当一个进程独占处理器顺序执行时,具有______和______两个特性。 4.进程的封闭性是指进程的执行结果只取决于______,不受外界影响。 5 进程的可再现性是指当进程再次重复执行时,必定获得______的结果。 6.一个进程的工作在没有全部完成之前,另一个进程就可以开始工作,则称这些进程为______.

实验三 进程间通信

实验三进程间通信(2学时) 一、实验目的 (1)了解什么是信号。 (2)熟悉LINUX系统中进程之间软中断通信的基本原理。 (3)熟悉LINUX支持的管道通信方式。 二、实验内容 (1)编写一段程序,使其现实进程的软中断通信。 即:使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按 ctrl+c 键);当捕捉到中断信号后,父进程用系统调用kill( )向两个子进程发出信号,子进程捕捉到信号后,分别输出下列信息后终止: Child Process11 is killed by Parent! Child Process12 is killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止 Parent Process is killed! 要求:运行以下参考程序并分析结果。 <参考程序> #include #include #include #include void waiting(),stop(),alarming(); int wait_mark; main() { int p1,p2; if(p1=fork()) /*创建子进程p1*/ { if(p2=fork()) /*创建子进程p2*/ { //父进程 wait_mark=1; signal(SIGINT,stop); /*接收到^c信号,转stop*/

signal(SIGALRM,alarming);/*接受SIGALRM*/ waiting(); kill(p1,16); /*向p1发软中断信号16*/ kill(p2,17); /*向p2发软中断信号17*/ wait(0); /*同步*/ wait(0); printf("parent process is killed!\n"); exit(0); //会暂时停止目前进程的执行,直到有信号来到或子进程结束。 } else { wait_mark=1; signal(17,stop); signal(SIGINT,SIG_IGN); /*忽略 ^c信号*/ while (wait_mark!=0); lockf(1,1,0); printf("child process2 is killed by parent!\n"); lockf(1,0,0); exit(0); } } else { wait_mark=1; signal(16,stop); signal(SIGINT,SIG_IGN); /*忽略^c信号*/ while (wait_mark!=0); lockf(1,1,0); printf("child process1 is killed by parent!\n"); lockf(1,0,0); exit(0); } } void waiting() { sleep(5); if (wait_mark!=0) kill(getpid(),SIGALRM); } void alarming()

进程同步实验报告

实验三进程的同步 一、实验目的 1、了解进程同步和互斥的概念及实现方法; 2、更深一步的了解fork()的系统调用方式。 二、实验内容 1、预习操作系统进程同步的概念及实现方法。 2、编写一段源程序,用系统调用fork()创建两个子进程,当此程序运行时,在系统中有一个父进程和两个子进程活动。让每一个进程在屏幕上显示一个字符:父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。程序的输出是什么?分析原因。 3、阅读模拟火车站售票系统和实现进程的管道通信源代码,查阅有关进程创建、进程互斥、进程同步的系统功能调用或API,简要解释例程中用到的系统功能或API的用法,并编辑、编译、运行程序,记录程序的运行结果,尝试给出合理的解释。 4、(选做)修改问题2的代码,使得父子按顺序显示字符“a”;“b”、“c”编辑、编译、运行。记录程序运行结果。 三、设计思想 1、程序框架 (1)创建两个子进程:(2)售票系统:

(3)管道通信: 先创建子进程,然后对内容加锁,将输出语句存入缓存,并让子进程自己进入睡眠,等待别的进程将其唤醒,最后解锁;第二个子进程也执行这样的过程。父进程等待子进程后读内容并输出。 (4)修改程序(1):在子进程的输出语句前加上sleep()语句,即等待父进程执行完以后再输出。 2、用到的文件系统调用函数 (1)创建两个子进程:fork() (2)售票系统:DWORD WINAPI Fun1Proc(LPVOID lpPartameter); CreateThread(NULL,0,Fun1Proc,NULL,0,NULL); CloseHandle(hThread1); (HANDLE)CreateMutex(NULL,FALSE,NULL); Sleep(4000)(sleep调用进程进入睡眠状态(封锁), 直到被唤醒); WaitForSingleObject(hMutex,INFINITE); ReleaseMutex(hMutex); (3)管道通信:pipe(fd),fd: int fd[2],其中: fd[0] 、fd[1]文件描述符(读、写); lockf( fd,function,byte)(fd: 文件描述符;function: 1: 锁定 0:解锁;byte: 锁定的字节数,0: 从当前位置到文件尾); write(fd,buf,byte)、read(fd,buf,byte) (fd: 文件描述符;buf : 信息传送的源(目标)地址;byte: 传送的字节数); sleep(5); exit(0); read(fd[0],s,50) (4)修改程序(1):fork(); sleep(); 四、调试过程 1、测试数据设计 (1)创建两个子进程:

操作系统实验-进程同步与互斥

实验四:进程的管道通信 实验题目 进程的管道通信 实验目的 加深对进程概念的理解,明确进程和程序的区别。学习进程创建的过程,进一步认识进程并发执行的实质。分析进程争用资源的现象,学习解决进程互斥的方法。学习解决进程同步的方法。掌握Linux系统中进程间通过管道通信的具体实现 实验内容 使用系统调用pipe()建立一条管道,系统调用fork()分别创建两个子进程,它们分别向管道写一句话,如: Child process1 is sending a message! Child process2 is sending a message! 父进程分别从管道读出来自两个子进程的信息,显示在屏幕上。 当然,仅仅通过屏幕上输出这两句话还不能说明实现了进程的管道通信,为了能够更好的证明和显示出进程的同步互斥和通信,在其中要加入必要的跟踪条件,如一定的输出语句等,来反映程序的并发执行情况 实验要求 这是一个设计型实验,要求自行、独立编制程序。两个子进程要并发执行。实现管道的互斥使用。当一个子进程正在对管道进行写操

作时,另一个欲写入管道的子进程必须等待。使用系统调用lockf(fd[1],1,0)实现对管道的加锁操作,用lockf(fd[1],0,0)解除对管道的锁定。实现父子进程的同步,当父进程试图从一空管道中读取数据时,便进入等待状态,直到子进程将数据写入管道返回后,才将其唤醒。 为了清楚的反应进程的同步,在子进程完成相应的操作后,调用sleep()函数睡眠一段时间(程序中定为3s)。父进程先执行wait()函数,当有子进程执行完毕后,会得到子进程的返回结果并清理子进程。若子进程没执行完,父进程一直执行wait()进行监听,知道有一个子进程执行完成为僵尸进程。 程序中用到的系统调用 因为程序时在linux系统上进行编写的,所以其中要利用到相关的linux提供的系统调用。 所用到的系统调用包含在如下头文件中。 #include #include #include #include #include #include fork() 用于创一个子进程。 格式:int fork();

操作系统实验Linux进程同步与通信操作系统二

操作系统课程实验二 年级2012 级 专业计算机科学与技术(应用型)指导教师黄玲 学号 姓名

实验二、Linux进程同步与通信 一、关键问题 1、实验目的 理解进程的高级通信;理解通过信号量实现进程的同步。 2、实验环境 Ubuntu 8.0或者以上,Eclipse集成开发环境 3、实验内容 3.1 观察Linux进程通信 下面代码实现两个进程之间通过共享内存通信。 3.2 Linux进程同步 实验要求:一个生产者向一个缓冲区发消息,每当发出一个消息后,要等待三个消费者都接收这条消息后,生产者才能发送新消息。用信号量和P、V操作,写出他们同步工作的程序。(提示:可以把缓冲区看作是三个缓冲块组成的缓冲区,生产者等到这三个缓冲块为空时,才发送新消息到这个缓冲区。每个消费者从一个缓冲块取走数据。) 二、设计修改思路 这是一个典型的生产者消费者问题可以基于信号灯解决,由于有3个消费者,一个生产者,共用同一个缓冲区,所以我们需要设置4个信号灯来控制4个进程的互斥。一个生产者进程不断向修改变量(写入10次),三个消费者进程从缓冲区中读取数据。创建了empty、full1、full2、full3四个信号量,供进程间同步访问临界区,同时建立两个虚存区:a用于生产者、消费者之间的共享数据,get 记录当前生产者进程和消费者进程的读写次数。 实现的算法如下: 生产者进程 { p(empty); p(empty); p(empty); 发送消息 v(full1); v(full2); v(full3); } 消费者A进程 { p(full1); 接受消息 v(empty); } 消费者B、C进程和A进程类似

相关文档
最新文档