进程、线程调度模型及其在Windows2000中的实现

合集下载

进程调度实验报告分析

进程调度实验报告分析

信息工程学院实验报告课程名称:操作系统Array实验项目名称:进程调度一、实验目的:用高级语言编写和调试一个有 N个进程并发的进程调度程序,以加深对进程的概念及进程调度算法的理解。

二、实验设备与器件PC机、windows2000 操作系统、VC++6.0三、实验内容与步骤设计一个有N个进程并发的进程调度程序。

进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)和先来先服务算法。

具体描述如下:每个进程有一个进程控制块( PCB)表示。

进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。

分析:进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。

进程的到达时间为进程输入的时间。

进程的运行时间以时间片为单位进行计算。

每个进程的状态可以是就绪 W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。

就绪进程获得 CPU后都只能运行一个时间片。

用已占用CPU时间加1来表示。

如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1(即降低一级),然后按照优先数的大小把它插入就绪队列等待CPU。

每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。

重复以上过程,直到所要进程都完成为止。

调度算法的参考流程图如下:实验步骤1.编写一个有N个进程并发的进程调度程序。

2.在上机环境中输入程序,调试,编译。

3.设计输入数据,写出程序的执行结果。

4.根据具体实验要求,填写好实验报告。

四、实验结果及分析1、两个进程并发执行进程执行:进程轮转直至全部进程都执行完。

五、实验总结(实验过程中遇到的问题及解决的方法,做为本实验的心得体会)通过老师老师的帮助,进行试验,我深刻理解操作了,对调度的原理基本把握。

实验1编程实现进程(线程)同步和互斥

实验1编程实现进程(线程)同步和互斥

实验1编程实现进程(线程)同步和互斥一、实验目的①通过编写程序实现进程同步和互斥,使学生掌握有关进程(线程)同步与互斥的原理,以及解决进程(线程)同步和互斥的算法,从而进一步巩固进程(线程)同步和互斥②等有关的内容。

③了解Windows2000/XP中多线程的并发执行机制,线程间的同步和互斥。

④学习使用Windows2000/XP中基本的同步对象,掌握相应的⑤API函数。

⑥掌握进程和线程的概念,进程(线程)的控制原语或系统调用的使用。

⑦掌握多道程序设计的基本理论、方法和技术,培养学生多道程序设计的能力。

二、实验内容在Windows XP、Windows 2000等操作系统下,使用的VC、VB、java或C等编程语言,采用进程(线程)同步和互斥的技术编写程序实现生产者消费者问题或哲学家进餐问题或读者-写者问题或自己设计一个简单进程(线程)同步和互斥的实际问题。

三、实验要求①经调试后程序能够正常运行。

②采用多进程或多线程方式运行,体现了进程(线程)同步和互斥的关系。

③程序界面美观。

四、实验步骤、过程让写者与读者、读者与读者之间互斥的访问同一数据集,在无写者进程到来时各读者可同时的访问数据集,在读者和写者同时等待时写者优先唤醒。

设置两个全局变量readcount 和writecount来记录读者与写者的数目,设置了3个信号量。

h_mutex1表示互斥对象对阻塞在read这一个过程实现互斥,h_mutex2实现全局变量readcount操作上的互斥,h_mutex3实现对全局变量writecount的互斥访问。

设置了两个临界区,为了实现写者优先,用了临界区read。

数据结构:(1)用了两个临界区(2)自定义结构ThreadInfo记录一条线程信息,多个线程对应一个ThreadInfo数组。

(3)设置了互斥量h_mutex1,实现了互斥对象对阻塞read这一过程,h_mutex2实现对readcount操作的互斥,h_mutex3实现对writecount的互斥访问。

实验二 Windows 2000进程控制

实验二 Windows 2000进程控制

// 必须是本结构的大小
// 利用同样的可执行文件和命令行创建进程,并赋于其子进程的性质 BOOL bCreateOK = :: CreateProcess( szFilename, szCmdLine, NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi) ; // 对子进程释放引用 if (bCreateOK) { :: CloseHandle(pi.hProcess) ; :: CloseHandle(pi.hThread) ; } } int main(int argc, char* argv[] ) { // 确定进程在列表中的位置 int nClone(0) ; if (argc > 1) { // 从第二个参数中提取克隆ID :: sscanf(argv[1] , “%d” , &nClone) ; } // 显示进程位置 std :: cout << “Process ID: “ << :: GetCurrentProcessId() << “, Clone ID: “ << nClone << std :: endl; // 检查是否有创建子进程的需要 const int c_nCloneMax = 25; if (nClone < C_nCloneMax) { // 发送新进程的命令行和克隆号 StartClone(++nClone) ; } // 在终止之前暂停一下 (l/2秒) :: Sleep(500) ; return 0; }

通常,一个进程需要它的运行期环境的信息。 例如API函数GetModuleFileName() 和 GetCommandLine(),可以给出用在 CreateProcess() 中的参数以启动应用程序。 在创建应用程序时可使用的另一个API函数是 IsDebuggerPresent() 。

剖析Windows任务管理器开发原理与实现

剖析Windows任务管理器开发原理与实现

剖析Windows任务管理器开发原理与实现剖析Windows任务管理器开发原理与实现Windows2000/XP内含的任务管理器(Taskmgr)相信大家都熟悉吧,相比之下XP里的要比2000功能更加强大,返回的信息也更加的详细,不过您是否觉得还有很多希望获得的消息没有包含在里面吗?您是否觉得Windows的系统管理工具箱里的东西太分散了吗?下面就让我们看看它们的开发原理,并动手实现一个真正的任务管理器。

现在我们是调用Win32API来实现这些功能的,但是大家都说MS隐藏了太多的细节,以后我们将讨论更多关于Windows内核的东东。

可能大家对任务管理器里最熟悉的功能要数进程管理了,常常我们在怀疑中了病毒/木马的时候都会看看任务管理器里有没有什么特别的进程在运行,所以进程查看器应该是一个非常重要的功能。

我们除了需要获得进程的名称外,还有什么呢?当然包括它的进程标识符(ProcessID),用户信息(UserName),CPU使用时间(CPUTime)和存储器的使用情况(MemoryUsage),还有它的优先权(BasePriority)。

CPU和Memory信息可以帮助我们分析进程的运行情况,而优先权可以表示进程在CPU分配处理器使用时的优先情况。

这些都是通用的进程信息,让我们再看看其他的信息吧。

进程的父进程标识符(ParentProcess ID),创建时间(CreateTime),程序名称等在很多情况下也是我们关心的信息。

我们再看看进程相关的性能信息。

在Windows下通常有两种模式:内核模式(Kernel:Level 0)和用户模式(User: Level3),进程往往在两种模式中来回切换,所以可以获得进程在内核模式和用户模式各自的使用时间。

同时还包括进程相关的工作集(WorkingSet),分页池(PagedPool),非分页池(NonePagedPool)和页面文件(PageFile)信息。

操作系统实验二并发与调度

操作系统实验二并发与调度

实验二并发与调度一、实验目的在本实验中,通过对事件和互斥体对象的了解,来加深对Windows 2000线程同步的理解。

通过分析实验程序,了解管理事件对象的API。

了解在进程中如何使用事件对象,在进程中如何使用互斥体对象,线程如何通过文件映射对象发送数据。

二、实验环境硬件环境:计算机一台,局域网环境;软件环境:Windows 2000 Professional,Visual C++ 6.0专业版或企业版。

三、实验内容和步骤第一部分:互斥体对象本程序中显示的类CCountUpDown使用了一个互斥体来保证对两个线程间单一数值的访问。

每个线程都企图获得控制权来改变该数值,然后将该数值写入输出流中。

创建者实际上创建的是互斥体对象,计数方法执行等待并释放,为的是共同使用互斥体所需的资源(因而也就是共享资源) 。

1、利用互斥体保护共享资源程序参见实验指导书分析程序的运行结果,可以看到线程(加和减线程) 的交替执行(因为Sleep() API允许Windows切换线程) 。

在每次运行之后,数值应该返回初始值(0) ,因为在每次运行之后写入线程在等待队列中变成最后一个,内核保证它在其他线程工作时不会再运行。

1)请描述运行结果(如果运行不成功,则可能的原因是什么?) :2) 根据运行输出结果,对照分析程序,可以看出程序运行的流程吗?请简单描述:_____逆向运行__________第二部分线程通过文件对象发送数据Windows 2000提供的线程间通讯类内核对象允许同一进程或跨进程的线程之间互相发送信息,包括文件、文件映射、邮件位和命名管道等,其中最常用的是文件和文件映射。

这类对象允许一个线程很容易地向同一进程或其他进程中的另一线程发送信息。

1、演示线程通过文件对象发送数据程序参见实验指导书运行结果(如果运行不成功,则可能的原因是什么?) :阅读和分析程序,请回答问题:1) 程序中启动了多少个单独的读写线程?__________100__________________________________________________________2) 使用了哪个系统API函数来创建线程例程?_________ CreateThread()________________________________3) 文件的读和写操作分别使用了哪个API函数?_______ ReadFile()______ WriteFile()_____________ 每次运行进程时,都可看到程序中的每个线程从前面的线程中读取数据并将数据增加,文件中的数值连续增加。

Windows操作系统的线程调度机制

Windows操作系统的线程调度机制

Windows操作系统的线程调度机制2011010*** 热动** ***在操作系统的历史演变中,人们总是为了提高CPU的效率而一直努力着。

从串行处理到简单批处理、中断机制的引入,到多道程序设计批处理和分时系统,CPU的利用率便一直在提高,同时程序的执行的复杂性也日益增多。

随着多道程序操作系统的出现,怎样有序高效的管理程序的执行成为了当时人们关注的焦点。

为了程序执行的正确性和高效性,我们通常需要达到以下几个目的:1.资源对多个应用程序可见2.物理处理器能够在多个应用程序间切换保证每个程序都在执行中,即并发执行3.提高资源利用率和系统吞吐量。

在这些目的的推动下,“进程”这样作为能分配给处理器并由处理器执行的实体便氤氲而生了。

众所周知,一个进程既是资源分配单位,即每个进程拥有虚拟地址空间,保存进程映像,控制一些资源(文件,I/O设备),有状态、优先级等,也是CPU调度单位,即进程是一个程序的执行轨迹。

进程的这两个属性也是能够并发执行的基础。

当产生一个中断时,处理器保存当前执行进程的所有信息(进程控制块),调入中断处理程序,并继续到下一个指令周期,当中断处理结束后,处理器恢复刚刚被中断进程的所有信息和分配的资源,保证该进程可以从被中断处重新开始执行。

简单情形下,进程主要有三个状态:就绪态、运行态、阻塞态。

简单的轮转调度中,处于运行态的进程超时后,CPU产生时钟中断,将该进程转回就绪态,并重新调度另一个排队的就绪态进程进入运行态运行;当运行态的进程执行I/O或其他调用后,为了不让CPU做长时间的等待,该进程会被置为阻塞态,I/O准备完毕后该进程会重新进入就绪态进行排队。

采用这样的方式能够让所有的程序依次执行,由于CPU的速度很快、时间片的长度很短,看上去就像所有程序并发执行一样,同时CPU的利用率也会提高。

引入进程最开始的目的是为了程序并发执行、提高CPU利用率,但是由于前述的“进程是资源资源分配单位”,因而在创建、终止、切换过程中,系统必须为之付出较大的时空开销。

第7章习题解答

第7章习题解答

第七章习题解答一、填空1.一个操作系统的可扩展性,是指该系统能够跟上先进计算技术发展的能力。

2.在引入线程的操作系统中,线程是进程的一个实体,是进程中实施调度和处理机分派的基本单位。

3.一个线程除了有所属进程的基本优先级外,还有运行时的当前优先级。

4.在Windows 2000中,具有1~15优先级的线程称为可变型线程。

它的优先级随着时间配额的用完,会被强制降低。

5.Windows 2000在创建一个进程时,在内存里分配给它一定数量的页帧,用于存放运行时所需要的页面。

这些页面被称为是该进程的“工作集”。

6.Windows 2000采用的是请求调页法和集群法相结合的取页策略,把页面装入到内存的页帧里的。

7.分区是磁盘的基本组成部分,是一个能够被格式化和单独使用的逻辑单元。

8.MFT是一个数组,是一个以数组元素为记录构成的文件。

9.只要是存于NTFS卷上的文件,在MFT里都会有一个元素与之对应。

10.在Windows 2000的设备管理中,整个I/O处理过程都是通过I/O请求包(IRP)来驱动的。

二、选择1.在引入线程概念之后,一个进程至少要拥有D 个线程。

A. 4 B.3 C.2 D.12.在Windows 2000中,只有A 状态的线程才能成为被切换成运行状态,占用处理器执行。

A.备用B.就绪C.等待D.转换3.Windows 2000是采用C 来实现对线程的调度管理的。

A.线程调度器就绪队列表B.线程调度器就绪队列表、就绪位图C.线程调度器就绪队列表、就绪位图、空闲位图D.线程调度器就绪队列表、空闲位图4.在Windows 2000里,一个线程的优先级,会在A 时被系统降低。

A.时间配额用完B.请求I/O C.等待消息D.线程切换5.在单处理机系统,当要在进程工作集里替换一页时,Windows2000实施的是B 页面淘汰策略。

A. FIFO(先进先出)B.LRU(最近最久未用)C.LFU(最近最少用)D.OPT(最优)6.在页帧数据库里,处于下面所列A 状态下的页帧才可以变为有效状态。

Windows线程调度机制

Windows线程调度机制

Windows线程调度机制线程是程序指令可被操作系统单独执行的最小单元,一个线程被包含在进程中,多线程可以存在于同一进程并分享进程的资源诸如内存等,然而进程却不可以。

在一个单独的进程中,多线程由操作系统将时间片段化依次执行,这一过程之快以至于让用户认为多个任务的线程在同时执行,当然,线程确实可以同时进行考虑到每个进程同时执行单独的线程。

一. 线程与进程的不同线程与传统的多任务进程的操作系统不同之处在于:1.进程独立而线程作为进程的一部分2.进程比线程包括更多的状态信息,然而一个进程中的多线程共享这些信息,内存以及其他资源。

3.进程有分离的地址空间,而线程共享他们的地址空间4.进程只能通过系统提供的内部交流机制沟通5.在同一进程中线程的环境变换快于进程二. 多线程多线程是一个广泛的编程和执行模型,它允许多线程在同一进程环境,这些线程共享进程的资源,但却能够独立的执行。

线程的这一理念允许开发者对同时执行有了新的抽象。

多线程也可被应用于单独的进程以便实现在多进程的操作系统上完成平行执行的任务。

多线程使得拥有多CPU的电脑系统可以运行更快,因为程序的线程可将自己借出实现同时执行。

