操作系统原理及安全 3-并发程序设计(综合型)

这篇具有很好参考价值的文章主要介绍了操作系统原理及安全 3-并发程序设计(综合型)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 实验目的

1、熟悉并发程序实验工具BACI。

2、掌握BACC和BAINTERP的使用。

3、熟悉信号量的同步控制机制。

二、实验软硬件要求

  1、CPU:P4 1.6GHz   内存:4G

  2、Windows平台上的Linux虚拟机

  • 实验内容

(1)完成Linux系统的登录,启动进入终端。

编程步骤:

  cd baci/balnxxe

  编写程序文件命令:gedit my.cm (程序源码请看第(2)题,需要你补充缺失的代码。)

  编译命令:$./bacc my,生成my.pco文件;

运行:./bainterp my.pco,  得到并分析结果。

(2)用信号量实现进程同步时,通常设置与进程相关的私有信号量。empty和full分别属于生产者和消费者进程私有,即生产者要问是否empty,才能开始生产;同理,消费者要问是否full才能消费。 用信号量mutex实现进程互斥,互斥使用缓冲池,其初值=1;

操作系统原理及安全 3-并发程序设计(综合型),操作系统原理及安全,经验分享,linux,安全

请将下面的并发程序填写完整,或自行编写并发程序。

参考程序:pc.cm

semaphore mutex=1;                      //缓冲池互斥信号量

semaphore full=0;                       //满缓冲区个数信号量,初值=0

semaphore em=7;                         //空缓冲区个数信号量,初值=7

int in=0;int out=0;                    

int buff[6];                            //缓冲池

void p1()

{   int nextp; while(1)

  { cin>>nextp;                         //生产一个产品

    p(em);

    //填写代码

     buff[in]=nextp;                   

    cout <<"in="<<in<<endl;

    //填写代码;

    cout <<"nextp="<<nextp<<endl;

   v(mutex);

  //填写代码;

   }

  }//producer

void c1()

{  int nextc;                       

  while(1)

  {

    //填写代码;

    p(mutex);

  

   //填写代码

   out=(out+1)%6;

   cout <<"nextc="<<nextc<<endl;

   //填写代码;

   v(em);

  }

}//consumer

void main()

{ cobegin{  p1();c1(); }

}

完整代码:

semaphore mutex=1;

semaphore full=0;

semaphore em=7;

int in=0;int out=0;

int buff[6];

void p1(){

   int nextp;

   while(1){

       cin>>nextp;

       p(em);

       p(mutex);

       buff[in]=nextp;

       cout<<"in="<<in<<endl;

       in=(in+1)%6;

       cout<<"nextp="<<nextp<<endl;

       v(mutex);

       v(full);

   }

}

void c1(){

   int nextc;

   while(1){

       p(full);

       p(mutex);

       nextc=buff[out];

       out=(out+1)%6;

       cout<<"nextc="<<nextc<<endl;

       v(mutex);

       v(em);

   }

}//consumer

void main(){

cobegin{

   p1();

   c1();

   }

}

操作系统原理及安全 3-并发程序设计(综合型),操作系统原理及安全,经验分享,linux,安全

(3)有父亲、母亲、儿子、女儿4个进程,共享一个盘子,父亲每次在盘子中放入一个苹果,盘子中的苹果只能由女儿取出;母亲每次向盘子放入一个桔子,桔子只能由儿子取出,假设盘子内能装一个水果。编程:apple.cm

1)编写用信号量机制实现父亲等4个进程的并发控制程序;

2)在BACI环境中运行并分析结果。

semaphore mutex=1;

semaphore plat=1;

semaphore apple=0;

semaphore orange=0 ;

int ap=0;int or=0;int pl=1;

void father(){

    int num;

    while(1){

    p(plat);

    p(mutex);

    cin>>num;

    cout<<"father put on apple "<<num<<endl;

    v(apple);

    ap++;

    pl--;

    v(mutex);

  

}

}

void monther(){

    int num;

    while(1){

    p(plat);

    p(mutex);

    cin>>num;

    cout<<"monther put on orange "<<num<<endl;

    v(orange);

    or++;

    pl--;

    v(mutex);

  

  

}

}

