1、任务管理

1、任务(Task)是处理器可以分配、调度、执行和挂起的一个工作单元。它可用于执行程序、任务或进程、操作系统服务、中断或异常处理过程和内核代码。

2、任务管理包括任务状态迁移、任务控制块、内核中各种队列、调度算法和内核时钟等内容。在内核的设计过程中,最先应考虑的是任务的状态以及迁移时序,然后根据此状态设计相应的队列,如就绪队列、等待队列等。内核时钟也依赖任务的状态。可以看出,任务管理实现的核心和基础是任务状态和迁移时序。

3、任务管理基本指令

单次任务(job): 只执行一次.

at

编辑任务

关机命令 sudo

poweroff

创建成功之后, 会返回一个job ID.

atq

查询任务

用该命令查询指定ID的job, 或者不指定job id, 查看job. 注意,

如果想要查询

一 个管理员权限才能执行的job,

那么运行atq命令时, 也需要使用sudo的.

atrm 删除任务

使用该命令, 删除指定id的job.

周期任务: 每到一定的周期, 就会重复执行.

crontab –e

对应at命令, 编辑任务. 该命令中tab实际是table的一个简写.

# m

h dom mon dow command

注意, #代表注释, dom= day of month, dow= day of

week, mon= month

15 1

* * 1-5 /home/user1/backpup.sh

该命令指定不论月中的哪一天,

不论哪个月,

只要是礼拜一到礼拜五,

在凌晨1点15分,

都要执行/home/user1/backup.sh这个命令. backup.sh里包含需要执行的脚本.

注意, 在GNU nano文本编辑器中, ^X代表键入Ctrl +

X, 该选项用于推出.

crontab –l 对应atq命令, 查询任务.

该命令用来查询已经设定好的周期性任务.

crontab –r

对应atrm命令, 删除任务.

该命令用来删除设定好的周期性任务.

/etc/init.d/cron

start|stop|restart|status

deamon程序相当于SharePoint中的Timer Job.

不同的用户执行的是不同用户空间中的任务.

彼此区别.

2、任务调度

1.

任务调度概述: 任务调度(schedulers)是内核的主要职责,实际上它就是一个法官,决定当前由哪个任务占用CPU,多数实时内核都是基于优先级调度算法的,每个任务根据其重要程度的不同被赋予一定的优先级。基于此算法,CPU总是让处于就绪而且优先级最高的任务优先运行,然而何时高优先级任务能够得到CPU使用权,由内核的类型而定。

基于优先级的内核有两种:不可抢占型和抢占型。1) 不可抢占型内核:

不可抢占型内核要求每个任务主动放弃CPU的使用权,其间不能被高优先级任务抢占。它的有点是:A. 由于不需要在中断返回是进行任务切换,所以中断响应快。B. 在任务级中可以调用不可重入函数而不必担心造成数据破坏。C. 几乎不需要信号量来保护共享数据,也就是说,在任务运行过程中,数据是独享的。但它的最大缺点是:响应时间不确定,当有更高优先级任务就绪后,不知道什么时候才能得到执行,这在实时系统中是致命的缺陷。所以不可抢占型内核最要用于前后台系统中。2) 抢占型内核:

在嵌入式系统中,进程(任务)都是抢占型的,通过给每个进程(任务)设置一个优先级,当系统中有优先级比当前运行的进程(任务)的优先级更高的进程(任务)时,当前的进程(任务)执行被中断,并调用调度程序选择优先级高的进程(任务)运行。利用抢占式内核,可以保证高优先级的进程(任务)被优先执行,从而保证系统的实时响应。

2.

调度算法: 在Linux系统中,选用了比较复杂的调度算法,按照调度类型可以分为以下几种:SCHED_FIFO:此算法主要应用于实时进程,当调度程序把CPU分配给当前进程后,如果没有更高优先级的进程可以运行时,此进程会一直占用CPU直到此进程退出或者自愿放弃CPU,即使此时有其他相同优先级的进程存在。SCHED_RR:时间片轮询的实时进程,对于不同优先级的进程会调度优先级高的进程运行,对具有相同优先级的进程,会根据时间片来调度,当当前进程的时间片用完后,会调度相同优先级的其他进程运行,从而保证相同优先级进程的CPU调度公平性。SCHED_NORMAL:此算法主要用于普通进程,利用分时进行调度。在UCOS系统中,所有的任务都是实时任务,所以没有普通任务调度机制,而且为了简化调度算法,不同的任务有不同的优先级,不可能出现同一优先级有多个任务的情况,实际上它的调度算法就只有Linux中SCHED_FIFO这一种,即优先级高的任务抢占优先级低任务。

