利用Java模拟操作系统经典问题和算法
- Test-and-set,这种方法无法控制读者同时读
- synchroniz 可以实现同步读,读写互斥,写写互斥,这种是最佳方案,利用synchroniz中的方法配合使用
- synchroniz 自己写的,配合notifyALL一起,没有系统的好
- 祥见read_and_write
- 利用PriorityQueue,实现优先级队列,完成进程调度
- 始终保持只执行队首进程
- 包含
- PCB设置进程属性
- PriorityQueue队列排序
- PCB进程运行的具体操作
- 测试demo
- PCB设置进程属性
- 包含
- 祥见process_scheduling
- 实验题目
* 模拟主存储器空间的分配和回收。 - 实验内容
- 在可变分区管理方式下采用循环首次适应算法实现主存分配和实现主存回收。
1.可变分区方式是按作业需要的主存空间大小来分割分区的。当要装入一个作业时,根据作业需要的主存量查看是否有足够的空闲空间,若有,则按需要量分割一个分区分配给该作业;若无,则作业不能装入。随着作业的装入、撤离,主存空间被分成许多个分区,有的分区被作业占用,而有的分区是空闲的。
其中,起址——指出一个空闲区的主存起始地址。
长度——指出从起始地址开始的一个连续空闲的长度。
状态——有两种状态,一种是“未分配”状态,指出对应的由起址指出的某个长度的区域是空闲区;另一种是“空表目”状态,表示表中对应的登记项目是空白(无效),可用来登记新的空闲区(例如,作业撤离后,它所占的区域就成了空闲区,应找一个“空表目”栏登记归还区的起址和长度且修改状态)。由于分区的个数不定,所以空闲区说明表中应有适量的状态为“空表目”的登记栏目,否则造成表格“溢出”无法登记。
首次适应算法
主存回收算法
2.采用循环首次适应算法分配主存空间。
该算法是首次适应算法的变种。在分配内存空间时,不是每次从表头(链首)开始查找,而是从上次找到空闲区的下一个空闲开始查找,直到找到第一个能满足要求的的空闲区为止,并从中划出一块与请求大小相等的内存空间分配给作业。该算法能使内存中的空闲区分布得较均匀。
3.当一个作业执行结束撤离时,作业所占的区域应该归还,归还的区域如果与其它空闲区相邻,则应合成一个较大的空闲区,登记在空闲区说明表中。
本次实验实现了内存首次适应算法和循环首次适应算法,还有内存的回收。代码详见:Memory_dynamic_partition