Skip to content

Lynne-Huang/Operating_System

Repository files navigation

Operating_System

利用Java模拟操作系统经典问题和算法

实验一——读者写者问题(3.26完成)

  • Test-and-set,这种方法无法控制读者同时读
  • synchroniz 可以实现同步读,读写互斥,写写互斥,这种是最佳方案,利用synchroniz中的方法配合使用
  • synchroniz 自己写的,配合notifyALL一起,没有系统的好
  • 祥见read_and_write

实验二——进程调度(4.19完成)

  • 利用PriorityQueue,实现优先级队列,完成进程调度
  • 始终保持只执行队首进程
    • 包含
      • PCB设置进程属性
      • PriorityQueue队列排序
      • PCB进程运行的具体操作
      • 测试demo
  • 祥见process_scheduling

实验三——可变分区管理。4.29完成)

  • 实验题目
      * 模拟主存储器空间的分配和回收。
  • 实验内容
  • 在可变分区管理方式下采用循环首次适应算法实现主存分配和实现主存回收。
     1.可变分区方式是按作业需要的主存空间大小来分割分区的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入。随着作业的装入、撤离,主存空间被分成许多个分区,有的分区被作业占用,而有的分区是空闲的。
    主存分区情况
    分区情况
    其中,起址——指出一个空闲区的主存起始地址。
    长度——指出从起始地址开始的一个连续空闲的长度。
        状态——有两种状态,一种是“未分配”状态,指出对应的由起址指出的某个长度的区域是空闲区;另一种是“空表目”状态,表示表中对应的登记项目是空白(无效),可用来登记新的空闲区(例如,作业撤离后,它所占的区域就成了空闲区,应找一个“空表目”栏登记归还区的起址和长度且修改状态)。由于分区的个数不定,所以空闲区说明表中应有适量的状态为“空表目”的登记栏目,否则造成表格“溢出”无法登记。
    首次适应算法
                    首次适应算法
    主存回收算法
                    主存回收算法
    2.采用循环首次适应算法分配主存空间。
    该算法是首次适应算法的变种。在分配内存空间时,不是每次从表头(链首)开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。
    3.当一个作业执行结束撤离时,作业所占的区域应该归还,归还的区域如果与其它空闲区相邻,则应合成一个较大的空闲区,登记在空闲区说明表中。

程序运行结果分析

运行结果1
运行结果2
运行结果3
运行结果4
运行结果5
运行结果6
 本次实验实现了内存首次适应算法和循环首次适应算法,还有内存的回收。代码详见:Memory_dynamic_partition

实验四 文件操作(5.20完成)

  • 实验题目
      * 文件操作
  • 实验目的
      * 熟悉流式文件的读写操作
  • 实验内容
      * 设有一个含‘AB’字符串的流式文件“readme.txt”,请设计一个程序将“readme.txt”中所有的“AB”字符串删除并生成一个新的文件“new\readme2.txt”.
  • 思路
    1.将文件内容读入字符串数组
    2.用正则表达式将字符串内容切割
    3.将字符串内容保存到目标文件中
  • 实验结果
     1.运行程序前先创建readme.txt文件
    运行结果1
    2.运行程序前先创建weiteme.txt文件
    运行结果2
    3.运行程序
    运行结果3
     4创建了一个writem.txt文件
      运行结果4
     5.删除AB后的文本也保存在目标文件中
    运行结果5

About

利用Java模拟操作系统经典问题和算法

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages