Linux进程调度

初探Linux进程调度

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

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

基本概念

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

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

Linux系统调度

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

进程调度原理

 

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 <time.h>

/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 到当前的时间

实验

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/16248.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL碎片清理

为什么产生&#xff1f; 经过大量增删改的表&#xff0c;都可能存在碎片 MySQL数据结构是B树&#xff0c; 删除某一记录&#xff0c;只会标记为删除&#xff0c;后续插入一条该区间的记录&#xff0c;就会复用这个位置。 删除整个数据页的记录&#xff0c;则整个页标记为“可…

微软对Visual Studio 17.7 Preview 4进行版本更新,新插件管理器亮相

近期微软发布了Visual Studio 17.7 Preview 4版本&#xff0c;而在这个版本当中&#xff0c;全新设计的扩展插件管理器将亮相&#xff0c;并且可以让用户可更简单地安装和管理扩展插件。 据了解&#xff0c;目前用户可以从 Visual Studio Marketplace 下载各式各样的 VS 扩展插…

常用的CSS渐变样式

边框渐变 方案1&#xff1a; 边框渐变( 支持圆角) width: 726px;height: 144px;border-radius: 24px;border: 5px solid transparent;background-clip: padding-box, border-box; background-origin: padding-box, border-box; background-image: linear-gradient(to right, #f…

linux/drivers/leds/leds-gpio.c学习

linux/drivers/leds/leds-gpio.c学习 linux/drivers/leds/leds-gpio.c 是 Linux 内核中的一个驱动程序文件&#xff0c;用于控制 GPIO 引脚上的 LED 灯。下面是对该文件的更详细解读&#xff1a; 1. 头文件引入&#xff1a;该文件引入了一些必要的头文件&#xff0c;包括 <…

Kotlin Multiplatform 使用 CocoaPods 创建多平台分发库

Kotlin Multiplatform 支持直接创建Framework 方式和使用CocoaPods 方式创建Framework。 1、不同之处在于创建的时候需要选择不同的方式。 2、使用CocoaPods 方式还需要在 build.gradle(.kts) 文件中添加内容 在build.gradle(.kts) 文件中添加完成后,执行一下文件。剩下的集成…

Java和Python一些处理sql方式总结

