《操作系统原理》课程设计
实验1:进程控制块(PCB)模拟?
实验目的?:理解进程控制块结构,掌握链表操作
实验内容?:
用结构体定义PCB(包含PID、状态、优先级等字段)
编写进程创建函数(生成PCB节点)
实现进程队列的链表操作(插入、删除、遍历)
算法思路?:
使用双向链表管理PCB集合
状态字段用枚举类型表示(就绪/运行/阻塞)
CopyCode
structPCB{
intpid;
enum{READY,RUNNING,BLOCKED}state;
structPCB*prev,*next;
};
实验2:先来先服务(FCFS)调度?
实验目的?:掌握进程调度基本算法
实验内容?:
创建5个模拟进程(含到达时间、运行时间)
按到达时间排序进程队列
计算每个进程的周转时间和平均等待时间
算法思路?:
维护就绪队列,每次选择队首进程执行
使用时间轴模拟CPU执行过程
实验3:时间片轮转(RR)调度?
实验目的?:理解分时系统调度机制
实验内容?:
实现固定时间片(如20ms)的轮转调度
处理进程的到达和中断
统计进程完成时间和CPU利用率
算法思路?:
使用循环队列管理就绪进程
每个时间片结束后将进程移至队尾
voidschedule_RR(){
while(!is_empty(ready_queue)){
current=dequeue();
run_time=min(remaining_time,TIME_QUANTUM);
//模拟执行...
if(remaining_time0)enqueue(current);
}
}
实验4:动态分区内存管理(首次适应算法)?
实验目的?:理解内存分配策略
实验内容?:
初始化模拟内存空间(如256KB)
实现内存分配请求的首次适应算法
处理内存释放与碎片合并
数据结构?:
structMemoryBlock{
intstart_addr;
intsize;
intis_free;
structMemoryBlock*next;
};
测试案例?:
请求序列:申请64KB→释放32KB→申请128KB
实验5:页面置换算法(FIFOvsLRU)?
实验目的?:掌握虚拟内存管理机制
实验内容?:
模拟访问页号序列(如4,3,2,1,4,3,5,4,3,2,1,5)
实现FIFO和LRU置换算法
统计不同算法下的缺页次数
算法实现?:
FIFO:用队列记录页面进入顺序
LRU:用时间戳或移动链表节点维护访问顺序
关键代码?:
intFIFO(intpage_num){
if(page_in_memory(page_num))return0;
if(frame_countMAX_FRAMES){
//直接载入
}else{
evict_page=dequeue();//淘汰队首页
}
enqueue(page_num);
return1;//缺页
}
实验6:文件系统目录树模拟?
实验目的?:理解文件系统组织结构
实验内容?:
设计树形目录结构(含文件/目录节点)
实现mkdir、touch、ls等命令
支持相对路径和绝对路径解析
数据结构?:
structINode{
charname[32];
intis_directory;
structINode*parent,*first_child,*next_sibling;
};
操作示例?:
text
CopyCode
mkdir/user/docs
touch/user/docs/file1.txt
实验7:磁盘调度(SCAN算法)?
实验目的?:掌握磁盘I/O调度策略
实验内容?:
生成磁道访问请求序列(如55,58,39,18,90,160,150,38,184)
实现SCAN(电梯算法)调度
计算磁头移动总距离
算法步骤?:
将请求按当前磁头方向排序
移动到该方向最远请求
反转方向重复处理
示例输出?:
初始位置:100
移动顺序:150→160→184→90→58→55→39→38→18
总移动距离:236
实验8:读者-写者问题(同步机制)?
实验目的?:理解进程同步与互斥
实验内容?:
使用信号量实现读者优先策略
创建多个读者/写者线程模拟并发访问
保证数据一致性(写者互斥访问)
伪代码?:
se