在这类情况下,程序需要注意避免冲突。

为了使数据被正确使用,线程需经常约定次序以便数据被以正确的顺序处理。

线程也可能需要相互的外部操作去避免共用的数据被同时修改或读取。

类似的粗心错误将导致死锁。

多线程的另一个即便是单CPU也能用得上的功能是有能力保持对外部输入保持响应。

在单线程的程序中,如果主要的执行线程在长任务中死了,整个应用就都瘫痪了。

但如果将这一任务移至一个与主线程同时执行的线程,那么这一应用就有可能对用户的输入做出反应。

另一方面,在普遍情况下,多线程并不是解决程序响应的唯一出路。

操作系统用以下一或两种方式调度线程:1.抢先多任务处理被普遍认为是最好的处理方式,它允许操作系统决定什么时候进行环境变换。

但不足是抢先多任务处理可能在不合适的时间改变环境导致优先级翻转等一些不好的结果。

实验三 Windows 2000线程同步

实验三 Windows 2000线程同步

OpenEvent()
SetEvent()
ResetEvent()
将手工重置事件转化为非接受信号状态
PulseEvent()
将自动重置事件对象转化为已接受信号状 态。当系统释放所有的等待它的线程时此 种转化立即发生

为了获得互斥体,首先,想要访问调用的线程 可使用OpenMutex() API来获得指向对象的句 柄;然后,线程将这个句柄提供给一个等待函 数。当内核将互斥体对象发送给等待线程时, 就表明该线程获得了互斥体的拥有权。当线程 获得拥有权时,线程控制了对共享资源的访 问——必须设法尽快地放弃互斥体。放弃共享 资源时需要在该对象上调用ReleaseMute() API。然后系统负责将互斥体拥有权传递给下 一个等待着的线程 (由到达时间决定顺序) 。
// 创建子进程 if (:: CreateChild()) { std :: cout << " chlid created" << std :: endl; // 等待,直到子进程发出信号 std :: cout << "Parent waiting on child." << std :: endl; :: WaitForSingleObject(hEventContinue, INFINITE); :: Sleep(1500); } // 删去这句试试 std :: cout << "parent received the envent signaling from child" << std :: endl;
}
// 解除程序释放对对象的引用 virtual ~CCountUpDown() { :: CloseHandle(m_hThreadInc) ; :: CloseHandle(m_hThreadDec) ; :: CloseHandle(m_hMutexValue) ; }

操作系统中的进程调度原理

操作系统中的进程调度原理

操作系统中的进程调度原理一、概述进程调度在操作系统中是非常重要的一个概念。

它是指在系统中多个进程同时运行时,如何选择下一个要运行的进程,并对进程进行分配CPU时间片的过程。

进程调度在操作系统中扮演着重要的角色,它决定了系统整体的性能和响应时间。

在本文中,我们将详细讨论进程调度的原理、算法和实现,以及一些常见的调度策略。

二、进程调度的原理操作系统中的进程调度的本质是分配CPU资源。

CPU时间片是操作系统中进行任务调度的基本单位。

每个进程执行自己的任务时,都要先获得CPU时间片,进程使用的时间片用完之后,操作系统将紧接着将CPU资源分配给下一个进程运行。

在进程调度的过程中,操作系统需要维护一张任务调度表,该表中记录着每个进程的进程控制块(PCB),该表还需要维护一些其他的信息,如就绪进程队列、阻塞进程队列等。

每个进程具有自己的属性,如进程的优先级、占用CPU的时间等。

在进程调度的过程中,根据进程的优先级和占用CPU的时间来判断下一个将要运行的进程,并将CPU时间片分配给下一个进程。

三、进程调度的算法1.先来先服务(FCFS)先来先服务(FCFS)是最古老的进程调度算法。

这个算法的工作原理是,先到达的进程将拥有较高的优先级,并将首先获得CPU时间片运行。

虽然FCFS算法很容易实现,但它并不是最优的。

如果某个长时间运行的进程在队列前面,那么它将一直占用CPU资源,而其他进程会一直等待。

2.最短作业优先(SJF)最短作业优先(SJF)调度算法是根据每个任务占用的CPU时间来进行调度的。

该算法的工作流程如下:当进程到达时,根据其需要运行的时间将其放入队列中。

如果下一个就绪的任务的需要运行时间比当前运行的任务更短,那么该就绪任务将被优先执行。

但是,该算法也有一个问题,就是如果存在镰刀现象,即一些进程长时间等待,无法获得CPU时间片。

3.时间片轮转(RR)时间片轮转(RR)是一种分时系统调度算法。

正如其名字所暗示的那样,RR算法将相等的量分配给每个进程的时间片,每个进程在其时间片用完之前被调用,然后被挂起并在下一次被调用时恢复执行。

Win2K下的线程调度

Win2K下的线程调度

