资料详情

Java仿真操作系统要求说明

头像

理工论文

编号:11058


目 录

1.实践基础要求 1

1.1 裸机硬件仿真设计的基础要求 1

(1)基础硬件部件 1

(2)CPU 与寄存器的仿真设计 1

(3)系统时钟中断仿真 1

(4)作业请求的中断仿真 1

(5)进程调度的中断仿真 1

(6) 输入/输出中断事件仿真 2

(7) 缺页中断事件仿真 2

(8) 用户区内存 2

(9) 内存缓冲区 2

(10) 硬盘交换区仿真 2

1.2 并发作业请求文件(jobs-input.txt)的设计 3

1.3 用户程序指令文件的设计 4

1.4 作业运行及调度详细记录的文件保存 5

1.6 进程控制块 PCB 设计 8

1.7 系统 PCB 表的设计 8

1.8 仿真实现进程控制原语 8

1.9 其他 9

课程设计选题 9

2.1 选题 1:仿真实现作业管理与虚页存储管理(难度系数=4) 9

1



1.实践基础要求

以计算机操作系统原理为指导,利用面向对象程序设计技术仿真 OS 内核的作业管理、连续内存管理、页式虚存管理、进程同步与互斥、Spooling 系统的 API 功能,可视化显示操作系统的工作过程。

1.1 裸机硬件仿真设计的基础要求

(1)基础硬件部件

CPU、内存、时钟中断、输入输出设备中断、地址变换机构(MMU)、外存缓冲区;

◆ 扩展硬件部件:缺页中断;

(2) CPU 与寄存器的仿真设计

◆ CPU 可抽象为一个类,名称:CPU2023。

◆ 关键寄存器可抽象为类的属性,至少包括:程序计数器(PC)、指令寄存器(IR)、  状态寄存器(PSW)等,寄存器内容的表示方式自行设计,需要在实践报告中说明。

需要实现 CPU 现场保护、现场恢复操作,封装为 CPU 类的方法,供进程切换、CPU 模式切换方法调用。

方法函数的名称须统一,入口出口参数自行定义:

◆ CPU-PRO():CPU 现场保护函数;

◆ CPU-REC():CPU 现场恢复函数;

(3)系统时钟中断仿真

计算机系统使用统一时钟计时;

◆ 设计一个时钟线程类,名称:Clock_thread

◆ 该类中设计一个共享属性变量,名称:COUNTTIME,整型,单位:秒(s)  每 1 秒激活该线程计时,COUNTTIME+1 操作。

(4)作业请求的中断仿真

假设计算机每 10 秒(s)查询一次外部是否有新作业的执行请求,在“并发作业请求文件” 中判读是否有新进程请求运行。

◆ 设计一个作业请求查询线程类,名称:JobIn_thread;

◆ 作业请求判读函数,名称:CheckJob():

功能:每 10 秒激活该线程,利用 COUNTTIME 变量判断“并发作业请求文件”是否有新进程请求;如果有,进入后备队列;如果没有,空操作;

(5)进程调度的中断仿真

假设计算机 CPU 在 1 秒(s)发生一次时钟硬件中断;可以执行 1 条指令。

假设进程调度的基础算法均为时间轮转法,在此基础上可以叠加静态或者动态特点,或  者叠加静态或者动态优先权法;或者叠加多级反馈调度算法;

◆ 初始静态时间片大小:Times=3 秒

◆ 设计一个进程调度算法线程类,名称:ProcessScheduling_thread

线程激活时长:1 秒,也就是 1 秒发生一次调度中断信号,每次 Times-1;

◆ 调度时间函数,名称:CheckSchedulingTime():

功能:以初始静态时间片大小为基础单元,根据选题设计具体对时间片大小 Times

1


重新赋值,当 Times=0 时发生进程调度;

◆ 进程调度函数,名称:ProcessScheduling(): 功能:根据所选题目的调度算法实现调度;

(6)输入/输出中断事件仿真

仿真 I/O 中断。分别设计两个线程

◆ InputBlock_thread 类:阻塞队列的唤醒线程。外设输入变量造成进程进入阻塞态,如键盘给变量赋值;

◆ OutputBlock_thread 类:阻塞队列的唤醒线程。外设输出变量造成进程进入阻塞态, 如显示器显示;

(7)缺页中断事件仿真

设计一个线程发出缺页中断,并实现页淘汰算法,页装入操作,完成以后唤醒缺页阻塞  队列中的进程重新进入就绪队列;

◆ 线程类名:PageInterruption-thread 类,一直处于侦听状态,收到缺页请求时被激活;

