操作系统课程设计

发布 2022-10-05 11:12:28 阅读 3192

#include <>

#include <>包含了的c语言标准库函数的定义

#include <>处理信号

#include <>是posix标准定义的unix类系统定义符号常量的头文件,包含了许多unix系统服务的函数原型,例如read函数、write函数和getpid函数

#include //基本系统数据类型,此头文件还包含适当时应使用的多个基本派生类型

int flag;

void stop(),waiting();

int main( )

signal(2,stop);/信号sigint的值为2,当中断,当用户从键盘按^c键或^break键时,//则会调用stop方法。

int pid1, pid2

while ((pid1 = fork( )1); fork()若成功调用一次则返回两个值,子进程返回0,父进程返回子进程id;否则,出错返回-1,出错时不进行任何操作,直到fork!=-1;

if (pid1 > 0)//创建子进程成功。

while ((pid2 = fork( )1);

if (pid2 > 0) /父进程。

flag=1;

waiting();flag=1时,waiting方法不进行任何操作,不停循环,直到按下^c,调用stop()函数,使得flag=0,跳出循环。

kill(pid1,10); pid是一个或一组进程的标识符,参数sig是要发送的软中//断信号,向进程1发出10这个信号。信号宏名:sigusr1,用户定义信号1,信号值:10

kill(pid2,12); 信号宏名:sigusr2,用户定义信号2,信号值:12,默//认动作:终止进程。

wait(0); wait(status).status是用户空间的地址,为0表示子进程正常结束。

wait(0

printf(" parent process is killed !");

exit(0);/利用exit( )来实现进程的自我终止,通常父进程在创建子进程时,//应在进程的末尾安排一条exit( )使子进程自我终止。exit(0)表示进程正常终止,exit(1)表//示进程运行有错,异常终止。

else

void stop()

void waiting()

#include <>

#include <>

#include <>

int pid1,pid2;

main( )

int fd[2]; 打开文件的文件描述符数组fd[0]读,fd[1]写;

char outpipe[100],inpipe[100];

pipe (fd); 先创建管道,再创建子进程

while ((pid1 = fork( )1); fork ()1创建子进程失败。

if (pid1 ==0) /child1

lockf (fd[1],1, 0); 建立互斥文件锁。

sprintf (outpipe,"message from child l把串放入数组outpipe中。

write (fd[1], outpipe, 50); 把outpipe所指内存写入50个字节到fd[1]的文件;

sleep (2自我阻塞2秒*/

lockf (fd[1],0,0); 解除互斥文件锁。

exit (0);

else //pid1 > 0

while ((pid2 = fork1);

if (pid2 ==0) /child2

lockf (fd[1],1, 0); 互斥*/

sprintf (outpipe,"message from child 2 !"

write (fd[1], outpipe, 50);

sleep (2);

lockf (fd[1], 0, 0);

exit (0);

else //pid1 > 0 &&pid2 > 0,父进程。

wait (0); 同步*/

read (fd[0], inpipe, 50); 从管道中读长为50字节的串*/

printf ("s", inpipe);

wait (0);

read (fd[0], inpipe, 50);

printf ("s", inpipe);

exit (0);

#include <>

#include <>

#include

#include

#include

#define msgkey 75

*定义关键词megkey 系统建立ipc通讯(如消息队列、共享内存时)必须指定一个id值。消息队列对象的关键字,函数将它与已有的消息队列对象的关键字进行比较来判断消息队列对象是否已经创建*/

struct msgform /*消息结构,存放消息的结构体。

msg; int msgqid,i;

void client()

/*client端使用key为75的消息队列,先后发送类型从10到1的消息,然后退出。最后的一个消息,既是 server端需要的结束信号。client每发送一条消息后显示一句“(client)sent”。

*int i;

msgqid=msgget(msgkey,0777);

for(i=5;i>=1;i--)

printf("client send");

msgsnd(msgqid,&msg,1024,0); 发送消息msg入msgid消息队列,0:当消息队列满时,msgsnd将会阻塞,直到消息能写进消息队列*/

exit(0);

void server()

*server端建立一个key为75的消息队列,等待其他进程发来的消息。当遇到类型为1的消息,则作为结束信号,取消该队列,并退出server 。server每接收到一个消息后显示一句“(server)received”。

*msgqid=msgget(msgkey,0777|ipc_creat); 由关键字获得消息队列,0777为消息队列的存取权限,0777|ipc_creat为模式标志参数,使用时需要与ipc对象存取权限(如0600)进行|运算来确定消息队列的存取权限*/do

操作系统课程设计

课程设计 河北大学工商学院。装。订。线。操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专 操作系统课程设计。题目 操作系统课程设计 学院工商学院 学部信息科学与工程 专业计算机类 学号 姓名。指导教师。年 6 月 24 日。设备管理 2 2.1设计任务2 2.2设计要求...

操作系统课程设计

银行家算法模拟。系别 班级 组员 银行家算法模拟。1.课程设计目的。通过本次课程设计,加深对最经典的避免死锁的银行家算法的理解,掌握死锁形成必要条件 安全状态等概念的理解,通过用c语言编程模拟该算法,并在windows平台上实现,更好地掌握操作系统的原理及实现方法。2.任务及要求。设n为系统进程的个...

操作系统课程设计

学生实习实训报告。实习类型 操作系统课程设计 学号 0901110005 学生姓名 田兴杰 指导教师 曹春梅 专业班级 信息安全技术0901班 院 部 电子信息系 2011年 1 月 7日。实习实训成绩评定表。目录。目录3 摘要4关键字4 1.1虚拟机简介5 1.1.1 一般意义的虚拟机5 1.1....