亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

操作系統(tǒng)

操作系統(tǒng)實(shí)驗(yàn)二:進(jìn)程管理

時(shí)間:2024-06-05 10:38:07 操作系統(tǒng) 我要投稿
  • 相關(guān)推薦

操作系統(tǒng)實(shí)驗(yàn)二:進(jìn)程管理

  篇一:操作系統(tǒng)實(shí)驗(yàn)報(bào)告 實(shí)驗(yàn)一 進(jìn)程管理

  一、目的

  進(jìn)程調(diào)度是處理機(jī)管理的核心內(nèi)容。本實(shí)驗(yàn)要求編寫(xiě)和調(diào)試一個(gè)簡(jiǎn)單的進(jìn)程調(diào)度程序。通過(guò)本實(shí)驗(yàn)加深理解有關(guān)進(jìn)程控制塊、進(jìn)程隊(duì)列的概念,并體會(huì)和了解進(jìn)程調(diào)度算法的具體實(shí)施辦法。

  二、實(shí)驗(yàn)內(nèi)容及要求

  1、設(shè)計(jì)進(jìn)程控制塊PCB的結(jié)構(gòu)(PCB結(jié)構(gòu)通常包括以下信息:進(jìn)程名(進(jìn)程ID)、進(jìn)程優(yōu)先數(shù)、輪轉(zhuǎn)時(shí)間片、進(jìn)程所占用的CPU時(shí)間、進(jìn)程的狀態(tài)、當(dāng)前隊(duì)列指針等。可根據(jù)實(shí)驗(yàn)的不同,PCB結(jié)構(gòu)的內(nèi)容可以作適當(dāng)?shù)脑鰟h)。為了便于處理,程序中的某進(jìn)程運(yùn)行時(shí)間以時(shí)間片為單位計(jì)算。各進(jìn)程的輪轉(zhuǎn)時(shí)間數(shù)以及進(jìn)程需運(yùn)行的時(shí)間片數(shù)的初始值均由用戶(hù)給定。

  2、系統(tǒng)資源(r1…rw),共有w類(lèi),每類(lèi)數(shù)目為r1…rw。隨 機(jī)產(chǎn)生n進(jìn)程Pi(id,s(j,k)t),0<=i<=n,0<=j<=m,0<=k<=dt為總運(yùn)行時(shí)間,在運(yùn)行過(guò)程中,會(huì)隨機(jī)申請(qǐng)新的資源。

  3、每個(gè)進(jìn)程可有三個(gè)狀態(tài)(即就緒狀態(tài)W、運(yùn)行狀態(tài)R、等待或阻塞狀態(tài)B),并假設(shè)初始狀態(tài)為就緒狀態(tài)。建立進(jìn)程就緒隊(duì)列。

  4、編制進(jìn)程調(diào)度算法:時(shí)間片輪轉(zhuǎn)調(diào)度算法

  本程序用該算法對(duì)n個(gè)進(jìn)程進(jìn)行調(diào)度,進(jìn)程每執(zhí)行一次,CPU時(shí)間片數(shù)加1,進(jìn)程還需要的時(shí)間片數(shù)減1。在調(diào)度算法中,采用固定時(shí)間片(即:每執(zhí)行一次進(jìn)程,該進(jìn)程的執(zhí)行時(shí)間片數(shù)為已執(zhí)行了1個(gè)單位),這時(shí),CPU時(shí)間片數(shù)加1,進(jìn)程還需要的時(shí)間片數(shù)減1,并排列到就緒隊(duì)列的尾上。

  三、實(shí)驗(yàn)環(huán)境

  操作系統(tǒng)環(huán)境:Windows系統(tǒng)。

  編程語(yǔ)言:C#。

  四、實(shí)驗(yàn)思路和設(shè)計(jì)

  1、程序流程圖

  2、主要程序代碼

  //PCB結(jié)構(gòu)體

  struct pcb

  {

  public int id; //進(jìn)程ID

  public int ra; //所需資源A的數(shù)量

  public int rb; //所需資源B的數(shù)量

  public int rc; //所需資源C的數(shù)量

  public int ntime; //所需的時(shí)間片個(gè)數(shù)

  public int rtime; //已經(jīng)運(yùn)行的時(shí)間片個(gè)數(shù)

  public char state; //進(jìn)程狀態(tài),W(等待)、R(運(yùn)行)、B(阻塞)

  //public int next;

  }

  ArrayList hready = new ArrayList();

  ArrayList hblock = new ArrayList();

  Random random = new Random();

  //ArrayList p = new ArrayList();

  int m, n, r, a,a1, b,b1, c,c1, h = 0, i = 1, time1Inteval;//m為要模擬的進(jìn)程個(gè)數(shù),n為初始化進(jìn)程個(gè)數(shù)

  //r為可隨機(jī)產(chǎn)生的進(jìn)程數(shù)(r=m-n)

  //a,b,c分別為A,B,C三類(lèi)資源的總量

  //i為進(jìn)城計(jì)數(shù),i=1…n

  //h為運(yùn)行的時(shí)間片次數(shù),time1Inteval為時(shí)間片大。ê撩耄

  //對(duì)進(jìn)程進(jìn)行初始化,建立就緒數(shù)組、阻塞數(shù)組。

  public void input()//對(duì)進(jìn)程進(jìn)行初始化,建立就緒隊(duì)列、阻塞隊(duì)列

  {

  m = int.Parse(textBox4.Text);

  n = int.Parse(textBox5.Text);

  a = int.Parse(textBox6.Text);

  b = int.Parse(textBox7.Text);

  c = int.Parse(textBox8.Text);

  a1 = a;

  b1 = b;

  c1 = c;

  r = m - n;

  time1Inteval = int.Parse(textBox9.Text);

  timer1.Interval = time1Inteval;

  for (i = 1; i <= n; i++)

  {

  pcb jincheng = new pcb();

  jincheng.id = i;

  jincheng.ra = (random.Next(a) + 1);

  jincheng.rb = (random.Next(b) + 1);

  jincheng.rc = (random.Next(c) + 1);

  jincheng.ntime = (random.Next(1, 5));

  jincheng.rtime = 0;

  listBox1.Items.Add("產(chǎn)生進(jìn)程ID:" + jincheng.id);

  listBox1.Items.Add("所需A資源數(shù)目:" + jincheng.ra);

  listBox1.Items.Add("所需B資源數(shù)目:" + jincheng.rb);

  listBox1.Items.Add("所需C資源數(shù)目:" + jincheng.rc);

  listBox1.Items.Add("所需時(shí)間片數(shù):" + jincheng.ntime);

  if ((a - jincheng.ra) >= 0 && (b - jincheng.rb) >= 0 && (c - jincheng.rc) >= 0)

  {

  a = a - jincheng.ra;

  b = b - jincheng.rb;

  c = c - jincheng.rc;

  jincheng.state = 'W';

  hready.Add(jincheng);//加入就緒隊(duì)列

  }

  else

  {

  jincheng.state = 'B';

  hblock.Add(jincheng);//加入阻塞隊(duì)列

  }

  listBox1.Items.Add("當(dāng)前進(jìn)程狀態(tài):" + jincheng.state);

  }

  }

  //從數(shù)組起始地址開(kāi)始輸出該數(shù)組的內(nèi)容

  public void disp(ArrayList list)

  {

  ArrayList list1 = new ArrayList();

  list1 = list;

  if (list1.Count > 0)

  {

  for (int j = 0; j < list1.Count; j++)

  {

  pcb p = (pcb)list1[j];

  listBox1.Items.Add(" " + p.id.ToString() + " " + p.state.ToString() + "

  p.ra.ToString() + "" + p.rb.ToString() + "" + p.rc.ToString()+"

  p.ntime.ToString() + " " + p.rtime.ToString() + " ");

  }

  }

  else

  {

  listBox1.Items.Add(" 該隊(duì)列中沒(méi)有進(jìn)程! ");

  }

  }

  //輸出就緒數(shù)組和阻塞數(shù)組的信息

  public void outputall()

  {

  listBox1.Items.Add(" =======CPU運(yùn)行了:" + h.ToString() + "次======= ");

  listBox1.Items.Add("*********當(dāng)前就緒隊(duì)列的信息!*********");

  listBox1.Items.Add("進(jìn)程ID 進(jìn)程狀態(tài) A資源數(shù) B資源數(shù) C資源數(shù) 所需時(shí)間片 已運(yùn)行時(shí)間片");

  disp(hready);

  listBox1.Items.Add("*********當(dāng)前就阻塞列的信息!*********");

  listBox1.Items.Add("進(jìn)程ID 進(jìn)程狀態(tài) A資源數(shù) B資源數(shù) C資源 所需時(shí)間片 已運(yùn)行時(shí)間片");

  disp(hblock);

  }

  //運(yùn)行就緒數(shù)組的頭進(jìn)程,運(yùn)行一個(gè)時(shí)間片,輪轉(zhuǎn)一個(gè)時(shí)間片,時(shí)間片輪轉(zhuǎn)調(diào)度算法

  public void running()

  {

  ArrayList hready1 = new ArrayList();

  hready1 = hready;

  pcb p1 = new pcb();

  p1=(pcb)hready1[0];

  p1.state='R';

  p1.rtime= p1.rtime + 1;

  h=h+1;

  listBox1.Items.Add(" ~~~~~~~當(dāng)前正在運(yùn)行進(jìn)程ID是:" +p1.id + "~~~~~~~~ ");

  listBox1.Items.Add(" 進(jìn)程ID 進(jìn)程狀態(tài) A資源數(shù) B資源數(shù) C資源數(shù) 所需時(shí)間片 已運(yùn)行時(shí)間片 ");

  listBox1.Items.Add(p1.id + " " +p1.state+ "" + p1.ra + " " + p1.rb + "" + p1.rc + "" + p1.ntime + "" + p1.rtime);

  if (p1.ntime==p1.rtime)

  {

  listBox1.Items.Add(p1.id.ToString()+"的進(jìn)程已經(jīng)完成! ");

  a = a + p1.ra;

  b = b + p1.rb;

  c = c + p1.rc;

  hready.RemoveAt(0);

  }

  else

  {

  p1.state='W';

  hready1.Add(p1);

  hready.RemoveAt(0);

  }

  }

  //檢測(cè)當(dāng)前資源數(shù)目是否滿(mǎn)足阻塞數(shù)組里進(jìn)程的需求

  public void testblock()

  {

  ArrayList hblock1 = new ArrayList();

  hblock1 = hblock;

  for (int m = 0; m < hblock1.Count; m++)

  {

  pcb p1 = new pcb();

  篇二:操作系統(tǒng)進(jìn)程管理實(shí)驗(yàn)

  一、實(shí)驗(yàn)?zāi)康?/p>

  通過(guò)編寫(xiě)進(jìn)程管理的算法,要求學(xué)生掌握整個(gè)進(jìn)程管理的各個(gè)環(huán)節(jié),進(jìn)程的數(shù)據(jù)結(jié)構(gòu)描述,進(jìn)程的各種狀態(tài)之間的轉(zhuǎn)換,以及進(jìn)程的調(diào)度算法。以加深對(duì)進(jìn)程的概念及進(jìn)程調(diào)度算法的理解,并且提高鏈表的應(yīng)用能力,達(dá)到提高編程能力的目的。

  二、實(shí)驗(yàn)原理及基本技術(shù)路線(xiàn)圖(方框原理圖)

  用C語(yǔ)言或C++語(yǔ)言開(kāi)發(fā)。需要定義PCB的數(shù)據(jù)結(jié)構(gòu),用鏈表的形式管理進(jìn)程,采用多級(jí)反饋隊(duì)列調(diào)度的算法模擬進(jìn)程的控制。要求有創(chuàng)建、撤銷(xiāo)、調(diào)度、阻塞、喚醒進(jìn)程等功能。

 、龠M(jìn)程的狀態(tài)轉(zhuǎn)換圖

 、跀(shù)據(jù)結(jié)構(gòu)定義、主要變量的說(shuō)明、函數(shù)的說(shuō)明及各原語(yǔ)的功能說(shuō)明

  typedef struct PCB 定義結(jié)構(gòu)體PCB進(jìn)程控制塊;char NAME[20] 定義結(jié)構(gòu)體變量,進(jìn)程名;long

  ID 定義進(jìn)程id;int RUNTIME 定義進(jìn)程運(yùn)行時(shí)間;char STATE[6] 定義進(jìn)程狀態(tài) 有 ready 、wait 、run;

  int PRIORITY定義權(quán)值。 typedef struct QNode { PCB pcb; struct QNode *next; }QueuePtr; 定義單鏈表,有定義指針next。typedef struct LinkQueue { int prior; QueuePtr *front; QueuePtr *rear; int PartTime; }LinkQueue;

  鏈隊(duì)列中定:優(yōu)先級(jí)、結(jié)構(gòu)體里的QueuePtr類(lèi)型指針變量,指向該優(yōu)先級(jí)的進(jìn)程的頭結(jié)點(diǎn)和尾結(jié)點(diǎn),還運(yùn)行的時(shí)間片。LinkQueue Readyqueue[10] 鏈隊(duì)列的單鏈表。

  void schedule() 聲明調(diào)度函數(shù),用來(lái)調(diào)度進(jìn)程的運(yùn)行;void show() 聲明輸出函數(shù),用來(lái)輸出的一個(gè)函數(shù);void Create()聲明創(chuàng)建進(jìn)程的函數(shù),用來(lái)創(chuàng)建進(jìn)程。

  yunxingshijian=1+(int)(rand()%30); 此語(yǔ)句是隨機(jī)生成一個(gè)整數(shù)賦給運(yùn)行時(shí)間RUNTIME;

  youxianji=1+(int)(rand()%9); 該語(yǔ)句隨機(jī)生成一個(gè)整數(shù)(1~9)賦給優(yōu)先級(jí); strcpy(p->pcb.NAME,name)將名字賦給PCB塊;strcpy(p->pcb.STATE,"Ready")將進(jìn)程狀態(tài)賦給PCB塊; p->pcb.PRIORITY=youxianji將優(yōu)先級(jí)賦給PCB塊; p->pcb.RUNTIME=yunxingshijian; 將運(yùn)行時(shí)間賦給PCB塊; p->pcb.ID=id 將id號(hào)賦給PCB塊。

  {Readyqueue[i].front->next=p->next; Readyqueue[i+1].rear->next=p; Readyqueue[i+1].rear=p;p->next=NULL; } p移到下一隊(duì)列的隊(duì)尾,使Readyqueue[i+1].rear指向最后一個(gè)結(jié)點(diǎn)。{Readyqueue[i].front->next=p->next; Readyqueue[9].rear->next=p; p->next=NULL; Readyqueue[9].rear=p; } //p->next前移,把p移到運(yùn)行結(jié)束的隊(duì)列Readyqueue[9].rear。

 、鄱嗉(jí)反饋隊(duì)列調(diào)度算法的描述

  一個(gè)進(jìn)程被調(diào)度,則其運(yùn)行時(shí)間有p->pcb.RUNTIME=p->pcb.RUNTIME-(int )pow(2,i+1),此后如果該進(jìn)程的p->pcb.RUNTIME<0或p->pcb.RUNTIME=0,此進(jìn)程就結(jié)束且加入到Readyqueue[9].rear->next=p且p->next=NULL。沒(méi)有結(jié)束就移加到下一隊(duì)列的尾部且優(yōu)先級(jí)減“1”(Readyqueue[i].front->next=p->next;Readyqueue[i+1].rear->next=p;Readyqueue[i+1].rear=p;p->next=NULL; )。然后往下執(zhí)行。如此循環(huán).iv Readyqueue[i].front->next!=NULL發(fā)生時(shí),就往下一優(yōu)先級(jí)運(yùn)行。直到所有進(jìn)程結(jié)束。

 、艹绦蚬δ芙Y(jié)構(gòu)圖、流程圖

  <1>創(chuàng)建進(jìn)程函數(shù)Create()

  三、所用儀器、材料(設(shè)備名稱(chēng)、型號(hào)、規(guī)格等)。

  所用儀器:計(jì)算中心201;操作系統(tǒng):Microsoft Visual C++;軟件平臺(tái):Microsoft Visual C++

  四、實(shí)驗(yàn)方法、步驟

  #include#include#include#include#include

  typedef struct PCB //定義結(jié)構(gòu)體PCB進(jìn)程控制塊 {

  typedef struct QNode//單鏈表 {

  PCB pcb;

  typedef struct LinkQueue//鏈隊(duì)列

  {

  int prior; //優(yōu)先級(jí)

  LinkQueue Readyqueue[10]; //鏈隊(duì)列的單鏈表

  int N; //N為當(dāng)前進(jìn)程數(shù)

  void schedule();//聲明調(diào)度函數(shù)

  void show(); //聲明輸出函數(shù)

  void InitQueue() //隊(duì)列的初始化、給每個(gè)隊(duì)列加個(gè)頭結(jié)點(diǎn) {

  for(int i=0;i<10;i++) {

  Readyqueue[i].PartTime=(int )pow(2,i+1); //每個(gè)進(jìn)程的時(shí)間片

  Readyqueue[i].prior=9-i;//每進(jìn)程的優(yōu)先級(jí)

  Readyqueue[i].front=(QueuePtr*)malloc(sizeof(QueuePtr)); //為進(jìn)程申請(qǐng)空間

  QueuePtr *front; //結(jié)構(gòu)體里的QueuePtr類(lèi)型指針變量,指向該優(yōu)先級(jí)的進(jìn)程的頭結(jié)點(diǎn)

  QueuePtr *rear; //結(jié)構(gòu)體里的QueuePtr類(lèi)型指針變量,指向該優(yōu)先級(jí)的進(jìn)程的尾結(jié)點(diǎn)

  int PartTime; //時(shí)間片

  struct QNode *next;

  }

  QueuePtr;

  char NAME[20]; //結(jié)構(gòu)體變量,進(jìn)程名

  long ID; //進(jìn)程id

  int RUNTIME; //進(jìn)程運(yùn)行時(shí)間

  char STATE[6]; //進(jìn)程狀態(tài)

  ready wait run int PRIORITY;//權(quán)值

  }PCB;

  }LinkQueue;

  }

  }

  Readyqueue[i].rear=Readyqueue[i].front;//初始化單鏈的頭結(jié)點(diǎn)和尾結(jié)點(diǎn)指向同一位置 Readyqueue[i].front->next=NULL; //初始化時(shí)Readyqueue[i].front->next為空

  //***************************創(chuàng)建進(jìn)程**************************************************

  void Create() {

  InitQueue();

  char name[20]; long id=201031101; //定義ID和初始化為201031101

  QueuePtr *p;

  int yunxingshijian,youxianji;//運(yùn)行時(shí)間、優(yōu)先級(jí)

  printf(" 請(qǐng)輸入要?jiǎng)?chuàng)建進(jìn)程的數(shù)目:");

  fflush(stdin);

  scanf("%d",&m);

  {

  printf(" 輸入進(jìn)程名:"); //用戶(hù)輸入用戶(hù)名

  scanf("%s",&name);

  int m;

  for(int j=1;j<=m;j++) //創(chuàng)建用戶(hù)所需進(jìn)程m個(gè)

  srand((int)time(0));

  yunxingshijian=1+(int)(rand()%30);//隨機(jī)生成一個(gè)整數(shù)賦給運(yùn)行時(shí)間

  printf(" 運(yùn)行時(shí)間:%d",yunxingshijian);

  srand((int)time(0));

  for(int i=0;i<9;i++) //通過(guò)優(yōu)先級(jí)尋找該進(jìn)程應(yīng)放置的隊(duì)列

  {

  if(youxianji==9-i)

  {

  k=Readyqueue[i].front; //k為移動(dòng)指針,尋找隊(duì)列末尾進(jìn)程

  strcpy(p->pcb.NAME,name); //將名字賦給PCB塊

  strcpy(p->pcb.STATE,"Ready");//將進(jìn)程狀態(tài)賦給PCB塊

  p->pcb.PRIORITY=youxianji;//將優(yōu)先級(jí)賦給PCB塊

  p->pcb.RUNTIME=yunxingshijian; //將運(yùn)行時(shí)間賦給PCB塊

  p->pcb.ID=id; //將id號(hào)賦給PCB塊

  youxianji=1+(int)(rand()%9);//隨機(jī)生成一個(gè)整數(shù)(1~9)賦給優(yōu)先級(jí)

  printf(" 優(yōu)先級(jí):%d",youxianji);

  p=(QueuePtr *)malloc(sizeof(QueuePtr)); //插入就緒隊(duì)列

  QueuePtr *k;

  篇三:操作系統(tǒng)實(shí)驗(yàn)二(進(jìn)程管理)

  實(shí)驗(yàn)題目:

 。1) 進(jìn)程的創(chuàng)建編寫(xiě)一段程序,使用系統(tǒng)調(diào)用fork( )創(chuàng)建兩個(gè)子進(jìn)程。當(dāng)此程序運(yùn)行時(shí),在系統(tǒng)中有一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程活動(dòng)。讓每一個(gè)進(jìn)程在屏幕上顯示一個(gè)字符:父進(jìn)程顯示字符“a”;子進(jìn)程分別顯示字符“b”和字符“c”。試觀察記錄屏幕上的顯示結(jié)果,并分析原因。

 。2) 進(jìn)程的控制修改已編寫(xiě)的程序,將每個(gè)進(jìn)程輸出一個(gè)字符改為每個(gè)進(jìn)程輸出一句話(huà),在觀察程序執(zhí)行時(shí)屏幕上出現(xiàn)的現(xiàn)象,并分析原因。

 。3) 編制一段程序,使其實(shí)現(xiàn)進(jìn)程的軟中斷通信。要求:使用系統(tǒng)調(diào)用fork( )創(chuàng)建兩個(gè)子進(jìn)程,再用系統(tǒng)調(diào)用signal( )讓父進(jìn)程捕捉鍵盤(pán)上來(lái)的中斷信號(hào)(即按Del鍵);當(dāng)捕捉到中斷信號(hào)后,父進(jìn)程調(diào)用系統(tǒng)調(diào)用kill( )向兩個(gè)子進(jìn)程發(fā)出信號(hào),子進(jìn)程捕捉到信號(hào)后分別輸出下列信息后終止:Child process 1 is killed by parent!Child process 2 is killed by parent! 父進(jìn)程等待兩個(gè)子進(jìn)程終止后,輸出如下的信息后終止:Parent process is killed! 在上面的程序中增加語(yǔ)句signal(SIGINT, SIG_IGN)和 signal(SIGQUIT, SIG_IGN),觀察執(zhí)行結(jié)果,并分析原因。

 。4) 進(jìn)程的管道通信編制一段程序,實(shí)現(xiàn)進(jìn)程的管道通信。使用系統(tǒng)調(diào)用pipe( )建立一條管道線(xiàn);兩個(gè)進(jìn)程P1和P2分別向管道各寫(xiě)一句話(huà): Child 1 is sending a message! Child 2 is sending a message! 而父進(jìn)程則從管道中讀出來(lái)自于兩個(gè)子進(jìn)程的信息,顯示在屏幕上。要求父進(jìn)程先接收子進(jìn)程P1發(fā)來(lái)的消息,然后再接收子進(jìn)程P2發(fā)來(lái)的消息。

  實(shí)驗(yàn)源程序及報(bào)告:

 。1)、進(jìn)程的創(chuàng)建

  #include

  int main(int argc, char *argv[])

  {

  int pid1,pid2; /*fork first child process*/

  if ( ( pid1=fork() ) < 0 )

  {

  printf( "ProcessCreate Failed!");

  exit(-1);

  }

  if ( ( pid1=fork() ) == 0 )

  {

  printf( "b " );

  }

  /*fork second child process*/

  if ( ( pid2=fork() ) < 0 )

  {

  printf( "ProcessCreate Failed!");

  exit(-1);

  }

  if ( ( pid2=fork() ) == 0 )

  {

  printf( "c " );

  }

  /*parent process*/

  else

  {

  wait(NULL);

  printf( "a " );

  exit(0);

  }

  return 0;

  }

 。2)、進(jìn)程的控制

  #include

  int main(int argc, char *argv[])

  {int pid1,pid2;

  /*fork first child process*/

  if ( ( pid1=fork() ) < 0 )

  {

  printf( "ProcessCreate Failed!");

  exit(-1);

  }

  if ( ( pid1=fork() ) == 0 )

  {

  printf( "This is my Unix OS program! " );

  }

  /*fork second child process*/

  if ( ( pid2=fork() ) < 0 )

  {

  printf( "ProcessCreate Failed!");

  exit(-1);

  }

  if ( ( pid2=fork() ) == 0 )

  {

  printf( "This is the second Child process! " );

  }

  /*parent process*/

  else

  {

  wait(NULL);

  printf( "This is the Parent process " );

  exit(0);

  }

  return 0;

  }

 。3) 編制一段程序,使其實(shí)現(xiàn)進(jìn)程的軟中斷通信。

  #include

  #include

  #include

  #include

  int wait_flag; void stop( );

  main( )

  {

  int pid1, pid2;signal(3, stop);

  while ((pid1 = fork( )) == -1);

  if ( (pid1 = fork() ) > 0)

  {

  while ((pid2 = fork( )) == -1);

  if (( pid2 = fork()) > 0 )

  {

  }

  else

  {

  } wait_flag = 1;

  signal(SIGINT, stop);

  sleep(5);

  kill(pid1, 16);

  kill(pid2,17);

  wait(0); wait(0);

  printf(" Parent process is killed. ");

  exit(0); wait_flag = 1;

  signal(17, stop);

  printf(" Child process 2 is killed by parent. ");

  exit(0);

  }

【 操作系統(tǒng)實(shí)驗(yàn)二:進(jìn)程管理】相關(guān)文章:

WINDOWS操作系統(tǒng)的進(jìn)程描述04-02

Linux進(jìn)程管理優(yōu)秀教程11-22

Windows操作系統(tǒng)的管理的詳細(xì)解析03-31

操作系統(tǒng)實(shí)驗(yàn)心得體會(huì)(精選10篇)06-08

操作系統(tǒng)實(shí)驗(yàn)心得體會(huì)(通用12篇)11-28

Linux操作系統(tǒng)學(xué)習(xí)筆記權(quán)限管理03-19

操作系統(tǒng)的種類(lèi)07-07

LINUX操作系統(tǒng)01-22

系統(tǒng)進(jìn)程是什么03-28