DeferredReadyListHead
就绪链表组 DispatcherReadyListHead …… 优先级8 优先级9 优先级10 …… ReadySummary 就绪摘要
DispatcherReadyListHead
用于线程调度的数据结构和安全信息
优先级调度和环境切换
18
如果一个线程在执行的过程中,主动放弃对于当前处理器的执行权, 那么,此时当前处理器的控制权就会转移到系统的线程调度器 (dispatcher)由线程调度器做出调度决定。或一个线程在执行过 程中,由于某些原因,不得不放弃对于当前处理器的执行权。这两 种情形分别称为自愿放弃执行权和被迫放弃执行权。 当一个线程主动放弃当前处理器执行权时,会在内核函数中调用 KiSwapThread函数。该函数的两个参数分别指向当前调用此函数 的线程对象和当前处理器的KPRCB对象。
线程优先级
执行体层的优先级类别经过全局表PspPriorityTable变换后,就变成了内核层 上的0~31优先级值。另外,在执行体层上,除了通过优先级类别的方式来设 置一个进程的基本优先级外,还可以通过NtSetInformationProcess函数对基 本优先级进行微调,并非绝对是PspPriorityTable表中指的优先级值。 优先级提升的典型情形
线程优先级
7
运行在动态优先级类别中的线程,他们的实际优先级可能会根据特 定的情形而做调整,所以,KTHRREAD结构的Priority域记录了一 个线程当前实际优先级,他往往是在BasePriority域的基础上提升一 定的优先增量,但是无论怎么调整,Priority域值的范围不会超过 1~15.线程的优先级计算重新计算只针对非实时优先级别类型的线 程,并且新的优先级不会低于基本优先级。另外,在提升一个线程 的优先级时,新的优先级值不会超越到实时线程的优先级范围内 (16~31)。而实时线程的优先级不会调整,他们的当前优先级总 是等于其基本优先级。

第九章Windows 2000操作系统

第九章Windows 2000操作系统

二、Windows 2000操作系统进程的实现
在Windows2000中的进程是系统资源分配的基 本单位,并且是作为对象来管理的。进程是一 个拥有存储器、打开的文件等资源的用户作业 或应用程序的实体。 一个进程由以下几部分组成: 1)一个可执行程序。 2)一个由该进程专用的地址空间。是该进程可以 使用的虚存地址的集合。 3)系统资源,例如信号量、通信端口、文件等, 是在程序执行时,由操作系统分配该进程的。 4)至少有一个线程。
四、Windows 2000的线程调度
一、Windows2000的进程和线程模型总述
具有以下特点: (1)多任务(多进程)、多线程、对称多处理的。 能够在任何可用的CPU上运行操作系统代码,并 且可以在多个CPU上同时运行。 (2)由于采用客户/服务器模型,困此 Windows2000体现为多个服务器进程,每个服 务器进程使用多个线程来处理同时从多个客户 来的请求。 (3)Windows2000进程均被作为对象实现,并通 过对象服务访问。线程亦然。
对NTFS文件进行加密与解密的主要步骤.
1、注册回调函数 2、首次加密文件 3、解密文件 4、备份加密文件
9.6 Windows2000的I/O系统
一、Windows2000的I/O设计目标 二、Windows 2000的I/O结构 三、Windows 2000的设备驱动程序 四、Windows2000的I/O处理
3.文件属性
4.NTFS文件目录组织与索引 5、数据压缩
四、NTFS的可靠性
NTFS可以在系统崩溃或磁盘失败后, 把文件系统恢复到一致的状态,完 成此功能主要依靠日志记录。 1.日志 2.文件恢复的实现 3.坏簇恢复
五、 NTFS的安全性
Windows 2000采用加密文件系统 (Encrypted File System, EFS)提供的文 件加密技术,可将加密的NTFS文件存储在 磁盘上。EFS特别考虑了其他操作系统上 的现有工具引起的安全性问题,这些工具 允许用户不经过权限检查就可以从NTFS 卷上访问文件。通过EFS,NTFS文件中的 数据可在磁盘上进行加密,从而保证其安 全性.

操作系统探秘之进程与线程的原理和调度

操作系统探秘之进程与线程的原理和调度

进程进程的概念进程的状态进程的控制结构进程的控制进程的上下文切换线程为什么要使用线程?线程与进程的比较线程的上下文切换线程的实现调度调度时机调度原则调度算法进程进程的概念进程就是具有独立功能的程序关于某一数据集合的一次运行活动。

就如我下面的截图,比如WeChat(微信桌面版),这其实就是针对具体功能的运行活动称为进程,但是可以看到进程内还有很多细项在运行,所以也可以称这是一个WeChat的进程树。

进程的状态大家都知道CPU运算是非常快的,但是程序呢不一定都是一泻千里一口气运行到底的,就像我拿个热水壶烧水一样,我已经执行完“接水”==》放热水壶==》插电==》摁开关,但是烧水是需要时间的,我不能在这呆呆的等着,我还可以干点别的,一直到热水壶发出声音提醒我,我去“倒开水”这才完成。

那么我烧水这一连串的动作就可以看作一个进程,那么在这个过程中,就有个“运行”==》“暂停”==》“运行”这样的一种情况。

