搜索

实现进程的切换

gecimao 发表于 2019-05-25 23:19 | 查看: | 回复:

  直接执行的下一个问题是在进程之间实现切换。在进程之间切换应该很简单,对吗?操作系统应该决定停止一个进程,启动另一个进程。有什么大不了的?但是它实际上有点棘手:具体来说,如果一个进程在CPU上运行,那么根据定义,这意味着操作系统不会运行。如果操作系统没有运行,它怎么能做任何事情呢?(提示:它不能)虽然这听起来很有哲理,但这是一个真正的问题:如果操作系统没有在CPU上运行,操作系统显然没有办法采取行动。

  一些系统在过去采用的一种方法(例如,Macintosh操作系统的早期版本[M11],或旧的施乐Alto系统[A79])被称为合作方法。

  运行时间过长的进程假定会周期性地放弃CPU,以便操作系统能够决定运行其他任务。

  因此,您可能会问,一个友好的过程是如何在这个乌托邦世界中放弃CPU的?大多数进程,如它所证明的那样,通过使系统调用(例如,打开一个文件并随后读取它)或向另一台机器发送消息,或创建一个新进程,来频繁地将CPU的控制转移到操作系统。

  像这样的系统通常包括一个显式的yield系统调用,它除了将控制转移到操作系统之外什么都不做,这样它就可以运行其他进程。

  例如,如果一个应用程序划分为零,或者试图访问它不应该访问的内存,它将会给操作系统生成一个陷阱。然后,操作系统将再次控制CPU(并可能终止违规的进程)。

  因此,在合作调度系统中,操作系统通过等待系统调用或某种类型的非法操作来重新控制CPU。你可能也在想:这种被动的方法是不是不够理想?例如,如果一个进程(不管是恶意的,还是充满bug的)在一个无限循环中结束,并且从来没有进行系统调用,会发生什么情况呢?那么操作系统能做什么呢?

  如果没有硬件的额外帮助,当一个进程拒绝进行系统调用(或错误)并将控制权返回给操作系统时,操作系统就不能做很多事情。事实上,在合作的方法中,当进程陷入无限循环时,唯一的方法就是求助于解决计算机系统中所有问题的古老解决方案:重新启动机器。因此,我们再次来到了一个子问题,我们的总体任务是获得对CPU的控制。如何在不合作的情况下获得控制权?即使进程不合作,操作系统如何能控制CPU ?操作系统能做些什么来确保一个流氓程序不接管机器?

  使用定时器中断重获控制。添加一个计时器中断使操作系统能够在CPU上再次运行,即使进程以不合作的方式运行。因此,这种硬件特性对于帮助操作系统维护机器的控制至关重要。答案其实很简单,很多年前就有很多人在计算机系统中发现了这个问题:计时器中断[M+63]。一个计时器装置可以被设定为每隔几毫秒就触发一次中断;在提出中断时,当前正在运行的进程被停止,操作系统中一个预先配置的中断处理程序运行。此时,操作系统已经重新控制了CPU,因此可以做它想做的事情:停止当前进程,启动另一个进程。正如我们在系统调用之前讨论过的,操作系统必须通知硬件,当计时器中断发生时,要运行哪些代码;因此,在引导时,操作系统正是这样做的。其次,在引导序列中,OS必须启动计时器,这当然是一个特权操作。一旦计时器开始,操作系统就会在控制中感到安全,最终会返回给它,这样操作系统就可以自由运行用户程序了。计时器也可以关闭(也是一个特权操作),当我们更详细地了解并发时,我们将讨论这个问题。请注意,当中断发生时,硬件有一些责任,特别是当中断发生时运行的程序的状态保存足够多,这样,随后的refromtrap指令将能够正确地恢复运行程序。这组操作与在一个显式的系统调用陷阱中对内核的行为非常类似,它使用不同的寄存器来保存(例如,在内核堆栈上),从而可以很容易地通过rereturn -from-trap指令恢复。

  现在操作系统已经重新获得了控制,无论是通过系统调用进行合作,还是通过计时器中断进行更有力的调用,都必须做出一个决定:是否继续运行当前运行的进程,或者切换到另一个进程。这个决策是由称为调度器的操作系统的一部分做出的;我们将在接下来的几章中详细讨论调度策略。如果决定切换,操作系统就会执行一个低级的代码段,我们称之为上下文切换。上下文切换在概念上很简单:所有操作系统都要做的是为当前执行的进程保存一些寄存器值(例如,在它的内核堆栈上),并为即将执行的进程(从内核堆栈中)恢复一些值。:通过这样做,操作系统就可以确保当重新设置陷阱时,指令最终被执行,而不是返回正在运行的进程,系统继续执行另一个进程的执行。

  为了保存当前运行过程的上下文,操作系统将执行一些低级的汇编代码来保存通用寄存器、PC以及当前运行的进程的内核堆栈指针,然后恢复表示寄存器、PC,并切换到即将执行的进程的内核堆栈。通过切换堆栈,内核在一个进程(被中断的进程)的上下文中输入转换代码的调用,并在另一个进程的上下文中返回(即将执行的一个)。当操作系统最后执行一个返回-陷阱指令时,即将执行的流程将成为当前运行的流程。这样,上下文切换就完成了。整个流程的时间表如图6.3所示。在本例中,进程A正在运行,然后被计时器中断打断。硬件将寄存器保存(在内核堆栈上)并进入内核(切换到内核模式)。在定时器中断处理程序中,操作系统决定从运行进程A切换到进程B。在这一点上,它调用switch()例程,它仔细地保存当前寄存器值(进入A的流程结构),重新存储过程B的寄存器(从它的流程结构条目),然后切换上下文。特别是通过改变,堆栈指针使用B的内核堆栈(而不是s)。最后,操作系统的returnsfrom-trap,它恢复了B的寄存器并开始运行它。注意,在此协议中有两种类型的寄存器保存/恢复。注意,在此协议中有两种类型的寄存器保存/恢复。第一个是当计时器中断发生时;在这种情况下,使用该进程的内核堆栈,硬件将隐式地保存正在运行的进程的用户寄存器。第二个是操作系统决定从A切换到B;在这种情况下,内核寄存器是由软件显式地保存的(也就是。,但这一次进入内存的过程结构的过程。后一种操作将系统从运行中移动,就好像它只是被困在内核中一样。为了让您更好地了解这种转换是如何实现的,图6.4显示了xv6的上下文切换代码。看看您是否能理解它(您将需要了解一些x86,以及一些xv6)。新旧工艺流程结构中发现了新旧过程结构。

  为了让您更好地了解这种转换是如何实现的,图6.4显示了xv6的上下文切换代码。看看您是否能理解它(您将需要了解一些x86,以及一些xv6)。新旧工艺流程结构中发现了新旧过程结构。你们中的一些人,作为细心体贴的读者,现在可能会想:嗯……在一个系统调用中,当一个计时器运行时,会发生什么?当你处理一个中断,另一个中断时会发生什么?在内核中这很难处理吗?好问题,我们真的对你有一些希望。答案是肯定的,操作系统确实需要关注在中断或陷阱处理过程中发生的另一个中断。事实上,这是这本书的第二部分,关于并发性的确切主题;我们将把详细的讨论推迟到那时候。了满足您的需求,我们将简要介绍操作系统如何处理这些棘手的情况。操作系统可能做的一件简单的事情是在中断处理过程中禁用中断;这样做可以确保在处理一个中断时,没有其他的中断被交付给CPU。当然,操作系统必须要小心;中断太长时间的中断会导致中断,这是(在技术方面)是坏的。操作系统还开发了许多复杂的锁定方案,以保护对内部数据结构的并发访问。这使多个活动能够同时在内核中运行,在多处理器上尤其有用。但是,正如我们在下一篇关于并发性的书中所看到的那样,这种锁定可能会很复杂,并导致各种有趣而难以发现的错误。

  我们已经描述了实现CPU虚拟化的一些关键的底层机制,这是一组我们统称为有限直接执行的技术。基本的想法很简单:只要运行你想在CPU上运行的程序,但是首先要确保设置硬件,以限制在没有OS帮助的情况下进程可以做什么。

  在现实生活中也有这种普遍的方法。例如,那些有孩子的人,或者至少听说过孩子的人,可能对婴儿打样的概念很熟悉:锁住装有危险物品的柜子和覆盖电源插座。当房间如此之大时,你可以让你的宝宝自由自在地漫游,让你知道房间里最危险的部分已经被限制了。在类似的方式中,OS婴儿对CPU进行验证,首先(在引导期间)设置陷阱处理程序并启动一个中断计时器,然后只在受限模式下运行进程。通过这样做,操作系统可以确信流程可以高效运行,只需要操作系统干预来执行特权操作,或者当它们占用CPU时间太长,因此需要关闭。因此,我们有了对CPU进行虚拟化的基本机制。但是一个主要的问题是没有回答的:我们应该在给定的时间运行哪个进程?这个问题是调度程序必须回答的问题,因此是我们研究的下一个主题。

  如题:一个是主线程,另一个是子线程。 如果子线程自己运行完了,是否会自己自行结束?还是需要主线程特意去关闭它?论坛

  vc++(2005)中如何实现切换到其它程序 比如按下button切换到其它进程,或者相当向系统发送一个alt+tab的信息?论坛

  进程切换分两步1.切换页目录以使用新的地址空间2.切换内核栈和硬件上下文。对于linux来说,线程和进程的最大区别就在于地址空间。对于线是进程和线程切换都要做的。所以明...博文来自:Alan_Xiang的博客

  并不是所有的中断/异常都会引发进程切换。博文来自:shadow2512的博客

  版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明思考:     在cfs就绪队...博文来自:origin_lee的专栏

  硬件上下文概念尽管每个进程都可以拥有属于自己的地址空间,但所有进程必须共享CPU寄存器。因此在,在恢复一个进程执行之前,内核必须确保每个寄存器装入了挂起进程时的值。而这些必须装入的寄存器中的数据就称为...博文来自:GetnextWindow的专栏

  孙业毅原创作品转载请注明出处《Linux内核分析》MOOC课程:第八讲 进程的切换和系统的一般执行过程 ...博文来自:这次第,怎一个爽字了得

  谁在调用schedule进行该进程的调度:   进程在运行中,会有几种情况发生中断,第一就是在时钟中断,进入中断处理程序,调用schedule,第二返回用户空间的时候ret_from_sys_call...博文来自:Learning_zhang的博客

  本文描述linuxx86的进程切换实现原理,叙述了寄存器、堆栈的备份与恢复操作。Intel设计的意图是通过硬件方式切换进程,但是linux并没有使用这种方式,而是使用了软件方式,文章对这两种方式分别做...博文来自:geshifei的博客

  本文将通过一段精简的linux内核代码,mykernel代码,从进程的启动到进程的切换之间发生了什么,cpu和操作系统做了什么,简单地聊一下。...博文来自:lxbql121的专栏

  宫玄,原创作品转载请注明出处,《Linux内核分析》MOOC课程初始化0号进程*/ task[pi...博文来自:gongxuan92的专栏

  想记下点专业方面的知识,但又感觉难以组织好语言,因为不想出现很多名词错误,也想讲得清楚一点,要做到这点的话,还要回去翻之前看过的书,或者要去做好搜索确认。然而并不是很有时间做这些。还是泛泛地说一下吧,...博文来自:AwayIsBlue

  一:进程-线程-协程简介进程和线程的主要区别是:进程独享地址空间和资源,线程则共享地址空间和资源,多线程就是多栈。进程调度,切换进程上下文,包括分配的内存,包括数据段,附加段,堆栈段,代码段,以及一些...博文来自:runner668的博客

  用户使用计算机就是启动了一堆进程;用户管理计算机就是管理这一堆进程操作系统如何组织多个进程即根据PCB、根据状态形成不同的队列放在不同的位置。多个进程如何组织呢?用PCB放在不同的队列中(就绪、阻塞)...博文来自:swjtuzbko的专栏

  程 序 原创作品转载请注明出处 《Linux内核分析》MOOC课程今天我们要学习的是Linux中进...博文来自:p222p的博客

  1.首先,需要搞明白什么是上下文切换?(面试题)上下文切换就是从当前执行任务切换到另一个任务执行的过程。但是,为了确保下次能从正确的位置继续执行,在切换之前,会保存上一个任务的状态。2.然后,需要明白...博文来自:温暖不了你的心的博客

  引文:进程是操作系统最重要的基础知识之一,本文基于linux0.11内核,重点介绍进程的实现原理以及分析进程间的调度问题。problem:Linux内核是如何初始化操作系统,并开始运行第一个程序呢?我...博文来自:Demon-初来驾到

  进程进程就是正在执行的程序。包括程序计数器(PC),寄存器,变量的当前值等。从数据结构上来说,包括代码段(Text),数据段(Data,存储静态变量和全局变量)和堆栈段。在逻辑上,每个进程都运行在自己...博文来自:crazy_scott的博客

  多进程关键字开启进程的俩种方式进程之间的内存空间是隔离的进程中的join方法使用进程对象的其它属性和方法守护进程的使用进程的互斥锁进程实现队列生产者和消费者模型多线程使用多线程实现tcp并发开启线程的...博文来自:kismile

  一、前言进程切换是一个复杂的过程,本文不准备详细描述整个进程切换的方...博文来自:zdy0_2004的专栏

  进程切换中由于需要保存当前进程的寄存器状态信息,又要将新进程记录的寄存器状态信息加载到寄存器,因此涉及到许多栈的操作,堆栈间的来回切换,容易让人眼花缭乱,难以理解。本文试图分析以下xv6中的进程切换过...博文来自:Swartz2015的专栏

  之前因为工作忙,好长时间没更了。这次把进程切换里面的寄存器上下文切换详细的说一下吧。感觉有必要先码几行代码,这样好说//任务的寄存器上下文数据结构/**在内存里面的数据结构为*0x00000000[e...博文来自:tljqis的专栏

  多任务操作系统在并行执行多任务时,实际上是不断地在任务间进行切换的,也就是切换上文。首先要保存前一个进程的上下文,然后调度一个就绪的进程,并载入该进程的上下文,cpu开始执行该进程的代码。在切换上下文...博文来自:王建新的博客

  线程及切换线程:比进程更轻的动态执行序列,同一进程中的多个线程可以共享资源(内存),故线程间的切换相比进程更加快速、方便。线程的切换:是指令之间的切换,从一段执行序列(程序)切换到另一段执行序列(程序...博文来自:swjtuzbko的专栏

  从系统调用或者异常中断返回用户空间时,thread_flags被设置成TIF_NEED_RESCHED会发生调度,当然还有其他几个时机也会发生调度,这里主要介绍中断返回用户空间时的情况。linux-4...博文来自:xiongtiancheng的博客

  进程是资源拥有的单位。线程是调度的最小单位。又称为轻进程。他只拥有进程中一些资源,这次资源对于这个线程来说是必不可少的。而所有的线程共享进程的资源。因此不同的线程之间可以共享一些数据变量。而进程则不可...博文来自:sunxiaopengsun的专栏

  1、执行进程切换从本质上说,每个进程切换由两步组成:发生在schedule()函数切换页全局录以安装一个新的地址空间;切换内核态堆栈和硬件上下文,因为硬件上下文提供了内核执行新进程所需要的所有信息,包...博文来自:Watson2016的博客

  linux操作系统如果是进程占据了cpu的运行空间,那么是由什么模块控制进程的状态,并且控制进程之间的切换?...博文来自:weixin_42095844的博客

  一、前言本文主要是以context_switch为起点,分析了整个...博文来自:zdy0_2004的专栏

  一、用户级线程如何只切换指令,而资源不动?——线程切换+映射表切换=进程切换(在内存管理之后讲),先搞懂线程切换,再做进程切换线程切换即只切换指令序列(即只有PC变化和寄存器变化),而其他资源不进行变...博文来自:kyang_823的博客

  一、Linux进程调度时机主要有:(1)主动调度:进程的运行状态发生变化时,例如等待某些事件而进入睡眠态;设备驱动程序    主动调度随时都可以进行,一个进程可以调用schedule()启动一次调度。...博文来自:CLP的博客

  [转]体系结构包括了一个特殊的段类型,叫任务状态段(TSS),如图5.4所示。每个任务...博文来自:nodeathphoenix的专栏

  用户态进程陷入内核态的几种方式(与进程调度相关)发生系统调用时钟中断etc…现场恢复首先理解一个关于cpu常识:cpu执行代码时候的指令地址由寄存器eip决定,eip里面存储了下一条指令的地址。cpu...博文来自:shq_yang的博客

  进程切换分两步:1.切换页目录以使用新的地址空间2.切换内核栈和硬件上下文对于linux来说,线程和进程的最大区别就在于地址...博文来自:c_雨山的博客

  进程调用的时机自愿调度:用户进程自愿发生调度,如用户进程调用wait4()和exit()时,内核进程调用schedule()函数发生调度(schedule()只有内核线程才能调用)。非自愿调度:当发生...博文来自:WCLEndless的博客

  操作系统的进程管理软件关键的进程管理软件包括:•系统调用/中断/异常处理程序•队列管理模块•进程控制程序•进程调度程序(独立进程居多)•进程通信程序(多个程序包)•终端登录与作业控制程序、性能监控程序...博文来自:小小柴的博客

  1、启动时命令+amp;使命令在后台运行2、已经在前台运行的程序①ctrl+z暂停进程,放到后台。②通过命令jobs查询作业编号。③通过命令bg%1(作业编号)将指定程序放到后台运行4通过命...博文来自:的博客

  基于内核栈切换的进程切换难度系数:★★★★☆实验目的深入理解进程和进程切换的概念;综合应用进程、CPU管理、PCB、LDT、内核栈、内核态等知识解决实际问题;开始建立系统认识。实验内容现在的Linux...博文来自:Watson2016的博客

  1进程进程是程序执行时的一个实例,可以把它看作充分描述程序已经执行到何种程度的数据结构的汇集。从内核的观点看,进程的目的是担当分配系统资源(CPU时间,内存等)的实体。(早期的系统中)当一个进程创建时...博文来自:面团的专栏

  隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价...博文来自:dragon的专栏

  连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为...博文来自:Napoleon的专栏

  ATSHA204A加密芯片是ATMEL公司研发的一款高安全性的,功能丰富的加密IC,使用SHA-256算法进行加密操作,内置16*32字节的slot(EEPROM)可以存储用户数据和秘钥,唯一的9字节...博文来自:a5882230的专栏

  一个例子高斯混合模型(Gaussian Mixed Model)指的是多个高斯分布函数的线性组合,理论上GMM可以拟合出任意类型的分布,通常用于解决同一集合下的数据包含多个不同的分布的情况(或者是同一...博文来自:小平子的专栏

  利用CRC32绕过RAR密码(适合于小文本文件)原文标题:教你绕过rar密码 文章仅作rar密码破解的探讨,如有高见还望提出。 题目有点夸大其词,事实是我也没能想出一个更好的描述来总结这篇文...博文来自:林毅洋

  一、适用场景内存属于稀缺资源,不能随意浪费。如果在一个系统中有很多个完全相同或相似的对象,我们就可以使用享元模式,让他们共享一份内存即可,不必每个都去实例化对象,从而节省内存空间。二、模式核心 享...博文来自:小小本科生成长之路

  原文地址:因为需要用,所以才翻译了这个文档。但总归赖于英语水平很有限,翻译出来的中文有可能...博文来自:ymj7150697的专栏

  相信学习编程的同学,或多或少都接触到算法的时间复杂度和空间复杂度了,那我来讲讲怎么计算。        常用的算法的时间复杂度和空间复杂度 一,求解算法的时间复杂度,其具体步骤是: ⑴ 找出算法...博文来自:杨威的博客

  转载请说明原出处,谢谢~~   第三个没有做的是每个显示的背景图的小图的动态外观,原酷狗的背景图的小图标,有normal、hover、down等 多种状态,如图  ...博文来自:Redrain的专栏

  转载请注明出处:     在上一篇blog中介绍过POI检索的使用,本篇blog主要介绍公交信息检索和线路规划的内容。 公交信息检索     实际上,公交信息检索与POI检索、在线建议检索非常相似,也...

  一、前言最近由于研究需要,要用到线性判别分析(LDA)。于是找了很多资料来看,结果发现大部分讲的都是理论知识,因此最后还是看的一知半解,后来终于找到了个英文的文档,作者由PCA引入LDA,看过后豁然开...

  1.当我们发现无法联网时,我们运行下面命令或者ping命令 ip  addr 结果没有显示局域网的IP地址 2.我们去修改网卡配置文件,把网络连接打开 cd / cd  /etc/sys...

  本文简单模仿微信朋友圈的点赞和评论弹出框,布局等细节请忽略,着重实现弹出框、发评论,及弹出位置的控制。...

  在最近的项目开发中涉及到一个伴奏和类似K歌的功能,最明显的做法就是将播放器里播放的声音扑捉到缓冲区里与麦克风的声音做混合,然后编码发送出去。这里有个关键环节就是混音。因为是音乐类的声音混合,所以要求尽...

  单机最大的TCP连接数及其修改 一个误解: 单个服务器程序可承受最大连接数“理论”上是“65535” .    65535这个数字的由来,很多人想当然地将它与port最大值联系起来。的确,TCP的...

  田发江的专栏微信支付V3微信公众号支付PHP教程(thinkPHP5公众号支付)/JSSDK的使用

  扫二维码关注,获取更多技术分享 本文承接之前发布的博客《 微信支付V3微信公众号支付PHP教程/thinkPHP5公众号支付》必须阅读上篇文章后才可以阅读这篇文章。由于最近一段时间工作比较忙,...

  jquery/js实现一个网页同时调用多个倒计时(最新的)11-25阅读数 51万+

  深入理解在Android中线天的凌晨时光,这段时间收获很多.(2)从整理文章,作者从线程--阻塞队列--二进制--线程池的内部机制,一路走来,本来是想写一篇为AsyncTask...博文来自:我一直很棒,这个不用质疑

  1、点击打开遮罩层按钮 2、弹出一个隐藏的div 实现代码如下: 影音先锋 -- ...博文来自:简单就是美

  PHP如何获取刚插入数据的ID 和判断SQL语句是否成功执行博文来自:coder_zyz的专栏

  强连通分量: 简言之 就是找环(每条边只走一次,两两可达) 孤立的一个点也是一个连通分量   使用tarjan算法 在嵌套的多个环中优先得到最大环( 最小环就是每个孤立点)   定义: int Ti...博文来自:九野的博客

  command窗口是命令窗口,即为sqplus窗口,有命令提示符,识别sqlplus命令,基本的命令都可以执行 sql仅可执行DDL、select、DML等...博文来自:Ape55的博客

  在MATLAB中,可以注释一段程序。 使用“%{”和“%}”。 例如 %{ 。。。 %} 即可。 经典方法是用 if 0,但缺点是不够直观,注释掉的内容仍然保持代码的颜色。现在可以用 ...博文来自:知识小屋

  自己整理编写的逻辑回归模板,作为学习笔记记录分享。数据集用的是14个自变量Xi,一个因变量Y的australian数据集。 1. 测试集和训练集3、7分组 australian ...博文来自:Tiaaaaa的博客

本文链接:http://windsorflowers.net/dijihuchi/236.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部