sched_setscheduler用法


  #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,登录光驱、软件时要用到


 

`sched_setscheduler` 是 Linux 系统调度程序的一个函数,它允许进程设置自己的调度策略和优先级。该函数可以用于实时进程或非实时进程。它的原型如下: ```c int sched_setscheduler(pid_t pid, int policy, const struct sched_param *param); ``` 其中,`pid` 是要设置的进程的 ID,`policy` 是调度策略,可以是 `SCHED_FIFO`、`SCHED_RR` 或 `SCHED_OTHER` 中的一个,`param` 是一个指向 `sched_param` 结构的指针,包含了进程的优先级等信息。 - `SCHED_FIFO`:先进先出调度策略。进程按照它们加入运行队列的顺序进行调度。如果一个进程一直保持在运行状态,那么它将一直占用 CPU 资源,其他进程可能得不到运行机会。 - `SCHED_RR`:时间片轮转调度策略。每个进程被分配一个时间片,当时间片用完后,进程被放回队列尾部,等待下一次调度。这种策略确保每个进程都有机会执行,并且可以防止某个进程长时间占用 CPU。 - `SCHED_OTHER`:普通调度策略。这是默认的调度策略,它不保证任何特定的调度行为。 `param` 结构包含了以下字段: ```c struct sched_param { int sched_priority; // 进程优先级 }; ``` `sched_priority` 字段用于设置进程的优先级。在 `SCHED_FIFO` 和 `SCHED_RR` 策略中,较高的优先级意味着进程更容易获得 CPU 时间片。在 `SCHED_OTHER` 策略中,该值不起作用。 调用 `sched_setscheduler` 函数后,相应的进程将按照指定的调度策略和优先级进行运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值