描述
编辑
以一个停车场的运作为例。简单起见,假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆直接进入,然后放下车拦,剩下的车则必须在入口等待,此后来的车也都不得不在入口处等待。这时,有一辆车离开停车场,看门人得知后,打开车拦,放入外面的一辆进去,如果又离开两辆,则又可以放入两辆,如此往复。
在这个停车场系统中,车位是公共资源,每辆车好比一个线程,看门人起的就是信号量的作用。
分类
编辑
整型信号量(integer semaphore):信号量是整数
记录型信号量(record semaphore):每个信号量s除一个整数值s.value(计数)外,还有一个进程等待队列s.L,其中是阻塞在该信号量的各个进程的标识
二进制信号量(binary semaphore):只允许信号量取0或1值
每个信号量至少须记录两个信息:信号量的值和等待该信号量的进程队列。它的类型定义如下:(用类PASCAL语言表述)
semaphore = record
value: integer
queue: ^PCB
end
其中PCB是进程控制块,是操作系统为每个进程建立的数据结构。
s.value>=0时,s.queue为空;
s.value<0时,s.value的绝对值为s.queue中等待进程的个数;
特性
编辑
抽象的来讲,信号量的特性如下:信号量是一个非负整数(车位数),所有通过它的线程/进程(车辆)都会将该整数减一(通过它当然是为了使用资源),当该整数值为零时,所有试图通过它的线程都将处于等待状态。在信号量上我们定义两种操作: Wait(等待) 和 Release(释放)。当一个线程调用Wait操作时,它要么得到资源然后将信号量减一,要么一直等下去(指放入阻塞队列),直到信号量大于等于一时。Release(释放)实际上是在信号量上执行加操作,对应于车辆离开停车场,该操作之所以叫做“释放”是因为释放了由信号量守护的资源。
操作方式
编辑
对信号量有4种操作(include<semaphore>):
1. 初始化(initialize),也叫做建立(create) int sem_init(sem_t *sem, int pshared, unsigned int value)
2. 等信号(wait),也可叫做挂起(suspend)int sem_wait(sem_t *sem)
3. 给信号(signal)或发信号(post) int sem_post(sem_t *sem)
4.清理(destroy) int sem_destory(sem_t *sem)[1]
创建
编辑
同共享内存一样,系统中同样需要为信号量集定制一系列专有的操作函数(semget,semctl等)。系统命令ipcs可查看当前的系统IPC的状态,在命令后使用-s参数。使用函数semget可以创建或者获得一个信号量集ID,函数原型如下:
#include <sys/shm.h>
int semget( key_t key, int nsems, int flag)
函数中参数key用来变换成一个标识符,每一个IPC对象与一个key相对应。当新建一个共享内存段时,使用参数flag的相应权限位对ipc_perm结构中的mode域赋值,对相应信号量集的shmid_ds初始化的值如表1所示。
shmid_ds结构初始化值表
ipc_perm结构数据
初 值
ipc_perm结构数据
初 值
Sem_otime
0
Sem_nsems
Nsems
Sem_ctime
系统当前值
参数nsems是一个大于等于0的值,用于指明该信号量集中可用资源数(在创建一个信号量时)。当打开一个已存在的信号量集时该参数值为0。函数执行成功,则返回信号量集的标识符(一个大于等于0的整数),失败,则返回–1。函数semop用以操作一个信号量集,函数原型如下:
#include <sys/sem.h>
int semop( int semid, struct sembuf semoparray[], size_t nops )
函数中参数semid是一个通过semget函数返回的一个信号量标识符,参数nops标明了参数semoparray所指向数组中的元素个数。参数semoparray是一个struct sembuf结构类型的数组指针,结构sembuf来说明所要执行的操作,其定义如下:
struct sembuf{
unsigned short sem_num
short sem_op
short sem_flg
}
在sembuf结构中,sem_num是相对应的信号量集中的某一个资源,所以其值是一个从0到相应的信号量集的资源总数(ipc_perm.sem_nsems)之间的整数。sem_op指明所要执行的操作,sem_flg说明函数semop的行为。sem_op的值是一个整数,如表2所示,列出了详细sem_op的值及所对应的操作。
sem_op值详解
Sem_op
操 作
正数
释放相应的资源数,将sem_op的值加到信号量的值上
0
进程阻塞直到信号量的相应值为0,当信号量已经为0,函数立即返回。如果信号量的值不为0,则依据sem_flg的IPC_NOWAIT位决定函数动作。sem_flg指定IPC_NOWAIT,则semop函数出错返回EAGAIN。sem_flg没有指定IPC_NOWAIT,则将该信号量的semncnt值加1,然后进程挂起直到下述情况发生。信号量值为0,将信号量的semzcnt的值减1,函数semop成功返回;此信号量被删除(只有超级用户或创建用户进程拥有此权限),函数smeop出错返回EIDRM;进程捕捉到信号,并从信号处理函数返回,在此情况将此信号量的semncnt值减1,函数semop出错返回EINTR
负数
请求sem_op的绝对值的资源。如果相应的资源数可以满足请求,则将该信号量的值减去sem_op的绝对值,函数成功返回。当相应的资源数不能满足请求时,这个操作与sem_flg有关。sem_flg指定IPC_NOWAIT,则semop函数出错返回EAGAIN。sem_flg没有指定IPC_NOWAIT,则将该信号量的semncnt值加1,然后进程挂起直到下述情况发生:当相应的资源数可以满足请求,该信号的值减去sem_op的绝对值。成功返回;此信号量被删除(只有超级用户或创建用户进程拥有此权限),函数smeop出错返回EIDRM:进程捕捉到信号,并从信号处理函数返回,在此情况将此信号量的semncnt值减1,函数semop出错返回EINTR
基本流程
编辑
下面实例演示了关于信号量操作的基本流程。程序中使用semget函数创建一个信号量集,并使用semop函数在这个信号集上执行了一次资源释放操作。并在shell中使用命令查看系统IPC的状态。
(1)在vi编辑器中编辑该程序。
程序清单14-10 create_sem.c 使用semget函数创建一个信号量
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
int sem_id
int nsems = 1
int flags = 0666
struct sembuf buf
sem_id = semget(IPC_PRIVATE, nsems, flags)/*创建一个新的信号量集*/
if ( sem_id <0 ){
perror( "semget ")
exit (1 )
}
/*输出相应的信号量集标识符*/
printf ( "successfully created a semaphore : %d\n", sem_id )
buf.sem_num = 0/*定义一个信号量操作*/
buf.sem_op = 1/*执行释放资源操作*/
buf.sem_flg = IPC_NOWAIT/*定义semop函数的行为*/
if ( (semop( sem_id, &buf, nsems) ) <0) { /*执行操作*/
perror ( "semop")
exit (1 )
}
system ( "ipcs -s " )/*查看系统IPC状态*/
exit ( 0 )
}
(2)在vmware中编译该程序如下:
gcc -o a.o testc_semaphore.c
(3)在shell中运行该程序如下:
./a3.o
successfully created a semaphore : 0
------ Semaphore Arrays --------
key semid owner perms nsems
0x00000000 0 zcr 666 1
在上面程序中,用semget函数创建了一个信号量集,定义信号量集的资源数为1,接下来使用semop函数进行资源释放操作。在程序的最后使用shell命令ipcs来查看系统IPC的状态。
%注意:命令ipcs参数-s标识查看系统IPC的信号量集状态。
希望能帮到你,满意望采纳哦。
1、中高温发光陶瓷釉研究发光陶瓷,是长余辉发光材料在陶瓷行业的应用.本文利用溶胶—凝胶法制备出了发光性能优异的Sr2MgSi2O7:Eu2+,Dy3+新型长余辉发光材料,继而将其成功应用于1050℃-1150℃中高温釉料,首次制备出了Sr2MgSi2O7:Eu2+,Dy3+中高温发光陶瓷釉.本文系统研究了溶胶—凝胶法制备Sr2MgSi2O7:Eu2+,Dy3+发光体的基本工艺讨论了Sr2MgSi2O7:Eu2+,Dy3+发光材料的耐水性能、化学稳定性和耐高温性能讨论了Sr2MgSi2O7:Eu2+,Dy3+发光材料的发光性能,并且初步探讨了其发光机理在发光材料研究的基础上,进而研究了Sr2MgSi2O7:Eu2+,Dy3+发光陶瓷釉的制备工艺研究了发光釉的...................共55页
2、超平滑陶瓷釉研究
以钾长石、石英、高岭土、方解石、白云石等为原料,采用常规烧成方法制备了超平滑釉,探讨了釉浆性质、釉料高温性质、釉层的显微结构等对釉面粗糙度的影响。 釉浆性质如釉料组成、粒度、浓度、流动性等不仅是影响施釉过程的关键因素,同时也对烧后釉面质量有较大的影响。随釉料中熔块含量的增加,烧后釉面粗糙度逐渐降低,光泽度逐渐增加。当熔块含量达60wt%以上时,釉面粗糙度(Ra)小于10nm含量增加至80wt%以上时,釉面光泽度大于110%。随釉浆粒度的减小,釉面粗糙度逐渐降低,D90介于4.0~7.5μm之间时,釉面粗糙度小于10nm。生坯施釉时釉浆浓度以1.5~1.6g·cm-3为宜,素坯施釉时釉浆浓度应控制在1.6~1.7g·cm-3,可以获得釉面质量较好的试样...................共47页
3、陶瓷釉面抗菌自洁薄膜制备工艺与性能研究
对陶瓷釉面抗菌自洁薄膜的制备工艺和性能进行了研究。文章使用胶溶法制备稳定的载银纳米二氧化钛水溶胶,以溶胶的Zeta电位、透过率及粒径分布为主要表征指标,着重考察溶胶pH值、胶体配制浓度、胶溶剂浓度、制胶温度及载银改性对其分散稳定性的影响,优化了制备工艺条件,并对其在陶瓷釉面基底上的镀膜效果以SEM和EDS进行了表征和测试。研究结果表明:当制胶水浴T=40~80℃,溶胶pH=1.2~2.0时,使用质量分数为5﹪的稀硝酸或质量分数为3﹪的稀盐酸胶溶按0.05~0.3mol/L配制的正钛酸前驱体,均能够制备出较稳定的纳米二氧化钛水溶胶;但使用硝酸胶溶...................共49页
4、低锆乳浊釉与其结构的研究
硅酸锆是陶瓷釉中常用的乳浊剂,但其来源有限、价格昂贵、过多使用还会造成釉面缺陷及使产品产生辐射等不足,目前研制及使用少锆和不含锆的乳浊釉已是国内外陶瓷界的一个趋势。本文旨在少用或不用硅酸锆,通过调整磷灰石的添加量,制备了低锆或无锆的P-Zr、P-Zn及P-Li-Zn3个系列的复合乳浊釉。采用XRD、SEM等现代测试技术分析了样品的性能及微观结构,探讨了釉的乳浊机理及坯釉结合机理。坯体采用固体废弃物武汉市东湖淤泥、粉煤灰和硅灰石为原料,经1100℃烧成后,坯体呈玫瑰棕色,吸水率为7.24%、气孔率为15.82%、体积密度为2.19g.cm-3。热膨胀系数为4.67×10-6/℃,酸度系数为0.75。坯体的主晶相为针棒状的蓝晶石晶体(Al2SiO5)、颗粒状的石英晶体(SiO2)和块...................共52页
5、新型纳米金属光泽釉研究
通过湿化学方法首先合成金属光泽剂CuMn2O4粉体,添加到基础釉中,制备纳米金属光泽釉。通过TG—DTA、XRD、FE—SEM、EPMA现代测试技术研究了CuMn2O4的合成工艺及金属光泽釉的制备工艺,探讨了金属光泽釉的呈色机理。 以CuSO4·5H2O、MnSO4·H2O为原料,采用共沉淀法合成CuMn2O4粉体的最佳工艺参数为:pH=10,反应温度为45℃,反应物浓度0.1g/mL,热处理温度850℃,样品主晶相为正CuMn2O4,属立方晶系,平均晶粒尺寸约120nm。研究表明,热处理温度的高低直接影响产物的结晶状况,随热处理温度的升高,CuMn2O4粉体的平均结晶度呈现先增大后减小的趋势,热处理温度为800℃时平均结晶度最大,为89.15%,晶粒尺寸约100nm。热处理温度850℃时平均结晶度为83.33%,晶...................共43页
6、陶瓷坯釉料配方优化与显微结构定量分析
针对实际的陶瓷生产工艺中的制约陶瓷生产质量的两点关键性技术问题,从理论上提出相应的改进方案并在技术实现上加以改进,具体方案详述如下:第一,针对配方优化方面,利用最优化算法对陶瓷配方进行优化设计,将繁琐的传统手工计算交由计算机来处理,缩短产品设计周期,提高生产效率。在分析数值优化算法的基础上,针对陶瓷配方优化方法的特点,分别采用复合形法和遗传算法对陶瓷配方进行设计。通过两种算法的结果对比分析,发现标准遗传算法在计算后的结果不理想,与复合形法的结果相比还有一定的差距,因此重点对标准遗传算法进行了优化和...................共65页
7、利用花岗石废料制备陶瓷釉料研究
石材从原料加工到成品,会产生大量的废弃物。花岗石在开采和切割加工过程中,同样会产生大量碎片和切割粉屑并作为废料丢弃,造成资源浪费。目前,艺术陶瓷和琉璃瓦所用的釉料,都是由多种天然原料(如石英、长石、石灰石等)加工?而成。由于釉料的矿源日益减少,...................共40页
8、超低温釉制备与烧成机理的研究
设计了釉料配方和添加剂,成功制备出烧成温度低于800℃的优质釉面;用DSC-TG、XRD、SEM、拉曼光谱对样品的结构、微观形貌、形成过程等进行了表征,测试了釉面的物理性能,研究了超低温釉的低温烧成机理和最佳烧成制度,讨论了ZnO、Na2B4O7对釉料烧成温度的影响以及烧成制度对釉面质量的影响。结果表明,釉料配方中,B2O3:SiO2为1.367:1(质量比),ZnO含量为11.74%,釉料烧成温度在780℃左右,烧成后釉面平整光滑,光泽度高,透明性好,有较强的耐热性,胚釉断面有结合层生成。与原配方相比,始熔温度降低了500℃左右;熔融过程温宽增加
9、超细无机复合抗菌搪瓷的制备研究
对搪瓷及抗菌搪瓷的发展现状作了简要介绍对抗菌剂的分类、制备方法和抗菌机理以及抗菌剂引入搪瓷方法进行了阐述并对抗菌制品的检测方法作了简要介绍。研究确定了超细无机复合抗菌粉体制备的适宜工艺条件,即在体系总液量一定,原料配比一定的情况下,搅拌速度为750r/min,分散剂用量为0.13g(1.0%),反应时间为40min,反应温度为98℃,煅烧过程中温度为750℃,时间为3 h。根据适宜工艺条件制得的超细抗菌粉体用激光粒度仪测得平均粒径为230nm左右,粒径均匀,分布较窄。抗菌粉体为非溶出性抗菌剂,此抗菌剂在浓度为100mg/L时,30min内对大肠杆菌...................共55页
10、低温快烧结晶釉的研制
以缩短传统结晶釉的烧成周期、减少生产成本为主要目的,从配方、工艺方面着手,以氧化锌和二氧化硅为主要原料,通过添加萤石降低釉的粘度和用金红石型TiO2作成核剂研制出符合现代建筑陶瓷产品低温快烧要求的硅酸锌系结晶釉。通过不断调整釉料配方和工艺,同时引入品种,获得了制备结晶效果好、烧成温度低、烧成周期短的结晶釉的工艺方法。利用X射线衍射分析和偏光显微镜研究和分析了结晶釉的组成和显微结构,并确定本实验中釉中析出的主晶相为Zn2SiO4晶体。探讨了快烧结晶釉的析晶机理,分析了各组...................共50页
11、低温烧成乳浊釉的研究及乳浊机理探讨
釉料配方中采用价格低廉的磷灰石取代或部分取代锆英石作为乳浊剂制备磷乳浊釉和磷锆复合乳浊釉。黄河泥沙质陶瓷坯体采用注浆成型法制备,1080~1180℃烧成。测试了样品的吸水率、气孔率、体积密度。采用现代测试手段XRD、SEM、EPMA对样品的晶相组成和微观结构进行了分析。结果表明,烧后坯体的主晶相为柱状的莫来石(A16Si2013)和颗粒状的石英晶体(Si02)。黄河泥沙质陶瓷坯体烧成后呈色较深,本文成功研制了一种可以遮盖坯体颜色的低温乳浊釉,研究了其最佳配方组成及合理的制备工艺,测试了典型样品的釉面的白度、显微硬度等性能。分析了釉层结构和性能,并探讨了釉层的乳浊机理和坯体与釉层的结合机理。其中较佳磷釉的...................共65页
12、多孔釉膜的制备及性能研究
以石英砂、长石、石灰石、膨润土、硼砂和工业级氧化铝粉为原料,以可溶性淀粉为造孔剂,采用喷涂工艺涂膜,在高温下烧结,可得到表面光滑、机械强度高、孔径分布均匀的多孔釉膜。膜层厚度受喷涂时间、釉浆浓度的影响,膜孔径的大小受造孔剂种类、添加量、釉膜烧结温度、保温时间的影响。通过调节这些因素,即可制备出孔径可控的多孔釉膜。造孔剂的最大用量不能超过15%,否则造成釉膜表面出现大面积缺陷。用扫描电子...................共40页
13、防污功能陶瓷材料的制备与性能研究
研究功能陶瓷对水的表面张力、接触角、溶解氧、乳液稳定性、植物种子发芽等的影响,测试了陶瓷表面油滴在水中的运动规律。研究结果表明:将稀土复合磷酸盐无机抗菌材料添加到陶瓷釉料中制备的陶瓷具有较好的防污功能这种陶瓷与水接触后可使水分子活化、降低水的表面张力、减小水在陶瓷表面的接触角、提高乳液的稳定性,使得陶瓷表面具有防油污功能经防污功能陶瓷处理后的水,还可...................共46页
14、高白釉的研制及性能研究
以锆英石为乳浊剂,研制出烧成温度大于 1300℃。白度大于 80,符合国标的高温乳浊白釉。并借助于 OM、SEM、XRD等手段。系统研究了该釉的工艺条件和形成机理。结果表明:锆英石最佳引入量为9%~13%,SiO2:Al2O3值为7.32:1;釉层中主要晶体为硅酸锆和石英;影响釉面效果的主要因素有釉料组成、粒度、乳浊剂和熔剂的引入量、SiO2:Al2O3的比值、烧成制度等。...................共50页
15、一次烧成釉面砖坯釉配方设计及坯釉性能的研究
系统分析了一次烧成釉面砖坯釉料配方的特点,通过合理选择原料,引入适合低温快烧的透辉石、硅灰石、瓷石等唐山本地原料,在配方中调整Si2O、Al2O3的含量以及他们与K2O、Na2O之间的数量关系,确定了一次烧成釉面砖坯釉配方的化学组成范围及最佳配方,在烧成中采用“阶梯式升温”与快、缓升温结合,升温过程中进行两次保温,对气体排出完全,避免出现针孔,保证釉料充分熔融,形成质量稳定的釉面起到了促进作用。通过对坯体配方热重曲线、差热曲线、胀缩曲线的测试分析,坯釉膨胀系数的测定,釉熔融温度等性能的测定,可看出坯体的烧失量小
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)