# 操作系统原理
## 简介
本项目基于C/C++,旨在模拟操作系统中处理机调度、存储管理(动态分区分配、分页存储地址转换)和文件系统的执行流程,通过基础逻辑代码的形式展现操作系统底层如何流转。
相关流转逻辑可采用但不仅限于此类算法:最佳(Optimal)置换算法,先进先出(FIFO)页面置换算法,LRU(Least Recently Used)置换算法,Clock置换算法,页面缓冲算法(Page Buffering Algorithm,PBA)。
## 总览
### 处理机调度模拟
- 核心代码(结构体定义)
```cpp
typedef struct pcb {
// 进程id
int id;
// 到达时间
int arrivedTime;
// 运行所需要的时间
int needTime;
// 已使用的时间
int usedTime;
// 三种状态:wait、run、finish
char state[6];
}pcb, *PCB;
typedef struct PCBNode {
PCB pcb;
// 上一个PCB
PCBNode *before;
// 下一个PCB
PCBNode *next;
}PCBNode, *PCBList;
```
- 运行截图
![处理机调度模拟](readme/处理机调度模拟.png)
### 存储管理模拟
#### 动态分区分配
- 核心代码(结构体定义)
```cpp
typedef struct memoryNode {
string name;
int address;
int length;
memoryNode *next;
}memoryNode, *MemoryNode;
```
- 运行截图
![存储管理模拟(动态分区分配)](readme/存储管理模拟(动态分区分配).png)
#### 分页存储地址转换
- 核心代码(结构体定义)
```cpp
typedef struct {
// 块号
int blockNumber;
// 状态位(存在位)
int P;
}PageTableItem, *PageTableItemArray;
typedef struct PageTable{
PageTableItemArray *pageTableItemArray;
int length;
}PageTable;
typedef struct quickPageTableNode{
int pageNumber;
int blockNumber;
quickPageTableNode *next;
}quickPageTableNode, *QuickPageTableNode;
typedef struct QuickPageTable{
int length;
QuickPageTableNode quickPageTableNode;
}QuickPageTable;
typedef struct stackNode{
stackNode *before;
int pageNumber;
stackNode *next;
}stackNode, *StackNode;
typedef struct StackList{
int length;
StackNode stackNode;
}StackList;
```
- 流程图
![存储管理模拟(分页存储地址转换)流程图](readme/存储管理模拟(分页存储地址转换)流程图.png)
- 运行截图
![存储管理模拟(分页存储地址转换)](readme/存储管理模拟(分页存储地址转换).png)
### 文件系统模拟
- 核心代码(结构体定义)
```cpp
typedef struct fileContent {
// 实际文件内容
string Content;
} *FileContent;
typedef struct file {
// 文件名
string fileName;
// 文件类型
string fileType;
// 文件大小
int fileSize;
// 文件内容指针
FileContent fileContent;
// 文件保护码(index = 0:读权限,index = 1:读权限,index = 2:执行权限;权限位含义:0为禁止,1为允许)
char fileProtectCode[3];
// 创建时间
time_t createTime;
// 修改时间
time_t updateTime;
// 访问时间
time_t accessTime;
} *File;
// 二级目录:用户文件目录(每个用户的独立文件目录)
typedef struct uFD {
// 当前文件
File file;
// 上一个文件指针
uFD *before;
// 下一个文件指针
uFD *next;
} *UFD;
typedef struct user {
// 用户名
string username;
// 密码
string password;
// 用户目录指针
UFD ufd;
} *User;
// 一级目录:主文件目录(所有用户和对应用户的相关信息)
typedef struct mFD {
// 当前用户
User user;
// 上一个用户指针
mFD *before;
// 下一个用户指针
mFD *next;
} *MFD;
// 打开文件目录(运行文件目录)
typedef struct aFD {
// 当前文件
File file;
// 上一个文件指针
aFD *before;
// 下一个文件指针
aFD *next;
} *AFD;
```
基于C C++模拟处理机调度、存储管理(动态分区分配、分页存储地址转换)和文件系统.zip
版权申诉
129 浏览量
2023-03-16
15:09:56
上传
评论
收藏 1.68MB ZIP 举报
oligaga
- 粉丝: 52
- 资源: 2万+
最新资源
- mc.as
- 618家具社群团购清单.xlsx
- Javascript的鼠标手势
- hdmi in视频采集,输出到hdmi out, 支持HDMI指令控制,支持TFTP远程下载图片
- 批量word文件内容替换工具1.0 (批量实现多个 Word 文档文件文字替换利器).exe
- Cartoon GUI Pack 1.2.zip
- 我分享个魔兽内存修改器
- Python毕业设计基于Django的网易云数据分析可视化大屏系统的设计与实现+使用说明+全部资料(优秀项目).zip
- mp3 idv2,idv1,frame分析工具
- 鹈鹕优化算法POA MATLAB源码, 应用案例为函数极值求解以及优化svm进行分类,代码注释详细,可结合自身需求进行应用
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