c語言中pcb塊,pcbc是什麼

本文目錄一覽:

用C語言編寫並調試一個模擬的進程調度程序,採用“簡單時間片輪轉法”調度算法對五個進程進行調度。

#include “stdio.h”

#include “stdlib.h”

#include “string.h”

struct PCB {

char NAME[10]; /*進程名*/

int ROUND; /*進程輪轉時間片*/

int REACHTIME; /*進程到達時間*/

int CPUTIME; /*進程佔用CPU時間*/

int COUNT; /*計數器*/

int NEEDTIME; /*進程完成還要的CPU時間*/

char STATE; /*進程的狀態*/

struct PCB *NEXT; /*鏈指針*/

};

struct LINK { /*PCB的鏈結構*/

struct PCB *RUN; /*當前運行進程指針*/

struct PCB *READY; /*就緒隊列頭指針*/

struct PCB *TAIL; /*就緒隊列尾指針*/

struct PCB *FINISH; /*完成隊列頭指針*/

};

void INIT(LINK *); /*對PCB的鏈結構初始化*/

void INSERT(LINK *); /*將執行了一個單位時間片數且還未完成的進程的PCB插到就緒隊列的隊尾*/

void FIRSTIN(LINK *); /*將就緒隊列中的第一個進程投入運行*/

void PRINT(LINK *); /*打印每執行一個時間片後的所有進程的狀態*/

void PR(PCB *); /*打印一個進程的狀態*/

int CREATE(LINK *,int); /*創建新的進程*/

void ROUNDSCH(LINK *); /*按時間片輪轉法調度進程*/

void main() {

LINK pcbs;

int i;

INIT(pcbs);

i=0;

printf(“創建5個進程\n\n”);

while(i5) {

if(CREATE(pcbs,i+1)==1) {

printf(“進程已創建\n\n”);

i++;

}

else

printf(“進程創建失敗\n\n”);

}

FIRSTIN(pcbs);

ROUNDSCH(pcbs);

}

void ROUNDSCH(LINK *p) {

PCB *pcb;

while(p-RUN!=NULL) {

pcb=(PCB *)malloc(sizeof(PCB));

strcpy(pcb-NAME,p-RUN-NAME);

pcb-ROUND=p-RUN-ROUND;

pcb-REACHTIME=p-RUN-REACHTIME;

pcb-CPUTIME=p-RUN-CPUTIME;

pcb-COUNT=p-RUN-COUNT;

pcb-NEEDTIME=p-RUN-NEEDTIME;

pcb-STATE=p-RUN-STATE;

pcb-NEXT=p-RUN-NEXT;

pcb-CPUTIME++;

pcb-NEEDTIME–;

pcb-COUNT++;

if(pcb-NEEDTIME==0) {

pcb-NEXT=p-FINISH-NEXT;

p-FINISH-NEXT=pcb;

pcb-STATE=’F’;

p-RUN=NULL;

if(p-READY!=p-TAIL)

FIRSTIN(p);

}

else {

p-RUN=pcb;

if(pcb-COUNT==pcb-ROUND) {

pcb-COUNT=0;

if(p-READY!=p-TAIL) {

pcb-STATE=’W’;

INSERT(p);

FIRSTIN(p);

}

}

}

PRINT(p);

}

}

void INIT(LINK *p) {

p-RUN=NULL;

p-TAIL=p-READY=(PCB *)malloc(sizeof(PCB));

p-READY-NEXT=NULL;

p-FINISH=(PCB *)malloc(sizeof(PCB));

p-FINISH-NEXT=NULL;

}

int CREATE(LINK *p,int n) {

PCB *pcb,*q;

pcb=(PCB *)malloc(sizeof(PCB));

flushall();

printf(“請輸入第%d個進程的名稱:\n”,n);

gets(pcb-NAME);

printf(“請輸入第%d個進程的輪轉時間片數:\n”,n);

scanf(“%d”,(pcb-ROUND));

printf(“請輸入第%d個進程的到達時間:\n”,n);

scanf(“%d”,(pcb-REACHTIME));

pcb-CPUTIME=0;

pcb-COUNT=0;

printf(“請輸入第%d個進程需運行的時間片數:\n”,n);

scanf(“%d”,(pcb-NEEDTIME));

pcb-STATE=’W’;

pcb-NEXT=NULL;

if(strcmp(pcb-NAME,””)==0||pcb-ROUND=0||pcb-NEEDTIME=0) /*輸入錯誤*/

return 0;

q=p-READY;

while(q-NEXT!=NULLq-NEXT-REACHTIME=pcb-REACHTIME)

q=q-NEXT;

pcb-NEXT=q-NEXT;

q-NEXT=pcb;

if(pcb-NEXT==NULL)

p-TAIL=pcb;

return 1;

}

void FIRSTIN(LINK *p) {

PCB *q;

q=p-READY-NEXT;

p-READY-NEXT=q-NEXT;

q-NEXT=NULL;

if(p-READY-NEXT==NULL)

p-TAIL=p-READY;

q-STATE=’R’;

p-RUN=q;

}

