《Linux内核源码分析》(2)进程原理及系统调用

news2024/9/20 22:42:48

《Linux内核源码分析》(2)进程原理及系统调用

一、进程

  • 操作系统的作用:作为硬件的使用层,提供使用硬件资源的能力,

  • 进程的作用:作为操作系统使用层,提供使用操作系统抽象出的资源层的能力

  • 进程、线程和程序的区别:进程指计算机中已运行的程序。进程本身不是基本的运行单位,而是线程的容器。
    程序本身只是指令、数据及其组织形式的描述,进程才是程序(那些指令和数据)的真正运行
    实例

  • Linux内核中的进程:Linux内核把进程叫做任务(task),进程的虚拟地址空间可分为用户虚拟地址空间和内核虚拟地址空间,所有进程共享内核虚拟地址空间,每个进程都有独立的用户虚拟空间

  • Linux内核进程的特殊形式:没有用户虚拟地址空间的进程叫内核线程,共享用户虚拟地址空间的进程叫用户线程,共享同一个用户虚拟地址空间的所有用户线程叫线程组

  • C语言标准库进程&Linux内核进程

    C语言标准库进程Linux内核进程
    包括多个线程的进程线程组
    只有一个线程的进程任务或进程
    线程共享用户虚拟地址空间的进程
  • 查询进程状态

    • ps -aux查询内存中的瞬时进程信息
      在这里插入图片描述
      • USER :进程的所属用户,
      • PID :进程的进程ID号,
      • %CPU :进程占用的 CPU资源 百分比,
      • %MEM :进程占用的 物理内存 百分比,
      • VSZ :进程使用掉的虚拟内存量 (Kbytes) ,
      • RSS :进程占用的固定的内存量 (Kbytes) ,
      • TTY :与进程相关联的终端(tty),?代表无关,tty1-tty6是本机上面的登入者程序,pts/0表示为由网络连接进主机的程序。
      • STAT :进程的状态;R->运行->Runnable;S->可中断睡眠->Sleeping;D->不可中断睡眠->Uninterruptible sleep;I->空闲->Idle;Z->僵死->Zombie(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放);T->终止->Terminate;s->进程的领导者;等等…
      • START :进程开始创建的时间 。
      • TIME :进程使用的总cpu时间,
      • COMMAND : 进程对应的实际程序。
    • top动态显示内存中的进程信息
      在这里插入图片描述
      • PR : 进程优先级
      • NI : nice 值, 负值表示最高优先级,正值表示 低级优先级
      • VIRT : 进程使用的虚拟内存总量,单位为 KB
      • SHR : 共享内存大小,单位 KB
      • 其他参数在上面已重复提到。

二、进程的生命周期

  • 进程的状态
    • 创建状态:创建新进程
    • 就绪状态:进程获取可以运作所有资源及准备相关条件
    • 执行状态:进程正在CPU中执行操作
    • 阻塞状态:进程因等待某些资源而被跳出CPU
    • 终止状态:进程消亡
  • 进程状态之间的转换
    在这里插入图片描述
  • Linux内核通过提供API函数来设置进程的状态
    • TASK_RUNNING:可运行状态或者就绪状态
    • TASK_INTERRUPTIBLE:可中断睡眠状态,又叫浅睡眠状态
    • TASK_UNINTERRUPTIBLE:不可中断状态,又叫深睡眠状态
    • __TASK_STOPPED:终止状态
    • EXIT_ZOMBIE:僵尸状态
  • 通过API表示进程状态转化
    请添加图片描述

三、task_struct数据结构

  • Linux内核涉及进程和程序的所有算法都围绕一个名为task_struct的数据结构建立,该结构定义在include/linux/sched.h中。task_struct包含很多成员,将进程与各个内核子系统联系起来。下面是Linux5.6.18中关于task_struct结构体的注释。
    请添加图片描述

四、进程优先级

  • 限期进程的优先级比实时进程高。实时进程的优先级比普通进程高。
    • 限期进程的优先级是-1
    • 实时进程的优先级是1-99,优先级数字越大,表示优先级越高
    • 普通进程的静态优先级为:100-139,优先级数值越小,表示优先级越高,可通过修改nice值改变普通进程的优先级,优先级等于120+nice,很显然:nice值的取值范围是-20~19
  • 各种优先级与进程之间的关系
    • 四种优先级
      在这里插入图片描述
    • 关系对比
      在这里插入图片描述

五、系统调用

  • 当运行应用程序的时候,调用fork()vfork()clone()函数就是系统调用。系统调用就是应用程序如何进入内核空间执行任务,程序使用系统调用执行一系列操作:比如创建进程、文件IO等等。具体如下图所示:
    在这里插入图片描述

