进程调度(I/O消耗型进程和处理器消耗型进程)

多任务操作系统

操作系统提供了虚拟处理器的机制,虚拟处理器给进程一种假象,让进程觉得自己是在独占CPU。操作系统内核必须通过合理的进程调度从而保证这种假象,这样操作系统资源才能得到最大的利用率。

正是这种虚拟处理器的机制,使得操作系统能够同时执行多种任务,所以现在的操作系统都是多任务操作系统。

  多任务操作系统分为非抢占式多任务操作系统和抢占式多任务操作系统,现代的操作系统都是抢占式多任务操作系统。

除了虚拟处理器的机制外,进程控制块(PCB)也是使得操作系统能够并发的关键。因为在进程切换时,进程控制块能够保存当前处理器的上下文,使得该进程下次被调度时,能够从上次停止的地方继续运行。

I/O消耗型进程和处理器消耗型进程

I/O消耗型进程:程序运行时的大部分时间都在提交或者等待I/O请求,因此这样的进程要经常处于运行状态,但通常都是短短的一会儿,所以处理器倾向于优先调度I/O消耗型的进程。该类进程优先级高,时间片长。

  可能大家会有疑问,进程在等待I/O时,不是会被阻塞吗,然后在用户完成I/O后会中断CPU唤醒该进程处理I/O吗?那为什么还要优先调度该类进程呢?有这个疑问是因为我们看待问题的角度错了,I/O消耗型进程也是会消耗处理器的,只不过消耗的不是很多罢了,而优先调度该类进程是为了让该类进程是为了尽可能地消耗其所需要的处理器资源,从而让该进程阻塞住,这样只要用户一完成I/O操作,该进程就会被唤醒,从而立刻处理I/O操作,那么在用户看来,该进程响应非常快,体现出了很好的用户友好性。

处理器消耗型进程:该类进程在把时间都发在了执行代码上,即在该进程执行期间,马不停蹄的使用处理器资源。所以除非被抢占,否则它们通常都一直不停地运行,因此从系统响应速度考虑,调度器不应该经常让它们运行。该类进程优先级低,时间边短。

  可能大家又要有疑问了,该类进程消耗的是处理器资源,为什么优先级低,时间片短,为什么不去经常调度它们呢,这样子它们就会被尽快执行完。我们从下面两个角度来分析。

1)如果处理器消耗型进程的优先级高,时间片长,那么它就是实打实地消耗完它的时间片后,系统才会为其他低优先级的进程服务

2)而如果I/O消耗型进程的优先级高,时间片长,则因为频繁的IO操作并等待完成,需要处理器处理的时间其实很少,这样系统会自动将其等待的时间片分配给其他需要服务的进程

显然2更合理,不只让I/O消耗型进程的响应速度更快,而且让其它进程不用等太久就会被再次调度到。

该文章在我的个人博客的地址:http://www.alphaway.org/post-416.html

参考:

Linux中 I/O 消耗型和处理器消耗型的矛盾问题

处理器更优先于调度I/O消耗型进程?

时间: 2024-08-26 06:44:30

进程调度(I/O消耗型进程和处理器消耗型进程)的相关文章

进程的描述与进程的创建