◆ 页装入操作函数,名称:PageIn()

◆ 页淘汰函数,名称:PageOut( )

(8)用户区内存

假设不考虑 OS 内核所占内存空间

◆ 用户区共 16KB,每个物理块大小 1024B,共 16 个物理块;

◆ 采用页式存储管理。将每个物理块假设为 1 页帧,共 16 页

◆ 逻辑地址(物理地址)共 14 位二进制表示,其中 4 位表示页号,10 位表示页内地址;

◆ 测试数据用十进制表示逻辑地址;

◆ 采用固定分配与局部替换策略,每个用户进程分配内存大小为 4 页(块);用户进程最高并发度为 4;

◆ 地址变换过程(MMU)需要在界面上显示并详细记录过程保存到 ProcessResults-???

-算法名称代号.txt 文件中。???表示数字,为每次运行完成所有进程的总分钟数。例如: 测试输入数据是 input1 中的数据文件,用 LZ(时间片轮转)算法完成机器调度所有作业, 总运行分钟数是 166 秒,保存进程运行输入输出以及调度过程中状态变化、统计数据等所有信息,保存到 ProcessResults-166-LZ.txt 文件,保存到 output1 子文件夹。

(9)内存缓冲区

◆ 内存缓冲区共 4KB,单缓冲,每个物理块大小 1024B,共 4 个物理块;

◆ 所有进程共享,进程通信过程中可能会出现死锁;

(10)硬盘交换区仿真

◆ 选题 1 使用,选题 2 不使用;

◆ 磁盘交换区共 16KB,每个物理块大小 1024B,共 16 个物理块;

◆ 磁盘交换区,每个进程的交换区用文件夹仿真,用“DiskExchangeArea_进程 ID”命

名;

◆ 每个用户进程创建以后分配 4 页(块)磁盘交换区,保存该进程运行时临时变量或函

数返回值的数据;

◆ 每个物理块对应一个文件,物理地址为文件名称;


◆ 每个文件是文本文件,保存物理块内容;

1.2 并发作业请求文件(jobs-input.txt)的设计

◆ 每个作业相当于用户提交给操作系统运行的可执行程序。本实验考虑作业调度、内存  分配回收,进程管理等功能;

◆ 创建 input 子文件夹,保存 jobs-input.txt 以及用户程序指令文件。本次实验有两组测试输入数据,分别放在 input1、input2 子文件中。

input1 子文件:选题 1 的同学使用;

◆ jobs-input.txt 文件格式固定,统一提供,初始 5 个作业。一行代表一个作业请求,学生测试程序时可以增加新作业条目;

◆ jobs-input.txt 文件内容: 作业序号(JobsID)

作业优先级(Priority) 作业请求时间(InTimes)

作业包含的程序指令数目(InstrucNum)

◆ 仿真程序开始运行时,开始按秒计时(不要用系统时间,用自己的计时器计时)。将jobs-input.txt 文件一次性读入一个临时数组。JobInput_thread 类每 10 秒(s)查询临时数组, 根据当前计时器时间,通过判断与作业请求时间(InTimes)(单位为秒)中请求时间的匹配程度,判断该时刻是否有作业请求。如果有,加入作业后备队列,并根据作业编号找到该作业程序指令文件(与 jobs-input.txt 文件在同一目录),并将其内容保存到相应数据结构中。

◆ 在界面上需要设计一个作业实时请求接收按钮,随时接收该时刻产生的新作业并加入  到作业后备队列;

◆ jobs-input.txt 文件举例:

3


1.3 用户程序指令文件的设计

◆ 用户程序指令文件是每个作业要执行的被编译以后的程序指令集合。每个作业的指令类型由本文档给出。

(1)作业程序的结构

作业程序包括 6 类,有语句和函数类型,统一保存在 input1 和 input2 子文件夹中。每个用户程序指令文件名用“作业序号(JobsID)”来命名。具体包括:

指令段编号(Instruc_ID)

用户程序指令的类型(Instruc_State)

用户程序指令访问的逻辑地址(L_Address)

(2)用户程序指令的类型(Instruc_State)

★本试验假设 CPU 执行用户态每段指令,在执行一段机器指令时不可以中断。

★指令段编号(Instruc_ID):作业创建进程以后,进程所执行用户程序段指令序号, 从 1 开始计数。

★根据 Instruc_State 类型,每条指令运行或者唤醒时间(InRunTimes)有确定值,不需要输入;

★用户程序指令的类型(Instruc_State)包括:

0 表示用户态计算操作语句。执行该指令需要运行时间 InRunTimes=1s。

1 表示用户态计算操作函数。执行该指令进程转向执行函数指令,需要 InRunTimes=2s。

表示键盘输入变量语句。发生系统调用,CPU 进行模式切换,运行进程进入阻塞态; 值守的键盘操作输入模块接收到输入变量或输出变量内容,InRunTimes=2s 后完成输入,产生硬件终端信息号,阻塞队列 1 的队头节点出队,进入就绪队列;InputBlock_thread 类在 2s 以后自动唤醒该进程;

屏幕输出显示语句。发生系统调用,CPU 进行模式切换,运行进程进入阻塞态;值守的屏幕显示模块输出变量内容,InRunTimes=2s 后完成显示,产生硬件终端信息号,阻塞队列 2 的队头节点出队,进入就绪队列;OutputBlock_thread 类在 2s 以后自动唤醒该进程;

4 打印操作语句。假设 InRunTimes=1s 以后拷贝打印数据到内存缓冲区,Spooling 系统完成打印任务。发出打印请求的用户作业,在打印数据拷贝到内存缓冲区以后,阻塞队列队

3 头节点出队,进入就绪队列;

5 磁盘文件读操作函数。发生进程调度, 进程进入阻塞态; 同时关中断, 假设

InRunTimes=2s 以后读完文件内容到内存缓冲区,操作系统的读文件模块负责将缓冲区数据拷贝到用户进程 PCB 区域,产生唤醒信号,阻塞队列队 4 的头节点出队,进程进入就绪队列;

6 磁盘文件写操作函数。进程进入阻塞态;同时关中断,假设 InRunTimes=2s 以后写文件数据到内存缓冲区,操作系统的写文件模块负责将缓冲区数据写入磁盘物理块,产生进程   唤醒信号,阻塞队列队 5 的头节点出队,进程进入就绪队列;

(3)用户程序指令访问的逻辑地址(L_Address)

由 input1 子文件、input2 子文件分别给出。用十进制表示。需要设计 MMU 类实现逻辑地址转换为物理地址。

L_Address 表示每个用户进程所访问的逻辑地址,需要计算页号和页内偏移。

MMU 类中需要包含名为 PageTableCreate( )函数,函数入口参数自行定义,实现页表生

成。

★如果按界面上实时作业请求按钮:可以随机在已产生的指令文件中选择一个重新执

行。


举例:

选题 1:input1 文件夹中 1 号作业的程序段指令保存在 1.txt 文件中。2 号、3 号用户作业指令段保存在 2.txt、3.txt 文件中.文件第一行为代号。

1.txt 文件内容如下:

1.4 作业运行及调度详细记录的文件保存

◆ 作业和进程调度模块用单独的线程或计时器实现。需要重点注意的是:不是每次发生时钟中断都要进行进程调度。

◆ 时间片计算:进程调度最小时间片 3s。

◆ 进程调度算法:必须完成的调度算法为静态优先数调度算法(代号 JTYX)。扩展算法在选题要求中给出。

◆ 优先数越小,优先级越高。

◆ 程序要求界面可视化显示作业请求与进程调度过程。同时将调度过程以文件形式保  存。界面显示和文件保存的信息要清晰、完整、可读;

◆ 作业调度、进程调度运行完成以后,运行记录保存到 ProcessResults-???-算法名称代号.txt 文件。???表示数字,为每次运行完成所有进程的总分钟数。例如:测试输入数据是 input1 中的数据文件,用 JTYX(静态优先数调度)算法完成机器调度所有作业,总运行分钟数是 166 秒,保存进程运行输入输出以及调度过程中状态变化、统计数据等所有信息, 保存到 ProcessResults-166-JTYX.txt 文件,该保存到 output1 子文件夹。

保存内容至少包括:进程 ID、作业到达时间、作业运行时间、作业结束时间、作业中每条指令 ID、指令内容、指令状态转换的时间、CPU 寄存器变化情况、进程 PCB 信息等状态变化信息以及进程调度的周转时间等评价类数据。本次实验与 input1、input2 子文件测试数据对应的输出文件夹分别保存 output1、output2。该文件设计需要强调可读性与可分析性。

◆ ProcessResults-???-算法名称代号.txt 文件内容的格式如下:

(1)输出包括 4 段信息,分别为:进程调度事件:内存缓冲区处理事件;井操作事件; 状态统计信息。其中,进程调度事件、状态统计信息是必须的,其他两类事件的记录需要根

5


据选题及申请成绩等级来完成。

(2)进程调度事件信息段的输出信息,每行有时间信息,按照时间顺序,记录发生进程调度事件、进程就绪队列、进程阻塞队列等的状态。