3、何时调度?

(何时被调用schedule())

1)直接主动调用

2)

活动进程进入睡眠

3)

设置need_resched.当从内核态返回用户态时检测这个位,如果为1,则调度schedule().

以下三种情况会设置need_schedule

a. 时钟中断服务程序中,用完自己的时间片

b. 当唤醒一个睡眠进程时,该进程有更高优先级

c. 一个进程改变了调度策略,优先级等。

4、何时抢占?

用户抢占

1.当从系统调用返回到用户态

2.从中断程序返回到用户态。

内核抢占

2.6版本的内核是可以抢占的。

1. 从中断返回内核时,若内核不拥有锁,则可被抢占。若拥有锁,则不可抢占。这是内核通过preempt_count变量来判断的。

2. 内核阻塞,导致调用schedule()

5、linux环境下的进程调度算法

1)

基于优先级的调度算法

基于优先级的调度算法给每个进程分配一个优先级,在每次进程调度时,调度器总是调度那个具有最高优先级的任务来执行。根据不同的优先级分配方法,基于优先级的调度算法可以分为如下两种类型[Krishna01][Wang99]: 静态优先级调度算法:

这种调度算法给那些系统中得到运行的所有进程都静态地分配一个优先级。静态优先级的分配可以根据应用的属性来进行,比如任务的周期,用户优先级,或者其它的预先确定的策略。RM(Rate-Monotonic)调度算法是一种典型的静态优先级调度算法,它根据任务的执行周期的长短来决定调度优先级,那些具有小的执行周期的任务具有较高的优先级。 动态优先级调度算法:

这种调度算法根据任务的资源需求来动态地分配任务的优先级,其目的就是在资源分配和调度时有更大的灵活性。非实时系统中就有很多这种调度算法,比如短作业优先的调度算法。在实时调度算法中,

EDF算法是使用最多的一种动态优先级调度算法,该算法给就绪队列中的各个任务根据它们的截止期限(Deadline)来分配优先级,具有最近的截止期限的任务具有最高的优先级。2) 基于比例共享调度算法

虽然基于优先级的调度算法简单而有效,但这种调度算法提供的是一种硬实时的调度,在很多情况下并不适合使用这种调度算法:比如象实时多媒体会议系统这样的软实时应用。对于这种软实时应用,使用一种比例共享式的资源调度算法(SD算法)更为适合。 比例共享调度算法指基于CPU使用比例的共享式的调度算法,其基本思想就是按照一定的权重(比例)对一组需要调度的任务进行调度,让它们的执行时间与它们的权重完全成正比。 我们可以通过两种方法来实现比例共享调度算法[Nieh01]:第一种方法是调节各个就绪进程出现在调度队列队首的频率,并调度队首的进程执行;第二种做法就是逐次调度就绪队列中的各个进程投入运行,但根据分配的权重调节分配个每个进程的运行时间片。

比例共享调度算法可以分为以下几个类别:轮转法、公平共享、公平队列、彩票调度法(Lottery)等。

比例共享调度算法的一个问题就是它没有定义任何优先级的概念;所有的任务都根据它们申请的比例共享CPU资源,当系统处于过载状态时,所有的任务的执行都会按比例地变慢。所以为了保证系统中实时进程能够获得一定的CPU处理时间,一般采用一种动态调节进程权重的方法。3)基于时间的进程调度算法 对于那些具有稳定、已知输入的简单系统,可以使用时间驱动(Time-driven:TD)的调度算法,它能够为数据处理提供很好的预测性。这种调度算法本质上是一种设计时就确定下来的离线的静态调度方法。在系统的设计阶段,在明确系统中所有的处理情况下,对于各个任务的开始、切换、以及结束时间等就事先做出明确的安排和设计。这种调度算法适合于那些很小的嵌入式系统、自控系统、传感器等应用环境。

这种调度算法的优点是任务的执行有很好的可预测性,但最大的缺点是缺乏灵活性,并且会出现有任务需要被执行而CPU却保持空闲的情况。

