登录/注册

操作系统pcb实验程序

更多

以下是一个用C语言实现的操作系统PCB(进程控制块)实验程序示例,包含中文注释说明:

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

// 定义进程状态枚举
typedef enum {
    READY,      // 就绪态
    RUNNING,    // 运行态
    BLOCKED,    // 阻塞态
    TERMINATED  // 终止态
} ProcessState;

// 定义PCB结构体
typedef struct pcb {
    int pid;                // 进程ID
    char name[20];          // 进程名称
    ProcessState state;     // 进程状态
    int priority;           // 优先级
    int program_counter;    // 程序计数器
    struct pcb* next;       // 指向下一个PCB的指针
} PCB;

// 全局就绪队列头指针
PCB* ready_queue = NULL;

// 创建新PCB
PCB* create_pcb(int pid, const char* name, int priority) {
    PCB* new_pcb = (PCB*)malloc(sizeof(PCB));
    if (new_pcb != NULL) {
        new_pcb->pid = pid;
        strcpy(new_pcb->name, name);
        new_pcb->state = READY;
        new_pcb->priority = priority;
        new_pcb->program_counter = 0;
        new_pcb->next = NULL;
    }
    return new_pcb;
}

// 将PCB添加到就绪队列(尾部插入)
void add_to_ready_queue(PCB* process) {
    if (ready_queue == NULL) {
        ready_queue = process;
    } else {
        PCB* temp = ready_queue;
        while (temp->next != NULL) {
            temp = temp->next;
        }
        temp->next = process;
    }
    process->state = READY;
}

// 从就绪队列移除首进程
PCB* remove_from_ready_queue() {
    if (ready_queue == NULL) return NULL;

    PCB* removed = ready_queue;
    ready_queue = ready_queue->next;
    removed->next = NULL;
    return removed;
}

// 显示就绪队列
void display_ready_queue() {
    PCB* temp = ready_queue;
    printf("\n就绪队列状态:");
    printf("\nPID\t名称\t状态\t优先级\tPC");

    while (temp != NULL) {
        const char* state_str;
        switch (temp->state) {
            case READY: state_str = "就绪"; break;
            case RUNNING: state_str = "运行"; break;
            case BLOCKED: state_str = "阻塞"; break;
            default: state_str = "未知";
        }

        printf("\n%d\t%s\t%s\t%d\t%d",
               temp->pid,
               temp->name,
               state_str,
               temp->priority,
               temp->program_counter);

        temp = temp->next;
    }
    printf("\n");
}

// 简单模拟进程调度
void schedule() {
    if (ready_queue == NULL) {
        printf("\n就绪队列为空!");
        return;
    }

    PCB* running_process = remove_from_ready_queue();
    running_process->state = RUNNING;

    printf("\n>> 正在运行进程: PID=%d, 名称=%s", running_process->pid, running_process->name);

    // 模拟进程执行(增加PC值)
    running_process->program_counter++;

    printf("\n<< 进程执行完成");

    // 放回就绪队列(实际操作系统可能根据状态决定)
    running_process->state = READY;
    add_to_ready_queue(running_process);
}

int main() {
    printf("操作系统PCB模拟实验\n");
    printf("----------------------------------");

    // 创建示例进程
    PCB* p1 = create_pcb(101, "浏览器", 2);
    PCB* p2 = create_pcb(102, "文本编辑器", 1);
    PCB* p3 = create_pcb(103, "音乐播放器", 3);

    // 添加到就绪队列
    add_to_ready_queue(p1);
    add_to_ready_queue(p2);
    add_to_ready_queue(p3);

    // 显示初始状态
    display_ready_queue();

    // 执行三轮调度模拟
    for (int i = 0; i < 3; i++) {
        printf("\n\n--- 调度周期 %d ---", i+1);
        schedule();
        display_ready_queue();
    }

    // 释放内存
    free(p1);
    free(p2);
    free(p3);

    return 0;
}

程序功能说明:

  1. PCB结构定义

    • 包含进程ID、名称、状态、优先级、程序计数器等核心字段
    • 使用链表指针维护进程队列
  2. 核心功能模块

    • create_pcb():创建新PCB
    • add_to_ready_queue():加入就绪队列
    • remove_from_ready_queue():从队列取出进程
    • schedule():简单调度模拟(FIFO)
    • display_ready_queue():显示队列状态
  3. 状态管理

    • 使用枚举类型定义四种进程状态
    • 调度时自动更新进程状态
  4. 执行流程

    • 创建三个示例进程
    • 循环演示三轮调度过程
    • 每次调度后显示队列状态变化

