进程

进程

1)进程相关概念
2)进程工具和系统性能相关工具

https://blog.csdn.net/wdirdo/article/details/100008565

3)作业管理、并发执行和计划任务

https://blog.csdn.net/wdirdo/article/details/100019036

进程


进程概念

  • 进程(Process): 运行中的程序的一个副本,是被载入内存的一个指令集合

  • 进程的特征:
    正在运行的程序
    ①会消耗资源
       占用的资源:比如一段独立的内存空间等
    ②有生命周期
      进程开始至进程结束,中间有许多进程状态
    ③进程ID(Process ID,PID)号码被用来标记各个进程
       PID在进程运行期间唯一,进程结束就被回收
    ④UID、GID、和SELinux语境决定对文件系统的存取和访问权限
       Linux安全上下文
    ⑤通常从执行进程的用户来继承

  • 程序:磁盘文件(/usr/sbin等下的文件)

  • 守护进程:随着计算机启动而运行,随着计算机的关闭而关闭

  • task struct:Linux内核存储进程信息的数据结构格式
    ①系统分配
    ②记录进程相关属性

  • task list:多个任务的的task struct组成的链表

  • Linux进程创建:
    (centos6第一个进程:init)(centos7第一个进程:systemd(1))
    进程:都由其父进程创建,fork(),父子关系,CoW

centos6以前第一个进程均是init
centos7上/usr/sbin/init是system的软链接

[root@centos7 ~]# ll /usr/sbin/init 
lrwxrwxrwx. 1 root root 22 Jul 17 16:54 /usr/sbin/init -> ../lib/systemd/systemd

CoW :copy on write 写时复制
    意思是当子进程创建时不会立即创建内存空间,可能与其父进程指向相同的内
    存空间,一旦当子进程涉及到数据的修改时,此时会立即复制父进程的内存空
    间,创建一块独立的内存空间,将子进程指向此空间,只有发生变化时,才会
    发生复制。----以便节约内存空间


进程、线程、协程


  • 进程是一个独立运行占用资源的单位,进程执行最终表现位线程执行,有可能只有一个。

  • 线程:真正处理数据的单位、执行单位

  • 线程和进程是由操作系统进行调度的,由操作系统进行分配的。进程和线程的管理等资源分配都是有操作系统完成的

  • 协程:针对某种开发语言来说例如:Python,协程可以理解为一个线程里独立执行的语句块。协程调度使用有程序员分配、协程的执行顺序由程序员完成

复杂的任务一般会涉及线程
一个进程中开启的多个线程:{}
    ├─polkitd(6195)─┬─{polkitd}(6223)
            │               ├─{polkitd}(6251)
            │               ├─{polkitd}(6252)
            │               ├─{polkitd}(6261)
            │               ├─{polkitd}(6278)
            │               └─{polkitd}(6296)
这种进程就不涉及线程
    ─sshd(6635)───sshd(11534)───bash(11540)───pstree(12376)


进程的相关概念

  • 查看线程:cat /proc/PID/status |grep -i threads

  • 1)Page Frame: 页框,用存储页面数据,存储Page 4k


    在Linux中进程要运行必不可少的需要分配内存空间,内存空间的分配是通过以页为单位进行分配的,(例如磁盘的读取是以block为单位,此处的页则是分配内存空间的单位) Page 大小固定4K

  • 2)物理地址空间和线性地址空间


    进程在运行时有一个特性:每个进程在运行时都以为自己拥有整个内存空间


    在Linux中,进程拥有的地址空间被称为虚拟内存或者线性内存
    虚拟内存与物理内存空间存在映射–>MMU。

  • 3)MMU:Memory Management Unit 负责转换线性和物理地址。MMU属于CPU固件,硬件

  • 4)TLB:Translation Lookaside Buffer 翻译后备缓冲器
    用于保存虚拟地址和物理地址映射关系的缓存
    TLB放置于CPU中

  • 综上 1)2) 3) 4):用户和内核空间

    假设4G内存空间:3G属于用户空间+1G属于内核空间


    进程的线性空间:可以分成5个部分
    ①代码段:程序运行的二进制程序
    ②数据段:进程运行过程中可能用到的一些变量,这些变量已经被初始化的
    ③BSS(以符合开始的块):存放没有初始化的变量
    ④堆:存放系统中需要使用的内存一部分空间,这部分空间可以动态变化
    ⑤栈:跟堆的区别,栈可以存放一些函数中使用的变量,栈的特点:先进后出

  • LRU:Least Recently Used 近期最少使用算法,释放内存


    LRU算法:近期最少使用算法,考察最近2分钟,某个资源的访问最少,使用频率最少,就淘汰,节省空间。


