热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linux性能优化1进程相关基础知识

1.进程相关知识点1.1.什么是进程?进程可以看做是程序的副本,进程是程序的执行的实例。进程可以使用任意资源以便Linux内核可以处理完成它的任务。1.2.进程是如何管理的在Lin

1.进程相关知识点
1.1.什么是进程?
进程可以看做是程序的副本,进程是程序的执行的实例。进程可以使用任意资源以便Linux内核可以处理完成它的任务。
1.2.进程是如何管理的
在Linux操作系统上运行的所有进程都是通过task_struct结构来管理的,也叫“进程描述符”。
1.3.进程描述符属性
一个进程描述符包含了单个进程在运行期间的必要信息,比如进程标识、进程的属性、构建进程的资源等。
1.4.子进程的创建和结束过程
当一个进程创建一个新进程的时候,创建进程(父进程)发出一个fork()系统调用,然后父进程得到一个新创建的进程(子进程) 的进程描述符,并设置一个新的进程ID。它复制父进程的进程描述符的值给子进程。此时父进程的整个地址空间是不能复制的,两个进程共享相同的地址空间。exec()系统调用将新的程序复制到子进程的地址空间。因为两个进程共享相同的地址空间,所以新程序 写数据时会导致页错误。对此,内核会给子进程分配新的物理页。这种延迟的操作被称为Copy On Write。通常子进程执行它自己的程序,而不是执行与父进程相同的作。当程序执行完成的时候,通过一个exit()系统调用终止子进程。exit()系统调用释放进程的大部分数据结构并发出一个终止信号通知父进程。此时的进程被称为僵尸进程。子进程不会被完全移除,直到父进程通过wait()系统调用得知子进程已终止,父进程才会移除所有子进程的数据结构,并释放进程描述符。
1.5.进程的状态
·TASK_RUNNING(运行状态)
在这种状态下,进程正在CPU上运行,或者在队列(运行队列)中等待运行。
·TASK_STOPPED(停止状态)
在这种状态下,进程由于某些信号(SIGINT、SIGSTOP)被暂停。进程在等待一个恢复信号如SIGCONT
·TASK_INTERRUPTIBLE(可中断的睡眠状态)
在这种状态下,进程被暂停,并等待某个条件得到满足。例如进程等待键盘中断。
·TASK_UNINTERRUPTIBLE(不可中断的睡眠状态)
当进程处于此状态时,会给进程发送一个不知晓任何操作的信号。例如进程在等待磁盘I/O的操作。
·TASK_ZOMBIE(僵死状态)
一个进程通过exit()系统调用退出以后,它的父进程应该知道它已经终止。在此状态下,一个进程在等待通知它的父进程释放
所有的数据结构。一个僵尸进程不能终止自己,在这种情况下其显示为Z状态。使用kill命令是不能杀死这样一个进程的,因为它已经
被认定为死亡。如果想摆脱它,可以杀死父进程。但是如果是init进程的子进程称为僵尸进程的话,就必须重启系统来摆脱它。
1.6.进程的基本状态
进程在运行中不断地改变其运行的状态。通常,一个进程必须具有如下三种基本状态。
·Running(运行状态)
当进程已获得CPU资源,进程正在CPU上执行,此时状态称为执行状态。
·Ready(就绪状态)
当进程已分配到除了CPU以为的所有必要的资源,只要获得CPU资源便可以立即执行,这种状态称为就绪状态
·Blocked(阻塞状态)
正在执行的进程,由于等待某个事件而无法执行,此刻的状态称为阻塞状态。引起阻塞状态的因素有:I/O等待,缓冲区申请,等待信号等。