实验运行示例:

操作系统PCB模拟实验
----------------------------------
就绪队列状态:
PID     名称    状态    优先级  PC
101     浏览器  就绪    2       0
102     文本编辑器      就绪    1       0
103     音乐播放器      就绪    3       0

--- 调度周期 1 ---
>> 正在运行进程: PID=101, 名称=浏览器
<< 进程执行完成
就绪队列状态:
PID     名称    状态    优先级  PC
102     文本编辑器      就绪    1       0
103     音乐播放器      就绪    3       0
101     浏览器  就绪    2       1

...

扩展实验建议:

  1. 实现优先级调度算法
  2. 添加阻塞/唤醒机制
  3. 增加时间片轮转功能
  4. 实现进程创建/终止的完整生命周期
  5. 添加资源管理模块(如信号量)

此程序模拟了操作系统中PCB管理的基本原理,可通过添加更多功能模块来构建更完整的进程管理系统。

深度解析全球操作系统格局

操作系统是负责协调、管理和控制计算机硬件与软件资源的程序,是整个计算机的核心系统软件。 按照

2024-01-18 15:00:21

什么是实时操作系统(RTOS)

实时操作系统(RTOS)是一种专为实时应用程序设计的操作系统。实时应用程序

2023-11-23 17:14:12

聊聊操作系统

说到操作系统,大家都不会陌生。我们天天都在接触操作系统——用台式机或笔记本电脑,使用的是windows和macOS系统;用手机、平板电脑,则是a

2023-05-12 11:13:42

VxWorks操作系统下CompactPCI总线驱动程序的设计

VxWorks操作系统下CompactPCI总线驱动程序的设计(电源技术应用 期刊)-该文档为VxWorks操作系统下CompactPCI总线驱

资料下载 建立建利12 2021-08-31 16:09:24

ucosII嵌入式实时操作系统实验

ucosII嵌入式实时操作系统实验(嵌入式开发有中年危机吗)-该文档为ucosII嵌入式实时操作系统

资料下载 1123127317 2021-07-30 17:05:10

嵌入式操作系统FreeRTOS的原理实现

嵌入式操作系统FreeRTOS的原理实现(嵌入式开发工具使用实验报告)-嵌入式操作系统FreeRTOS的原理与实现              

资料下载 贾飞小 2021-07-30 12:03:54

单片机编程和操作系统综述

一篇中,将会看到程序主体逐渐从主函数转移到定时器,并且明确这些变化的目的。最后还会接触到面向对象的程序设计方式,并体会这种方式带来的好处。操作系统

资料下载 佚名 2021-05-08 11:12:41

使用51单片机简单实现小型操作系统程序免费下载

本文档的主要内容详细介绍的是使用51单片机简单实现小型操作系统的程序免费下载。

资料下载 贾埃罗 2019-08-19 17:31:00

简述操作系统的保护机制

操作系统其实就是一个大管家,负责给应用程序搭建舞台,好让程序们过好自己的一生,但偏偏有不听话的

2023-02-15 14:48:01

怎么看待汽车操作系统

操作系统提供计算机硬件和应用程序之间的接口。这通过遵循编程到操作系统中的规则和程序

2022-06-20 11:57:11

嵌入式实时操作系统实验

下一章0 目录9 嵌入式实时操作系统实验9.1 ucos-ii操作系统实验

2021-12-22 07:47:54

Linux操作系统基础实验的相关资料分享

实验1 Linux操作系统基础实验实验日期: 年 月 日

2021-10-28 07:58:11

操作系统的特点?

操作系统操作系统的特点?– 共享:资源可被多个并发执行的进程使用– 并发:可以在同一时间间隔处理多个进程,需要硬件支持– 虚拟:将物理实体映射成为多个虚拟设备– 异步:进程执行走走停停,每次进程执行

2021-07-22 09:18:49

ARM操作系统应用程序

ZYNQ将CPU和FPGA集成到了一起 开发人员需要具备技能: 1.ARM操作系统应用程序 2.设备驱动程序 3.FPGA硬件逻辑设计 需要了解

2021-07-22 08:55:46

实时操作系统和非实时操作系统的区别

本文主要阐述了实时操作系统和非实时操作系统的区别。

2020-09-02 15:58:31

7天热门专题 换一换
相关标签