【写在前面】
这个模拟程序从开始了解到做出来共花了五个晚上的时间时间不算长,但也不断,其中也经历了好几次从绝望到欣喜的折腾,现在我就说说我从这之中学到的和明白的东西。
【知识层面】
一、操作系统
- 什么是进程
进程,简单点说,就是正在执行的程序。
进程的实体由五个部分组成,分别是text section,program counter, process stack,data seciton 和 heap,具体的GOOGLE去吧。
然后就是进程的状态,分别是初始态,等待,就绪,运行,以及terminated
有关进程的知识其实还有很多,还需多积累和总结
- 什么是PCB
全称:Process Control Block,顾名思义,它就好比是一个进程的管家一样,掌管着进程的衣食住行,所以在这次试验中,我索性将模拟的进程和PCB融合在了一个结构体中。
- 什么是信号量
信号量解决的问题实际上就是临界资源的共享问题。比方说,一个数据结构资源被两个线程同时访问,同时进行操作,难免会出现让人意想不到的问题,严重时可能导致整个程序的崩溃。信号量就很好的解决了这个问题。
代码示例:
引用
void wait(int* synch)//等待资源
{
while ((*synch) <= 0)
;
(*synch)--;
}
void signal(int* synch)//释放资源
{
(*synch)++;
}
可以看到,信号量synch实际上代表着资源的数量,wait()将占用一个资源,所以当资源数为0甚至为负时,其他进程或线程将无法访问这个资源,并会一直等待,知道其他进程或线程signal()掉一个资源为止。(这里我用的空转,当然实际上有更好的方法)
- 相关的调度算法
进程从等待队列到就绪队列采用的是FCFS,说白了就是谁在第一个谁就进去。
然后是从就绪队列到CPU中,采用优先级算法,即优先级大的先运行。
若优先级相同,则采用时间片,即所需时间最小的先运行。
这些算法都没有解决的问题便是starvation问题,也就是说,有写优先级低,而且耗费
时间的进程可能一辈子都不会轮到它执行。
- 进程的挂起
除了进程处于terminated态外,任何状态下的进程都可以被挂起。之所以需要挂起,原因很多,可能是相关进程没能满足该进程运行的需求或是其他系统需要
二、代码实现
遇到的问题:
- 线程的使用
我一共用到了三个线程,分别是进程创建线程,进程进入就绪对的线程以及进程执行线程,概念上问题不到,主要是使用上
这里要提到到的便是createThread()和AfxBeginThread()两个创建线程函数的相关区别。讲一讲我的体会吧,一开始createThread()我没法用,可能是用的MFC的原因,然后改用AfxbeginThread()就能跑起来了。可是,由于AfxBeginThread()创建的线程无法得到它的状态,所以在写暂停按钮时遇到了问题,即无法挂起,所以改用的createThread(),这时也就一切正常了。
上网查了一下,AfxBeginThread()实际上是MFC对CreateThread()的封装
,CreateThread()则是系统自带的线程创建借口。说是在MFC中尽量不要使用CreateThread()函数,因为起缺少很多初始化工作,会影响到整个程序的执行,具体原因我现在也不能完全理解。
- 参数的传递及生命周期
这个问题曾让我崩溃。
没有语法错误,没有概念错误,没有逻辑错误,但就是错了
结果发现是由于在某个函数中定义的局部变量生命周期结束而导致参数没有传入另一个函数中,当然,问题的出现到解决进过了两天,不然就不会崩溃了。
所以对于参数的调用一定要留意其生命周期,这种问题有时候很难发现,不要像我这样到时候问题找不出,哭也哭不出来。
【一些体会】
没有不会做的,只有不想做的
百度GOOGLE是你永远的无时不在的老师
最后附一张模拟程序的图片,哈哈~
- 大小: 44.8 KB
分享到:
相关推荐
轮询调度算法的CPU调度模拟程序.操作系统课的作业。原理
综上所述,编写并调度一个多道程序系统的作业调度模拟程序是一个涉及操作系统核心原理的实践项目。通过这个项目,不仅可以深入理解进程管理、资源分配和调度算法,还可以锻炼编程能力和问题解决能力。在实际操作中,...
进程调度是操作系统中至关重要的部分,它决定了系统如何在多个并发...通过分析和优化这些模拟程序,可以深入研究如何平衡系统响应时间和资源利用率,这对理解操作系统内核的工作方式和提升系统设计能力具有重要意义。
这个“进程模拟程序-模拟进程调度”的课程设计项目旨在帮助学生深入理解操作系统如何管理和优化进程的执行顺序,从而提高系统效率。下面我们将详细探讨相关知识点。 1. **进程概念**: 进程是操作系统中的基本执行...
在这个课程设计报告中,学生被要求设计一个处理机调度模拟程序,以理解并实践不同的调度算法。以下是对报告中涉及的知识点的详细说明: 1. **进程控制块 (PCB, Process Control Block)**: PCB是操作系统中每个进程...
进程调度是操作系统内核的重要组成部分,它负责选择一个就绪状态的进程在CPU上执行,并控制进程的上下文切换。这个Java程序模拟了8种不同的调度算法,帮助用户理解和分析这些算法的性能特点。 首先,让我们逐一了解...
总结,这个作业调度模拟程序旨在帮助我们理解多道程序系统中调度的基本原理和方法,通过FCFS和优先级调度的对比,深入探讨了资源分配、等待时间、周转时间和响应时间等关键概念。通过对各种场景的模拟,我们可以更好...
根据给定的信息,本文将详细解释如何在单道处理系统中实现作业调度模拟程序,并针对先来先服务(First-Come First-Served, FCFS)、最短作业优先(Shortest Job First, SJF)、响应比高者优先(Highest Response ...
### 操作系统进程调度模拟程序知识点详解 #### 一、项目背景与目标 - **项目背景**:本项目旨在通过实际编程实现操作系统中进程调度的基本原理。学生将通过本项目学习如何使用UNIX/LINUX环境下的命令及工具,如vi...
综上所述,这个“操作系统 进程调度模拟系统”不仅展示了进程调度的基础原理,还通过C#编程实现了一个实际的模拟环境,使得学习者能够直观地体验和分析各种调度策略,对操作系统课程的学习有着极大的促进作用。
在这个主题中,我们聚焦于操作系统中的进程调度,特别是"操作系统-进程调度算法模拟程序设计"。这个项目涵盖了两种基本的调度算法:先进先出(FIFO)和最近最少使用(LRU)。 **先进先出(FIFO)算法**: FIFO,也...
进程调度模拟程序是操作系统课程设计的重要组成部分,它模拟了操作系统中进程调度的过程。该程序设计要求学生编写一个进程调度程序,允许多个进程共行的进程调度程序。 进程调度算法采用最高优先数优先的调度算法...
**JAVA操作系统实验作业调度图形化模拟程序** 在计算机科学领域,操作系统是管理和控制计算机硬件与软件资源的核心软件。其中,作业调度是操作系统中一个至关重要的部分,它负责决定哪些任务应该获得CPU时间来执行...
总结,这个压缩包包含了一个操作系统进程调度算法的模拟程序,涵盖了FCFS、RR和优先级调度这三种常见算法。通过实际操作,学习者不仅可以加深对这些概念的理解,还能探索不同调度策略如何影响系统性能。对于计算机...
本文将深入探讨“JAVA操作系统实验进程调度图形化模拟程序”,它基于JAVA 16语言实现,提供了图形用户界面(GUI)来直观展示进程调度的过程。 首先,我们要了解进程调度的基本概念。在多任务操作系统中,多个进程会...
在这个实验“操作系统进程调度的程序”中,lab1可能包含了模拟这些操作的代码或工具。实验者将有机会实现和分析各种调度策略,观察不同策略对系统性能的影响。这有助于理解操作系统如何管理并发执行的多个任务,并...
进程调度模拟程序:假设有10个进程需要在CPU上执行,分别用: 先进先出调度算法; 基于优先数的调度算法; 最短执行时间调度算法 确定这10个进程在CPU上的执行过程。要求每次进程调度时在屏幕上显示: ...
进程调度模拟程序:假设有10个进程需要在CPU上执行,分别用: 先进先出调度算法; 基于优先数的调度算法; 最短执行时间调度算法 确定这10个进程在CPU上的执行过程。要求每次进程调度时在屏幕上显示: 当前...
### 操作系统进程调度模拟程序实验报告知识点梳理 #### 一、课程设计目的 本课程设计旨在通过实际操作,帮助学生深入理解操作系统中进程管理的关键概念和技术,特别是进程调度算法的实现及其工作原理。具体目标包括...
CPU调度模拟完整算法 zqruc班的同学资源共享啊CPU调度模拟完整算法 zqruc班的同学资源共享啊