这种“间断”的特性,也就决定了进程有的三种基本状态:•就绪–进程准备好了除CPU之外的所有资源,就等CPU执行了。

•运行–CPU正在执行当前进程。

•阻塞–进程需要达到某种条件才可以继续执行,在条件满足之前即使得到了CPU资源也无法执行下去。

从头开始到结束呢就还有两个状态•新建–从一无所有创建一个进程,进入就绪状态。

•结束–进程活动完成(正常结束、异常结束)。

另外还有就是常说的挂起状态:进程不再占用内存空间了•就绪挂起–进程在硬盘上,除了CPU之外的资源准备好了,只要加载进内存立马进入就绪状态。

•阻塞挂起–进程在硬盘上,需要满足某种条件,满足条件后被加载进内存进入就绪状态,没有满足条件被加载进内存则进入阻塞状态。

进程的控制结构上面提到进程有这么些状态,那又是怎么控制的呢?在操作系统中,是用进程控制块(process control block,PCB)数据结构来描述进程的。

系统用PCB来记录进程的外部特征,描述进程的运动变化,是感知进程存在的唯一标志。

熟悉Windows2000XP中的进程和线程实验报告

熟悉Windows2000XP中的进程和线程实验报告

信息工程学院实验报告课程名称: 操作系统实验项目名称:熟悉Windows2000/XP 中的进程和线程一、实 验 目 的:1、熟悉Windows2000/XP 中任务管理器的使用。

2、通过任务管理器识别操作系统中的进程和线程的相关信息。

二、实 验 设 备 与 器 件Windows XP三、实 验 内 容 与 步 骤1、启动操作系统自带的任务管理器:方法:直接按组合键Ctrl+Alt+Del ,或者是在点击任务条上的“开始”“运行”,并输入“taskmgr.exe ”。

如下图所示:2、调整任务管理器的“查看”中的相关设置,显示关于进程的以下各项信息,并完成下表(填满即可):成 绩:指导老师(签名):表一:统计进程的各项主要信息3、从桌面启动办公软件“Word”,在任务管理器中找到该软件的登记,并将其结束掉。

再从任务管理器中分别找到下列程序:winlogon.exe、lsass.exe、csrss.exe、smss.exe,试着结束它们,观察到的反应是,原因是。

4、在任务管理器中找到进程“explorer.exe”,将之结束掉,并将桌面上你打开的所有窗口最小化,看看你的计算机系统起来什么样的变化、得到的结论是(说出explorer.exe进程的作用)。

四、实验结果及分析1.2.统计进程的各项主要信息序号进程名称进程ID 线程数量占用内存优先级占CPU时间虚拟内存1 mspaint.exe 6076 5 1696K 标准0:00:01 22532 K2 taskmger.exe 5876 4 3692 K 高0:00:01 5280 K3 SogouCloud.exe 5840 3 4672 K 标准0:00:00 1724 K4 WINWORD.EXE 5772 14 63160 K 标准0:00:17 76128 K5 conime.exe 5744 1 5660 K 标准0:00:00 2596 K6 igfxtray.exe 5020 2 15696 K 标准0:00:00 12848 K7 capclient.exe 4076 3 7412 K 标准0:00:00 3698 K8 Alg.exe 3680 5 4236 K 标准0:00:00 1492 K3. winlogon.exe、lsass.exe、csrss.exe、smss.exe,结束它们,观察到的反应是原因:winlogon.exe:Windows 用户登陆程序,管理用户登录和退出。

Win2000系统进程详解

Win2000系统进程详解

RsFsa.exe 管理远程储存的文件的操作。(系统服务)
grovel.exe 扫描零备份存储(SIS)卷上的重复文件,并且将重复文件指向一个数据存储点,以节省磁盘空间。(系统服务)
SCardSvr.exe 对插入在计算机智能卡阅读器中的智能卡进行管理和访问控制。(系统服务)
llssrv.exe License Logging Service(system service)
ntfrs.exe 在多个服务器间维护文件目录内容的文件同步。(系统服务)
RsSub.exe 控制用来远程储存数据的媒体。(系统服务)
以下服务很少会用到,上面的服务都对安全有害,如果不是必要的应该关掉
tcpsvcs.exe 提供在 PXE 可远程启动客户计算机上远程安装 Windows 2000 Professional 的能力。(系统服务) 支持以下 TCP/IP 服务:Character Generator, Daytime, Discard, Echo, 以及 Quote of the Day。(系统服务)
services.exe 包含很多系统服务
lsass.exe 管理 IP 安全策略以及启动 ISAKMP/Oakley (IKE) 和 IP 安全驱动程序。(系统服务) 产生会话密钥以及授予用于交互式客户/服务器验证的服务凭据(ticket)。(系统服务)
ismserv.exe 允许在 Windows Advanced Server 站点间发送和接收消息。(系统服务)
ups.exe 管理连接到计算机的不间断电源(UPS)。(系统服务)
wins.exe 为注册和解析 NetBIOS 型名称的 TCP/IP 客户提供 NetBIOS 名称服务。(系统服务)

