封皮(略)
一、进程控制
1.1目的
模拟操作系统内核对进程的控制和管理:包括进程的创建。
1.2内容
能够模拟进程的创建与撤销过程;
对进程的状态进行全面的控制;
按先进先出方式管理就绪和阻塞队列,按队列输出进程状态
1.3数据结构
链式结构:存储 PCB 使用了单向链表;
一维数组
1.4算法设计及流程图
System.out.print("杈撳叆杩涚▼鍚嶇О锛歕t");
PCB newPcb = new PCB(scanner.next());
System.out.print("杈撳叆杩涚▼澶у皬锛歕t");
newPcb.setSize(scanner.nextInt());
addMemory(newPcb);
readyheadPcb = LinkedList.insert(readyheadPcb, newPcb);
if (inServicePcb == null) {
inServicePcb = readyheadPcb;
readyheadPcb = readyheadPcb.getNextPcb();
}
sortMemory();
1.5 运行截图
1.6 小结
进程阻塞:一个进程正在等待某一事件发生(例如请求I/O而等待I/O完成等)而暂时仃止运行,这时即使把处理机分配给进程也无法运行,故称该进程处于阻塞状态。
进程挂起:由于IO的速度慢于CPU的运算速度,经常出现CPU等待I/O的情况。这时OS需要将主存中的进程对换至外存。在进程行为模式中需要增加一个新的挂起(suspend)状态。当内存中所有进程阻塞时,OS可将一进程置为挂起态并交换到外存,再调入另一个进程执行。
退出状态:OS从可执行进程组中释放出的进程,或者是因为它自身停止了,或者是因为某种原因被取消。
二、分页式存储器管理
2.1目的
1、熟练掌握分页式管理基本原理,并在实验过程中体现内存空间的分配与
回收、地址转换过程。
2、 掌握利用“位示图”管理内存与置换空间的分配与回收。
2.2内容
在实验 1 基础上实现分页式存储管理内存分配和地址转换过程。进一步实现请求分页式存储管理过程。
2.3数据结构
链表:PCB 链表
队列:FIFC,LRU
一维数组
2.4算法设计及流程图
public void changeBlockItem(int logicAdress, boolean methodFlag) {
int goalBlock = blockCode[pageQueue.get(0)];
if (methodFlag) {
if (!isQueued(logicAdress)) {
movingPriorityQueue(logicAdress, methodFlag);
setBlockItem(logicAdress, goalBlock);
}else {
movingPriorityQueue(logicAdress, methodFlag);
}
}else {
if (!isQueued(logicAdress)) {
movingPriorityQueue(logicAdress, methodFlag);
setBlockItem(logicAdress, goalBlock);
}
}
}
2.5 运行截图
2.6 小结
FIFO:FIFO队列不对报文进行分类,当报文进入接口的速度大于接口能发送的速度时,FIFO按报文到达接口的先后顺序让报文进入队列,同时,FIFO在队列的出口让报文按进队的顺序出队,先进的报文将先出队,后进的报文将后出队。
三、设备管理
3.1目的
在前面的实验基础上实现设备管理功能的模拟,主要包括通道和控制器的添加和删除,设备的添加、删除,设备的分配和回收。
3.2内容
实现设备、控制器以及通道的层次关系。 实现添加或删除新的设备、控制器或通道。 能够模拟设备的分配与回收流程;设备分配成功与否,进程都应进入阻塞状态。
3.3数据结构
树形结构:通道、设备、控制器
链式结构:单个拖到下的控制器等
一维数组
3.4算法设计及流程图
private void show() {
// TODO Auto-generated method stub
for (int i = 0; i < channelVector.size(); i++) {
System.out.println(channelVector.get(i).getChannelName());
channelVector.get(i).show();
}
}
3.5 运行截图
3.6 小结
设备分配的基本任务是根据用户的I/O请求,为他们分配所需的设备。如果在I/O设备和CPU之间还存在设备控制器和通道。
四、文件与磁盘管理
4.1目的
1、熟练掌握树型目录结构的数据结构设计、存储以及遍历等管理过程。
2、掌握交互式命令的设计与使用。
3、了解磁盘文件的存取。
4.2内容
1、利用内存或外存存储结构实现文件系统的树型目录结构,并通过交互式
命令完成文件与目录管理。
2、至少提供如下命令(大小写都能识别):MD(创建空目录)、CD(切换当
前目录)、RD(删除空目录)、MK(创建文件)、DEL(删除文件)和 DIR(列出目
录信息)。
4.3数据结构
树形结构:各种文件、文件夹
4.4算法设计及流程图
public void tree(File file,int tab) {
if (file.isFile()) {
System.out.println("您给定的是一个文件"); // 判断给定目录是否是一个合法的目录,如果不是,输出提示
} else {
File[] fileLists = file.listFiles(); // 如果是目录,获取该目录下的内容集合
for (int i = 0; i < fileLists.length; i++) { // 循环遍历这个集合内容
for (int j = 0; j < tab; j++) { //输出缩进
System.out.print("|---");
}
System.out.println(fileLists[i].getName()); //输出元素名称
if (fileLists[i].isDirectory()) { //判断元素是不是一个目录
tree(fileLists[i],tab+1); //如果是目录,继续调用本方法来输出其子目录,因为是其子目录,所以缩进次数 + 1
}
}
}
}
4.5 运行截图
4.6 小结
如果采用外存文件模拟方式,则需要结合 FAT 或 i-node 在数据结构中考
虑文件或目录的存储位置。同时还需解决虚盘文件的空闲空间管理、树
型目录结构的表示等问题。
五、进程调度
5.1目的
在前面实验基础上实现按先来先服务 FCFS、短作业优先 SJF以及时间片轮转算法调度进程的模拟过程。根据当前所设定调度算法,连续调度所有进程,并计算每个进程的周转时间和带权周转时间、所有进程的平均周转时间和平均带权周转时间。
5.2内容
在第 1-3 部分基础上扩展;支持 FCFS、短作业优先以及时间片调度算法。能够较方便地查看调度过程及平均周转时间、平均带权周转时间。 也可实现如下扩充要求。
5.3数据结构
二维数组:银行家算法
一维数组:银行家算法
链式存储:PCB
5.4算法设计及流程图
public void processWakeUp() {
PCB savePcb = blockingheadPcb;
if (blockingheadPcb != null) {
blockingheadPcb = blockingheadPcb.getNextPcb();
savePcb.setNextPcb(null);
}else {
System.out.println("当前无阻塞进程!");
}
readyheadPcb = LinkList.insert(readyheadPcb, savePcb);
if (inServicePcb == null) {
inServicePcb = readyheadPcb;
readyheadPcb = readyheadPcb.getNextPcb();
}
}
5.5 运行截图
5.6 小结
为实现银行家算法,每一个新进程在进入系统时,必须申明在运行过程中可能需要每种资源类型的最大单元数目,其数目不应超过系统所拥有的资源总量。当进程请求一组资源时,系统必须首先确定是否有足够的资源分配给该进程。若有,再进一步计算在将这些资源分配给进程后,是否会使系统处于不安全状态。如果不会,才将资源分配给它,否则让进程等待。
六、课程总结
(1)CPU:1.cpu是中央处理器,他是计算机的核心。2.cpu通过和寄存器,高速缓存,以及内存交互来执行程序。
(1)分页:由于内存需要装载硬盘中的数据,所以需要约定一个存储单元,操作系统把它叫做页,一个页一般长度是8kb或者16kb。
(2)进程:进程是资源分配的资本单位,操作系统为进程开辟一段内存空间,内存空间从高位向低位,包括函数调用栈,变量以及其他区域。
(3)多进程:由于计算机是分时系统,所以多进程的使用不可避免,操作系统需要进行进程的切换,方法是内存指针指向新位置,保存原来的进程信息,同时刷新寄存器等数据。然后开始执行新的进程.