void INSERT(LINK *p) {

PCB *pcb;

pcb=(PCB *)malloc(sizeof(PCB));

strcpy(pcb-NAME,p-RUN-NAME);

pcb-ROUND=p-RUN-ROUND;

pcb-REACHTIME=p-RUN-REACHTIME;

pcb-CPUTIME=p-RUN-CPUTIME;

pcb-COUNT=p-RUN-COUNT;

pcb-NEEDTIME=p-RUN-NEEDTIME;

pcb-STATE=p-RUN-STATE;

pcb-NEXT=p-RUN-NEXT;

p-TAIL-NEXT=pcb;

p-TAIL=pcb;

p-RUN=NULL;

pcb-STATE=’W’;

}

void PRINT(LINK *p) {

PCB *pcb;

printf(“執行一個時間片後的所有進程的狀態:\n\n”);

if(p-RUN!=NULL)

PR(p-RUN);

if(p-READY!=p-TAIL) {

pcb=p-READY-NEXT;

while(pcb!=NULL) {

PR(pcb);

pcb=pcb-NEXT;

}

}

pcb=p-FINISH-NEXT;

while(pcb!=NULL) {

PR(pcb);

pcb=pcb-NEXT;

}

}

void PR(PCB *p) {

printf(“進程名:%s\n”,p-NAME);

printf(“進程輪轉時間片:%d\n”,p-ROUND);

printf(“進程到達時間:%d\n”,p-REACHTIME);

printf(“進程佔用CPU時間:%d\n”,p-CPUTIME);

printf(“計數器:%d\n”,p-COUNT);

printf(“進程完成還要的CPU時間:%d\n”,p-NEEDTIME);

printf(“進程的狀態:%c\n\n”,p-STATE);

}

如何用C語言編寫:設計一個時間片輪轉調度算法實現處理機調度的程序

實驗三 進程調度

一、實驗目的

在採用多道程序設計的系統中,往往有若干個進程同時處於就緒狀態。當就緒進程個數大於處理機數時,就必須依照某種策略來決定那些進程優先佔用處理機。本實驗模擬在單處理機情況下的處理機調度,幫助學生加深了解處理機調度的工作。

二、實驗內容

設計一個時間片輪轉調度算法實現處理機調度的程序。

三、實驗指導

1.實驗中使用的數據結構:

1)PCB進程控制塊

其中包括參數①進程名name;②要求運行時間runtime;③優先數prior;④狀態state;⑤已運行時間runedtime。

2)為簡單起見,只設運行隊列,就緒鏈表兩種數據結構,進程的調度在這兩個隊列中切換,如圖3.1所示。

圖3.1PCB鏈表

2.運行結果,包括各個進程的運行順序,每次佔用處理機的運行時間

3.每個進程運行時間隨機產生,為1~20之間的整數。

4.時間片的大小由實驗者自己定義,可為3或5。

四、實驗要求

1.在上機前寫出全部源程序;

2.能在機器上正確運行程序。

五、程序清單

六、運行結果

七、調試分析及實驗心得

我的回答和這位老兄的差不多

C語言 用結構體建立 一個PCB表 然後答應 麻煩各位高手幫我看下程序段是哪裡出錯了 有3個錯

#include stdio.h

struct pcb_type

{

int id;

char name[5];

int priority;

char state[5];

};

void main()

{

void list(struct pcb_type pcb);

struct pcb_type pcb[10], *p;

int i;

for(i=1,p=pcb;i=10;p++,i++)

{

printf(“Please input the date of pcb[%d]:\n”,i);

scanf(“%d\n%s\n%d\n%s”,(p-id),(p-name),(p-priority),(p-state));

}

for(i=1;i=10;i++)

list(pcb[i]);

}

void list(pcb)

struct pcb_type pcb;

{

printf(“%d%s%d%s”,pcb.id,pcb.name,pcb.priority,pcb.state);

printf(“inputting complete!\n”);

}

我用VC編譯的可以運行!

誰幫我做這個,用C語言定義一個數據結構PCB。

多看書:譚浩強《C程序設計》、C創造者的《C程序設計語言》、《C陷阱與缺陷》、《C專家編程》(經典)、《C程序員成長攻略》、《算法導論》、《數據結構》等等;

多讀代碼;多抄襲代碼;多動手;多瀏覽相關網站;多問;另外還要了解一些電路方面的知識,會看SCH和PCB電路,反覆閱讀相關芯片資料,多做相關方面的開發工作,積累工作經驗,光看是不行的,必須親自凍手設計,初學者可以用開發板來學習,用人家的例程。

努力就會成功!祝你早日入門啊!

用C語言編程模擬處理機調度(實現一種算法)

#include stdlib.h

#include conio.h

#define getpch(type) (type*)malloc(sizeof(type))

#define NULL 0

struct pcb { /* 定義進程控制塊PCB */

char name[10];

char state;

int super;

int ntime;

int rtime;

struct pcb* link;

}*ready=NULL,*p;

typedef struct pcb PCB;

void sort() /* 建立對進程進行優先級排列函數*/