实验1 Windows 2000进程的“一生”(实验报告)

实验1 Windows 2000进程的“一生”(实验报告)

实验1 Windows 2000进程的“一生”请回答:Windows所创建的每个进程都是以调用CreateProcess() API函数开始和以调用ExitProcess() 或TerminateProcess() API函数终止。

1、创建进程步骤5:编译完成后,单击“Build”菜单中的“Build 1-1.exe”命令,建立1-1.exe可执行文件。

操作能否正常进行?如果不行,则可能的原因是什么?答:不能。

因为它没有终止进程的函数。

步骤7:按Ctrl + S键可暂停程序的执行,按Ctrl + Pause (Break) 键可终止程序的执行。

清单1-1展示的是一个简单的使用CreateProcess() API函数的例子。

首先形成简单的命令行,提供当前的EXE文件的指定文件名和代表生成克隆进程的号码。

大多数参数都可取缺省值,但是创建标志参数使用了:CREATE_NEW_CONSOLE标志,指示新进程分配它自己的控制台,这使得运行示例程序时,在任务栏上产生许多活动标记。

然后该克隆进程的创建方法关闭传递过来的句柄并返回main() 函数。

在关闭程序之前,每一进程的执行主线程暂停一下,以便让用户看到其中的至少一个窗口。

CreateProcess() 函数有8个核心参数?本实验程序中设置的各个参数的值是:a. szFilename;b. NULL;c. NULL;d. FALSE;e. CREATE_NEW_CONSOLE;f. NULL;g. NULL;h. &pi。

程序运行时屏幕显示的信息是:2、正在运行的进程步骤10:编译完成后,单击“Build”菜单中的“Build 1-2.exe”命令,建立1-2.exe可执行文件。

操作能否正常进行?如果不行,则可能的原因是什么?答:能正常运行步骤11:在工具栏单击“Execute Program”(执行程序) 按钮,执行1-2.exe程序。

运行结果:当前PID信息:2608当前操作系统版本:5.1系统提示信息:清单1-2中的程序向读者表明了如何获得当前的PID和所需的进程版本信息。

实验三 Windows 2000xp线程同步

实验三  Windows 2000xp线程同步

Windows操作系统C/C++ 程序实验姓名:__ _______________学号:________班级:__________院系:_____________2013___年__10_月___11_日实验三Windows 2000/xp线程同步一、背景知识二、实验目的在本实验中,通过对事件互斥体对象的了解,来加深对Windows 2000/xp线程同步的理解。

1) 回顾系统进程、线程的有关概念,加深对Windows 2000/xp线程的理解。

2) 了解事件和互斥体对象。

3) 通过分析实验程序,了解管理事件对象的API。

4) 了解在进程中如何使用事件对象。

5) 了解在进程中如何使用互斥体对象。

6) 了解父进程创建子进程的程序设计方法。

三、工具/准备工作在开始本实验之前,请回顾教科书的相关内容。

您需要做以下准备:1) 一台运行Windows 2000/xp Professional操作系统的计算机。

2) 计算机中需安装Visual C++ 6.0专业版或企业版。

四、实验内容与步骤1. 事件对象清单4-1程序展示了如何在进程间使用事件。

父进程启动时,利用CreateEvent() API创建一个命名的、可共享的事件和子进程,然后等待子进程向事件发出信号并终止父进程。

在创建时,子进程通过OpenEvent() API打开事件对象,调用SetEvent() API使其转化为已接受信号状态。

两个进程在发出信号之后几乎立即终止。

步骤1:登录进入Windows 2000/xp Professional。

步骤2:在“开始”菜单中单击“程序”-“Microsoft Visual Studio 6.0”–“Microsoft Visual C++ 6.0”命令,进入Visual C++窗口。

步骤3:在工具栏单击“打开”按钮,在“打开”对话框中找到并打开实验源程序3-1.cpp。

步骤4:单击“Build”菜单中的“Compile 3-1.cpp”命令,并单击“是”按钮确认。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

