基本信息
文件名称:《操作系统原理》课程设计.docx
文件大小:15.77 KB
总页数:5 页
更新时间:2025-06-21
总字数:约2.45千字
文档摘要

《操作系统原理》课程设计

实验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