Common operating system algorithms
- 使用Java语言描述
- 通过对pcb的信息更改模拟进程的调度
- 每个用来标识进程的进程控制块 PCB 用结构来 述,包括以下字段:
- 进程标识数 ID。
- 进程优先数 PRIORITY,并规定优先数越大的进程,其优先权越高。
- 进程已占用的 CPU 时间 CPUTIME。
- 进程还需占用的 CPU 时间 ALLTIME。当进程运行完毕时,ALLTIME 变为 0。
- 进程的阻塞时间 STARTBLOCK,表示当进程再运行 STARTBLOCK 个时间片后,将进入阻塞状态。
- 进程被阻塞的时间 BLOCKTIME,表示已阻塞的进程再等待 BLOCKTIME 个时间片后,将转换成就绪状态。
- 进程状态 STATE。 队列指针 NEXT,用来将 PCB 排成队列。
- 优先数改变的原则:
- 进程在就绪队列中停留一个时间片,优先数加 1。
- 进程每运行一个时间片,优先数减 3。
- 设初始进程及状态如下
ID | PRIORITY | CPUTIME | ALLTIME | STARTBLOCK | BLOCKTIME | STATE |
---|---|---|---|---|---|---|
0 | 9 | 0 | 3 | 2 | 3 | READY |
1 | 38 | 0 | 3 | -1 | 0 | READY |
2 | 30 | 0 | 6 | -1 | 0 | READY |
3 | 29 | 0 | 3 | -1 | 0 | READY |
4 | 0 | 0 | 4 | -1 | 0 | READY |
- 使用Kotlin语言描述
- 分别实现采用首次适应算法和最佳适应算法的动态分区分配过程 alloc()和回收过程 free()
- 在进行内存分配时,系统优先使用空闲区低端的空间
- 0代表空闲内存
- 假设初始状态下,可用的内存空间为 1280KB,并有下列的请求序列:
- 作业 1 申请 130KB。
- 作业 2 申请 60KB。
- 作业 3 申请 100KB。
- 作业 2 释放 60KB。
- 作业 4 申请 200KB。
- 作业 3 释放 100KB。
- 作业 1 释放 130KB。
- 作业 5 申请 140KB。
- 作业 6 申请 60KB。
- 作业 7 申请 50KB。
- 作业 6 释放 60KB。
- 使用Kotlin语言描述
- 模拟页面、页表、地址转换和页面置换过程
- 假设每个页面中可存放10条指令,分配给一个作业的内存块数为4。
- 模拟一个作业的执行过程。该作业共有320条指令,即它的地址空间为32页,目前它的所有页都还未调入内存。在模拟过程中,如果所访问的指令已经在内存中,则显示其物理地址,并转下一条指令。如果所访问的指令还未装入内存,则发生缺页,此时需记录缺页的次数,并将相应页调入内存。如果4个内存块中均已装入该作业,则需进行页面置换。最后显示其物理地址,并转下一条指令。在所有320条指令执行完毕后,请计算并显示作业运行过程中发生的缺页率。
- 置换算法:分别考虑OPT、FIFO和LRU算法。
- 作业中指令的访问次序按下述原则生成:
- 50%的指令是顺序执行的。
- 25%的指令是均匀分布在前地址部分。
- 25%的指令时均匀分布在后地址部分。