将查询结果导入csv文件中 public static int executeUpdate(String sql, Object[] param) {//创建一个PreparedStatement对象用来操作数据库PreparedStatement pstmt null;//getConnection()方法为我自己定义的获取数据库连接的方法pstmt getConnection().prepareStatement(s…

基于Matlab实现指纹识别技术(附上完整源码)

指纹识别是一种常用的生物识别技术&#xff0c;具有独特性高、可靠性强的特点。本文介绍了基于Matlab的指纹识别技术实现的方法和步骤。首先&#xff0c;对指纹图像进行预处理&#xff0c;包括图像增强和去噪处理。然后&#xff0c;使用特征提取算法提取指纹特征。最后&#xf…

HTML+CSS前端 简易用户登录界面

Day1 刚学了一些html和css的简单语法&#xff0c;尝试写一个非常简易的静态用户登录界面。 login_simple.html <!DOCTYPE html> <html lang"en"><head><meta name"viewport" content"widthdevice-width,initial-scale1.0"…

【adb】adb常用命令

Android Debug Bridge (adb) Android 调试桥 (adb) 是一种功能多样的命令行工具&#xff0c;可让您与设备进行通信。adb 命令可用于执行各种设备操作&#xff0c;例如安装和调试应用。adb 提供对 Unix shell&#xff08;可用来在设备上运行各种命令&#xff09;的访问权限。它…

Mac 终端美化显示

Linux 也可安装 Zsh 后使用此套配置。 1. 安装 Oh My Zsh sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"2. 更换主题&#xff0c;修改文件&#xff1a;~/.zshrc&#xff0c;原内容&#xff1a; ZSH_THEME&quo…

opencv中轮廓相关属性

一、介绍 findContours() &#xff1a;The function retrieves contours from the binary image。 二、代码 void main() {Mat src imread("match00.bmp", IMREAD_GRAYSCALE);Mat mask;threshold(src, mask, 128, 255, cv::THRESH_BINARY_INV);Mat element cv::g…

Matlab实现遗传算法仿真(附上40个仿真源码)

遗传算法&#xff08;Genetic Algorithm&#xff0c;GA&#xff09;是一种基于生物进化理论的优化算法&#xff0c;通过模拟自然界中的遗传过程&#xff0c;来寻找最优解。 在遗传算法中&#xff0c;每个解被称为个体&#xff0c;每个个体由一组基因表示&#xff0c;每个基因是…

介绍下Django中的表单(forms)模块中的类forms.CharField

在Django中&#xff0c;forms.CharField() 是用于定义表单字段的类&#xff0c;它属于 Django 的表单&#xff08;forms&#xff09;模块。CharField 是用于处理字符型数据的表单字段类。它允许用户在表单中输入文本数据&#xff0c;并对该数据进行验证和处理。 forms.CharFie…

6门新兴语言,小众亦强大

编码语言在塑造我们创建软件的方式方面起着至关重要的作用。多年来&#xff0c;我们观察到Python&#xff0c;Java和C等成熟语言的流行。然而&#xff0c;如今一波新的编码语言浪潮已经出现&#xff0c;提出了创造性的解决方案&#xff0c;并推动了软件工程领域所能完成的极限。…

Cesium 实战 - Blender调整模型组件原点,实现直升机尾翼旋转

Cesium 实战 - Blender调整模型组件原点&#xff0c;实现直升机尾翼旋转 1.模型原点问题2.导入模型&#xff08;zhisheng.glb&#xff09;3.导出模型4. 通过 czml 调试代码 某个项目需求&#xff0c;在操作直升机模型的时候&#xff0c;希望直升机机翼和尾翼旋转起来。 机翼旋…

Pytorch参数优化

前言&#xff1a; 当我们训练神经网络时&#xff0c;我们需要调整模型的参数&#xff0c;使得损失函数的值逐渐减小&#xff0c;从而优化模型。但是模型的参数我们一般是无法看见的&#xff0c;所以我们必须学会对参数的更新&#xff0c;下面&#xff0c;我将介绍两种参数更新的…

适配器模式——不兼容结构的协调

1、简介 1.1、概述 有的笔记本电脑的工作电压是20V&#xff0c;而我国的家庭用电是220V&#xff0c;如何让20V的笔记本电脑能够在220V的电压下工作&#xff1f;答案是引入一个电源适配器&#xff08;AC Adapter&#xff09;&#xff0c;俗称充电器&#xff0f;变压器。有了这…

解决Ubuntu 22.04 虚拟机克隆出多台造成的IP地址冲突的问题

在被克隆的机器上编辑 /etc/netplan/00-installer-config.yaml 文件 network:ethernets:enp0s5:dhcp4: truedhcp-identifier: mac #添加次行version: 2这样每次克隆出来的机器都会有唯一的IP地址 简单说明 如果是克隆 centos 会发现不会出现这一情况&#xff0c;而克隆 ubu…

Qt 2. QSerialPortInfo显示串口信息

在ex2.pro 添加&#xff1a; QT serialport//main.cpp #include "ex2.h" #include <QtSerialPort/QtSerialPort> #include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Ex2 w;w.show();QList<QSerialPortInfo>…

xrdp登录显示白屏且红色叉

如上图所示&#xff0c;xrdp登录出现了红色叉加白屏&#xff0c;这是因为不正常关闭导致&#xff0c;解决方法其实挺简单的 #进入/usr/tmp cd /usr/tmp #删除对应用户的kdecache-** 文件&#xff08;我这里使用的是kde桌面&#xff09;&#xff0c;例如删除ywj用户对应的文件 …