Linux进程调度

初探Linux进程调度

已知:父进程创建子进程后,父子进程同时运行。

问题:如果计算机只有一个处理器,父子进程以什么方式同时执行?

基本概念

运行:一个可执行程序从文件,变成进程的过程。

执行:拿到了处理器,执行指令。

Linux系统调度

  1. 内核具有进程调度的能力,多个进程可以同时运行。
  2. 微观上,处理器同一时间只能执行一个进程。
  3. 同时运行多个进程时候,每个进程都会获得适当的执行时间片
  4. 当执行时间片用完,内核调度下一个进程执行

进程调度原理

Linux进程调度_第1张图片

 

Linux系统调度策略

普通调度策略

SCHED_OTHER : Linux默认的调度策略,也被称为CFS(Completely Fair Scheduler),给每个进程动态计算优先级,根据优先级和进程执行的历史记录来确定下一个执行的进程。

实时调度策略

SCHED_FIFO :基于优先级顺序调度进程,并在一个进程获得CPU时候一直执行,直到进程主动释放。

SCHED_RR :基于"时间片轮转"的调度策略,给每个进程设置一个固定的时间片,并按照优先级顺序对进程进行轮流调度。

如何验证Linux中的进程调度?

实验目标:

        1.验证同一时刻只有一个进程在执行。

        2.验证不同调度策略,进程执行的连续性不同。

实验设计:

1.n个进程同时运行,统计各个进程的执行时刻。

2.进程运行方式:(确定记录那些数据)

        2.1 每个slice时间记录如下值:进程编号、当前时间值、完成度

        2.2 在total时间后结束运行,并输出记录的数据

        2.3 通过记录的数据分析进程调度策略

实验中需要解决的问题

  1. 如何让进程每次 ”固定” 工作 slice时间(单位毫秒)?
  2. 如何获取和改变进程的调度策略?
  3. 如何记录数据并输出数据(需要保持数据)?
  4. 如何图形化数据?

#include

/usr/include/newlib/sys/_timespec.h

struct timespec {

        time_t tv_sec; /* seconds */

        long tv_nsec; /* and nanoseconds */

};

/* Get current value of clock CLOCK_ID and store it in TP. */

extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) __THROW;

__clock_id:

.CLOCK_MONOTONIC -> 系统启动后到当前的时间

.CLOCK_REALTIME -> 从1970.1.1 到当前的时间

实验

你可能感兴趣的:(#,Linux,系统/文件编程,linux,进程调度)