与内核级线程相对应的,是用户级线程。这类实现多见于一些历史悠久的操作系统(如Unix系列),为了在操作系统中加入线程支持,采用了在用户空间增加运行库来实现线程。这些运行库被称为“线程包”。
进程、线程调度模型及其在Windows2000中的实现
在传统的操作系统中,每个进程有一个自己的地址空间以及一个单一的控制流程。事实上,这几乎就是传统操作系统中进程的定义。
但是,现实中有很多情况下需要在同一个地址空间中完成并行的任务,比如Web服务器程序,虽然使用多进程方式编程也可以很好地实现服务器,但进程间的数据共享由于需要跨越地址空间而显得十分不方便,同时进程间切换的开销也不可小视。
其实,在用户等待磁盘操作完成的时候,虽然进程对用户的输入无响应,但CPU确实是空闲的(假定没有忙碌的后台进程),理论上CPU应该可以响应用户输入。这样,我们就回到了多任务系统的设计初衷:提高CPU利用率。
我们先来讨论两个不使用线程模型的解决方案:多进程编程和使用异步系统调用。
如果使用多进程方式,则由主进程新建一个工作进程,将需要保存的数据传递给工作进程以进行保存操作。如果需要保存的数据量非常大,内存间的数据复制是一个可观的开销。当然,在较新的操作系统如System V中,由于采用COW(Copy On Write)技术,这个性能损失可以略过。另一个改进办法是使用共享内存,在一些不使用fork方式新建进程的操作系统上这是个好办法。
这两条路那一条都不是很方便。问题的关键在于,同步对象的句柄值只是每个进程对象表中的索引,在另一个进程中是无效的。但在线程模型下,这个问题就迎刃而解了。因为(同一进程中的)线程间共享同一张内核对象表,所以同一个同步对象的句柄对各线程来说都是有效的,传递时只要直接传句柄值就行了。
另一个比较实际的例子是字处理软件。假设现在正在编辑一篇重要文章,为了减少由于断电而造成的损失,软件被设定为每隔1分钟自动存盘一次。
如果在传统操作系统下,由于一个进程只有一个执行流,每当2分钟的间隔到达后,进程转向响应定时器软中断(在Unix下为进程收到信号,并执行信号处理过程),这样所有的处理用户输入的代码被挂起,直至磁盘读写完成,信号处理程序返回为止。如果很不幸地,文章非常长,或者用户在软盘或网络驱动器上工作,每次保存文章所花时间为50秒(如果是61秒用户就幸运了,但没人想要这样的幸运),那么用户几乎没有时间去编辑文章,这样的软件特性显然毫无用处。
若使用线程模型,则没有上述两个问题。字处理进程可以采用两个线程,前后界面线程和后台工作线程。界面线程负责响应用户输入,工作线程平进处于挂起状态,并且由主线程定时把它唤醒进行数据保存工作。这样,用户可以在几乎无察觉的情况下定时保存文档。
线程的实现
由上文的定义,线程为进程中的一个或多个指令执行流,这个机制在现代操作系统的实现主要可分为两大类。即根据操作系统内核是否对线程可感知,分为内核环境下进行多道程序设计成为可能。由于同一个进程所属的线程间共享同一地址空间,所以线程间可以能过直接传递指针来传递数据,而这在传统的进程模型下是不可能实现的。不单如此,线程间还可以共享内核对象,使得许多任务得以简化。
比如,同步对象的使用。在传统操作系统中,要将一个同步对象的句柄传递给另一个进程,有两条路可以走:通过父子进程间的继承关系(如Unix中的fork系统调用)或是通过对象命名,然后再在另一个进程中以同样的名字打开。
而所谓指令流程,实际上指的是操作系统调度占用CPU的实体,我们称之为“线程”(thread of execution)。
每个线程拥有自己的用户栈、核心栈、程序计数器等,线程与传统的进程类似,也有运行、挂起、就绪等状态,在状态间的转换也类似。但与传统进程所不同的是,线程没有独立的地址空间,所有属于同一个进程的线程共享同一个线性地址空间。
若使用异步系统调用,则需要编写一系列信号处理程序。主程序在运行时跟踪并记录当前状态,在信号出现时转到信号处理程序,处理完成后根据处理前的状态继续运行。这种方案采用的是有限状态自动机的思想,可以避免多进程操作时的同步及数据传递问题,但它使得程序变得相当复杂。
这两种办法都是可行的,但前者通讯开销比较大,后者如果运行在多CPU主机上,则无法充分利用CPU资源。
其实这些问题的本质在于两个概念:
1. 资源的分组
2. 指令的执行流程
所谓资源分组,是指操作系统以什么为最小单位给用户程序分配资源以及对这些资源进跟踪。这里提到的资源,指的是打开文件、同步对象、管道等,以及进程最重要的标志:地址空间。
在现代操作系统中,进程就是所谓的资源分配的最小单位。一个进程拥有自己独立的地址空间、内核对象表(记录打开文件、同步对象等等)、进程句柄等。
由此可知,在线程模型下,操作系统进行资源分配是以进程为单位,而当操作系统进行任务调度时,则以线程为单位进行。当然这并不是说进程和线程间没有直接关系。恰恰相反,进程与线程间的关系非常密切。线程要占用CPU执行预定任务,没有资源是不可能的完成任务的;同时,只有资源而没有指令流的进程也是没有意义的。所以结果是,一个进程至少包含一个线程(称为主线程或初始线程),而一个线程只属于一个进程。
实际上,上文所说的线程是操作系统调度的基本单位,实际上指的只是内核线程。所谓内核线程,其建立与销毁都是由操作系统负责、通过系统调用完成的。操作系统在调度时,参考各进程内的线程运行情况做出调度决定,如果一个进程中没有就绪态的线程,那么这个进程也不会被调度占用CPU。
事实上在Windows 2000中,操作系统进行调度时根本就不理采线程是属于哪个进程的,只是将所有的就绪线程统一排成若干个优先级队列,然后进行调度。在这个情况下,线程的确成了调度的最小单位,所以有时线程也被称为“轻量级进程”。
相关文档
最新文档