printf(“client sent”);
msgsnd(msgqid,&msg,1024,0); 发送消息msg入msgqid消息队列*/
exit(0);/结束该进程。
void server( )while( /消息类型为1时,退出循环*/
msgctl(msgqid,ipc_rmid,0); 释放(删除)消息队列*/
exit(0); 结束该进程。
main()
exit(0);/该子进程退出,将除pcb外所有资源还给系统。剩下的pcb被称为僵尸进程,其实已经不能算进程了,因为没有**和数据了*/
void server( )while(*addr);
shmctl(shmid,ipc_rmid,0);/删除共享区*/
exit(0); 该子进程退出,将除pcb外所有资源还给系统。剩下的pcb被称为僵尸进程,其实已经不能算进程了,因为没有**和数据了*/
main(){
while((i=fork())1);
if(!i) server();子进程1执行*/
while((i=fork())1);
if(!i) client();子进程2执行*/
wait(0);/等待某个子进程退出。如果某子进程退出,它销毁其僵尸进程。
wait(0);/等待某个子进程退出。如果某子进程退出,它销毁其僵尸进程。
结果》运行的结果和预想的一样。但在运行过程中,发现每当client发送一数据后,server要等一段时间(例如50毫秒)才有响应。同样,之后client又需要等待大约相同的时间才发送下一个数据。
分析》出现上述的应答延迟现象是程序设计的问题。当client发送数据后,并没有任何措施通知server端。此时client仍然占据cpu的时间片。
只有当系统进行调度时,切换到server进程,再进行应答。这个问题同样存在于server端到client的应答过程之中。
3、比较两种通信机制的数据传输的时间。
由于2种机制实现的机理和用处不同,难以直接进行时间上的比较。如果比较其性能,应更加全面地分析。
(1)消息队列的建立比共享区的设立消耗的资源少。前者只是一个软件设定的问题,后者需要对硬件操作,实现内存的映像,控制更复杂。如果每次都重新进行消息队列或共享区的建立,共享区通信没有优势。
(2)当消息队列和共享区建立好后,共享区的数据传输受到硬件支持,不耗费多余资源;而消息传递,由软件进行控制和实现,需要消耗一定的cpu时间。故,共享区更适合频繁和大量的数据传输。
(3)消息的传递,自身就带有同步的控制。当等待消息时,进程进入睡眠状态,不再消耗cpu。而共享区若不借助其它机制来同步,接收数据的一方就需不断查询,浪费cpu时间。
故消息方式更灵活。
3linux进程调度方法
linux内核的三种调度方法 1,sched other 分时调度策略,2,sched fifo实时调度策略,先到先服务 3,sched rr实时调度策略,时间片轮转实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过nice和counter值决定权值,nice越小,count...
实验3Linux系统上网
vmware 上网。使用网络地址转换 nat方式上网。一,查询虚拟网关ip 1.使用vmware读取ip 如图 点击编辑虚拟网络 2.选择 nat 选项卡 如图 3.查询网关ip地址并记录 如图 二,编辑虚拟网络连接。1.进入vmware 使用root用户登陆linux 系统。2.点击主菜单 系统设...
实验4 进程通信
1 熟悉操作系统进程通信原理。2 设计程序,实现共享内存 管道通信 消息通信。1 进程间通信的几种方法简介。1 消息队列 消息队列是消息的链接表,包括posix消息队列systemv消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。2 共享内存 使得多个进程可...