实验三 软中断通信
- 格式:doc
- 大小:19.50 KB
- 文档页数:5
ZYNQ笔记(5):软中断实现核间通信 ZYNQ包括⼀个 FPGA 和两个 ARM,多个 ARM 核⼼相对独⽴的运⾏不同的任务,每个核⼼可能运⾏不同的操作系统或裸机程序,但是有⼀个主要核⼼,⽤来控制整个系统以及其他从核⼼的允许。
因此我们可以在 CPU0 和 CPU1 中独⽴跑不同的应⽤程序,发挥双核的⾮对称性架构的优势和性能。
从软件的⾓度来看,多核处理器的运⾏模式主要有三种: ① AMP(⾮对称多进程):多个核⼼相对独⽴的运⾏不同的任务,每个核⼼可能运⾏不同的操作系统或裸机程序,但是有⼀个主要核⼼,⽤来控制整个系统以及其它从核⼼的运⾏。
② SMP(对称多进程):⼀个操作系统同等的管理各个内核,例如 PC 机。
③ BMP(受约束多进程):与 SMP 类似,但开发者可以指定将某个任务仅在某个指定内核上执⾏默认情况下。
裸机程序 ZYNQ 仅运⾏⼀个 CPU,这⾥主要讲解 AMP 模式下,两个 CPU 同时运⾏的裸机程序开发⽅法。
⼀、核间中断原理(软中断SGI) 软中断的 ID 都是从0到15,并且都是上升沿触发,主要⽤于核间中断或者 CPU ⾃⼰中断⾃⼰。
中断函数如下:XScuGic_SoftwareIntr(&InterruptController, //指向GIC指针INTC_CPU0, //需要中断的CPU IDXSCUGIC_SPI_CPU0_MASK); //使能该CPU会接受中断⼆、ARM启动过程1.ARM ⾥有个 ROM,存储了⼀段程序,ROM起来后从 SD 卡读取数据2.启动 FSBL(First Boot Loader)第⼀启动项(有模板)3.加载 bit(FPGA配置程序),同时加载 elf(ARM应⽤程序),如果是操作系统则 elf 替换成 uBoot三、搭建软件 CPU0 和 CPU1 ⾮对称环境1.创建 amp_fsbl ⽤于⽣成烧写镜像的时候加载 core0 和 core1的代码。
第1篇一、实验背景进程管理是操作系统中的一个重要组成部分,它负责管理计算机系统中所有进程的创建、调度、同步、通信和终止等操作。
为了加深对进程管理的理解,我们进行了一系列实验,以下是对实验的分析和总结。
二、实验目的1. 加深对进程概念的理解,明确进程和程序的区别。
2. 进一步认识并发执行的实质。
3. 分析进程争用资源的现象,学习解决进程互斥的方法。
4. 了解Linux系统中进程通信的基本原理。
三、实验内容1. 使用系统调用fork()创建两个子进程,父进程和子进程分别显示不同的字符。
2. 修改程序,使每个进程循环显示一句话。
3. 使用signal()捕捉键盘中断信号,并通过kill()向子进程发送信号,实现进程的终止。
4. 分析利用软中断通信实现进程同步的机理。
四、实验结果与分析1. 实验一:父进程和子进程分别显示不同的字符在实验一中,我们使用fork()创建了一个父进程和两个子进程。
在父进程中,我们打印了字符'a',而在两个子进程中,我们分别打印了字符'b'和字符'c'。
实验结果显示,父进程和子进程的打印顺序是不确定的,这是因为进程的并发执行。
2. 实验二:每个进程循环显示一句话在实验二中,我们修改了程序,使每个进程循环显示一句话。
实验结果显示,父进程和子进程的打印顺序仍然是随机的。
这是因为并发执行的进程可能会同时占用CPU,导致打印顺序的不确定性。
3. 实验三:使用signal()捕捉键盘中断信号,并通过kill()向子进程发送信号在实验三中,我们使用signal()捕捉键盘中断信号(按c键),然后通过kill()向两个子进程发送信号,实现进程的终止。
实验结果显示,当按下c键时,两个子进程被终止,而父进程继续执行。
这表明signal()和kill()在进程控制方面具有重要作用。
4. 实验四:分析利用软中断通信实现进程同步的机理在实验四中,我们分析了利用软中断通信实现进程同步的机理。
一、实验目的1. 理解中断的概念和作用。
2. 掌握中断的基本原理和应用方法。
3. 能够通过实验验证中断在程序中的应用效果。
二、实验环境1. 操作系统:Windows 102. 编程语言:C/C++3. 开发环境:Visual Studio 2019三、实验原理中断是一种在计算机系统中实现程序之间交互和资源共享的重要机制。
它允许CPU 在执行程序的过程中,暂停当前程序的执行,转而执行另一个程序的代码,处理特定的任务。
中断分为硬件中断和软件中断,硬件中断是由外部设备产生的,软件中断是由程序执行过程中产生的。
四、实验内容1. 硬件中断实验(1)实验步骤① 编写一个C程序,模拟键盘输入事件,使用硬件中断实现按键检测。
② 在程序中定义一个中断服务例程(ISR),当检测到按键事件时,调用该例程。
③ 在ISR中实现按键检测功能,并打印按键信息。
(2)实验代码```c#include <stdio.h>#include <conio.h>// 硬件中断服务例程void keyboard_isr() {char key = getch();printf("按键:%c\n", key);}int main() {// 设置中断处理程序_set_interrupt_handler(0x09, keyboard_isr);printf("按任意键开始监听...\n");while (1) {if (_kbhit()) {_getch(); // 读取按键信息}}return 0;}```2. 软件中断实验(1)实验步骤① 编写一个C程序,使用软件中断实现程序之间的交互。
② 在程序中定义一个软件中断服务例程,用于处理特定任务。
③ 在主程序中调用软件中断,触发服务例程执行。
(2)实验代码```c#include <stdio.h>#include <stdlib.h>// 软件中断服务例程void software_isr() {printf("软件中断被触发,执行特定任务...\n"); }int main() {// 定义软件中断号int int_no = 0x2C;// 设置软件中断处理程序_set_interrupt_handler(int_no, software_isr); printf("按任意键触发软件中断...\n");while (1) {if (_kbhit()) {_getch(); // 读取按键信息// 触发软件中断__int int_no;__asm {int int_no}}}return 0;}```五、实验结果与分析1. 硬件中断实验结果当程序运行时,按下键盘上的任意键,会在控制台打印出按键信息。
计算机原理软硬中断实例全文共四篇示例,供读者参考第一篇示例:计算机原理是计算机科学的基础,软硬中断是计算机系统中的一种重要的概念。
软中断是在软件层面触发的,一般由程序员通过系统调用来发起,用于处理一些系统服务请求;硬中断是由硬件设备发起的,用于处理硬件设备的事件或错误。
在计算机系统中,软硬中断的实现非常重要,可以保证系统的稳定性和可靠性。
下面我们来简单了解一下软硬中断的原理和实例。
一、软中断的实例:1.系统调用:系统调用是计算机系统提供给用户程序访问内核功能的一种方式。
当用户程序需要访问一些特权操作或系统资源时,可以通过系统调用来触发软中断。
比如打开文件、关闭文件、创建进程等操作都需要通过系统调用来实现。
2.时钟中断:时钟中断是操作系统中常见的一种软中断,用于定时触发系统调度和进程切换。
在一个多任务系统中,时钟中断可以保证每个进程都有机会执行,避免一个进程长时间占用CPU资源。
3.网络中断:网络中断是指当网络设备接收到数据包或发送数据包时,会触发软中断来通知操作系统。
操作系统可以根据网络中断处理数据包,实现网络通信功能。
4.系统调度中断:系统调度中断是操作系统中用于实现进程调度的软中断。
当一个进程的时间片用完或出现阻塞时,操作系统会触发系统调度中断来选择下一个要执行的进程。
1.键盘中断:键盘是计算机系统中常见的输入设备,当用户按下键盘的按键时,键盘会发送一个硬中断给CPU来通知操作系统。
操作系统可以通过键盘中断来处理用户输入。
总结:第二篇示例:计算机原理中的软硬中断是操作系统中一个非常重要的概念,它们在操作系统的运行过程中起着至关重要的作用。
软中断是由软件触发的中断,而硬中断是由硬件设备触发的中断,通过这两种中断机制,操作系统能够及时响应各种事件,保证系统的稳定运行。
下面我们以实例的形式来介绍计算机原理中的软硬中断:1. 软中断实例:假设一台计算机正在运行一个文件传输程序,用户想要中途暂停传输任务。
ab cd e fg h(dp) 实验三 中断、定时器实验一、实验目的1. 学习外部中断和定时器的工作原理及使用方法。
2. 学习外部中断和定时器的初始化程序、应用程序的编写和调试。
二、实验说明本实验1通过开关向单片机提出中断请求,单片机响应中断进行计数,并通过LED 数码管指示出计数值,从而观察中断的请求、响应的过程。
实验2通过单片机的定时器产生延时,模拟交通灯控制的方法。
通过本实验学生可以掌握单片机中断和定时器的工作原理及使用方法以及中断和定时器的初始化程序、应用程序的编写和调试。
要求预先编写好程序并通过伟福仿真软件调试。
三、实验内容1、开关S0—S1连接P3口做输入,P0输出接LED 数码管,通过S2产生外部中断请求(/INT0)信号,在中断服务程序中完成十进制递增计数,并将计数值显示在LED 数码管上,要求分别采用电平触发和边沿触发。
按上述要求完成S3产生外部中断请求。
编写初始化程序和中断服务程序。
(注意开关抖动处理)2、P1.0--P1.7作输入口接拨动开关S0--S7;P0.0--P0.7作输出口,接发光二极管L1—L8,编写程序读取开关状态,将此状态在对应的发光二极管上显示出来,要求发光二极管(LED )按亮0.5秒、暗0.5秒闪烁,LED 亮的同时,从P2.0送出1kHz 的音频信号到音频驱动电路发声(持续0.5秒),将开关编号(0—7)显示在LED 数码管上。
要求延时采用内部定时器T0,音频的产生采用内部定时器T1。
编写初始化程序和中断服务程序。
四、实验电路连线P0.0 ---- LED0 P3.2(/INT0)----- S2P0.1 ---- LED1 P3.3(/INT1)----- S3P0.2 ---- LED2P0.3 ---- LED3P0.4 ---- LED4P0.5 ---- LED5P0.6 ---- LED6P0.7 ---- LED7LED 连接 外部中断请求输入a b c d e f g h(dp) P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7LED 数码管各段与I/O 的连接五、实验仪器和设备PC机、WA VE软件、仿真器+仿真头、实验板、电源等。
软中断实现原理软中断是操作系统中一种用于处理异常和系统调用的机制。
它提供了一种用户空间程序与内核空间之间交互的方式,允许用户程序主动触发中断,并通过中断处理程序在内核中执行特定的操作。
本文将详细解释软中断的基本原理。
1. 中断的基本概念在计算机系统中,中断是一种由硬件或软件触发的事件,用于打断CPU正常的执行流程,转而执行特定的处理程序。
中断可以分为硬件中断和软件中断。
硬件中断是由外部设备(如时钟、键盘、硬盘等)发送给CPU的信号,用于通知CPU某个事件已经发生。
当CPU接收到硬件中断信号时,会暂停当前的执行,跳转到相应的中断处理程序中执行相关操作。
软件中断(也称为陷阱)是由CPU执行指令而触发的中断。
软件中断通常用于实现系统调用和处理异常情况(如除零错误、非法指令等)。
软件中断通过特殊的指令(例如int指令)触发,将控制权转移到事先定义好的中断处理程序中。
2. 软中断的作用软中断是一种特殊的软件中断,它在操作系统中扮演着重要的角色。
软中断的作用包括:•实现系统调用:软中断提供了一种用户程序与操作系统内核之间通信的方式。
用户程序可以通过触发软中断,请求操作系统执行某个特定的功能,如文件操作、进程管理等。
•处理异常情况:软中断可以用于处理异常情况,如除零错误、非法指令等。
当发生异常时,CPU会自动触发相应的软中断,并将控制权转移到相应的中断处理程序中。
3. 软中断的实现原理软中断的实现原理涉及到中断向量表、中断描述符表和中断处理程序等概念。
3.1 中断向量表中断向量表是一个存储中断处理程序入口地址的数据结构。
它是一个固定大小的数组,每个元素对应一个中断向量。
中断向量是一个唯一的整数,用于标识不同的中断类型。
当CPU接收到一个中断信号时,会根据中断信号的类型,在中断向量表中查找相应的中断处理程序的入口地址,并跳转到该地址开始执行中断处理程序。
3.2 中断描述符表中断描述符表是一个存储中断描述符的数据结构。
深⼊理解“软中断”前⾔软中断(softirq)导致 CPU 使⽤率升⾼也是最常见的⼀种性能问题所以软中断这个硬⾻头必须啃下去!回忆下什么是中断中断是系统⽤来响应硬件设备请求的⼀种机制它会打断进程的正常调度和执⾏然后调⽤内核中的中断处理程序来响应硬件设备的请求场景类⽐,加深印象⽐如说你订了⼀份外卖,但是不确定外卖什么时候送到,也没有别的⽅法了解外卖的进度,但是,配送员送外卖是不等⼈的,到了你这⼉没⼈取的话,就直接⾛⼈了;所以你只能苦苦等着,时不时去门⼝看看外卖送到没,⽽不能⼲其他事情;不过呢,如果在订外卖的时候,你就跟配送员约定好,让他送到后给你打个电话,那你就不⽤苦苦等待了,就可以去忙别的事情,直到电话⼀响,接电话、取外卖就可以了、打电话:其实就是⼀个中断,没接到电话的时候,你可以做其他的事情只有接到了电话(也就是发⽣中断),你才要进⾏另⼀个动作:取外卖中断的优势⼀种异步的事件处理机制,可以提⾼系统的并发处理能⼒中断运⾏时间短由于中断处理程序会打断其他进程的运⾏,为了减少对正常进程运⾏调度的影响,中断处理程序就需要尽可能快地运⾏如果中断要处理的事情很多,中断服务程序就有可能要运⾏很长时间中断处理程序在响应中断会临时关闭中断。
这就会导致上⼀次中断处理完成之前,其他中断都不能响应,也就是说中断有可能会丢失响应中断场景类⽐假如你订了 2 份外卖,⼀份主⾷和⼀份饮料,并且是由 2 个不同的配送员来配送。
这次你不⽤时时等待着,两份外卖都约定了电话取外卖的⽅式。
但是,问题⼜来了,当第⼀份外卖送到时,配送员给你打了个长长的电话,商量发票的处理⽅式。
与此同时,第⼆个配送员也到了,也想给你打电话。
但是很明显,因为电话占线(也就是关闭了中断响应),第⼆个配送员的电话是打不通的。
所以,第⼆个配送员很可能试⼏次后就⾛掉了(也就是丢失了⼀次中断)软中断中断处理过程分割为了解决中断处理程序执⾏过长和中断丢失的问题,Linux 会将中断处理过程分成两个阶段,也就是上半部和下半部上半部:快速处理中断,它在中断禁⽌模式下运⾏,主要处理跟硬件紧密相关的或时间敏感的⼯作下半部:延迟处理上半部未完成的⼯作,通常以内核线程的⽅式运⾏承上启下上⾯说到的响应中断场景上半部就是你接听电话,告诉配送员你已经知道了,其他事⼉见⾯再说,然后电话就可以挂断了下半部才是取外卖的动作,以及见⾯后商量发票处理的动作。
西华大学实验报告(理工类)开课学院及实验室: 电气信息学院 6A-217实验时间 :年月 日学 生 姓 名?学号成 绩 学生所在学院 电气信息学院 年级/专业/班课 程 名 称微机原理与应用 课 程 代 码 |实验项目名称 软件中断调用实验项 目 代 码 指 导 教 师项 目 学 分一、实验目的1、熟练掌握DOS 中断功能调用及BIOS 中断调用方法。
^2、熟练掌握全屏幕文本编辑应用软件(如、Windows 的记事本、各种汇编集成编辑器)的用法;3、学习调用宏汇编程序()来汇编源程序;4、学习调用连接程序()来获得可执行的目标程序;5、进一步熟悉MS-DOS 操作系统的常用命令;二、实验原理(一)DOS 功能调用(二)DOS 软件中断调用过程 1、将功能调用号传送到AH 中;2、把调用参数(入口参数)传送到规定寄存器中;3、发中断命令INT N ;—装 订>线五、实验过程记录(数据、图表、计算等)code segmentassume cs:codego: mov cx,50 ;循环控制next: mov al,'0' ;输入’0’do0: mov dl,al ;将0给dlmov ah,02 ;调用显示中断int 21h ;调用中断,显示al中的数字cmp al,'9' ;将al与‘9’进行比较jae do1 ;如果al>=’9’ ,则跳到do1inc al ;如果al<’9’,al+1jmp do0 ;跳到do0data segmentstr db 0ah,0dh,' Enter password:$' ;定义一个字符串str1 db 0ah,0dh,' Your password is:$' ;定义一个字符串buf db 6 dup(),'$' ;定义6个0data endscode segmentassume cs:code,ds:datago: push ds ;初始化mov ax,0push axmov ax,datamov ds,ax ;初始化lea dx,str ;将str的地址给dxmov ah,09 ;调用显示字符串中断int 21h ;调用显示字符串中断lea di,buf ;将buf的地址给dimov cx,6 ;循环次数为6next: mov ah,07h ;调用键盘输入中断int 21h ;调用键盘输入中断mov [di],al ;将键盘输入的值给ds[di]处mov dl,'*' ;把’*’给dljmp do0 ;跳到do0do1: dec cx ;cx-1mov dl,' ' ;将’ ’给dlmov ah,02 ;调用显示中断int 21h ;调用中断,显示al中的数字jnz next ;如果cx不为0,那么跳到nextmov ah,4ch ;结束int 21hcode endsend gomov ah,02 ;调用显示输出中断int 21h ;调用显示输出中断inc di ;di+1dec cx ;cx-1jnz next ;cx不到0,调到nextlea dx,str1 ;将str1的地址给dxmov ah,09 ;调用显示字符串中断int 21h ;调用显示字符串中断lea dx,buf ;将buf的地址给dxmov ah,09 ;调用显示字符串中断int 21h ;调用显示字符串中断mov ah,4ch ;结束int 21hcode endsend godata segmentstr db 0ah,0dh,' Enter string:$' ;定义一个字符串str1 db 0ah,0dh,' Change to:$' ;定义一个字符串buf db 10 dup(),'$' ;定义10个0data endscode segmentassume cs:code,ds:datago: push ds ;初始化mov ax,0push axmov ax,datamov ds,axlea dx,str ;初始化mov ah,09 ;调用显示字符串中断int 21h ;调用显示字符串中断lea di,buf ;将buf 的地址给dimov cx,10 ;循环次数next: mov ah,01h ;调用键盘输入并显示中断int 21h ;调用键盘输入并显示中断六、实验结果分析及问题讨论》cmp al,'Z' ;将输入字与’Z ’比较ja do0 ;输入为小写,那么跳到doadd al,'a'-'A' ;否则为大写,al+32jmp do1 ;跳到do1do0: sub al,'a'-'A' ;将al-32do1: mov [di],al ;将al 送到ds:[di]inc di ;di+1dec cx ;cx-1jnz next ;cx 不为,跳到nextlea dx,str1 ;将str1的地址给dxmov ah,09 ;调用显示字符串中断int 21h ;调用显示字符串中断lea dx,buf ;将buf 的地址给dxmov ah,09 ;调用显示字符串中断int 21h ;调用显示字符串中断mov ah,4ch ;结束int 21hcode ends end go。
嵌入式实验3按键实验(中断方式)河南机电高等专科学校《嵌入式系统开发》课程实验报告系部:电子通信工程系班级:电信1##姓名: ######学号: 120######实验三按键实验(中断方式)一.实验简介在实验一的基础上,使用按键控制流水灯。
二.实验目的熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。
三.实验内容实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。
下载代码到目标板,查看运行结果。
四.实验设备硬件部分:PC计算机(宿主机)、STM32实验板。
软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。
五.实验步骤1在实验一代码的基础上,编写中断初始化代码2在主程序中声明全局变量,用于和中断服务程序通信,编写完成主程序3编写中断服务程序4编译代码,下载到实验板5.单步调试6记录实验过程,撰写实验报告六.实验结果及测试中断方式的按键式实验,是通过配置外部中断寄存器和中断嵌套(NVIC)控制器来实现按键按下控制LED灯亮灭。
通过按键中断打断主函数,执行LED1取反一次。
主函数初始化中断配置和LED配置,点亮LED1后一直等待中断,每中断一次,LED1取反一次。
int main(void){LED_GPIO_Config();LED1_ON;CLI();SEI();EXTI_PA0_Config();while(1){}}中断嵌套控制寄存器的配置为中断嵌套分组1;抢占优先级0;响应优先级0 代码如下:void NVIC_Configuration(void){NVIC_InitTypeDef NVIC_InitStructure;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);}外部中断按键的配置源码如下:配置PA0位中断线,并使能AFIO 时钟void EXTI_PA0_Config(void){GPIO_InitTypeDef GPIO_InitStructure;EXTI_InitTypeDef EXTI_InitStructure;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_AFIO,ENABLE);NVIC_Configuration();GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;GPIO_Init(GPIOA, &GPIO_InitStructure);GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource0);EXTI_InitStructure.EXTI_Line = EXTI_Line0;EXTI_InitStructure.EXTI_Mode = EXTI_Mode_Interrupt;EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;EXTI_InitStructure.EXTI_LineCmd = ENABLE;EXTI_Init(&EXTI_InitStructure);}产生中断后程序进入中断服务子程序,将LED1取反,并软件清除标志位,中断服务子程序如下:void EXTI0_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line0) != RESET){LED1_TOGGLE;EXTI_ClearITPendingBit(EXTI_Line0);}}七.实验总结通过这次实验,课程知识的实用性很强,因此实验就显得非常重要,刚开始做实验的时候,由于自己的理论知识基础不好,在实验过程遇到了许多的难题,也使我感到理论知识的重要性。
实验四进程的软中断通信和管道通信一、实验目的1. 掌握Linux系统软中断通信的实现方法。
2. 掌握Linux系统软中断通信的基本原理。
3. 学会使用Linux系统中关于进程通信的一些系统调用。
4. 掌握管道通信的使用方法。
二、实验内容1. 软中断通信编写一段程序,使其实现进程的软中断通信。
使用系统调用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键),当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child Processll is Killed by Parent!Child Processl2 is Killed by Parent!父进程等待两个子进程终止后,输出如下的信息后终止:Parent Process is Killed!2. 进程的管道通信编制一段程序,实现进程的管理通信。
使用系统调用pipe()建立一条管道线。
两个子进程P1和P2分别向管道中写一句话:Child 1 is sending a message!Child 2 is sending a message!而父进程则从管道中读出来自于两个子进程的信息,显示在屏幕上。
要求父进程先接收子进程P1发来的消息,然后再接收子进程P2发来的消息。
3. 管道编程练习编写一个程序,使用系统调用fork生成3个子进程,并使用系统调用pipe创建一个管道,使得这3个子进程和父进程共用同一个管道进行通信。
三、实验源程序[程序1] 软中断通信#include <stdio.h>#include <signal.h>#include<unistd.h>void waiting(),stop(); /引用函数声明/int wait_mark;main(){ int p1,p2;while((p1=fork())==-1); /创建进程p1/if(p1>0){while((p2=fork())==-1);if(p2>0){ wait_mark=1; /以下为主进程/signal(SIGINT,stop); /接受‘del’信号,并转stop/waiting(0);kill(p1,17); /向p1发中断信号17/kill(p2,17); /向p2发中断信号17/wait(0); /将当前进程挂起,直至子进程发出信号/ wait(0);printf(“parent process is killed!\n”);exit(0); /主进程终止自己/}else{ wait_mark=1; /以下为子进程p2/signal(17,stop);waiting();lockf(1,1,0); /加锁/printf(“child process 2 is killed by parent!\n”); lockf(1,0,0); /解锁/exit(0);}}else{ wait_mark=1; /进程p1/signal(17,stop);waiting();lockf(1,1,0);printf(“child process 1 is killed by parent!\n”); lockf(1,0,0);exit(0); /返回主进程,本进程自我终止/}}void waiting(){ while(wait_mark=0);}void stop(){ wait_mark=0;}运行时,从键盘输入中断信号‘del’键。