{

PCB *first, *second;

int insert=0;

if((ready==NULL)||((p-super)(ready-super))) /*優先級最大者,插入隊首*/

{

p-link=ready;

ready=p;

}

else /* 進程比較優先級,插入適當的位置中*/

{

first=ready;

second=first-link;

while(second!=NULL)

{

if((p-super)(second-super)) /*若插入進程比當前進程優先數大,*/

{ /*插入到當前進程前面*/

p-link=second;

first-link=p;

second=NULL;

insert=1;

}

else /* 插入進程優先數最低,則插入到隊尾*/

{

first=first-link;

second=second-link;

}

}

if(insert==0) first-link=p;

}

}

void input() /* 建立進程控制塊函數*/

{

int i,num;

system(“cls”); /*清屏*/

printf(“\n 請輸入進程數: “);

scanf(“%d”,num);

for(i=1;i=num;i++)

{

printf(“\n 進程號No.%d:\n”,i);

p=getpch(PCB);

printf(“\n 輸入進程名:”);

scanf(“%s”,p-name);

printf(“\n 輸入進程優先數:”);

scanf(“%d”,p-super);

printf(“\n 輸入進程運行時間:”);

scanf(“%d”,p-ntime);

printf(“\n”);

p-rtime=0;p-state=’W’;

p-link=NULL;

sort(); /* 調用sort函數*/

}

}

int space()

{

int l=0;

PCB* pr=ready;

while(pr!=NULL)

{

l++;

pr=pr-link;

}

return(l);

}

void disp(PCB * pr) /*建立進程顯示函數,用於顯示當前進程*/

{

printf(“\n 進程名\t 狀態\t 優先數\t 需要運行時間\t 已經運行時間\n”);

printf(“|%s\t”,pr-name);

printf(“|%c\t”,pr-state);

printf(“|%d\t”,pr-super);

printf(“|%d\t\t”,pr-ntime);

printf(“|%d\t”,pr-rtime);

printf(“\n”);

}

void check() /* 建立進程查看函數 */

{

PCB* pr;

printf(“\n **** 當前正在運行的進程是:\n”); /*顯示當前運行進程*/

disp(p);

pr=ready;

printf(“\n **** 當前就緒隊列狀態為:\n”); /*顯示就緒隊列狀態*/

while(pr!=NULL)

{

disp(pr);

pr=pr-link;

}

}

void destroy() /*建立進程撤消函數(進程運行結束,撤消進程)*/

{

printf(“\n 進程 [%s] 已完成.\n”,p-name);

free(p);

}

void running() /* 建立進程就緒函數(進程運行時間到,置就緒狀態*/

{

(p-rtime)++;

if(p-rtime==p-ntime)

destroy(); /* 調用destroy函數*/

else

{

(p-super)–;

p-state=’W’;

sort(); /*調用sort函數*/

}

}

void main() /*主函數*/

{

int len,h=0;

char ch;

input();

len=space();

while((len!=0)(ready!=NULL))

{

ch=getchar();

h++;

printf(“—————————————————–“);

printf(“\n 現在是第%d次運行: \n”,h);

p=ready;

ready=p-link;

p-link=NULL;

p-state=’R’;

check();

running();

printf(“\n 按任意鍵繼續……\n”);

}

printf(“\n\n 進程已經完成.\n”);

}

原創文章,作者:ITZRV,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/331104.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ITZRV的頭像ITZRV
上一篇 2025-01-16 15:47
下一篇 2025-01-16 15:47

相關推薦

  • AES加密解密算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演着非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python語言由荷蘭人為中心的全能編程開發工程師

    Python語言是一種高級語言,很多編程開發工程師都喜歡使用Python語言進行開發。Python語言的創始人是荷蘭人Guido van Rossum,他在1989年聖誕節期間開始…

    編程 2025-04-28
  • Python語言設計基礎第2版PDF

    Python語言設計基礎第2版PDF是一本介紹Python編程語言的經典教材。本篇文章將從多個方面對該教材進行詳細的闡述和介紹。 一、基礎知識 本教材中介紹了Python編程語言的…

    編程 2025-04-28
  • Python語言實現人名最多數統計

    本文將從幾個方面詳細介紹Python語言實現人名最多數統計的方法和應用。 一、Python實現人名最多數統計的基礎 1、首先,我們需要了解Python語言的一些基礎知識,如列表、字…

    編程 2025-04-28
  • Python作為中心語言,在編程中取代C語言的優勢和挑戰

    Python一直以其簡單易懂的語法和高效的編碼環境而著名。然而,它最近的發展趨勢表明Python的使用範圍已經從腳本語言擴展到了從Web應用到機器學習等廣泛的開發領域。與此同時,C…

    編程 2025-04-28
  • Python基礎語言

    Python作為一種高級編程語言擁有簡潔優雅的語法。在本文中,我們將從多個方面探究Python基礎語言的特點以及使用技巧。 一、數據類型 Python基礎數據類型包括整數、浮點數、…

    編程 2025-04-28

發表回復

登錄後才能評論