山东大学操作系统实验六完整版
- 格式:docx
- 大小:63.54 KB
- 文档页数:13
2022年山东大学软件工程专业《操作系统》科目期末试卷A(有答案)一、选择题1、假设5个进程P0、P1、P2、P3、P4共享3类资源R1、R2、R3.这些资源总数分别为18、6、22。
T0时刻的资源分配情况(见表),此时存在的一个安全序列是()。
A. P0, P2, P4, P1, P3B. P1, P0, P3, P4, P2C. P2, P1, P0, P3, P4D. P3, P4, P2, P1, P02、用户程序在口态下使用特权指令引起的中断属于()。
A.硬件故障中断B.程序中断C.外部中断D.访管中断3、一个进程被唤醒意味着()。
A.该进程可以重新占用CPUB.优先级变为最大C.PCB移到就绪队列之首D.进程变为运行态4、下列进程调度算法中,综合考虑进程等待时间和执行时间的是()A.时间片轮转调度算法B.短进程优先调度算法C.先来先服务调度算法D.高响应比优先调度算法5、进程和程序的本质区别是()A.前者分时使用CPU,后者独占CPUB.前者存储在内存,后者存储在外存C.前者在一个文件中,后者在多个文件中D.前者为动态的,后者为静态的6、采用SPOOLing技术后,使得系统资源利用率()。
A.提高了B.有时提高,有时降低C.降低了D.提高了,但出错的可能性增人了7、某计算机按字节编址,其动态分区内存管理采用最佳适应算法每次分配和回收内存后都对空闲分区链重新排序。
当前空闲分区信息见表3-12。
回收起始地址为60K、大小为140KB的分区后,系统中空闲分区的数量、空闲分区链第一个分区的起始地址和大小分别是()。
A.3,20K,380KBB.3,500K,80KBC.4,20K,180KBD.4,500K,80KB8、考虑一个文件存放在100个数据块中。
文件控制块、索引块或索引信息都驻留内存。
那么如果().不需要做任何磁盘I/O操作。
A.采用连续分配策略,将最后一个数据块搬到文件头部,B.采用单级索引分配策略,将最后一个数据块插入文件头部C.采用隐式链接分配策略,将最后一个数据块插入文件头部D.采用隐式链接分配策略,将第一个数据块插入文件尾部,9、在文件系统中,若文件的物理结构采用连续结构,则文件控制块FCB中有关文件的物理位置的信息包括(),I.首块地址 II.文件长度 III.索引表地址A.只有IIIB. I和IIC. II和IIID. I和III10、在分页虚拟存储管理中,“二次机会”调度策略和“时钟”调度策略在决定淘汰哪一页时,都用到了()。
课程设计(综合实验)报告( 2015 -- 2016 年度第 1 学期)名称:操作系统综合实验题目:oslab综合实验院系:计算机系班级:学号:学生姓名:指导教师:设计周数:分散进行成绩:日期:2015 年10 月29 日实验1 实验环境的使用一、综合实验的目的与要求熟悉操作系统集成实验环境OS Lab 的基本使用方法。
练习编译、调试EOS 操作系统内核以及EOS 应用程序。
二、实验正文1.启动 OS Lab2.1 执行项目Windows 控制台窗口内容显示2.2 调试项目2.2.1 使用断点中断执行2.2.2 单步调试2.2.2 .3单步调试结果显示:练习使用“逐语句”功能和“跳出”功能2.2.3 查看变量的值快速监视添加监视2.2.4 调用堆栈调用堆栈显示内容进入Func 函数双击 main 函数所在的行表示此函数是当前调用堆栈中的活动函数。
3 新建EOS 内核项目4 EOS 应用程序项目的生成和调试4.1 新建EOS 应用程序项目4.2 调试项目添加断点后单步调试结果显示4.3 查看软盘镜像文件中的内容4.4修改EOS 应用程序项目名称5 退出OS Lab6 保存EOS 内核项目三、综合实验总结或结论思考与练习:1.在哪些情况下应该使用“逐过程”调试,在哪些情况下应该使用“逐语句”调试。
答:逐语句为每执行一行语句,如果碰到函数调用它就会进入到函数里面。
而逐过程碰到函数时不进入函数,把函数调用当成一条语句去执行。
2. 生成EOS SDK 文件夹的目的和作用。
明白文件夹的组织结构和各个文件的来源和作用。
查看EOS 应用程序包含了SDK 文件夹中的哪些头文件,是如何包含的?(1)EOS SDK为应用程序调用系统API提供服务,可作为用户编程中使用的工具包集合。
(2)其主要包括INC头文件LIB文件夹、导入库文件和BIN文件夹、动态链接库、可执行程序、二进制文件。
(3)包含的头文件有:eos.h负责导出API函数,eosdef.h声明负责导出函数类型的定义,error.h负责导出错误码。
2022年山东大学计算机科学与技术专业《操作系统》科目期末试卷B(有答案)一、选择题1、一个磁盘的转速为7200r/min,每个磁道有160个扇区,每个扇区为512B.那么理想情况下,其数据传输率为()。
A.7200×160KB/sB.7200KB/sC.9600KB/sD.19200KB/s2、文件系统采用多级目求结构的目的是()。
A.减少系统开销B.节约存储空间C.解决命名冲突D.缩短传送时间3、在下列操作系统的各个功能组成部分中,一定需要专门硬件配合支持的是()。
I.地址映射II.进程调度III.中断系统IV.系统调用A.IB.I、IIIC. I、III、IVD.II、II4、下面哪个不会引起进程创建()A.用户登录B.作业调度C.设备分配D.应用请求5、某系统有n台互斥使用的同类设备,3个并发进程分别需要3,4,5台设备,可确保系统不发生死锁的设备数n最小为()。
A.9B.10C.11D.126、可重入程序是通过()方法来改善系统性能的。
A.改变时间片长度B.改变用户数C.提高对换速度D.减少对换数量7、若用8个字(字长32位,H字号从0开始计数)组成的位示图管理内存,用户归还一个块号为100的内存块时,它对应位示图的位置为()(注意:位号也从0开始)。
A.字号为3,位号为5B.字号为4,位号为4C.字号为3,位号为4D.字号为4,位号为58、处理外部中断时,应该山操作系统保存的是()A.程序计数器(PC)的内容B.通用寄存器的内容C.快表(TLB)中的内容D.Cache中的内容9、设计实时操作系统时,首先应该考虑系统的()。
A.可靠性和灵活性B.实时性和可靠性C.分配性和可靠性D.灵活性和实时性10、用户程序发出磁盘I/O话求后,系统的处理流程是:用户程序→系统调用处理程序→设备驱动程序→中断处理程序。
其中,计算数据所在磁盘的柱面号、磁号、扇区号的程序是()。
A.用户程序B.系统调用处理程序C.设备驱动程序D.中断处理程序11、如果I/O设备与存储设备间的数据交换不经过CPU来完成,则这种数据交换方式是()。
2022年山东大学数据科学与大数据技术专业《操作系统》科目期末试卷B(有答案)一、选择题1、在单处理器系统中,可并行的是()I.进程与进程II.处理器与设备III.处理器与通道IV.设备与设备A.I、II和IIIB.I、II和IVC.I、III和IVD.II、III和IV2、实时操作系统必须在()内处理完来白外部的事件。
A.一个机器周期B.被控对象规定时间C.周转时间D.时间片3、下面关于进程的叙述中,正确的是()A.进程获得CPU运行是通过调度得到的B.优先级是进程调度的重要依据,确定就不能改变,C.单CPU的系统中,任意时刻都有一个进程处于运行状念D.进程申请CPU得不到满足时,其状态变为阻塞4、在使用信号量机制实现互斥时,互斥信号量的初值一般为():而使用信号量机,制实现同步时,同步信号量的初值般为()。
A.0:1B.1:0C.不确定:1D.1:不确定5、采用资源剥夺法可以解除死锁,还可以采用()方法解除死锁。
A.执行并行操作B.撤销进程C.拒绝分配新资源D.修改信号量6、在采用SPOOLing技术的系统中,用户暂时未能打印的数据首先会被送到()存储起来。
A.磁盘固定区域B.内存固定区域C.终端D.打印机7、为了使多个进程能有效地同时处理输入和输出,最好使用()结构的缓冲技术。
A.缓冲池B.循环缓冲C.单缓冲D.双缓冲8、操作系统为了管理文件,设计了文件控制块(FCB),文件控制块的建立是().A.在调用create()时B.在调用open()时C.在调用read()时D.在调用write()9、若某文件系统索引节点(inode)中有直接地址项和间接地址项,则下列选项中,与单个文件长度无关的因素是().A.索引节点的总数B.间接地址索引的级数C.地址项的个数D.文件块大小10、设有8页的逻辑空间,每页有1024B,它们被映射到32块的物理存储区中。
那么,逻辑地址的有效位是()位,物理地址至少是()位。
2022年山东大学数据科学与大数据技术专业《操作系统》科目期末试卷A(有答案)一、选择题1、所谓(),是指将一个以上的作业放入内存,并且同时处于运行状态。
这些作业,共享处理器的时间和外设及其他资源。
A.多重处理B.多道程序设计C.实时处理D.并行执行2、处理外部中断时,应该山操作系统保存的是()A.程序计数器(PC)的内容B.通用寄存器的内容C.快表(TLB)中的内容D.Cache中的内容3、下列进程调度算法中,综合考虑进程等待时间和执行时间的是()A.时间片轮转调度算法B.短进程优先调度算法C.先来先服务调度算法D.高响应比优先调度算法4、下列关于银行家算法的叙述中,正确的是()A.银行家算法可以预防死锁B.当系统处于安全状态时,系统中…定无死锁进程C.当系统处于不安全状态时,系统中一定会出现死锁进程D.银行家算法破坏了产生死锁的必要条件中的“请求和保持”条件5、下列选项中,导致创建新进程的操作是()。
I.用户登录成功 II.设备分配 III.启动程序执行A.仅I和IIB.仅II和IIIC. 仅I和IIID. I,II,III6、缓存技术的缓冲池在()中。
A.内存B.外存C.ROMD.寄存器7、()是操作系统中采用的以空间换取时间的技术。
A.Spooling 技术B.虚拟存储技术C.覆盖与交换技术D.通道技术8、现代操作系统中,文件系统都有效地解决了重名(即允许不同用户的文件可以具有相同的文件名)问题。
系统是通过()来实现这一功能的。
A.重名翻译结构B.建立索引表C.树形目录结构D.建立指针9、若文件f1的硬链接为f2,两个进程分别打开fl和f2,获得对应的文件描述符为fd1和fd2,则下列叙述中,止确的是()I.fl和f2的读写指针位置保持相同II.fl和f2共享同个内存索引节点III.fdl 和fd2分别指向各自的用户打开文件表中的一项,A.仅IIB. 仅II、IIIC.仪I、IID. I、II和II10、设系统缓冲区和用户工作区均采用单缓冲,从外设读入一个数据块到系统缓冲区的时间为100,从系统缓冲区读入1个数据块到用户工作区的时间为5,对用户上作区中的1个数据块进行分析的时问为90。
山东大学操作系统实验报告HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】操作系统实验报告计算机科学与技术学院目录一、进程控制实验实验目的加深对于进程并发执行概念的理解。
实践并发进程的创建和控制方法。
观察和体验进程的动态特性。
进一步理解进程生命期期间创建、变换、撤销状态变换的过程。
掌握进程控制的方法,了解父子进程间的控制和协作关系。
练习 Linux 系统中进程创建与控制有关的系统调用的编程和调试技术。
示例实验实验内容以下实验示例程序应实现一个类似shell 子命令的功能,它可以从执行程序中启动另一个新的子进程并执行一个新的命令和其并发执行。
实验演示结果独立实验实验内容参考以上示例程序中建立并发进程的方法,编写一个父子协作进程,父进程创建一个子进程并控制它每隔 3 秒显示一次当前目录中的文件名列表。
实验步骤算法设计通过进程间的通讯,先创建一个父进程一个子进程,父进程沉睡3秒,子进程作为当前父进程再次创建一个他的子进程,当前子进程执行显示当前目录文件列表功能,执行execve()方法后死亡。
While(1)在死循环里无限进行当前操作。
即达到父进程创建一个子进程并控制它每隔3秒显示一次当前目录中的文件名列表的要求。
开发调试过程打开一终端命令行窗体,新建一个文件夹,在该文件夹中建立名为的C 语言程序;再建立以下名为的 C 语言头文件;建立项目管理文件 Makefile;输入 make 命令编译连接生成可执行的 pctl 程序;执行 pctl 程序;再次执行带有子进程指定执行命令的 pctl 程序。
思考与分析1.反映的进程的特征和功能,在真实的操作系统中是怎样实现和反映出教材中讲解的进程的生命期、进程的实体和进程状态控制的。
对于进程概念和并发概念有哪些新的理解和认识子进程是如何创建和执行新程序的答:进程是一个可并发执行的程序在某数据集上的一次运行,是程序的一次运行过程。
计算机科学与技术学院实验报告
分析:
多进程的系统中避免不了进程间的相互关系。
进程互斥是进程之间发生的一种间接性作用,一般是程序不希望的。
通常的情况是两个或两个以上的进程需要同时访问某个共享变量。
我们一般将发生能够问共享变量的程序段称为临界区。
两个进程不能同时进入临界区,否则就会导致数据的不一致,产生与时间有关的错误。
解决互斥问题应该满足互斥和公平两个原则,即任意时刻只能允许一个进程处于同一共享变量的临界区,而且不能让任一进程无限期地等待。
进程同步是进程之间直接的相互作用,是合作进程间有意识的行为,典型的例子是公共汽车上司机与售票员的合作。
只有当售票员关门之后司机才能启动车
(注:文档可能无法思考全面,请浏览后下载,供参考。
可复制、编制,期待你的好评与关注)。
操作系统课程设计报告班级:2012级软件工程8班团队成员:杨环张俊吴佩瑶王飞王梅瑞目录目录 (2)一、前期工作 (3)1.1平台搭建 (3)二、代码分工 (3)三、设计及实现 (3)3.1 Task1.1 KThread.join() (3)3.1.1 要求分析 (3)3.1.2 设计方案 (4)3.1.3 实现代码 (4)3.1.4 测试代码及结果 (5)3.2 Task1.2 condition2类 (7)3.2.1 要求分析 (7)3.2.2 设计方案 (7)3.2.3 实现代码 (7)3.2.4 测试代码及结果 (8)3.3 Task1.3 alram类 (11)3.3.1 要求分析 (11)3.3.2 设计方案 (11)3.3.3 实现代码 (11)3.3.4 测试代码及结果 (12)3.4 Task1.4 communicator类 (13)3.4.1要求分析 (13)3.4.2 设计方案 (13)3.4.3 实现代码 (13)3.4.4 测试代码及结果 (14)3.5 Task1.5 priority scheduler类 (17)3.5.1 要求分析 (17)3.5.2 设计方案 (17)3.5.3 实现代码 (17)3.5.4 测试代码及结果 (17)3.6 Task1.6 boat类 (22)3.6.1 要求分析 (22)3.6.2 设计方案 (23)3.6.3 实现代码 (23)3.6.4 测试代码及结果 (30)3.7 Task2.1 系统调用creat, open, read, write, close, unlink (30)3.7.1 要求分析 (30)3.7.2 设计方案 (30)3.7.3 实现代码 (31)3.7.4 测试代码及结果 (34)3.8 Task2.2 多进程内存分配及访问 (34)3.8.1 要求分析 (34)3.8.2 设计方案 (34)3.8.3 实现代码 (35)3.8.4 测试代码及结果 (38)3.9 Task2.3 系统调用exec, join, exit (41)3.9.1 要求分析 (41)3.9.2 设计方案 (41)3.9.3 实现代码 (41)3.9.4 测试代码及结果 (43)3.10 Task2.4 Lottery Schedule类 (44)3.10.1 要求分析 (44)3.10.2 设计方案 (44)3.10.3 实现代码 (45)3.10.4 测试代码及结果 (45)总结 (48)一、前期工作1.1平台搭建Nachos For Javaphrase1部分:IDE环境可采用Eclipse。
操作系统实验报告一、实验目的本次操作系统实验的主要目的是通过实际操作和观察,深入理解操作系统的工作原理和关键机制,包括进程管理、内存管理、文件系统以及设备管理等方面。
同时,培养我们解决实际问题的能力,提高对操作系统相关知识的综合运用水平。
二、实验环境本次实验使用的操作系统为 Windows 10 和 Linux(Ubuntu 2004 LTS),实验所使用的编程工具包括 Visual Studio Code、gcc 编译器等。
三、实验内容及步骤(一)进程管理实验1、进程创建与终止在 Windows 系统中,使用 C++语言编写程序,通过调用系统 API函数创建新的进程,并观察进程的创建和终止过程。
在 Linux 系统中,使用 C 语言编写程序,通过 fork()系统调用创建子进程,并通过 wait()函数等待子进程的终止。
2、进程调度观察Windows 和Linux 系统中进程的调度策略,包括时间片轮转、优先级调度等。
通过编写程序模拟进程的执行,设置不同的优先级和执行时间,观察系统的调度效果。
(二)内存管理实验1、内存分配与释放在 Windows 系统中,使用 C++语言的 new 和 delete 操作符进行内存的动态分配和释放,并观察内存使用情况。
在 Linux 系统中,使用 C 语言的 malloc()和 free()函数进行内存的分配和释放,通过查看系统的内存使用信息来验证内存管理的效果。
2、虚拟内存管理研究 Windows 和 Linux 系统中的虚拟内存机制,包括页表、地址转换等。
通过编写程序访问虚拟内存地址,观察系统的处理方式和内存映射情况。
(三)文件系统实验1、文件操作在 Windows 和 Linux 系统中,使用编程语言对文件进行创建、读取、写入、删除等操作。
观察文件的属性、权限设置以及文件在磁盘上的存储方式。
2、目录操作实现对目录的创建、删除、遍历等操作。
研究目录结构和文件路径的表示方法。
山东大学操作系统实验六HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】软件学院操作系统实验报告实验题目:实验六、死锁问题实验学号:0124日期:2013年05月23日班级:5班姓名:韩俊晓Email:实验目的:通过本实验观察死锁产生的现象,考虑解决死锁问题的方法。
从而进一步加深对于死锁问题的理解。
掌握解决死锁问题的几种算法的编程和调试技术。
练习怎样构造管程和条件变量,利用管程机制来避免死锁和饥俄问题的发生。
实验要求:在两个城市南北方向之间存在一条铁路,多列火车可以分别从两个城市的车站排队等待进入车道向对方城市行驶,该铁路在同一时间,只能允许在同一方向上行车,如果同时有相向的火车行驶将会撞车。
请模拟实现两个方向行车,而不会出现撞车或长时间等待的情况。
您能构造一个管程来解决这个问题吗?硬件环境:实验室计算机软件环境:-Linux操作系统gcc version实验步骤:1.实验说明:管程-Monitor管程是一种高级抽象数据类型,它支持在它的函数中隐含互斥操作。
结合条件变量和其他一些低级通信原语,管程可以解决许多仅用低级原语不能解决的同步问题。
利用管程可以提供一个不会发生死锁或饥饿现象的对象;哲学家就餐问题和Java语言中的synchronized对象都是很好的管程的例子.管程封装了并发进程或线程要互斥执行的函数。
为了让这些并发进程或线程在管程内互斥的执行,进入管程的进/线程必须获取到管程锁或二值信号量条件变量Condition Variables条件变量提供了一种对管程内并发协作进程的同步机制。
如果没有条件变量,管程就不会有很有用。
多数同步问题要求在管程中说明条件变量。
条件变量代表了管程中一些并发进程或线程可能要等待的条件。
一个条件变量管理着管程内的一个等待队列。
如果管程内某个进程或线程发现其执行条件为假,则该进程或线程就会被条件变量挂入管程内等待该条件的队列。
如果管程内另外的进程或线程满足了这个条件,则它会通过条件变量再次唤醒等待该条件的进程或线程,从而避免了死锁的产生。
所以,一个条件变量C应具有两种操作()和()。
当管程内同时出现唤醒者和被唤醒者时,由于要求管程内的进程或线程必须互斥执行,因此就出现了两种样式的条件变量:Mesa Style(signal-and-continue):唤醒者进程或线程继续执行,被唤醒者进程或线程等到唤醒者进程或线程阻塞或离开管程后再执行。
Hoare Style(signal-and-wait):被唤醒者进程或线程立即执行,唤醒者进程或线程阻塞,直道被唤醒者阻塞或离开管程后再执行。
实验6单行道(过桥)问题可以通过管程很好的解决。
可以把单行道/桥封装为一个管程类,桥上通过的车辆是进入管程的进/线程,可以通过创建多个车辆进/线程并随机产生它们的行进方向,并指定桥上可同时行驶的车辆的个数来模拟该问题的各种现场随机情况。
一个正确的实验结果应能实现在各种随机现场情况下车辆进程不会逆向上桥(死锁),也不会使车少方向上的车辆无机会上桥(饥饿).在linux系统中可以利用进程间通信(interprocess communication )IPC中的3个对象:共享内存、信号灯数组、消息队列,来解决协作并发进程间的同步与互斥的问题。
1)共享内存是OS内核为并发进程间交换数据而提供的一块内存区(段)。
如果段的权限设置恰当,每个要访问该段内存的进程都可以把它映射到自己私有的地址空间中。
如果一进程更新了段中数据,那么其他进程立即会看到这一更新。
进程创建的段也可由另一进程读写。
linux中可用命令ipcs -m 观察共享内存情况。
$ ipcs -m------SharedMemory Segments --------key shmid owner perms bytes nattch status0x00000000 327682 student 600 393216 2 dest0x00000000 360451 student 600 196608 2 dest0x00000000 393220 student 600 196608 2 destkey共享内存关键值shmid共享内存标识owner共享内存所由者(本例为student)perm共享内存使用权限(本例为student可读可写)byte共享内存字节数nattch共享内存使用计数status共享内存状态上例说明系统当前已由student建立了一些共享内存,每个都有两个进程在共享。
2)信号灯数组是OS内核控制并发进程间共享资源的一种进程同步与互斥机制。
linux中可用命令ipcs -s 观察信号灯数组的情况。
$ ipcs -s------SemaphoreArrays --------key semid owner perms nsems0000000 163844 apache 600 10x4d00f259 294920 beagleind 600 80x00000159 425995 student 644 1semid信号灯的标识号nsems信号灯的个数其他字段意义同以上共享内存所述。
上例说明当前系统中已经建立多个信号灯。
其中最后一个标号为425996是由student建立的,它的使用权限为644,信号灯数组中信号灯个数为1个。
3)消息队列是OS内核控制并发进程间共享资源的另一种进程同步机制。
linux中可用命令ipcs -q 观察消息队列的情况。
$ipcs -q------Message Queues --------key msqid owner perms used-bytes messages0x000001c8 0 root 644 8 1 msgmid消息队列的标识号used-bytes 消息的字节长度messages 消息队列中的消息条数其他字段意义与以上两种机制所述相同。
上例说明当前系统中有一条建立消息队列,标号为0,为root所建立,使用权限为644,每条消息8个字节,现有一条消息。
4) 在权限允许的情况下您可以使用ipcrm命令删除系统当前存在的IPC对象中的任一个对象。
ipcrm -m 21482删除标号为21482的共享内存。
ipcrm -s 32673删除标号为32673的信号灯数组。
ipcrm -q 18465删除标号为18465的消息队列。
5) 在linux的proc文件系统中有3个虚拟文件动态记录了由以上ipcs命令显示的当前IPC对象的信息,它们分别是:/proc/sysvipc/shm共享内存/proc/sysvipc/sem信号量/proc/sysvipc/msg消息队列我们可以利用它们在程序执行时获取有关IPC对象的当前信息。
6) IPC对象有关的系统调用函数原型都声明在以下的头文件中:#include <sys/>#include <sys/>创建一段共享内存系统调用语法:#include <sys/>int shmget(key_t key,int size,int flags);key 共享内存的键值,可以为IPC_PRIVATE,也可以用整数指定一个size 共享内存字节长度flags 共享内存权限位。
shmget调用成功后,如果key用新整数指定,且flags中设置了IPC_CREAT 位,则返回一个新建立的共享内存段标识符。
如果指定的key已存在则返回与key关联的标识符。
不成功返回-1令一段共享内存附加到调用进程中的系统调用语法:#include <sys/>char *shmat(int shmid, char *shmaddr,int flags)shmid 由shmget创建的共享内存的标识符shmaddr 总为0,表示用调用者指定的指针指向共享段flags 共享内存权限位shmat调用成功后返回附加的共享内存首地址令一段共享内存从到调用进程中分离出去的系统调用语法:#include <sys/>int shmdt(char *shmadr);shmadr进程中指向附加共享内存的指针shmdt调用成功将递减附加计数,当计数为0,将删除共享内存。
调用不成功返回-1。
创建一个信号灯数组的系统调用有语法:#include <sys/>int semget(key_t key,int nsems, int flags);key 信号灯数组的键值,可以为IPC_PRIVATE,也可以用整数指定一个nsems 信号灯数组中信号灯的个数flags 信号灯数组权限位。
如果key用整数指定,应设置IPC_CREAT位。
semget调用成功,如果key用新整数指定,且flags中设置了IPC_CREAT 位,则返回一个新建立的信号等数组标识符。
如果指定的整数key已存在则返回与key关联的标识符。
不成功返回-1操作信号灯数组的系统调用语法:#include <sys/>int semop(int semid,struct sembuf *semop, unsigned nops); semid 由semget创建的信号灯数组的标识符semop 指向sembuf数据结构的指针nops 信号灯数组元素的个数。
semop调用成功返回0,不成功返回-1。
控制信号灯数组的系统调用语法:#include <sys/>int semctl(int semid,int semnum,int cmd, union semun arg); semid 由semget创建的信号灯数组的标识符semnum 该信号灯数组中的第几个信号灯cmd 对信号灯发出的控制命令。
例如:GETVAL 返回当前信号灯状态SETVAL 设置信号灯状态IPC_RMID删除标号为semid的信号灯arg 保存信号灯状态的联合体,信号灯的值是其中一个基本成员union semun {int val; /* value for SETVAL */......};semctl 执行不成功返回-1,否则返回指定的cmd的值。
创建消息队列的系统调用语法:#include<sys/>int msgget(key_t key,int flags)key 消息队列的键值,可以为IPC_PRIVATE,也可以用整数指定一个flags 消息队列权限位。
msgget调用成功,如果key用新整数指定,且flags中设置了IPC_CREAT 位,则返回一个新建立的消息队列标识符。
如果指定的整数key已存在则返回与key关联的标识符。