六、内核线程

  • 内核线程是直接由内核本身启动的进程。内核线程实际上是将内核函数委托给独立的进程,与系统中其他进程并发地执行(实际上,也并行于内核自身执行)。内核线程经常称之为(内核)守护进程。他们用于执行下列任务。
    • 周期性地将修改的内存页与页来源块设备同步(例如:使用mmap的文件映射)
    • 如果内存页很少使用,则写入交换区。
    • 管理延时动作(deferred action)。
    • 实现文件系统的事务日志。
  • 内核线程中,task_struct数据结构里面有一个成员指针mm的值为NULL,它只能运行在内核空间。下面是内核创建函数(位于kernel/fork.c):
    /*
     * Create a kernel thread.
     */
    pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags)
    {
    	struct kernel_clone_args args = {
    		.flags		= ((lower_32_bits(flags) | CLONE_VM |
    				    CLONE_UNTRACED) & ~CSIGNAL),
    		.exit_signal	= (lower_32_bits(flags) & CSIGNAL),
    		.stack		= (unsigned long)fn,
    		.stack_size	= (unsigned long)arg,
    	};
    
    	return _do_fork(&args);
    }
    

七、退出进程

  • 退出进程有两种方式:
    • 进程主动终止:从main()函数返回,链接程序会自动添加到exit()系统调用;或者主动调用exit()系统调用。
    • 进程被动终止:进程收到一个自己不能处理的信号;或者进程收到SIGKILL等终止信息。
  • 下面是退出进程的系统调用,函数位于kernel/exit.c
    SYSCALL_DEFINE1(exit, int, error_code)
    {
    	do_exit((error_code&0xff)<<8);
    }
    

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

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

相关文章

【计算机视觉】Segment Anything 安装配置及代码测试(含源代码)

文章目录 一、前言二、安装2.1 基本要求2.2 Install Segment Anything 三、代码使用示例3.1 Automatically generating object masks with SAM3.2 Environment Set-up3.3 显示标注3.4 图像示例3.5 Automatic mask generation3.6 Automatic mask generation options 一、前言 目…

客户体验:响应速度是他们的 No.1 Pick么?

服务响应速度在为消费者提供服务时极为重要&#xff0c;那么&#xff0c;在消费者整体体验中&#xff0c;响应速度是否是消费者最在意的呢&#xff1f; 无论是对企业还是消费者来说&#xff0c;时间都至关重要。消费者在寻求客户服务时&#xff0c;不喜欢等待。根据《客户服务受…

【Python asyncio】零基础也能轻松掌握的学习路线与参考资料

Python asyncio是一个强大而易于使用的库&#xff0c;让Python程序员能够编写高效的异步IO应用程序。它为程序员提供了一种简单而优雅的方法来避免使用 Python GIL&#xff08;全局解释器锁&#xff09;&#xff0c;同时允许他们轻松地处理高并发的网络通信和并发任务执行。下面…

蓝桥杯数论总结:快速幂和矩阵快速幂

本文先是给出快速幂的原理&#xff0c;又由一道例题明确快速幂的Python代码模版&#xff1b;而后给出矩阵快速幂的原理&#xff08;介绍了矩阵相乘&#xff0c;对没学过线代者友好&#xff09;&#xff0c;和矩阵快速幂的模版。再给出快速幂和矩阵快速幂相关的题单。 目录 快…

Linux高级---k8s存储

文章目录 一、数据卷的概述二、关系图三、数据卷的类型1、emptydira、描述b、适用场景c、emptydir应用 2、hostpatha、描述b、适用场景c、hostpath应用 3、nfsa、描述b、适用场景c、nfs应用 4、PV和PVCa、描述b、存储卷和存储卷声明的关系c、存储卷声明的管理过程 5、PVa、资源…

10个可以快速用Python进行数据分析的小技巧

一些小提示和小技巧可能是非常有用的&#xff0c;特别是在编程领域。有时候使用一点点黑客技术&#xff0c;既可以节省时间&#xff0c;还可能挽救“生命”。 一个小小的快捷方式或附加组件有时真是天赐之物&#xff0c;并且可以成为真正的生产力助推器。所以&#xff0c;这里…

基于Spring Boot+Vue的课堂管理系统

介绍 基于Spring BootVue的课堂管理系统。前后端分离。包含教师授课管理、学生选退课、聊天室、签到、笔记管理模块等。 技术架构 spring BootMyBatisRedisWebSocketVueCLIAxiosElement UI 项目特点&#xff1a; - 后台使用MyBatis连接数据库&#xff0c;编写后台服务器的…

【教程】2步白嫖使用DeepL Pro会员版 [附插件]

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 【教程】5步白嫖使用Grammarly Premium高级版 [附脚本] 适用说明 Edge、Chrome等&#xff0c;使用了Chrome内核的浏览器应该都可以吧。 开始白嫖 1、下载并解压插件&#xff0c;下载链接&#xff1a;https://x…

