首页 > 系统相关 >操作系统实验——进程通信(共享存储区通信)实验

操作系统实验——进程通信(共享存储区通信)实验

时间:2024-03-12 21:33:48浏览次数:28  
标签:存储 操作系统 通信 client 实验 进程 共享 机制

一、实验目的:

了解和熟悉共享存储机制

   

  • 实验内容:

编制一长度为 1k 的共享存储区发送和接收的程序。

三、实验步骤及结果:

//把实验运行过程和相关代码,或者实验结果等截图拷贝过来

1、了解共享存储区的机制

共享存储区(Share Memory)是 UNIX 系统中通信速度最高的一种通信机制。该机制可使若干进程共享主存中的某一个区域,且使该区域出现(映射)在多个进程的虚地址空间中;每个共享存储区都有自己的名字。

如图所示:

进程 A 将建立的共享存储区附接到自己的 AA’区域,进程 B 将它附接到BB’区域。

【注意:使用共享存储区机制时,必须自己设置同步和互斥措施才能保证实现正确的通信】

2、使用gedit命令创建文件存放使用共享存储区的代码

3、利用gcc命令编译程序,检查代码是否错误

修改方式:修改标点符号;添加头文件

【对应wait函数与fork函数】

【编译通过】

4、了解与共享存储区机制有关的系统调用

其中:

key 是共享存储区的名字;

size 是其大小(以字节计);

flag 是用户设置的标志,如 IPC_CREAT。IPC_CREAT 表示若系统中尚无指名的共享存储区,则由核心建立一个共享存储区;若系统中已有共享存储区,便忽略 IPC_CREAT。

其中:

shmid 是共享存储区的标识符;

addr 是用户给定的,将共享存储区附接到进程的虚地址空间;

flag 其值为 SHM_RDONLY 时,表示只能读;其值为 0 时,表示可读、可写;

该系统调用的返回值是共享存储区所附接到的进程虚地址viraddr。

其中:addr是要断开连接的虚地址,亦即以前由连接的系统调用 shmat( )所返回的虚地址

其中:

buf 是用户缓冲区地址;

cmd 是操作命令。命令可分为多种类型:

(1)用于查询有关共享存储区的情况。如其长度、当前连接的进程数、共享区的创建者标识符等;

(2)用于设置或改变共享存储区的属性。如共享存储区的许可权、当前连接的进程计数等;

(3)对共享存储区的加锁和解锁命令;

(4)删除共享存储区标识符等。

5、执行程序并分析运行结果

实验现象:

在运行过程中:每当 client 发送一次数据后,server 要等待大约 0.1 秒才有响应。同样,之后 client 又需要等待大约 0.1 秒才发送下一个数据。

分析:

出现上述应答延迟的现象是程序设计的问题。

当 client 端发送了数据后,并没有任何措施通知 server 端数据已经发出,需要由 client 的查询才能感知。此时,client 端并没有放弃系统的控制权,仍然占用 CPU 的时间片。

只有当系统进行调度时,切换到了 server 进程,再进行应答。这个问题,也同样存在于 server 端到 client 的应答过程中。

【程序每执行一次,shmid的值加1】

  • 实验作业(思考题):

  

1、比较两种通信机制(消息队列机制与共享区机制)中数据传输的时间和性能

由于两种机制实现的机理和用处都不一样,难以直接进行时间上的比较。如果比较其性能,应更加全面的分析。

(1)消息队列的建立比共享区的设立消耗的资源少。前者只是一个软件上设定的问题,后者需要对硬件的操作,实现内存的映像,当然控制起来比前者复杂。如果每次都重新进行队列或共享的建立,共享区的设立没有什么优势。

(2)当消息队列和共享区建立好后,共享区的数据传输,受到了系统硬件的支持,不耗费多余的资源;而消息传递,由软件进行控制和实现,需要消耗一定的 cpu 的资源。从这个意义上讲,共享区更适合频繁和大量的数据传输。

(3)消息的传递,自身就带有同步的控制。当等到消息的时候,进程进入睡眠状态,不再消耗 cpu 资源。而共享队列如果不借助其他机制进行同步,接收数据的一方必须进行不断的查询,白白浪费了大量的 cpu 资源。可见,消息方式的使用更加灵活。

  • 实验心得和体会:

