国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【操作系統(tǒng)實(shí)驗(yàn)6】CPU調(diào)度程序模擬實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了【操作系統(tǒng)實(shí)驗(yàn)6】CPU調(diào)度程序模擬實(shí)現(xiàn)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、實(shí)驗(yàn)?zāi)繕?biāo)

加深對操作系統(tǒng)CPU調(diào)度以及調(diào)度算法的理解

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

1.思路

1)

  • 單處理器環(huán)境下,針對最短作業(yè)優(yōu)先算法(SJF)和優(yōu)先級調(diào)度算法(Priority),分別模擬實(shí)現(xiàn)搶占調(diào)度和非搶占調(diào)度的調(diào)度程序
  • 設(shè)計(jì)使用三個(gè)隊(duì)列,分別為就緒隊(duì)列(readyQueue)、運(yùn)行隊(duì)列(runningQueue)、等待隊(duì)列(waitingQueue)
  • 進(jìn)程狀態(tài)三種,分別為就緒狀態(tài):0、運(yùn)行狀態(tài):1、等待狀態(tài):2
  • 輸入:task.txt 文件和指定調(diào)度算法
    • task.txt 文件為需要調(diào)度的進(jìn)程集
    • 非搶占 SJF: sjf
    • 搶占 SJF: psjf
    • 非搶占 Priority: pprio
    • 搶占 Priority: prio
  • 輸出:按照所指定的調(diào)度算法,顯示調(diào)度結(jié)果
    • 比如:P2:2、P1:2、P3:1、P4:5

2)1數(shù)據(jù)結(jié)構(gòu)
本次實(shí)驗(yàn)的數(shù)據(jù)結(jié)構(gòu)參考了 pintos 中的線程調(diào)度:使? PCB 結(jié)構(gòu)體表示進(jìn)程、使?雙向鏈表管理進(jìn)程。
PCB 結(jié)構(gòu)體定義如下:

 typedef struct PCB {
 int pid; // pid
 int time_release; // release time
 int time_cpu; // total CPU execution time
 int time_remaining; // remaining CPU execution tine
 int priority; // priority
 enum ProcessState state; // process state

 struct PCB* prev; // previous process pointer
 struct PCB* next; // next process pointer
 } PCB;

為何適配該實(shí)驗(yàn),雙向鏈表上實(shí)現(xiàn)了?些常?的操作函數(shù)。由于本實(shí)驗(yàn)中需要通過進(jìn)程的優(yōu)先級和剩余 CPU 時(shí)間進(jìn)?排序,所以還參考 pintos 實(shí)現(xiàn)了有序插?的操作。

1 /* Operations on list. */
2 List* list_create();
3 void list_delete(List* list);
4
5 /* Iteration operations */
6 ListElem* list_begin(List* list);
7 ListElem* list_next(ListElem* elem);
8 ListElem* list_end(List* list);
9
10 /* Removal operations. */
11 ListElem* list_remove(ListElem* elem);
12 ListElem* list_pop_front(List* list);
13
14 /* Insertion operations. */
15 void list_insert(ListElem* before, ListElem* elem);
16 void list_insert_ordered(List* list, ListElem* elem,
17 list_less_func* less_func);
18 void list_push_back(List* list, ListElem* elem);
19
20 /* Get list properties. */
21 size_t list_size(List* list);
22 int list_empty(List* list);