阅读理解task_struct数据结构,它包含了 进程状态.运行时间.调度信息.进程的通讯状况.task_struct型链表连接指针 .标号,决定改进程归属.可以读写打开的一些文件信息.进程上下文和内核上下文.处理器上下文.内存信息等 struct task_struct { volatile long state; 状态信息 unsigned long flags; //进程号,在调用fork()时给出 int sigpending; //进程上是否有待处理的信号 mm_segment_t a

Linux内核分析之六——进程的描述与进程的创建

作者:姚开健 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 进程的描述 Linux系统的进程由一个进程描述符PCB,即task_struct结构体来描述,其在内核中代码实现如下: struct task_struct { 1236 volatile long state; /* -1 unrunnable, 0 runnable, >0 stopped */ 1237 void

Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度(五)

日期 内核版本 架构 作者 GitHub CSDN 2016-05-12 Linux-4.5 X86 & arm gatieme LinuxDeviceDrivers Linux进程管理与调度-之-进程的创建 前言 Linux下有3个特殊的进程,idle进程(PID = 0), init进程(PID = 1)和kthreadd(PID = 2) * idle进程由系统自动创建, 运行在内核态 idle进程其pid=0,其前身是系统创建的第一个进程,也是唯一一个没有通过fork或者kernel_t

windowsf进程管理器中进程解释

(1)[system Idle Process] 进程文件: [system process] or [system process] 进程名称: Windows内存处理系统进程 描 述: Windows页面内存管理进程,拥有0级优先. 介 绍:该进程作为单线程运行在每个处理器上,并在系统不处理其他线程的时候分派处理器的时间.它的cpu占用率越大表示可供分配的CPU资源越多,数字越小则表示CPU资源紧张. (2)[alg.exe] 进程文件: alg or alg.exe 进程名称: 应用层网关

第六节 进程的描述和进程的创建

第六周 进程的描述和进程的创建 By 20135217 孙小博 本周的主要内容: 如何描述一个进程:进程描述符的数据结构: 如何创建一个进程:内核是如何执行的,以及新创建的进程从哪里开始执行: 使用gdb跟踪新进程的创建过程. 进程的描述 操作系统三大功能: 进程管理(最核心最基础) 内存管理 文件系统 进程描述符task_struct数据结构 task _ struct:为了管理进程,内核必须对每个进程进行清晰的描述,进程描述符提供了内核所需了解的进程信息.struct task_struct

Linux进程实践(1) --Linux进程编程概述

进程 VS. 程序 什么是程序? 程序是完成特定任务的一系列指令集合. 什么是进程? [1]从用户的角度来看:进程是程序的一次执行过程 [2]从操作系统的核心来看:进程是操作系统分配的内存.CPU时间片等资源的基本单位. [3]进程是资源分配的最小单位 [4]每一个进程都有自己独立的地址空间与执行状态. [5]像UNIX这样的多任务操作系统能够让许多程序同时运行,每一个运行着的程序就构成了一个进程 进程数据结构 进程由三部分组成:PCB.程序段和数据段. 进程控制块PCB:用于描述进程情况及控制

通过简单的时间片轮转多道程序分析进程的启动和进程的切换机制

备注:秋风 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 1.配置好环境之后,使用qemu模拟器启动内核,运行效果如下: 2.实现时间片轮转多道程序调度的源码: mymain.c /*  *  linux/mykernel/mymain.c  *  *  Kernel internal my_start_kernel  *  *  Copyright (C) 2013  Men

进程控制(一)---PCB(进程控制块)

 进程是对程序的动态描述,是操作系统进行资源分配的最小单位(线程是操作系统执行实体的最小单位). 对于多道程序系统来说,其内存中可能存在着很多个进程,为了方便管理这些进程,操作系统内核为每个被创建的进程都建立一个结构体来保存与其相关的信息.这个结构体就是PCB,也就是进程控制块,进程控制块存在于进程的高 1 G空间,也就是内核空间中.在具体linux内核实现中,使用一个名为task_struct的结构体来描述的,在内核/include/linux/sched.h头文件中有具体定义. 操作系统组织

[linux]进程(四)——进程的创建

11,进程的创建 linux的进程创建可以分为两个步骤,分别为fork()和exec()函数,fork()负责创建一个子进程,和父进程的差别仅仅是PID PPID以及一些统计量,exec()函数负责读取可执行文件载入地址空间运行. fork()函数原型 pid_t fork(void); 子进程返回0,父进程返回子进程的PID,fork()函数一次创建两次返回. fork()函数的实现fork()采用了写时拷贝(copy-on-write)的技术,刚创建子进程的时候父进程和子进程拥有相同的地址空