共享区机制更适用于频繁和大量的数据传输,实现共享区机制的关键同样在于灵活调用涉及到的函数,完成信息的发送与接收。

标签:存储,操作系统,通信,client,实验,进程,共享,机制
From: https://blog.csdn.net/2301_81301590/article/details/136663624

相关文章

  • LACP短超时和长超时对接实验
    实验现象sw1和sw2互联的两条链路加入统一聚合口1,配置为动态聚合具体debug信息见文章最后SW1和SW21、默认情况下lacp为长超时,displink-aggverbri1 本端和对端的flags “B”都没有置位(表示默认为长超时),debugginglacp(debugginglink-aggregationlacpall)报文情况来......
  • 西门子S7.NET通信库【读】操作详解
    在使用西门子PLC进行工业自动化控制的过程中,经常需要与PLC进行数据交换。S7.NET是一款广泛应用于.NET平台的西门子PLC通信库,它为开发者提供了一系列的API函数,以便在C#、VB.NET等.NET语言中轻松实现与西门子PLC的数据交互。本文将详细介绍如何使用S7.NET通信库执行读操作。1......
  • Vue2.x笔记:组件通信
    一、插槽slot插槽(slot)是一种Vue中组件通信的方式,主要用于父组件向子组件传递自定义内容。有三种插槽:默认插槽:最基本的插槽,没有任何标识,每个子组件只能定义一个具名插槽:具有name属性的默认插槽,每个子组件可以定义多个作用域插槽:子组件提供数据,由父组件决定其渲染方式1.默......
  • Vue 3 组件通信与 ViewDesign 最佳实践
    Vue3组件通信与ViewDesign最佳实践随着Vue3的发布,组件通信成为了前端开发中一个值得关注的话题。通过有效的组件通信方式,可以大幅提高代码的可维护性和可重用性。本文将探讨Vue3中组件通信的几种方式,并使用ViewDesign组件库中的实例加以说明。ViewDesign是一款......
  • 虚拟机安装麒麟银河操作系统(Kylin Linux Advanced Server V10)以及设置网卡信息
    1、下载银河麒麟操作系统镜像https://distro-images.kylinos.cn:8802/web_pungi/download/share/Dq5r12WhYyFwAcnZP4JeGXkbsEHOBM0N/Kylin-Server-V10-SP3-General-Release-2303-X86_64.iso2、设置vm       #磁盘建议给到40G #点击完成开始下一步安装和......
  • 权限概念、权限提升概念以及权限提升的分类和目的 Windows 提权的基础原理是了解操作
    关于权限概念、权限提升概念以及权限提升的分类和目的,以下是一些基本信息供您参考:权限概念:权限是指系统或应用程序授予用户或进程执行某些操作或访问资源的能力。权限通常按照用户的身份、角色或组织结构来管理,以确保系统安全和数据保护。权限提升概念:权限提升是指用......
  • 操作系统漫游
    计算机系统漫游信息就是位+上下文重点:程序的生命周期从源程序(源文件)开始。源程序实际上就是由0和1组成的位序列。一般用ASCII标准来表示文本字符,实际上是用一个字节的整数值来表示一种字符。源文件中每个文本行都是以看不见的'\n'结束的。只由ASCII字符组成的文......
  • Libcomm通信库:GaussDB(DWS) 为解决建联过多的小妙招
    本文分享自华为云社区《GaussDB(DWS)集群通信系列三:Libcomm通信库》,作者:半岛里有个小铁盒。1.前言适用版本:【8.1.0(及以上)】在大规模集群、高并发业务下,如果有1000DN集群,每个stream线程需要建立1000个连接。如果1000stream并发,DN总共需要建立100万个连接,会消耗大量的连接、......
  • PXE批量安装操作系统自动化
    PXEz自动化在PXE服务器操作:*yum-yinstalldhcpxinetdtftptftp-server**yum-yinstallsystem-config-kickstart**yum-yinstallsyslinux**[root@localhostks]#cat/etc/dhcp/dhcpd.conf**subnet192.168.7.0netmask255.255.255.0{**range192.168.7.100192.1......
  • 实验1 C语言输入输出和简单程序编写
    task1_1.c`#include<stdio.h>include<stdlib.h>intmain(){printf("O\n");printf("\n");printf("II\n");printf("O\n");printf("\n");printf("II\n");system("pause&......