[未写完](0x02)深入Linux内核架构总结----进程管理和调度

2024-06-04 00:18

本文主要是介绍[未写完](0x02)深入Linux内核架构总结----进程管理和调度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



==============================
0.概述
1. 多任务、调度和进程管理
2. 物理内存的管理以及内核与相关硬件的交互
3. 用户空间的进程访问虚拟内存
4. 编写设备驱动程序
5. 模块机制以及虚拟文件系统
6. Ext文件系统属性和访问控制表的实现方式
7. 内核中网络的实现
8. 系统调用的实现方式
9. 内核对时间相关功能的处理
10. 页面回收和页交换的相关机制以及审计的实现
===============================

进程管理和调度

内核必须决定为各个进程分配多长时间,何时切换到下一个进程。这又引出了哪个进程是下 一个的问题。此类决策是平台无关的。

在内核从进程A切换到进程B时,必须确保进程B的执行环境与上一次撤销其处理器资源时完 全相同。例如,处理器寄存器的内容和虚拟地址空间的结构必须与此前相同。

这里的后一项工作与处理器极度相关。不能只用C语言实现,还需要汇编代码的帮助。

这两个任务是称之为调度器的内核子系统的职责。CPU时间如何分配取决于调度器策略,这与用于在各个进程之间切换的任务切换机制完全无关。

2.1 进程优先级

进程可以分为实时进程和非实时进程

> 硬实时进程有严格的时间限制,某些任务必须在指定的时限内完成

> 软实时进程是硬实时进程的一种弱化形式
大多数进程是没有特定时间约束的普通进程,但仍然可以根据重要性来分配优先级。

抢占式多任务处理(preemptive multitasking)

各个进程都分配到一定的时间段 可以执行。时间段到期后,内核会从进程收回控制权,让一个不同的进程运行,而不考虑前一进程所 执行的上一个任务。被抢占进程的运行时环境,即所有CPU寄存器的内容和页表,都会保存起来,因 此其执行结果不会丢失。在该进程恢复执行时,其进程环境可以完全恢复。时间片的长度会根据进程 重要性(以及因此而分配的优先级)的不同而变化。

完全公平调度器(completely fair scheduler)

2.2 进程生命周期

进程可能有以下几种状态。

 运行:该进程此刻正在执行。  等待:进程能够运行,但没有得到许可,因为CPU分配给另一个进程。调度器可以在下一次 任务切换时选择该进程。  睡眠:进程正在睡眠无法运行,因为它在等待一个外部事件。调度器无法在下一次任务切换 时选择该进程。 

抢占式多任务处理

Linux进程管理的结构中还需要另外两种进程状态选项:用户状态和核心态。

这反映了所有现代CPU都有(至少)两种不同执行状态的事实,其中一种具有无限的权利,而另一种则受到各种限制。

例如,可能禁止访问某些内存区域。这种区别是建立封闭“隔离罩”的一个重要前提,它维持着系统中现存的各个进程,防止它们与系统其他部分相互干扰。 进程通常都处于用户状态,只能访问自身的数据,无法干扰系统中的其他应用程序,甚至也不会注意到自身之外其他程序的存在。 如果进程想要访问系统数据或功能(后者管理着所有进程之间共享的资源,例如文件系统空间),则必须切换到核心态。显然这只能在受控情况下完成,否则所有建立的保护机制都是多余的,而且这种访问必须经由明确定义的路径。“系统调用”是在状态之间切换的一种方法

从用户状态切换到核心态的第二种方法是通过中断,此时切换是自动触发的。系统调用是由用户 应用程序有意调用的,中断则不同,其发生或多或少是不可预测的。处理中断的操作,通常与中断发 生时执行的进程无关。

内核的抢占调度模型建立了一个层次结构,用于判断哪些进程状态可以由其他状态抢占。 
 普通进程总是可能被抢占,甚至是由其他进程抢占。在一个重要进程变为可运行时,例如编辑器接收到了等待已久的键盘输入,调度器可以决定是否立即执行该进程,即使当前进程仍然在正常运行。对于实现良好的交互行为和低系统延迟,这种抢占起到了重要作用。 
 如果系统处于核心态并正在处理系统调用,那么系统中的其他进程是无法夺取其CPU时间的。 调度器必须等到系统调用执行结束,才能选择另一个进程执行,但中断可以中止系统调用。
 中断可以暂停处于用户状态和核心态的进程。中断具有高优先级,因为在中断触发后需要 尽快处理。 

2.3 进程表示

Linux内核涉及进程和程序的所有算法都围绕一个名为task_struct的数据结构建立,该结构定义在include/sched.h中。这是系统中主要的一个结构。见本人翻译的博客(528行) sched.h (版本4.16.7全部内容)

这篇关于[未写完](0x02)深入Linux内核架构总结----进程管理和调度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1028527

相关文章

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

Linux磁盘分区、格式化和挂载方式

《Linux磁盘分区、格式化和挂载方式》本文详细介绍了Linux系统中磁盘分区、格式化和挂载的基本操作步骤和命令,包括MBR和GPT分区表的区别、fdisk和gdisk命令的使用、常见的文件系统格式以... 目录一、磁盘分区表分类二、fdisk命令创建分区1、交互式的命令2、分区主分区3、创建扩展分区,然后

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

Linux内核之内核裁剪详解

《Linux内核之内核裁剪详解》Linux内核裁剪是通过移除不必要的功能和模块,调整配置参数来优化内核,以满足特定需求,裁剪的方法包括使用配置选项、模块化设计和优化配置参数,图形裁剪工具如makeme... 目录简介一、 裁剪的原因二、裁剪的方法三、图形裁剪工具四、操作说明五、make menuconfig

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

什么是cron? Linux系统下Cron定时任务使用指南

《什么是cron?Linux系统下Cron定时任务使用指南》在日常的Linux系统管理和维护中,定时执行任务是非常常见的需求,你可能需要每天执行备份任务、清理系统日志或运行特定的脚本,而不想每天... 在管理 linux 服务器的过程中,总有一些任务需要我们定期或重复执行。就比如备份任务,通常会选在服务器资

Android数据库Room的实际使用过程总结

《Android数据库Room的实际使用过程总结》这篇文章主要给大家介绍了关于Android数据库Room的实际使用过程,详细介绍了如何创建实体类、数据访问对象(DAO)和数据库抽象类,需要的朋友可以... 目录前言一、Room的基本使用1.项目配置2.创建实体类(Entity)3.创建数据访问对象(DAO

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

如何安装HWE内核? Ubuntu安装hwe内核解决硬件太新的问题

《如何安装HWE内核?Ubuntu安装hwe内核解决硬件太新的问题》今天的主角就是hwe内核(hardwareenablementkernel),一般安装的Ubuntu都是初始内核,不能很好地支... 对于追求系统稳定性,又想充分利用最新硬件特性的 Ubuntu 用户来说,HWEXBQgUbdlna(Har

Linux限制ip访问的解决方案

《Linux限制ip访问的解决方案》为了修复安全扫描中发现的漏洞,我们需要对某些服务设置访问限制,具体来说,就是要确保只有指定的内部IP地址能够访问这些服务,所以本文给大家介绍了Linux限制ip访问... 目录背景:解决方案:使用Firewalld防火墙规则验证方法深度了解防火墙逻辑应用场景与扩展背景: