sched_setscheduler用法 http://m.blog.csdn.net/blog/manshq163com/7717209

转载 2015年11月18日 16:45:37

sched_setscheduler用法

2012-7-5阅读1304 评论0


  #include <sched.h>

       int sched_setscheduler(pid_t pid, int policy,
              const struct sched_param *param);

 

     sched_setscheduler()函数将pid所指定进程的调度策略和调度参数分别设置为param指向的sched_param结构中指定的policy和参数。sched_param结构中的sched_priority成员的值可以为任何整数,该整数位于policy所指定调度策略的优先级范围内(含边界值)。policy参数的可能值在头文件中定义。

      如果存在pid所描述的进程,将会为进程ID等于pid的进程设置调度策略和调度参数。

      如果pid为零,将会为调用进程设置调度策略和调度参数。

      如果进程pid含多个进程或轻量进程(即该进程是多进程的),此函数将影响进程中各个子进程。

      更改其他进程的调度参数需要有相应的特权。调用进程必须具有相应的特权,或者是具有PRIV_RTSCHED权限的组的成员,猜能成功调用sched_setscheduler()。如果sched_setscheduler()函数成功地将pid所指定调度策略和调度参数分别设置为policy和结构param指定值 ,则该函数调用成功。

 

例子:更改调用进程以使用最强的FIFO优先级,如下所示:

#include <sched.h>

int main(int argc,char *argv[]) 
{

      struct sched_param param; 
      int maxpri; 
      maxpri = sched_get_priority_max(SCHED_FIFO);//»ñÈ¡×î´óÖµ 
      if(maxpri == -1) 
      { 
            perror("sched_get_priority_max() failed"); 
            exit(1); 
      } 
      param.sched_priority = maxpri; 
      if (sched_setscheduler(getpid(), SCHED_FIFO, &param) == -1) //设置优先级

     { 
            perror("sched_setscheduler() failed"); 
            exit(1); 
     } 
}

 

获取调度策略

获取调度策略sched_getscheduler()函数声明如下:

/* Retrieve scheduling algorithm for a particular purpose. */ 

#include <sched.h>

int sched_getscheduler(pid_t pid);

 

sched_getscheduler()函数返回pid所指定进程的调度策略。

1.如果存在pid所描述的进程,将返回进程ID等于pid的进程的调度策略。

2.如果pid为零,将返回调用进程的调度策略。

3.如果进程pid包含多个进程或轻量进程,此函数只返回进程调度策略和优先级。

目标进程的各个进程或轻量级进程具有其自身的调度策略和优先级,它们可能与当前进程的调度策略和优先级不同。



--------------------

Linux系统从应用角度来看,分为内核空间和用户空间两个部分。内核空间是Linux操作系统的主要部分,但是仅有内核的操作系统是不能完成用户任务。

 

一、 Linux内核的主要模块

 1.进程调度

      进程调度指的是系统对进程的多种状态之间转换的策略。Linux下的进程调度有3种策略:SCHED_OTHER、SCHED_FIFO和SCHED_RP。

 

      SCHED_OTHER是用于针对普通进程的时间片轮转调度策略。这种策略中,系统给所有的运行状态的进程分配时间片。在当前时间片用完之后,系统从进程中优等级最高的进程中选择进程运行。

      SCHED_FIFO是针对运行的实时性要求比较高、运行时间短的进程调度策略。这种策略中,系统按进入队列的先后进行进程的调度,在没有更高优先级进程到来或者当前进程没有因为等待资源而阻塞的情况下,会一直运行。

      SCHED_RR是针对运行的实时性要求比较高、运行经较长的进程调度策略。这种策略与SCHED_OTHER的策略类似,只不过SCHED_RR进程的优先级要高得多。 系统分配给SCHED_RR的进程时间片,然后轮循运行这些进程,将时间片用完的进程放入队列的末尾。

 

       Linux进程调度月票用的是“有条件可剥夺”的调度方式。普通进程中采用的是SCHED_OTHER的时间片轮循方式,实时进程可以剥夺普通进程。如果普通进程在用户空间运行,则普通进程立即停止运行,将资源让给实时进程vkjsuo通进程运行在内核空间,需要等系统调用返回用户空间后方可剥夺资源。

 

  2.内存管理MMU  

      内存管理是多个进程间的内存共享策略。在Linux系统中,内存管理的主要概念是虚拟内存。

      虚拟内存的分配策略是每个进程都可以公平地使用虚拟内存。虚拟内存的大小通常设置为物理内存的两倍。

 

  3.虚拟文件系统VFS

      在Linux下支持多种文件系统,如ext、ext2、minix、umsdos、msdos、vfat、ntfs、proc、smb、ncp、iso9660、sysv、hpfs、affs等。

 

   4、网络接口

      Linux是在Internet飞速发展的时期成长起来的,所以Linux支持多种网络接口和协议。网络接口分为网络协议和驱动程序。

 

   5、进程间通信

      Linux的进程间通信是从UNIX系统继承过来的。Linux下的进程间通信方式主要有管道方式、信号方式、消息队列方式、共享内存和套接字等方法。  