IPC进程间通信的基本概念

  • IPC: Inter Process Communication
    同一主机:
       pipe 管道 ---- 单工
       socket 套接字文件 ---- 双工
       signal 信号
       shm shared memory
       semaphore 信号量,一种计数器
    不同主机:
       socket IP和端口号
       RPC :remote procedure call
       MQ 消息队列,如:Kafka,RabbitMQ,ActiveMQ


进程优先级

  • 进程有优先级之分,Linux系统进程优先级分为实时优先级和非实时优先级

    ①实时优先级的进程称为实时进程(realtime:实时进程)对应系统优先级0-99
    ②系统大部分进程都是非实时进程:对应系统优先级100-139
    ③相同优先级的进程执行的两种执行机制:FIFO(先执行正在执行的进程) RR(轮询)



    注意: 不同命令和系统优先级的对应关系

  • 进程优先级:
    系统优先级:数字越小,优先级越高
    0-139:各有140个运行队列和过期队列


    实时优先级: 99-0 值最大优先级最高
    nice值:-20到19,对应系统优先级100-139


    nice优先级是按时间片次序分配资源的,时间片一到比较优先级,运行下一进程,涉及比较的问题(怎么排序?)


    排序解决:准备0-139个比较队列,比较的逻辑如下图:



    这样比较的优势:不管进程有多少个,比较所花费的时间是一样的

  • Big O:时间复杂度,用时和规模的关系
    O(1), O(logn), O(n)线性, O(n^2)抛物线, O(2^n)


进程的基本状态和转换


  • 创建状态:进程在创建时需要申请一个空白PCB(process control block进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态

  • 就绪状态:进程已准备好,已分配到所需资源,只要分配到CPU就能够立即运行

  • 执行状态:进程处于就绪状态被调度后,进程进入执行状态

  • 阻塞状态:正在执行的进程由于某些事件(I/O请求,申请缓存区失败)而暂时无法运行,进程受到阻塞。在满足请求时进入就绪状态等待系统调用

  • 终止状态:进程结束,或出现错误,或被系统终止,进入终止状态。无法再执行

状态之间转换六种情况
  • 运行——>就绪:1,主要是进程占用CPU的时间过长,而系统分配给该进程占
    用CPU的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出CPU,该进程便由执行状态转变为就绪状态
  • 就绪——>运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配CPU
  • 运行——>阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态,如发生了I/O请求
  • 阻塞——>就绪:进程所等待的事件已经发生,就进入就绪队列
  • 注意: 进程状态的切换是由一定的前提条件的,以下两种状态是不可能发生的:
  • 阻塞——>运行:即使给阻塞进程分配CPU,也无法执行,操作系统在进行调度时不会从阻塞队列进行挑选,而是从就绪队列中选取
  • 就绪——>阻塞:就绪态根本就没有执行,谈不上进入阻塞态


进程状态

  • Linux内核:抢占式多任务
    按照时间片分配资源的,时间一到,内核将CPU抢占过来,分配给下一进程使用。不会导致某一个程序崩溃,导致系统崩溃。

  • 进程类型:
    守护进程: daemon,在系统引导过程中启动的进程,和终端无关进程
    前台进程:跟终端相关,通过终端启动的进程,依赖终端
    注意: 两者可相互转化

  • 进程状态:
    运行态:running
    就绪态:ready
    睡眠态:大多数程序处于可中断的睡眠态
       可中断:interruptable
       不可中断:uninterruptable
    停止态:stopped,暂停于内存,但不会被调度,除非手动启动
    僵死态:zombie,结束进程,父进程结束前,子进程不关闭
       僵尸态进程还占据着一定的资空间,一般处于僵尸的程序只能重启计算机才能释放资源,处于异常状态


系统管理工具

  • 进程的分类:
    CPU-Bound:CPU密集型,非交互
    IO-Bound:IO密集型,交互

  • Linux系统状态的查看及管理工具:pstree, ps, pidof, pgrep, top, htop, glance, pmap, vmstat, dstat, kill, pkill, job, bg, fg, nohup

  • pstree命令:
    pstree display a tree of processes

  • ps: process state
    ps report a snapshot of the current processes
    Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值