(3)每段输出信息的关键信息加半角中括号[]。批改时会对所有带有中括号的内容进行提取,不加中括号都视为无效信息。

每一行信息的具体格式如下:时间:[关键操作或状态名称:作业或进程信息,]    输出信息格式如下:

作业/进程调度事件:

0:[新增作业:作业编号,请求时间,指令数量]

1:[创建进程:进程 ID,PCB 内存块始地址,内存分配方式]

2:[进入就绪队列:进程 ID:待执行的指令数]

3:[运行进程:进程 ID:指令段编号,指令类型编号,逻辑地址, ]

4:[运行进程:进程 ID:指令段编号,指令类型编号,逻辑地址, ]

5:[运行进程:进程 ID:指令段编号,指令类型编号,逻辑地址, ]

6:[阻塞进程:阻塞队列编号,进程 ID]

7:[缺页中断:进程 ID:PageOut 页号,PageIn 页号]

8:[重新进入就绪队列:进程 ID,待执行的指令数]

9:[阻塞进程:阻塞队列编号,进程 ID]

10:[CPU 空闲]

11:[终止进程 ID]

缓冲区处理事件:

3:[P 操作/V 操作/拷贝入缓冲区/拷贝出缓冲区,4 个动作选择之一]

4:[入缓冲区:进程 ID:指令段编号,磁盘文件读操作:逻辑地址,物理地址,缓冲区地址,交换区物理块地址]

5:[入缓冲区:进程 ID:指令段编号,磁盘文件读操作:逻辑地址,物理地址,缓冲区地址,交换区物理块地址]

6:[P 操作/V 操作/拷贝入缓冲区/拷贝出缓冲区]说明:4 个动作选择之一显示并记录

7:[P 操作/V 操作/拷贝入缓冲区/拷贝出缓冲区]说明:4 个动作选择之一显示并记录

8:[入缓冲区:进程 ID:指令段编号,磁盘文件读操作:逻辑地址,物理地址,缓冲区地址,交换区物理块地址]

9:[P 操作/V 操作/拷贝入缓冲区/拷贝出缓冲区]说明:4 个动作选择之一显示并记录

10:[缓冲区无进程]

结束时间:[进程 ID:作业请求时间+进入时间+总运行时间]

结束时间:[进程                ID:作业请求时间+进入时间+总运行时间] BB1:[阻塞队列 1,键盘输入:进入时间,进程 ID/进入时间,进程 ID/进入时间,进程 ID]


BB2:[阻塞队列 2,屏幕显示:进入时间,进程 ID/进入时间,进程 ID/进入时间,进程 ID] BB3:[阻塞队列 3,打印任务:进入时间,进程 ID/进入时间,进程 ID/进入时间,进程 ID] BB4:[阻塞队列 4,磁盘读文件:进入时间,进程 ID /进入时间,进程 ID/进入时间,进程 ID] BB5:[阻塞队列 5,磁盘写文件:进入时间,进程 ID/进入时间,进程 ID/进入时间,进程 ID]

PPPP:[PageInterruption:进入时间,进程 ID/进入时间,进程 ID/进入时间,进程 ID]

说明:

在“作业/进程调度事件”中,f 符号均为半角西文态符号:

时间:每秒记录一条信息,两条记录的时间可以相同,表示并发操作;

关键操作或状态:包括新增作业、创建进程、第一次进入就绪队列、重新进入就绪队列  阻塞队列、缺页中断、重新进入就绪队列、运行进程、CPU 空闲、终止进程等,输出时请写汉字信息;

记录事件的多少及时间根据选题确定;

作业或进程信息:包括进程 ID,指令编号,指令类型编号等,具体信息见下面的例子, 信息用逗号隔开;

在“状态统计信息”中:当每个进程指令全部执行完成以后计算保存。每一行统计一个  进程信息;

结束时间:指进程运行结束后的时间;

案例:只考虑进程调度事件、状态统计信息截图

7


1.6 进程控制块 PCB 设计

下面是进程相关 PCB 内容,本次课设需要补充与逻辑地址、物理地址、外存物理块相关信息。参照 Linux task_struct 的数据结构内容设计;

进程编号(ProID);值分别为 1,2,3,4,5,6,。。进程优先数(Priority);

进程创建时间(InTimes); 进程结束时间(EndTimes); 进程状态(PSW);

进程运行时间列表(RunTimes); 进程周转时间统计(TurnTimes);

进程包含的指令数目(InstrucNum); 程序计数器信息(PC);

指令寄存器信息(IR);

