📄 mosdisk.java
字号:
//已调试;
public class MosDisk {
byte[] disk_data = new byte[FinalVar.DISK_MAX_CAP];
byte[] disk_malloc_table = new byte[FinalVar.DISK_PAGE_MAXCAP];
byte[] disk_in_table = new byte[FinalVar.SPOOLING_BUFFER_SIZE];
byte[] disk_out_table = new byte[FinalVar.SPOOLING_BUFFER_SIZE];
private MosVar var = null;
String s1 = "";
public MosDisk(MosVar var) {
this.var = var;
}
// 按作业的大小申请输入井/输出井空间,若有足够的空间则返回申请到的块地址,失败则返回空;
// page_size为所要申请的输入井/输出井大小,addr为输入井始址或输出井始址;
public byte[] diskMalloc(byte page_size,byte addr){
byte free_size = 0;
byte[] pro = new byte[page_size];
for(byte i = addr; i < addr + FinalVar.SPOOLING_BUFFER_SIZE;i++){
if(0 == disk_malloc_table[i]){
disk_malloc_table[i] = 1;
pro[free_size] = i;
free_size++;
}
if (free_size == page_size) {
break;
}
}
if(free_size == page_size)
return pro;
else {
for(byte i = 0;i < free_size;i++){
disk_malloc_table[pro[i]] = 0;
}
return null;
}
}
// 写入时,需传递所要写入的内容msg以及磁盘的始址addr;
public void diskWrite(byte[] msg,byte addr){
// System.out.println("");
int disk_addr=addr*10*4;
// System.out.print("disk addr" + disk_addr);
for(int i = 0;i < msg.length;i++){
disk_data[disk_addr+i]=msg[i];
}
showDiskState();
}
// 读出数据时,需要传递所要读出的地址(以块为单位),以及要读出块的大小;
public byte[] diskRead(byte addr){
int disk_addr = addr*10*4;
byte[] value = new byte[40];
for(int i = 0;i < 40;i++){
value[i]=disk_data[disk_addr+i];
}
return value;
}
private void showDiskState() {
var.disk_area.setText("");
for(int i = 0; i < 100; i++) {
if(i < 1) {
for(int j = 0; j < 10; j++) {
s1 = "";
int k ;
if((this.disk_data[i * 40 + j * 4] != 0)||(this.disk_data[i * 40 + j * 4 + 1] != 0)
||(this.disk_data[i * 40 + j * 4 +2] != 0)||(this.disk_data[i * 40 + j * 4 + 3] != 0))
for(k = 0; k < 4; k++) {
s1 = s1 + (char)this.disk_data[i * 40 + j * 4 + k];
}
else
for(k = 0; k < 4; k++) {
s1 = s1 + this.disk_data[i * 40 + j * 4 + k];
}
var.disk_area.append(" 000" + j + " " + s1 + "\n");
}
}
else if(i < 10) {
for(int j = 0; j < 10; j++) {
s1 = "";
int k ;
if((this.disk_data[i * 40 + j * 4] != 0)||(this.disk_data[i * 40 + j * 4 + 1] != 0)
||(this.disk_data[i * 40 + j * 4 + 2] != 0)||(this.disk_data[i * 40 + j * 4 + 3] != 0))
for(k = 0; k < 4; k++)
s1 = s1 + (char)this.disk_data[i * 40 + j * 4 + k];
else
for(k = 0; k < 4; k++) {
s1 = s1 + this.disk_data[i * 40 + j * 4 + k];
}
var.disk_area.append(" 00" + (i * 10 + j) + " " + s1 + "\n");
}
}
else if(i < 100) {
for(int j = 0; j < 10; j++) {
s1 = "";
int k ;
if((this.disk_data[i * 40 + j * 4] != 0)||(this.disk_data[i * 40 + j * 4 + 1] != 0)
||(this.disk_data[i * 40 + j * 4 + 2] != 0)||(this.disk_data[i * 40 + j * 4 + 3] != 0))
for(k = 0; k < 4; k++)
s1 = s1 + (char)this.disk_data[i * 40 + j * 4 + k];
else
for(k = 0; k < 4; k++) {
s1 = s1 + this.disk_data[i * 40 + j * 4 + k];
}
var.disk_area.append(" 0" + (i * 10 + j) + " " + s1 + "\n");
}
}
}
}
// 释放磁盘空间,需传递要释放的块数以及始址;
public void diskFree(byte page_size,byte addr){
// int disk_start_addr = addr * 10 * 4;
// int disk_end_addr = disk_start_addr + page_size * 10 * 4;
// for(int i = disk_start_addr;i < disk_end_addr;i++){
// disk_data[i] = 0;
// }
for(byte i = 0;i < page_size;i++){
disk_malloc_table[addr+i]=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -