进程调度

操作系统面试常常问到的问题

拥有回忆 提交于 2020-03-09 23:50:56
什么是操作系统?它的功能和特征? 操作系统就是管理和控制计算机硬件和软件资源的程序,它的管理功能有: 进程管理 内存管理 文件管理 I/O管理 操作系统是用户与硬件之间的接口,也是硬件和软件之间的接口。 操作系统的四大特征: 并发:两个或多个进程在同一时间间隔内发生,注意和并行的区别。 共享:系统中的资源可供多个并发执行的进程使用。 虚拟:把一个物理实体,变为若干个逻辑上的对应物,如虚拟处理器、虚拟内存、虚拟外部设备。 异步:由于多个程序并发执行和资源有限,进程执行是走走停停的。 什么是管态和目态?为什么要区分管态和目态? 管态:特权态/系统态/核心态,处于管态的程序可以访问计算机任何资源,访问权限不受限制。通常操作系统在管态运行。 目态:常态/用户态,处于目态的程序只能执行非特权指令,不能直接使用系统资源,不能改变CPU工作状态,且只能访问本程序的存储空间。 区分管态和目态的目的:出于安全考虑,保护操作系统程序。内核程序是用户程序的管理者,需要执行一些特权指令,如I/O指令,中断指令等,特权指令不允许用户直接使用。 如何从目态切换到管态 系统调用:使用中断机制,用户态的进程通过系统调用申请使用操作系统提供的服务程序,主动要求切换到内核态。 异常:CPU运行用户态进程时,发生异常,例如缺页,则会切换到处理当前异常的内核程序中。 I/O中断:I/O设备完成用户请求的操作后

操作系统中常见算法汇总

不问归期 提交于 2020-03-08 16:07:54
一、常见作业调度(高级调度)算法 1、先来先服务调度算法(FCFS):就是按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。 2、短作业优先调度算法(SPF): 就是优先调度并处理短作业,所谓短是指作业的运行时间短。而在作业未投入运行时,并不能知道它实际的运行时间的长短,因此需要用户在提交作业时同时提交作业运行时间的估计值。 3、最高响应比优先算法(HRN):FCFS可能造成短作业用户不满,SPF可能使得长作业用户不满,于是提出HRN,选择响应比最高的作业运行。响应比=1+作业等待时间/作业处理时间。 基本概念: 作业周转时间(Ti)=完成时间(Tei)-提交时间(Tsi) 作业平均周转时间(T)=周转时间/作业个数 作业带权周转时间(Wi)=周转时间/运行时间 响应比=(等待时间+运行时间)/运行时间 4.基于优先数调度算法(HPF):每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入井调入内存处理时,优先选择优先数最高的作业。 5.均衡调度算法,即多级队列调度算法。 二、常见进程调度(低级调度)算法 1、先进先出算法(FIFO):按照进程进入就绪队列的先后次序来选择。即每当进入进程调度

操作系统CPU调度知识点

橙三吉。 提交于 2020-03-08 16:06:14
1、 进程基本概念 :进程是程序的一次运行。 是系统进程资源分配和调度的基本单位。 2、进程三态:运行状态、就绪状态、堵塞状态。三态转换规则, 就绪状态 的进程因为调度进程 运行状态 , 运行状态 因为时间片用完而进入 就绪状态 ,因为I/O请求而进入 堵塞状态 。I/O完毕后进入 就绪状态。 创建完毕直接进入 就绪状态 。等待处理机调度。 3、 挂起状态引入原因 :1)终端用户请求。2)父进程请求,3)负荷调节须要,4)操作系统须要。 原三态进一步能够分为:运行状态、活动就绪状态、精巧就绪状态、活动堵塞状态、精巧堵塞状态;处于活动态的进程因为挂起请求而进行精巧状态。 进程创建完毕可直接进入活动就绪状态和精巧就绪状态。程序运行结束就可以进入终止状态。 4、 进程控制块(PCB) :进程标识符、处理机状态、进程调度信息、进程控制信息(程序、数据、资源清单等)。PCB是进程存在的唯一标志。 5、创建进程 创建进程的可能原因:用户登录、作业调度、提供服务、应用请求等。 创建进程过程:1)申请空白PCB,2)为进程分配资源,3)初始化PCB。4)将新进程插入到就绪队列。 6、终止进程 终止进程原因:正常结束、异常结束、外界干预等。 终止进程过程:1)依据进程标识符。在PCB集合中找到目标进程,2)终止该进程的运行,3)撤销其子进程,4)归还系统资源。5)撤销PCB。 7、进程同步概念

程序、任务、进程和线程的联系与区别

大兔子大兔子 提交于 2020-03-08 10:37:56
概念: 程序(program)只是一组指令的有序集合。 任务(task)是最抽象的,是一个一般性的术语,指由软件完成的一个活动。一个任务既可以是一个进程,也可以是一个线程。简而言之,它指的是一系列共同达到某一目的的操作。例如,读取数据并将数据放入内存中。这个任务可以作为一个进程来实现,也可以作为一个线程(或作为一个中断任务)来实现。   进程(process)常常被定义为程序的执行。可以把一个进程看成是一个独立的程序,在内存中有其完备的数据空间和代码空间。一个进程所拥有的数据和变量只属于它自己。 进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。   在Mac、Windows NT等采用微内核结构的操作系统中,进程的功能发生了变化:它只是资源分配的单位,而不再是调度运行的单位。在微内核系统中,真正调度运行的基本单位是线程。因此,实现并发功能的单位是线程。   线程(tread)则是某一进程中一路单独运行的程序。也就是说,线程存在于进程之中。一个进程由一个或多个线程构成,各线程共享相同的代码和全局数据,但各有其自己的堆栈

操作系统的基本特征

ε祈祈猫儿з 提交于 2020-03-08 08:26:44
转自百度知道 https://zhidao.baidu.com/question/1493972177685493419.html 操作系统有四个基本特征 , 如下: 1.并发(concurrence) 并行性与并发性这两个概念是既相似又区别的两个概念。并行性是指两个或者多个事件在同一时刻发生,这是一个具有微观意义的概念,即在物理上这些事件是同时发生的;而并发性是指两个或者多个事件在同一时间的间隔内发生,它是一个较为宏观的概念。在多道程序环境下,并发性是指在一段时间内有多道程序在同时运行,但在单处理机的系统中,每一时刻仅能执行一道程序,故微观上这些程序是在交替执行的。 应当指出,通常的程序是静态实体,它们是不能并发执行的。为了使程序能并发执行,系统必须分别为每个程序建立进程。进程,又称任务,简单来说,是指在系统中能独立运行并作为资源分配的基本单位,它是一个活动的实体。多个进程之间可以并发执行和交换信息。一个进程在运行时需要运行时需要一定的资源,如 cpu,存储空间,及 i/o设备 等。在 操作系统 中引入进程的目的是使程序能并发执行。 2.共享 (sharing) 所谓共享是指,系统中的资源可供内存中多个并发执行的进程共同使用。由于资源的属性不同,故多个进程对资源的共享方式也不同,可以分为:互斥共享方式 和 同时访问方式 3.虚拟 (virtual)

操作系统中的调度问题

二次信任 提交于 2020-03-05 13:31:36
1、调度时机:创建新的进程后、运行进程退出时、进程因为I/o或其他原因阻塞时、发生I/o中断(完成了i/o的阻塞进程变为了就绪进程) 2、调度算法应用环境: 批处理系统,交互式系统,实时系统, 不同的系统有不同的调度策略 3、批处理系统: 先来先服务:非抢占式 当正在运行的进程被阻塞时,队列中的第一个进程就接着运行,在被阻塞的进程变为就绪时,像一个新来的作业一样,拍到队列的末尾。 优缺点:利于长作业,不利于短作业。造成处理机和I/O设备得不到充分利用。 最短作业优先:适用于运行时间可以预知的非抢占式批处理调度算法。 优缺点:有利于短作业,长作业因得不到资源饿死。 最短剩余时间优先:进程运行时间必须提前掌握,调度程序总是选择剩余运行时间最短的进程运行,抢占式调度算法。但是这种调度策略必须记录进程过去被服务的时间,增加了开销 优缺点:开销大,不利于长进程。 4、交互式系统中的调度: 时间片轮转算法:时间片设置过短,会导致过多的进程切换,降低cpu效率。如果设置太长有可能引起对短的交互请求的响应时间变长。时间片一般设置到20ms-50ms 优先级调度算法:进程的优先级与进程的紧迫度有关,分为动态优先级和静态优先级,为了防止高优先级无休止的运行下去,调度程序可以在每个时钟中断降低当前进程的优先级。如果这个动作导致该进程的优先级地狱次高优先级的进程,则进程切换。 多级队列调度算法

Linux磁盘IO调度算法

让人想犯罪 __ 提交于 2020-03-04 19:02:19
A、CFQ(完全公平排队I/O调度程序) 最新的内核版本和发行版中,都选择CFQ做为默认的I/O调度器,对于通用的服务器是最好的选择。 CFQ对于多媒体应用(video,audio)和桌面系统是最好的选择。 CFQ赋予I/O请求一个优先级,而I/O优先级请求独立于进程优先级,高优先级的进程的读写不能自动地继承高的I/O优先级。 对于很多IO压力较大的场景就并不是很适应,尤其是IO压力集中在某些进程上的场景。因为这种场景我们需要更多的满足某个或者某几个进程的IO响应速度,而不是让所有的进程公平的使用IO,比如数据库应用。 CFQ试图均匀地分布对I/O带宽的访问,避免进程被饿死并实现较低的延迟,是deadline和as调度器的折中。 CFQ工作原理: CFQ为每个进程/线程,单独创建一个队列来管理该进程所产生的请求,也就是说每个进程一个队列,每个队列按照上述规则进行merge和sort。 各队列之间的调度使用时间片来调度,以此来保证每个进程都能被很好的分配到I/O带宽,I/O调度器每次执行一个进程的4次请求。可以调queued和quantum来优化。 B、NOOP(电梯式调度程序) 在Linux 2.4或更早的版本的调度程序,那时只有这一种I/O调度算法,I/O请求被分配到队列,调度由硬件进行,只有当CPU时钟频率比较有限时进行。 Noop对所有的I/O请求都用FIFO队列形式处理

深入理解 Kubernetes 资源限制:CPU

谁说胖子不能爱 提交于 2020-03-04 09:30:14
原文地址: https://www.yangcs.net/posts/understanding-resource-limits-in-kubernetes-cpu-time/ 在关于 Kubernetes 资源限制的系列文章的 第一篇文章 中,我讨论了如何使用 ResourceRequirements 对象来设置 Pod 中容器的内存资源限制,以及如何通过容器运行时和 linux control group( cgroup )来实现这些限制。我还谈到了 Requests 和 Limits 之间的区别,其中 Requests 用于在调度时通知调度器 Pod 需要多少资源才能调度,而 Limits 用来告诉 Linux 内核什么时候你的进程可以为了清理空间而被杀死。在这篇文章中,我会继续仔细分析 CPU 资源限制。想要理解这篇文章所说的内容,不一定要先阅读上一篇文章,但我建议那些工程师和集群管理员最好还是先阅读完第一篇,以便全面掌控你的集群。 1. CPU 限制 正如我在上一篇文章中提到的, CPU 资源限制比内存资源限制更复杂,原因将在下文详述。幸运的是 CPU 资源限制和内存资源限制一样都是由 cgroup 控制的,上文中提到的思路和工具在这里同样适用,我们只需要关注他们的不同点就行了。首先,让我们将 CPU 资源限制添加到之前示例中的 yaml: resources:

Python_线程

三世轮回 提交于 2020-03-02 22:26:52
线程概念的引入背景 进程   之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。 有了进程为什么要有线程   进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率。很多人就不理解了,既然进程这么优秀,为什么还要线程呢?其实,仔细观察就会发现进程还是有很多缺陷的,主要体现在两点上: 进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了。 进程在执行的过程中如果阻塞,例如等待输入,整个进程就会挂起,即使进程中有些工作不依赖于输入的数据,也将无法执行。   如果这两个缺点理解比较困难的话,举个现实的例子也许你就清楚了:如果把我们上课的过程看成一个进程的话,那么我们要做的是耳朵听老师讲课,手上还要记笔记,脑子还要思考问题,这样才能高效的完成听课的任务。而如果只提供进程这个机制的话

kubernetes容器编排系统介绍

a 夏天 提交于 2020-02-29 09:13:45
版权声明:本文由turboxu原创文章,转载请注明出处: 文章原文链接: https://www.qcloud.com/community/article/152 来源:腾云阁 https://www.qcloud.com/community Kubernetes作为容器编排生态圈中重要一员,是Google大规模容器管理系统borg的开源版本实现,吸收借鉴了google过去十年间在生产环境上所学到的经验与教训。 Kubernetes提供应用部署、维护、 扩展机制等功能,利用Kubernetes能方便地管理跨机器运行容器化的应用。当前Kubernetes支持GCE、vShpere、CoreOS、OpenShift、Azure等平台,除此之外,也可以直接运行在物理机上.kubernetes是一个开放的容器调度管理平台,不限定任何一种言语,支持java/C++/go/python等各类应用程序 。 kubernetes是一个完备的分布式系统支持平台,支持多层安全防护、准入机制、多租户应用支撑、透明的服务注册、服务发现、内建负载均衡、强大的故障发现和自我修复机制、服务滚动升级和在线扩容、可扩展的资源自动调度机制、多粒度的资源配额管理能力,完善的管理工具,包括开发、测试、部署、运维监控,一站式的完备的分布式系统开发和支撑平台。 一. 系统架构