# 操作系统原理 **Repository Path**: minibrother/operating-system-principle ## Basic Information - **Project Name**: 操作系统原理 - **Description**: 基于C/C++模拟处理机调度、存储管理(动态分区分配、分页存储地址转换)和文件系统 - **Primary Language**: C/C++ - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/JJJZZZYYY - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2023-05-03 - **Last Updated**: 2023-05-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 操作系统原理

Language Version Author 友情链接

## 主页 [https://gitee.com/JJJZZZYYY/operating-system-principle](https://gitee.com/JJJZZZYYY/operating-system-principle) ## 简介 本项目基于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; ``` - 运行截图 ![文件系统模拟](readme/文件系统模拟.png) ## 安装使用教程 1. 拥有符合C/C++编译运行的环境和对应的[编译器](https://gitee.com/JJJZZZYYY/operating-system-principle/releases) (不局限于某一种编译器,能编译运行C/C++均可) 2. 直接用编译器打开对应模块的.cpp文件,编译运行 3. 根据程序给出的用户提示操作或者在对应文件夹下有Tip.txt文件,输入其内部提供的测试用例直接运行即可