在就绪队列信息列表(包括:位置编号(RqNum)、进入就绪队列时间(RqTimes));  阻塞队列信息列表 1(包括:位置编号(BqNum1)、进程进入键盘输入阻塞队列时间

( BqTimes1));

阻塞队列信息列表 2(包括:位置编号(BqNum2)、进程进入显示器输出阻塞队列时间

( BqTimes2));

说明:

★系统请求运行的并发进程个数最小值为 5,可以自行设计最大值。

★进程编号(ProID):整数

★进程优先数(Priority):随机生成[1-5]整数优先数,优先数越小,优先级越大;

★进程创建时间(InTimes):由仿真时钟开始计时,整数,假设每条指令执行时间 1s;

★进程结束时间(EndTimes):显示仿真时钟的时间,整数;

★进程运行时间列表(RunTime):统计记录进程开始运行时间、时长,时间由仿真时钟提供;

★进程包含的指令数目(InstrucNum):可自行扩展;

★PSW:保存该进程当前状态:运行、就绪、阻塞;

★指令寄存器信息(IR):正在执行的指令编号;

★程序计数器信息(PC);下一条将执行的指令编号;

1.7 系统 PCB 表的设计

需要设计系统空白 PCB 表,假设系统最大 4个进程并发,可用数组、链表、队列实现。

1.8 仿真实现进程控制原语

按照教材步骤仿真实现原语函数,可以作为 PCB 类的方法,包括: 进程创建:考虑内存分配与回收。

进程撤销:执行完成的进程调用撤销函数;

进程阻塞;I/O 操作产生,可以不考虑对内存缓冲区的 PV 操作


1.9 其他

◆ 课程设计采用的语言为 JAVA ,需要开发环境下运行以及脱离开发环境独立测试运行

2 课程设计选题

2.1 选题 1:仿真实现作业管理与虚页存储管理(难度系数=4)

◆ 及格要求:完成实验基础要求。利用 5 个线程实现进程并发以及输入输出。多任务作业并发环境下,实现页表生成、MMU 地址变换、进程原语、作业调度算法、静态优先级进程调度算法,页面分配与回收算法。

◆ 良好要求:完成及格要求的前题下,实现缺页中断、外存交换区管理、页表再生成与  页面替换 LRU 算法;将内存分配过程、进程调度过程等通过可视化方式呈现。

9


4)保存课设程序被编译为RunProcess.exe 可执行文件;保存一份“材料阅读使用顺序说明文档”

(3) input1子文件夹:保存作业进程请求文件,使用 input1 子

文件夹测试输入数据;每个子文件夹包括jobs-input.txt、用户程序指令文件(如 1. txt 或 2.txt 等),

(4) output1子文件夹:分别对应 input1子文件夹输入作业的ProcessResults-???-算法名称代号.txt 文件。

(5) code 子文件夹:工程文件、源程序等,要求公共变量、函数、函数输入输出变量有详细的注释,




6 课程设计实践报告内容与要求

注意:逻辑结构合理,层次分明,论述清楚,不要放程序代码,核心算法与关键环节处理   用伪码描述。对每个测试结果需要分析说明。

正文:宋体 5 号字,图表需要有编号和名称

封皮(统一格式可下载) 目录

摘要(单独一页,500 字以上,包括目的、完成功能、总结核心设计实现技术、测试结果总结等,需要具体化)

关键词(不超过 5 个,与摘要在一页)

1 实践内容与目标

包括:1.1 实践内容、1.2 实践目标(分条目论述完成了任务、实现函数、模块功能)

2 系统功能与 API 函数说明

包括:描述所设计的系统功能说明,所对应的 API 函数名称; API 函数需要说明函数输入、输出变量说明及调用方法

3 硬件仿真设计

分小标题论述,包括:计算机各硬件部件的仿真设计,要有具体的大小和仿真方法等

4 数据结构与基础操作的抽象与实现

分小标题论述,包括:作业控制块及程序指令集设计、与硬件映射的数据结构设计、OS   原语与核心操作,采用示意图与伪码相结合的方式,不能直接拷贝代码等,注意写清楚自己   有特色的关键处理;

5 程序整体结构及模块功能的实现

分小标题论述,包括;整个软件系统的结构说明,采用示意图、流程图与伪码相结合的  方式说明,不能直接拷贝代码。注意写清楚自己有特色的关键处理;

6 技术问题及解决方案(重点)

分小标题论述,要有具体技术问题描述,发生场景描述,最好配合现场图片;给出具体  解决方案和结果测试截图证据等

7

附件 1:程序文件及结构说明附件 2:类图和顺序图说明

附件 3:带注释的部分核心代码(只需要5 页)

13