linux 排程命令,linux 任务管理与调度相关推荐

  1. linux 排程命令,Ubuntu 排程設定 :Crontab 排程使用教學

    在linux系統中,如 ubuntu,cron 排程的資料是存在 /etc/crontab 中,我們可以直接輸入 sudo nano /etc/crontab 進行編輯. 1. Linux Cron ...

  2. linux新建自定义命令,Linux 创建自定义命令

    Linux 创建自定义命令 Linux 可以创建自定义使用命令 这里我们采取使用"alias"命令.这里我们首先了解两个文件,通过这两个文件我们可以根据环境配置相应的自定义命令. ...

  3. linux shell 未找到命令,未找到linux问题setenv命令(linux issue setenv command not found)

    未找到linux问题setenv命令(linux issue setenv command not found) 我在Linux中开发了一个Tcl / Tk脚本工具. 为了运行该工具,每次需要在she ...

  4. linux 查看带宽命令,linux查看带宽的命令

    linux系统一些命令可以显示带宽的状态信息,下面由学习啦小编为大家整理了linux查看带宽的相关知识,希望对大家有帮助! linux查看带宽命令详解 linux查看带宽命令1.nload nload ...

  5. linux tail日志命令,linux tail命令及其它日志查看命令的用法

    当日志文件存储日志很大时,我们就不能用vi直接进去查看日志,需要Linux的命令去完成我们的查看任务. Log位置: /var/log/message 系统启动后的信息和错误日志,是Red Hat L ...

  6. linux 安装删除命令,Linux如何使用命令行卸载安装包

    导读 严格地说,Linux是内核.Linux发行版由Linux内核.安装脚本.shell.编译器.桌面和其他组件组成.因此,卸载包或软件的Linux命令取决于Linux发行版的名称和类型.本文说明如何 ...

  7. linux下dump命令,Linux dump命令

    # Linux dump命令 [![Linux 命令大全](/images/1590082124592.gif "Linux 命令大全") Linux 命令大全](/queryGr ...

  8. linux的编程命令,linux编程常用命令

    学习linux编程最基本的就是要掌握常用的编程命令,下面由学习啦小编为大家整理了linux编程常用命令相关知识,希望大家喜欢! linux编程常用命令1.编译应用程序 make -f makefile ...

  9. linux权限切换命令,Linux基础常用命令汇总(权限操作)

    权限操作 权限简介 Linux系统上对文件的权限有着严格的控制,用于如果相对某个文件执行某种操作,必须具有对应的权限方可执行成功. Linux下文件的权限类型一般包括读,写,执行.对应字母为 r.w. ...

最新文章

  1. 伺服驱动器生产文件_在速度控制和力矩控制方面伺服驱动器与变频器的较量
  2. 英伟达Q2营收大涨50%,创下历史新高,游戏业务已不是最大收入来源
  3. 大型网站技术架构:核心原理与案例分析 mobi_阿里面试官:你会高并发技术吗?...
  4. deepin启动盘制作工具_balenaEtcher for mac(启动盘制作工具) v1.5.70已更新
  5. ADO学习(七)ADOX相关知识
  6. 全国计算机等级考试题库二级C操作题100套(第16套)
  7. yum 安装mysql 启动_linux(centos6.9)下使用yum安装mysql,及启动MySQL等
  8. 【Java中级篇】使用itextpdf生成PDF
  9. 计算机人文研究生专业,西安科技大学,艺术、人文、材料、计算机、通信等专业调剂信息...
  10. c盘保护软件_电脑C盘空间越来越小?简单操作这几步,可以释放大量空间
  11. 证券基金行业IT运维“远景”如何应对?
  12. python加载文件并显示文件内容到qtextedit上_如何在python中读取QTextedit?
  13. 搭建高可用 RocketMQ 集群
  14. 目标检测标注格式转换:labelme2yolo yolo2labelme
  15. 机器学习基础算法30-贝叶斯网络理论
  16. allennlp使用
  17. 考题篇(5.2) 19. 数据防泄漏 ❀ FortiGate ❀ Fortinet 网络安全专家 NSE 4
  18. 操作系统实验读者写者程序源码_我的操作系统梦破灭了
  19. 手机dpi修改工具_修改手机的分辨率,让你的手机更流畅
  20. mysql移植海思_live555 交叉编译移植到海思开发板

热门文章

  1. JavaScript-学习笔记一
  2. Mac重装系统失败-没有符合安装资格的软件包
  3. VBA字符串操作:从右向左截取特定分隔符后的内容
  4. 未转变者服务器物品建筑id,未转变者建筑物id是什么 | 手游网游页游攻略大全...
  5. JAVA毕业设计服装连锁店后台管理系统计算机源码+lw文档+系统+调试部署+数据库
  6. 大吉大利,今晚吃鸡!
  7. Android H265
  8. 为什么win10提示没有管理权限
  9. 迈入发展期的信创,更需夯实基础
  10. ZOJ 3587 Marlon#39;s String 扩展KMP