二、Linux的文件结构

      与Windows下的文件组织结构不同,Linux不使用磁盘分区符号来访问文件系统,而是将整个文件系统表示成树状的结构,Linux系统每增加一个文件系统都会将其加入到这个树中。

 

      不同的Linux发行版本的目录结构和具体的实现功能存在一些细微的差别。但是主要的功能都是一致的。一些常用目录的作用如下:

 

      /etc: 包括绝大多数Linux系统引导所需要的配置文件,系统引导时读取配置文件,例如fstab、host.conf等。

 

      /lib: 包含C编译程序需要的函数库,是一组二进制文件,例如glibc等。

 

      /usr: 包括所有其他内容,如src、local。Linux的内核就在/usr/src中。其下有子目录/bin,存放所有安装语言的命令,如gcc、perl等。

 

      /var:包含系统定义表,以便在系统运行改变可以只备份该目录,如cache。

 

      /tmp: 用于临时性的存储。

 

      /bin: 大多数命令存放在这里。

 

      /home: 主要存放用户账号,并且可以支持ftp的用户管理。系统管理员增加用户时,系统在home目录下创建与用户同名的目录,此目录一般认有Desktop目录。

 

      /dev: 这个目录下存放一种设备文件的特殊文件,如fd0、had等。

 

      /mnt: 在Linux系统中,它是专门给外挂的文件系统使用的,里面有两个文件cdrom、floopy,登录光驱、软件时要用到


 

相关文章推荐

repo的使用

repo是什么? repo只是google用Python脚本写的调用git的一个脚本,主要是用来下载、管理Android项目的软件仓库。(也就是说,他是用来管理给git管理的一个个仓库的) 下...
  • sidely
  • sidely
  • 2014年10月23日 14:45
  • 392

【AV SYNC】数字电视中的编解码器同步机制

数字电视中的编解码器同步机制1、MPEG-2码流结构    在数字电视系统中,模拟视音频信号按照MPEG-2的标准,经过抽样、量化及压缩编码形成基本码流ES,基本码流ES是不分段的连续码流。把基本码流...

SR 上行调度请求http://blog.csdn.net/m_052148/article/details/52277059

LTE 中SR相关知识介绍,目前看到讲解最清楚的帖子!

Android Canvas 和Paint的用法 转自http://blog.csdn.net/u010947098/article/details/44574171

首先,介绍的是Canvas的基本方法 方法签名 简要说明 drawArc(RectF oval, float startAngle, float sweepAng...

Java中Synchronized的用法(原文: http://blog.csdn.net/luoweifu/article/details/46613015 )

《编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程》一文详细讲述了线程、进程的关系及在操作系统中的表现,这是多线程学习必须了解的基础。本文将接着讲一下Java线程同步中的一个重要的概念...

String.format的用法(http://blog.csdn.net/lu8000/article/details/11717331)

在JDK1.5中,String类增加了一个非常有用的静态函数format(String format, Objece... argues),可以将各类数据格式化为字符串并输出。其中format参数指定...

net 2.0 BackgroundWorker类详细用法 http://blog.csdn.net/zhoufoxcn/article/details/1832819

在WinForm中经常遇到一些费时的操作界面,比如统计某个磁盘分区的文件夹或者文件数目,如果分区很大或者文件过多的话,处理不好就会造成“假死”的情况,或者报“线程间操作无效”的异常,为了解决这个问题,...

http://m.blog.csdn.net/blog/Diwat/12616005

http://m.blog.csdn.net/blog/Diwat/12616005 [转]usb-gedget实例 装载:http://blog.csdn.net...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:sched_setscheduler用法 http://m.blog.csdn.net/blog/manshq163com/7717209
举报原因:
原因补充:

(最多只允许输入30个字)