3)算法
本實(shí)驗(yàn)中?先計(jì)算出運(yùn)?完所有進(jìn)程所需要的 CPU 區(qū)間?度 T,然后使? for 循環(huán),令 i 從0 遍歷到 T-1 來模擬實(shí)際 CPU 調(diào)度中定時(shí)器產(chǎn)?的時(shí)間?到時(shí)中斷:i 每增加 1,代表 CPU執(zhí)?了?個(gè)時(shí)間?,此時(shí)應(yīng)該重新進(jìn)?調(diào)度。
下?以最短作業(yè)優(yōu)先調(diào)度為例概述調(diào)度算法,優(yōu)先級調(diào)度算法與此類似,代碼也極其相似。
在?個(gè)新的時(shí)間?到來時(shí),將 CPU 分配給哪?個(gè)進(jìn)程有兩個(gè)需要考慮的因素 — 進(jìn)程的到達(dá)時(shí)間與進(jìn)程的剩余 CPU 區(qū)間。假如當(dāng)前到來的是第 i 個(gè)時(shí)間?,只有到達(dá)時(shí)間(release time)?于等于 i 的進(jìn)程才有機(jī)會被分配 CPU;隨后我們需要在些進(jìn)程中選擇剩余 CPU 區(qū)間最短的作為執(zhí)?進(jìn)程。
由此得到的結(jié)論就是,我們需要先對進(jìn)程的到達(dá)時(shí)間作為第?優(yōu)先級、剩余 CPU 區(qū)間作為第?優(yōu)先級進(jìn)?排序。本實(shí)驗(yàn)采?的?法是在進(jìn)程創(chuàng)建的時(shí)候就將其按照上述兩個(gè)優(yōu)先級插?到ready queue 中,使 ready queue 成為?個(gè)優(yōu)先級隊(duì)列。在?搶占式調(diào)度中,?個(gè)進(jìn)程執(zhí)?完?需執(zhí)?其他操作;?在搶占式調(diào)度中,?個(gè)進(jìn)程在該時(shí)間?內(nèi)執(zhí)?完后,需要判斷其剩余 CPU 區(qū)間是否為 0,如果為 0,則需要將其重新按照上述兩個(gè)優(yōu)先級插?到隊(duì)列中。
同理,如果采?優(yōu)先級調(diào)度,上述的排列規(guī)則變?yōu)榈竭_(dá)時(shí)間使第?優(yōu)先級,?進(jìn)程優(yōu)先級是第?優(yōu)先級。

2.代碼

#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>

enum ProcessState {
    PROCESS_READY,
    PROCESS_RUNNING
};

typedef struct PCB {
    int pid;                  
    int time_release;         
    int time_cpu;             
    int time_remaining;       
    int priority;             
    enum ProcessState state;  

    struct PCB* prev;
    struct PCB* next;
} PCB;

typedef PCB ListElem;

typedef struct List {
    ListElem head;
    ListElem tail;
} List;

/* Compares the value of two list elements A and B, given
   auxiliary data AUX.  Returns true if A is less than B, or
   false if A is greater than or equal to B. */
typedef int list_less_func(const ListElem* a,
                           const ListElem* b);

PCB* process_running;
List* ready_queue;
List* terminated_list;

char file_name[] = "sched.txt";
FILE* file;

/* Operations on list. */
List* list_create();
void list_delete(List* list);

ListElem* list_begin(List* list);
ListElem* list_next(ListElem* elem);
ListElem* list_end(List* list);

ListElem* list_remove(ListElem* elem);
ListElem* list_pop_front(List* list);

void list_insert(ListElem* before, ListElem* elem);
void list_insert_ordered(List* list, ListElem* elem,
                         list_less_func* less_func);
void list_push_back(List* list, ListElem* elem);

size_t list_size(List* list);
int list_empty(List* list);

/* Operations on process. */
PCB* process_create(int pid, int time_release, int priority, int time_exec);

void process_sched_sjf(int cpu_time);
void process_sched_psjf(int cpu_time);
int process_cmp_sjf(const ListElem* a, const ListElem* b);

void process_sched_prio(int cpu_time);
void process_sched_pprio(int cpu_time);
int process_cmp_prio(const ListElem* a, const ListElem* b);

void process_print(int cnt);

void print_header(int cpu_time);

int get_total_cpu_time();

PCB* load_process_from_file();

int main() {
    int cpu_time, mode;
    PCB* process;
    file = fopen(file_name, "r");

    ready_queue = list_create();
    terminated_list = list_create();

    printf("Input schedule mode.\n1: sjf, 2: psjf, 3: prio, 4:pprio.\n");
    scanf("%d", &mode);

    switch (mode) {
    case 1: {
        while ((process = load_process_from_file()) != NULL) {
            list_insert_ordered(ready_queue, process, process_cmp_sjf);
        }
        cpu_time = get_total_cpu_time();
        printf("\n\n");
        print_header(cpu_time);
        process_sched_sjf(cpu_time);
        printf("\n\n");
    } break;
    case 2: {
        while ((process = load_process_from_file()) != NULL) {
            list_insert_ordered(ready_queue, process, process_cmp_sjf);
        }
        cpu_time = get_total_cpu_time();
        printf("\n\n");
        print_header(cpu_time);
        process_sched_psjf(cpu_time);
        printf("\n\n");
    } break;
    case 3: {
        while ((process = load_process_from_file()) != NULL) {
            list_insert_ordered(ready_queue, process, process_cmp_prio);
        }
        cpu_time = get_total_cpu_time();
        printf("\n\n");
        print_header(cpu_time);
        process_sched_prio(cpu_time);
        printf("\n\n");
    } break;
    case 4: {
        while ((process = load_process_from_file()) != NULL) {
            list_insert_ordered(ready_queue, process, process_cmp_prio);
        }
        cpu_time = get_total_cpu_time();
        printf("\n\n");
        print_header(cpu_time);
        process_sched_pprio(cpu_time);
        printf("\n\n");
    } break;

    default:
        break;
    }

    list_delete(ready_queue);
    list_delete(terminated_list);

    return 0;
}

