# operating system experiment **Repository Path**: z3108226154/operating-system-experiment ## Basic Information - **Project Name**: operating system experiment - **Description**: 武汉理工操作系统实验 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-19 - **Last Updated**: 2024-10-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 1. 初始化内存分区列表 partitions 和进程列表 pcbs 2. 输入整个内存的大小 mainBlockSize 3. 如果 mainBlockSize > 0,则初始化一个内存分区 memoryPartition, 设置其起始地址为 0,大小为 mainBlockSize,状态为 0(未分配) 4. 将 memoryPartition 添加到 partitions 列表中 5. 输入所需进行内存分配的进程数 n 6. 依次输入进程所需的内存块大小,创建对应的内存分区和 PCB,并添加到 partitions 和 pcbs 列表中 7. 进入 allocateOrRelease() 函数 allocateOrRelease(): 8. 输出操作菜单,包括分配内存、回收内存、打印信息、结束退出选项 9. 根据用户输入执行相应的操作 a. 如果选择分配内存,则进入 algorithmMenu() 函数 b. 如果选择回收内存,则调用 releaseMemory() 函数 c. 如果选择打印信息,则调用 showInformation() 函数 d. 如果选择结束退出,则退出程序 algorithmMenu(): 10. 输出算法菜单,包括最先适应算法、最佳适应算法、最坏适应算法、结束退出选项 11. 根据用户输入执行相应的算法 a. 如果选择最先适应算法,则调用 firstFitAlgorithm() 函数 b. 如果选择最佳适应算法,则调用 bestFitAlgorithm() 函数 c. 如果选择最坏适应算法,则调用 worstFitAlgorithm() 函数 d. 如果选择结束退出,则退出程序 releaseMemory(): 12. 按照起始地址大小对 partitions 列表进行排序 13. 输入需要回收内存的进程id 14. 查找对应的 PCB,如果存在且进程已分配内存,则回收内存 15. 更新 partitions 列表,合并相邻的未分配内存块 16. 从 pcbs 列表中移除回收的进程 firstFitAlgorithm(size): 17. 按照起始地址大小对 partitions 列表进行排序 18. 遍历 partitions 列表,找到第一个大小足够且未分配的内存块,进行内存分配 19. 更新相应的 PCB 和 partitions 列表,处理多余的内存 bestFitAlgorithm(size): 20. 按照分区大小递增排序 partitions 列表 21. 遍历 partitions 列表,找到最合适的内存块,进行内存分配 22. 更新相应的 PCB 和 partitions 列表,处理多余的内存 worstFitAlgorithm(size): 23. 按照分区大小递增排序 partitions 列表 24. 从后往前遍历 partitions 列表,找到最坏适应的内存块,进行内存分配 25. 更新相应的 PCB 和 partitions 列表,处理多余的内存 showInformation(): 26. 打印当前进程信息和内存块信息,包括进程id、进程状态、内存大小、所分配内存块起始地址等信息 findP(): 27. 寻找未分配内存的进程,返回其下标