第2章:数据结构【AcWing】

文章目录 单链表定义初始化头插在下标为pos位置后插入删除下标为pos后的结点遍历 双链表定义初始化在下标为pos后插入删除下标为pos的位置 栈和队列栈定义示例代码 队列定义示例代码循环队列定义示例代码 单调栈和单调队列单调栈朴素方法 O ( n 2 ) O(n^2) O(n2)优化 O ( n ) …

Web的基本漏洞--逻辑漏洞

目录 一、逻辑漏洞介绍 1.逻辑漏洞的原理 2.逻辑漏洞的分类 3.常见的逻辑漏洞 4.挖掘逻辑漏洞 一、逻辑漏洞介绍 1.逻辑漏洞的原理 逻辑漏洞是指由于程序逻辑不严或逻辑太复杂&#xff0c;导致一些逻辑分支不能够正常处理或处理错误&#xff0c;从而进行攻击。一般出现任…

英国皇家植物园采用机器学习预测植物抗疟性,将准确率从 0.46 提升至 0.67

内容一览&#xff1a;疟疾是严重危害人类生命健康的重大传染病&#xff0c;研究人员一直在致力于寻找新的植物源性抗疟疾化合物&#xff0c;以研发相关药物。近期英国皇家植物园利用机器学习 算法 有效预测了植物抗疟性&#xff0c;该研究成果目前已发表在《Frontiers in Plant…

路径规划算法:基于风驱动优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于风驱动优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于风驱动优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法…

游戏场景的转换——状态模式

状态模式 游戏比较复杂时&#xff0c;通常会设计成多个场景。 切换场景的好处 1、重复使用场景 跳转切换场景的代码有两种一种是旧版的方法 Application.LoadLevel(“SampleScene”);另一种是新版的方法 SceneManager.LoadScene(“SampleScene”); 例子1&#xff1a;通过场景…

通过IEDA连接Linux上的MYSQL

一、打开idea新建项目 idea与数据库的连接是与项目强相关的 在项目A中配置的数据库连接a&#xff0c;那么只能在项目A中能看到和使用数据库连接a 二、配置新的数据库连接 1.点击界面左侧栏中的Database&#xff0c;唤出数据库连接界面 2. 新建数据库&#xff08;mysql&#x…

Linux:apache配置与应用

Linux&#xff1a;apache配置与应用 一、虚拟 Web 主机1.1 虚拟Web主机1.2 httpd服务支持的虚拟主机类型 二、基于域名的虚拟主机2.1 为虚拟主机提供域名解析2.2 为虚拟主机准备网页文档2.3 添加虚拟主机配置2.4 设置访问控制2.5 加载独立的配置文件2.6 在客户机中访问虚拟 Web…

RabbitMQ消息属性详解

content-type属性 如同各种标准化的HTTP规范&#xff0c;content-type传输消息体的MIME类型。例如&#xff0c;如果你的应用程序正在发送JSON序列化的数据值&#xff0c;那么将content-type属性设置为application/json将允许尚待开发的消费者应用程序在收到消息时检查消息类型…

BiFormer实战:使用BiFormer实现图像分类任务(一)

文章目录 摘要安装包安装timm安装 grad-cam 数据增强Cutout和MixupEMA项目结构计算mean和std生成数据集 摘要 论文翻译&#xff1a;https://wanghao.blog.csdn.net/article/details/130186102 官方源码&#xff1a;https://github.com/rayleizhu/BiFormer BiFormer是今年提出…

java idea常用的快捷方式

文章目录 java idea常用的快捷方式快速复制选多行改变代码格式化 快速代码编辑psvmsout5.for java idea常用的快捷方式 快速复制 c t r l d \color{red}{ctrld} ctrld 选多行改变 A l t 鼠标 \color{red}{Alt鼠标} Alt鼠标 代码格式化 C t r l A l t l \color{red}{Ctrl…

Web的基本漏洞--代码执行漏洞

目录 一、代码执行漏洞的介绍 1.代码执行漏洞的原理 2.常用含有的代码执行漏洞的函数 3.代码执行漏洞的危害 4.代码执行漏洞的防范措施 一、代码执行漏洞的介绍 1.代码执行漏洞的原理 web应用程序是指程序员在代码中使用了一些执行函数例如php的eval&#xff0c;assert等…

全球冰川均衡调整(GIA)数据下载链接汇总

在处理GRACE数据时&#xff0c;由于GRACE监测的信号包含地表的质量迁移信号和固体地球物理信号&#xff0c;因此研究地表的质量迁移时需要扣除固体地球的信号&#xff0c;目前最主要的时冰川均衡调整&#xff08;冰后回弹&#xff09;的信号。具体的关于冰川均衡调整的信息可参…