List* list_create() {
    List* list = (List*)malloc(sizeof(List));
    if (!list) {
        printf("list_create(): malloc failed.\n");
        exit(1);
    }

    list->head.prev = NULL;
    list->head.next = &list->tail;
    list->tail.prev = &list->head;
    list->tail.next = NULL;

    return list;
}

void list_delete(List* list) {
    ListElem* elem;
    while (!list_empty(list)) {
        elem = list_pop_front(list);
        free(elem);
    }
    free(list);
}

ListElem* list_begin(List* list) {
    return list->head.next;
}

ListElem* list_next(ListElem* elem) {
    return elem->next;
}

ListElem* list_end(List* list) {
    return &list->tail;
}

ListElem* list_remove(ListElem* elem) {
    elem->prev->next = elem->next;
    elem->next->prev = elem->prev;

    return elem->next;
}

ListElem* list_pop_front(List* list) {
    ListElem* front = list_begin(list);
    list_remove(front);

    return front;
}

void list_insert(ListElem* before, ListElem* elem) {
    elem->prev = before->prev;
    elem->next = before;
    before->prev->next = elem;
    before->prev = elem;
}

void list_push_back(List* list, ListElem* elem) {
    list_insert(list_end(list), elem);
}

void list_insert_ordered(List* list, ListElem* elem,
                         list_less_func* less_func) {
    ListElem* e;
    for (e = list_begin(list); e != list_end(list); e = list_next(e))
        if (less_func(elem, e))
            break;
    list_insert(e, elem);
}

size_t list_size(List* list) {
    ListElem* elem;
    size_t cnt = 0;
    for (elem = list_begin(list); elem != list_end(list); elem = list_next(elem))
        cnt++;

    return cnt;
}

int list_empty(List* list) {
    return (list_begin(list) == list_end(list));
}

PCB* process_create(int pid, int time_release, int priority, int time_exec) {
    PCB* process = (PCB*)malloc(sizeof(PCB));
    if (!process) {
        printf("process_create(): malloc failed.\n");
        exit(1);
    }

    process->pid = pid;
    process->time_release = time_release;
    process->time_cpu = time_exec;
    process->time_remaining = time_exec;
    process->priority = priority;
    process->state = PROCESS_READY;

    return process;
}

void process_sched_sjf(int cpu_time) {
    int i = 0;
    PCB* next;

    for (; i < cpu_time; i++) {
        process_running = list_begin(ready_queue);
        for (next = list_next(process_running); next != list_end(ready_queue); next = list_next(next)) {
            if (next->time_release > i)
                break;
            if (next->time_remaining < process_running->time_remaining)
                process_running = next;
        }
        i += process_running->time_remaining - 1;
        list_remove(process_running);
        list_push_back(terminated_list, process_running);
        process_print(process_running->time_remaining);
    }
}

void process_sched_psjf(int cpu_time) {
    int i = 0;
    PCB* next;

    for (; i < cpu_time; ++i) {
        process_running = list_begin(ready_queue);
        for (next = list_next(process_running); next != list_end(ready_queue); next = list_next(next)) {
            if (next->time_release > i)
                break;
            if (next->time_remaining < process_running->time_remaining)
                process_running = next;
        }
        process_running->time_remaining--;
        process_print(1);
        if (process_running->time_remaining > 0) {
            list_remove(process_running);
            list_insert_ordered(ready_queue, process_running, process_cmp_sjf);
        } else {
            list_remove(process_running);
            list_push_back(terminated_list, process_running);
        }
    }
}

int process_cmp_sjf(const ListElem* a, const ListElem* b) {
    if (a->time_release != b->time_release)
        return (a->time_release < b->time_release);
    else
        return (a->time_remaining < b->time_remaining);
}

void process_sched_prio(int cpu_time) {
    int i = 0;
    PCB* next;

    for (; i < cpu_time; i++) {
        process_running = list_begin(ready_queue);
        for (next = list_next(process_running); next != list_end(ready_queue); next = list_next(next)) {
            if (next->time_release > i)
                break;
            if (next->priority < process_running->priority)
                process_running = next;
        }
        i += process_running->time_remaining - 1;
        list_remove(process_running);
        list_push_back(terminated_list, process_running);
        process_print(process_running->time_remaining);
    }
}