void son(){

    int num;

    while(1){

    p(orange);

    p(mutex);

    cout<<"son take out a orange"<<endl;

    v(plat);

    or--;

    pl++;

    cout<<"orange="<<or<<endl;

    cout<<"plat="<<pl<<endl;

    v(mutex);

   

   

       

}

}

void daughter(){

    int num;

    while(1){

   

    p(apple);

    p(mutex);

    cout<<"daughter take out a apple"<<endl;

    v(plat);

    ap--;

    pl++;

    cout<<"apple="<<ap<<endl;

    cout<<"plat="<<pl<<endl;

    v(mutex);

   

        

}

}

void main(){

   cobegin{

   father();

   daughter();

   monther();

   son();

  

  

}

}

操作系统原理及安全 3-并发程序设计(综合型),操作系统原理及安全,经验分享,linux,安全

三、实验结果分析

(对上述实验内容中的各题结果,进行分析讨论。并回答下列问题)

  1. 简述用信号量控制互斥问题时的编程设置。

当进程互斥时或者涉及临界资源的争夺时,应该遵循前P后V的信号量设置原则

  1. 简述用信号量控制同步问题时的编程设置。

当进程同步时,应该遵循前V后P的原则,即先发生的进程完成后设置V信号量,后发生的进程发生前设置P信号量,同时注意,PV信号量应该成对出现。

四、总结:你对本次实验有什么体会或看法。

分析信号量问题时,应该先进行关系分析,找出同步和互斥的关系,根据同步关系前V后P ,互斥关系前P后V的原则对信号量进行设置。

注意:伪代码中设置的semaphore是信号量,只能用PV进行加减,不能使用++或—进行操作。

附BACI工具说明:

BACI提供了一个可以编写并发程序的环境,在这个平台上,我们可以很容易的模拟程序的并发执行,在这种并行的编译环境中,可以把BACI中的一些语句嵌入到C++,C,Java等高等程序中,使程序可以并行执行 .

  基于C++的BACI语法(C—BACI Compiler)

  该语法结构是在C++语法结构的基础上,增加一些并发语句扩展而来,下面是在试验中需要用到的函数解释.

1. cobegin函数

  在BACI系统中,并发进程与并发线程同步,多个进程可以并发的在cobegin 块中来并发执行,该函数必须在主函数中,语法结构为:

  cobegin {

  proc1(...);proc2(...);. . . . procN(...);

  }

其中每个进程并发随机执行,每次执行的顺序可能会不一样,当所有的进程接受后,该函数结束。

2. Semaphores/Binarysem

  信号量的(Semaphores)机制可以更方便的实现进程同步,Semaphores是一种如C中”int”一样的类型,可以用来定义信号量类型的变量,Binarysem是一种二进制信号量,它所定义的变量只能取1或 0,用来表示互斥。

1)信号量的声明和初始化

  semaphores a;

  binarysem s;

上面声明了两个信号量a,b,其中b为二进制信号量信号量按如下方式初始化:

  Initialsem(semaphores,interger);

  Initialsem(binarysem,0/1);

2)P(wait)/V(signal)函数

  强大的PV操作与信号量一次很方便的解决了并发进程同步与互斥问题

  函数原型:

  void p(semaphores &s); or void wait(semaphores &s);

  void v(semaphores &s); or void signal(semaphores &s);

  函数说明:

  p(sem): 如果sem > 0,则sem减1,调用P的进程可以继续执行,如果sem=0,则该进程阻塞,该函

  数操作是原子性的.

  v(sem): 如果v=0,或有进程阻塞,则将其唤醒,如果没有进程等待,将sem加1,在任何时候调用

  v的进程可以继续执行,其操作也是原子的.

3.atomic

  atomic关键字定义了原子操作,即该函数操作不可剥夺,每次只能一个进程访问

  用法:在要原子执行的函数前加atomic即可,如:

  atomic int sum(){

  . . . ..

  }

  则sum()函数就可以原子操作了

4.void suspend(void)

  suspend函数将调用的线程挂起

5.void revive (int process_number)

  该函数用于唤醒某个进程,其进程号为process_number

6.cin可以连续从键盘读取想要的数据,以空格、tab或换行作为分隔符。文章来源地址https://www.toymoban.com/news/detail-741752.html

