操作系统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;
}
程序功能说明:
-
PCB结构定义:
- 包含进程ID、名称、状态、优先级、程序计数器等核心字段
- 使用链表指针维护进程队列
-
核心功能模块:
create_pcb():创建新PCBadd_to_ready_queue():加入就绪队列remove_from_ready_queue():从队列取出进程schedule():简单调度模拟(FIFO)display_ready_queue():显示队列状态
-
状态管理:
- 使用枚举类型定义四种进程状态
- 调度时自动更新进程状态
-
执行流程:
- 创建三个示例进程
- 循环演示三轮调度过程
- 每次调度后显示队列状态变化
实验运行示例:
操作系统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
...
扩展实验建议:
- 实现优先级调度算法
- 添加阻塞/唤醒机制
- 增加时间片轮转功能
- 实现进程创建/终止的完整生命周期
- 添加资源管理模块(如信号量)
此程序模拟了操作系统中PCB管理的基本原理,可通过添加更多功能模块来构建更完整的进程管理系统。
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
操作系统的特点?
操作系统操作系统的特点?– 共享:资源可被多个并发执行的进程使用– 并发:可以在同一时间间隔处理多个进程,需要硬件支持– 虚拟:将物理实体映射成为多个虚拟设备– 异步:进程执行走走停停,每次进程执行
ARM操作系统应用程序
ZYNQ将CPU和FPGA集成到了一起 开发人员需要具备技能: 1.ARM操作系统应用程序 2.设备驱动程序 3.FPGA硬件逻辑设计 需要了解
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 如何进行编码器的正确接线?接线方法介绍
- 什么是场效应管?它的作用是什么?
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- amoled屏幕和oled区别
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 苹果笔记本macbookpro18款与19款区别
- 通讯隔离作用
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机