void process_sched_pprio(int cpu_time) {
    int i = 0;
    PCB* next;

    for (; i < cpu_time; ++i) {
        process_running = list_begin(ready_queue);
        for (next = list_next(process_running); next != list_end(ready_queue); next = list_next(next)) {
            if (next->time_release > i)
                break;
            if (next->priority < process_running->priority)
                process_running = next;
        }
        process_running->time_remaining--;
        process_print(1);
        if (process_running->time_remaining > 0) {
            list_remove(process_running);
            list_insert_ordered(ready_queue, process_running, process_cmp_prio);
        } else {
            list_remove(process_running);
            list_push_back(terminated_list, process_running);
        }
    }
}

int process_cmp_prio(const ListElem* a, const ListElem* b) {
    if (a->time_release != b->time_release)
        return (a->time_release < b->time_release);
    else
        return (a->priority < b->priority);
}

void process_print(int cnt) {
    int i = 0;
    for (; i < cnt; ++i)
        printf("  P%d  ", process_running->pid);
}

void print_header(int cpu_time) {
    int i = 0;
    for (; i < cpu_time; ++i)
        printf("|_____");
    printf("|\n");

    for (i = 0; i <= cpu_time; ++i)
        printf("%-6d", i);
    printf("\n");
}

int get_total_cpu_time() {
    int total_cpu_time = 0;
    ListElem* elem = list_begin(ready_queue);
    for (; elem != list_end(ready_queue); elem = list_next(elem))
        total_cpu_time += elem->time_remaining;

    return total_cpu_time;
}

PCB* load_process_from_file() {
    int pid, time_release, time_cpu, priority;
    PCB* process = NULL;

    if (fscanf(file, "%d%d%d%d", &pid, &time_release, &priority, &time_cpu) != EOF) {
        process = process_create(pid, time_release, priority, time_cpu);
    }

    return process;
}

3.過程及運(yùn)行結(jié)果展示

從文本文件中輸入信息(格式:進(jìn)程ID, 到達(dá)時(shí)間, 優(yōu)先級, 運(yùn)行時(shí)間)
【操作系統(tǒng)實(shí)驗(yàn)6】CPU調(diào)度程序模擬實(shí)現(xiàn)

非搶占式最短作業(yè)優(yōu)先調(diào)度
【操作系統(tǒng)實(shí)驗(yàn)6】CPU調(diào)度程序模擬實(shí)現(xiàn)

搶占式最短作業(yè)優(yōu)先調(diào)度
【操作系統(tǒng)實(shí)驗(yàn)6】CPU調(diào)度程序模擬實(shí)現(xiàn)

非搶占式優(yōu)先級調(diào)度
【操作系統(tǒng)實(shí)驗(yàn)6】CPU調(diào)度程序模擬實(shí)現(xiàn)

搶占式優(yōu)先級調(diào)度
【操作系統(tǒng)實(shí)驗(yàn)6】CPU調(diào)度程序模擬實(shí)現(xiàn)

三、實(shí)驗(yàn)結(jié)論

通過本實(shí)驗(yàn)對于調(diào)度算法有了更加深刻的理解。
-最短作業(yè)優(yōu)先調(diào)度:
搶占式:當(dāng)新進(jìn)來的進(jìn)程的CPU區(qū)間比當(dāng)前執(zhí)行的進(jìn)程所剩的CPU區(qū)間短,則搶占。
非搶占:為下一個(gè)最短優(yōu)先,因?yàn)樵诰途w隊(duì)列中選擇最短CPU區(qū)間的進(jìn)程放在隊(duì)頭。
-優(yōu)先級調(diào)度算法:SJF是特殊的優(yōu)先級調(diào)度算法,以CPU區(qū)間長度的倒數(shù)為優(yōu)先級。
搶占式為如果進(jìn)來的進(jìn)程優(yōu)先級高于運(yùn)行的進(jìn)程,則替換。
非搶占式只是在就緒隊(duì)列中按優(yōu)先級排隊(duì)。
缺點(diǎn):無線阻塞或饑餓。前者為一個(gè)優(yōu)先級高且運(yùn)行時(shí)間長的進(jìn)程一直阻塞,后者為優(yōu)先級低的進(jìn)程永遠(yuǎn)都得不到執(zhí)行。文章來源地址http://www.zghlxwxcb.cn/news/detail-456530.html

到了這里,關(guān)于【操作系統(tǒng)實(shí)驗(yàn)6】CPU調(diào)度程序模擬實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 操作系統(tǒng)進(jìn)程調(diào)度算法(c語言模擬實(shí)現(xiàn))

    操作系統(tǒng)進(jìn)程調(diào)度算法(c語言模擬實(shí)現(xiàn))

    ????????前言: 本文旨在分享如何使用c語言對操作系統(tǒng)中的部分進(jìn)程調(diào)度算法進(jìn)行模擬實(shí)現(xiàn),以及算法描述的講解, 完整代碼放在文章末尾,歡迎大家自行拷貝調(diào)用 目錄 常見的調(diào)度算法 數(shù)據(jù)結(jié)構(gòu) 先來先服務(wù)調(diào)度算法 算法模擬思路: 算法模擬:? 最短作業(yè)優(yōu)先調(diào)度算法

    2024年02月06日
    瀏覽(27)
  • 操作系統(tǒng)進(jìn)程調(diào)度算法的模擬實(shí)現(xiàn)(c語言版本)

    操作系統(tǒng)進(jìn)程調(diào)度算法的模擬實(shí)現(xiàn)(c語言版本)

    ????????前言: 本文旨在分享如何使用c語言對操作系統(tǒng)中的部分進(jìn)程調(diào)度算法進(jìn)行模擬實(shí)現(xiàn),以及算法描述的講解, 完整代碼放在文章末尾,歡迎大家自行拷貝調(diào)用 目錄 常見的調(diào)度算法 數(shù)據(jù)結(jié)構(gòu) 先來先服務(wù)調(diào)度算法 算法模擬思路: 算法模擬:? 最短作業(yè)優(yōu)先調(diào)度算法

    2024年02月06日
    瀏覽(16)
  • 先來先服務(wù)調(diào)度算法(C語言代碼實(shí)現(xiàn)) 大三操作系統(tǒng)實(shí)驗(yàn)

    先來先服務(wù)調(diào)度算法(C語言代碼實(shí)現(xiàn)) 大三操作系統(tǒng)實(shí)驗(yàn)

    實(shí)驗(yàn)原理: 先來先服務(wù)(First Come First Served,FCFS),是一種簡單的調(diào)度算法,它既適用于作業(yè)調(diào)度,也適用于進(jìn)程調(diào)度。先來先服務(wù)算法是按照作業(yè)或進(jìn)程的到達(dá)先后次序來進(jìn)行調(diào)度。當(dāng)作業(yè)調(diào)度中采用該算法時(shí),每次調(diào)度都是從后備隊(duì)列中選擇一個(gè)最先進(jìn)入該隊(duì)列中作業(yè),將

    2024年04月16日
    瀏覽(24)
  • 【操作系統(tǒng)原理實(shí)驗(yàn)】銀行家算法模擬實(shí)現(xiàn)

    【操作系統(tǒng)原理實(shí)驗(yàn)】銀行家算法模擬實(shí)現(xiàn)

    選擇一種高級語言如C/C++等,編寫一個(gè)銀行家算法的模擬實(shí)現(xiàn)程序。1) 設(shè)計(jì)相關(guān)數(shù)據(jù)結(jié)構(gòu);2) 實(shí)現(xiàn)系統(tǒng)資源狀態(tài)查看、資源請求的輸入等模塊;3) 實(shí)現(xiàn)資源的預(yù)分配及確認(rèn)或回滾程序;4) 實(shí)現(xiàn)系統(tǒng)狀態(tài)安全檢查程序;5) 組裝各模塊成一個(gè)完整的模擬系統(tǒng)。 (1)設(shè)計(jì)思想: 1、

    2024年02月01日
    瀏覽(25)
  • 操作系統(tǒng)課程設(shè)計(jì)進(jìn)程調(diào)度模擬

    操作系統(tǒng)課程設(shè)計(jì)進(jìn)程調(diào)度模擬

    程序下載鏈接:https://download.csdn.net/download/m0_56241309/86945709 進(jìn)程調(diào)度模擬 摘要 :進(jìn)程調(diào)度是操作系統(tǒng)中必不可少的一種調(diào)度,在3中OS中都無一例外地配置了進(jìn)程調(diào)度。此外,它也是對系統(tǒng)性能影響最大的一種處理機(jī)調(diào)度,在操作系統(tǒng)中具有十分重要的地位。本次模擬,旨在全

    2024年02月08日
    瀏覽(26)
  • 操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度)

    操作系統(tǒng)實(shí)驗(yàn)(進(jìn)程調(diào)度)

    ??1.1理解有關(guān)進(jìn)程控制塊、進(jìn)程隊(duì)列的概念。 ??1.2掌握進(jìn)程優(yōu)先權(quán)調(diào)度算法和時(shí)間片輪轉(zhuǎn)調(diào)度算法的處理邏輯。 ??2.1設(shè)計(jì)進(jìn)程控制塊PCB的結(jié)構(gòu),分別適用于優(yōu)先權(quán)調(diào)度算法和時(shí)間片輪轉(zhuǎn)調(diào)度算法。 ??2.2建立進(jìn)程就緒隊(duì)列。 ??2.3編制兩種進(jìn)程調(diào)度算法:優(yōu)先權(quán)調(diào)度

    2024年02月06日
    瀏覽(18)
  • 操作系統(tǒng)-進(jìn)程調(diào)度實(shí)驗(yàn)報(bào)告

    操作系統(tǒng)-進(jìn)程調(diào)度實(shí)驗(yàn)報(bào)告

    1.實(shí)現(xiàn)四種不同及進(jìn)程調(diào)度算法: 先來先服務(wù)、時(shí)間片輪轉(zhuǎn)調(diào)、優(yōu)先級調(diào)度以及短作業(yè)優(yōu)先調(diào)度算法。 2.通過實(shí)驗(yàn)理解有關(guān)進(jìn)程控制塊,進(jìn)程隊(duì)列等的概念。 1.運(yùn)行素材中的代碼,觀察其執(zhí)行結(jié)果是否正確?各個(gè)調(diào)度算法的功能是否完善?如果沒有,則完善。 2. 按照下表

    2024年02月06日
    瀏覽(24)
  • 計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn):進(jìn)程調(diào)度實(shí)驗(yàn)

    計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn):進(jìn)程調(diào)度實(shí)驗(yàn)

    前言 二、實(shí)驗(yàn)?zāi)康?三、實(shí)驗(yàn)要求 四、實(shí)驗(yàn)原理 五、實(shí)驗(yàn)過程 六、代碼詳解 總結(jié) 計(jì)算機(jī)操作系統(tǒng)是管理計(jì)算機(jī)硬件和軟件資源的核心軟件,它負(fù)責(zé)為用戶提供一個(gè)友好、高效、安全的使用環(huán)境。進(jìn)程調(diào)度是操作系統(tǒng)的一個(gè)重要功能,它決定了進(jìn)程在處理器上的執(zhí)行順序和時(shí)

    2024年02月07日
    瀏覽(23)
  • 磁盤調(diào)度算法(操作系統(tǒng)實(shí)驗(yàn) C++)

    磁盤調(diào)度算法(操作系統(tǒng)實(shí)驗(yàn) C++)

    通過這次實(shí)驗(yàn),加深對磁盤調(diào)度算法的理解,進(jìn)一步掌握先來先服務(wù)FCFS、最短尋道時(shí)間優(yōu)先SSTF、SCAN和循環(huán)SCAN算法的實(shí)現(xiàn)方法。 問題描述: 設(shè)計(jì)程序模擬先來先服務(wù)FCFS、最短尋道時(shí)間優(yōu)先SSTF、SCAN和循環(huán)SCAN算法的工作過程。假設(shè)有n個(gè)磁道號所組成的磁道訪問序列,給定開

    2024年02月07日
    瀏覽(17)
  • 操作系統(tǒng)實(shí)驗(yàn)—進(jìn)程調(diào)度算法(java)

    操作系統(tǒng)實(shí)驗(yàn)—進(jìn)程調(diào)度算法(java)

    目錄 文章目錄 前言 一、實(shí)驗(yàn)原理 二、實(shí)驗(yàn)步驟 1.創(chuàng)建PCB類 2.創(chuàng)建創(chuàng)建類 3.設(shè)計(jì)主窗口類 4.調(diào)度界面函數(shù) 5.算法類及其調(diào)度算法通用函數(shù) 6.進(jìn)程調(diào)度算法函數(shù) 總結(jié) 操作系統(tǒng)實(shí)驗(yàn)1:進(jìn)程調(diào)度算法,步驟3、4在一個(gè)類中,步驟5、6在一個(gè)類中。 (1)先到先服務(wù)調(diào)度算法:按照進(jìn)程提

    2024年02月04日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包