到了这里,关于操作系统原理及安全 3-并发程序设计(综合型)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 学习操作系统的必备教科书《操作系统:原理与实现》| 文末赠书4本

    使用了6年的实时操作系统,是时候梳理一下它的知识点了 摘要: 本文简单介绍了博主学习操作系统的心路历程,同时还给大家总结了一下当下流行的几种实时操作系统,以及在工程中OSAL应该如何设计。希望对大家有所启发和帮助。 操作系统一直伴随着我的工作,早些年我

    2023年04月08日
    浏览(44)
  • 1.2 操作系统原理和常见命令

    操作系统原理 操作系统的概述: 定义:操作系统是控制和管理计算机硬件与软件资源,提供应用程序和用户访问的系统软件。 功能:进程管理、内存管理、文件系统、设备管理、安全性等。 作用:协调和优化计算机资源,提供统一的接口给应用程序。 角色:操作系统在计

    2024年02月13日
    浏览(52)
  • Mac使用PD虚拟机安装win10提示安全启动功能发现未经授权更改固件、操作系统或 UEFI 驱动程序。若要进行安全启动设置管理,请选择虚拟机配置设置,单击硬件,并展开高级设置。

            Mac使用PD虚拟机安装win10提示安全启动功能发现未经授权更改固件、操作系统或 UEFI 驱动程序。若要进行安全启动设置管理,请选择虚拟机配置设置,单击硬件,并展开高级设置。           PD 虚拟机中的 TPM 芯片是一种安全芯片,它可以提供基于硬件的加密和

    2024年04月16日
    浏览(81)
  • 信创操作系统--麒麟Kylin桌面操作系统 (项目十 安全中心)

    信创操作系统–麒麟Kylin桌面操作系统 (项目十 安全中心) 安全中心是由麒麟安全团队开发的一款系统安全管理程序,其首页包含【账户安全】、【安全体检】、【病毒防护】、【网络保护】与【应用控制与保护】五个模块,系统已默认安装。 单击【开始菜单】按钮,通过鼠

    2024年02月04日
    浏览(50)
  • Linux 操作系统原理 — PCIe 总线标准

    2023年04月24日
    浏览(81)
  • 操作系统原理 —— 文件的逻辑结构(二十三)

    这里说的 逻辑结构 ,就是指在用户看来,文件内部的数据应该是如何组织起来的,而 物理结构 指的是在操作系统看来,文件的数据是如何被存放的。 从 逻辑结构 结构来看,我们可以打开一个记事本,里面的文字内容从用户的角度来看就是无结构的,但是又从 Excel 来看,

    2024年02月08日
    浏览(62)
  • 计算机操作系统原理期末总复习

    1、现代操作系统的四个特征是什么?(4分) 并发、共享、虚拟、异步 并发 :两个或多个事件在 同一时间间隔内 发生。 共享 :内存中多个并发执行的进程共同使用系统中的资源。 2、操作系统内核的四个主要功能是什么?(4分) 内存管理、进程管理、设备管理、文件管理

    2024年02月10日
    浏览(66)
  • Windows操作系统AD域服务器简介、原理及 搭建操作

    1.1 AD 简介 域(Domain)是Windows网络中独立运行的单位,域之间相互访问则需要建立信任关系。 当一个域与其他域建立了信任关系后,2个域之间不但可以按需要相互进行管理,还可以跨网分配文件和打印机等设备资源,使不同的域之间实现网络资源的共享与管理,以及相互通信和

    2024年02月04日
    浏览(54)
  • 《计算机系统与网络安全》 第八章 操作系统安全基础

    🌷🍁 博主 libin9iOak带您 Go to New World.✨🍁 🦄 个人主页——libin9iOak的博客🎐 🐳 《面试题大全》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 🌊 《IDEA开发秘籍》学会IDEA常用操作,工作效率翻倍~💐 🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬

    2024年02月11日
    浏览(52)
  • 【网络安全】-Linux操作系统—操作系统发展历史与Linux

    操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的系统软件,它是计算机系统的核心与基石。操作系统的发展历史可以追溯到20世纪50年代。 初期的操作系统 在计算机技术的早期,操作系统并不存在。那时,计算机使用一种叫做批处理系统的方式来运行程序。

    2024年02月03日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包