1.7.进程的内存段
进程使用它们自己的内存地址区域来执行工作。工作的变化取决于当前情况和进程的使用。一个进程可以有不同的工作负载和不同需要的数据大小。
进程可以处理各种各样的数据大小。进程的内存区域由如下段组成:
·文本段
这个区域用来存储可执行的代码。
·数据段
数据段由三个区域组成:数据,这个区域存储初始化的数据,比如静态变量;BSS,这个区域存储零初始化的数据,数据初始化为零;
堆(heap),这个区域,malloc()会根据需求动态分配内存。
·堆栈段
这个区域是局部变量、函数参数、返回的存储函数的存放区域。
1.8.进程的优先级和nice值
进程优先级是一个数字,用来确定CPU处理进程的顺序,并可以确定静态(实时)优先级和动态(非实时)优先级。一个具有最高优先级的进程有较大的机会得到在一个处理器上运行的权限。最高静态(实时)优先级99对应于系统优先级0,最低静态(非实时)优先级0对应于系统优先级99. 这些静态(实时)优先级,系统是不能动态改变它们的。对于动态(非实时)的优先级,内核需要使用一个基于进程行为和特征的算法做上下加减5的动态调整。一个进程可以间接的通过使用进程的nice值来改变静态优先级。Linux支持nice值从19(最低优先级)到-20(最高优先级)。默认值是0。nice值越小进程越优先获得CPU运行权限。
1.9.什么是上下文切换
在处理器执行期间,运行进程的信息被存储在处理器的寄存器或者高速缓存中,执行的进程被加载到寄存器的数据集被称为上下文。在切换过程中先存储运行进程的上下文,然后将下一个要运行的进程的上下文恢复到寄存器。进程描述符和内核模式堆栈区域用于存储上下文。这个切换的过程叫做上下文切换(context switching)。一般不能有太多的上下文切换,因为处理器每次要刷新寄存器和高速缓存,以便释放空间给新的进程,此时会导致
性能问题。
1.9.什么是中断
中断处理是优先级最高的任务之一,中断通常由I/O设备产生,比如网络接口卡、键盘、磁盘控制器、等。中断处理是Linux内核通知事件。它告诉内核中断进程执行,并要尽可能地快速执行中断处理,因为有些设备需要快速响应。当一个中断信号到达内核的时候,内核必须从当前执行的进程切换到一个新的进程,以处理这个中断。这意味着中断会导致上下文切换。中断分为两类;硬中断和软中断。硬中断由硬件设备产生,需要快速的响应,软中断被用来处理可以推迟的任务。在一个多处理器的环境中,中断是由每个处理器处理的。将中断绑定到单个处理器上可以提高系统的性能。
1.10.什么是线程
线程是在进程中产生的一个执行单元,在同一个进程中与其他线程并行运行。它们共享相同的资源,比如内存、地址空间、打开的文件等等。它们可以访问同一组应用程序的数据。线程也被称为轻量级的进程。因为它们共享资源,所以在它们中的每个线程不能同时改变它们的共享资源,因此,互斥、锁、序列化等是用户应用程序要实现的机制。
通过拜读赵永刚老师的佳作《Linux性能优化大师》,并加上自己的理解所总结的知识点。如有雷同,纯属巧合。如有维权,请通知我删除。


推荐阅读
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 本文介绍了C#中数据集DataSet对象的使用及相关方法详解,包括DataSet对象的概述、与数据关系对象的互联、Rows集合和Columns集合的组成,以及DataSet对象常用的方法之一——Merge方法的使用。通过本文的阅读,读者可以了解到DataSet对象在C#中的重要性和使用方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 一、什么是闭包?有什么作用什么是闭包闭包是定义在一个函数内部的函数,它可以访问父级函数的内部变量。当一个闭包被创建时,会关联一个作用域—— ... [详细]
  • Python中程序员的面试题有哪些
    小编给大家分享一下Python中程序员的面试题有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有 ... [详细]
  • 开发笔记:快速排序和堆排序
    本文由编程笔记#小编为大家整理,主要介绍了快速排序和堆排序相关的知识,希望对你有一定的参考价值。快速排序思想:在partition中,首先以最右边的值作为划分值x,分别维护小于 ... [详细]
  • 尾部|柜台_Java并发线程池篇附场景分析
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java并发-线程池篇-附场景分析相关的知识,希望对你有一定的参考价值。作者:汤圆个人博客 ... [详细]
  • 32位ubuntu编译android studio,32位Ubuntu编译Android 4.0.4问题
    问题一:在32位Ubuntu12.04上编译Android4.0.4源码时,出现了关于emulator的错误,关键是其Makefile里的 ... [详细]
author-avatar
-吴奇润
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有