zoukankan      html  css  js  c++  java
  • 二十一、进程管理之一基本概念

     

    硬件    

    调用、调用接口、库调用

    线性内存地址空间、物理内存地址空间、线性地址、物理地址

    交换内存:缺页异常

    进程内存结构

    常驻内存集、虚拟内存集

    进程、进程元数据、结构体、任务结构体、链表

    进程类型、状态(read,runing,sleep,stopped,zombie)

    可中断睡眠、不可中断睡眠

    创建子进程的过程 

    进程优先级、进程调度、进程队列

    过期队列:抢占式多任务、系统调用IO

    IO模型、系统调用IO等待过程

    进程间通信:IPC

    硬件    

    wKioL1mG0aCBngAZAACxmFPnkEo823.png

    编程接口

         syscall(系统调用)

        libcall(库调用)

        硬件

    库调用: 用户空间发生(独立的模块或系统调用的二次封装)

    系统调用:内核空间发生,特权指令

        **如果非内核将要运行特权指令,会发起软中断,CPU会通知内核,除非内核有漏洞,特权指令一定是由内核执行。

    调用:载入事先编写好的功能模块

    模块:由别人提供,调用此模块完成功能

    调用接口:得到模块的途径

        例如:想要卖一双鞋(功能),到鞋店去买(提供功能的位置),鞋店的大门(调用接口)。

    内核的功能

          驱动硬件、用户及权限管理、网络管理、程序包管理、文件系统管理、进程管理、安全管理

    网络管理: ip,ifcfg,nmcli配置ip,route,dns。配置文件配置ip,dns,route,图形工具配置

    文件系统管理: 块组、bitmap,GDT,Supper Block,VFS,同步IO、异步IO,写时复制,快照,中断信号,同步、通知机制、扩展槽、适配器、控制器

    程序包管理:rpm , yum , dnf (yum比rpm多了查询搜索、事务历史功能),Ip比ifconfig多了(清空,查询过滤)

    进程管理

        1)进程创建

        2)进程调度

    CPU使用和不使用的区别

        1、都是以相同频率工作

        2、消耗电一样

        不使用,白白浪费性能

        使用,CPU占据60-80%都有价值。

    一、线性内存地址空间、物理内存地址空间、线性地址、物理地址

    线性内存地址: 进程使用的地址

    1.1、进程只能通过线性地址追踪数据

        1)将地址映射关系保存于内核内存的task struct表中,由内核虚拟出进程内存为整个内存大小
    
        2)由cpu的MMU(Memory Manager Unit)单元完成映射 

    1.2、交换内存:虚拟内存,中进程内存突然增大,可能物理内存不够用。基于LRU算法找出最近最少使用的内存数据,就将物理内存中的数据放入同内存有相同格式的磁盘中,以后使用时,用相同的方法,将数据交换到磁盘中,将交换分区要使用的数据加载至物理内存中。

        当数据从磁盘中调回时,可能物理内存的地址发生变化。引起 “缺页异常”:虚拟内存中的数据地址映射的物理内存的地址没有数据

            1)、大异常、小异常

            2)、要从磁盘中读数据:a)数据在交换分区中。b)重读数据

    可参考:http://note.youdao.com/noteshare?id=d78c57366914f603526605a22d893346&sub=10966AB8F4504EAB8E295E00E3095682

    1.3、进程内存结构

    1.4

    常驻内存集:不能交换出去的数据:指令所有空间"匿名页"

    虚拟内存集:可以交换出去的数据:数据所有空间

    进程:运行中的程序

        有生命周期:创建、运行、销毁

    1.5、进程元数据

        位置:内核内存中,当进程切换或发起系统调用时,均会操作则表

    进程元数据结构

    task struct 任务结构体
    
    thead_info 线程信息
    
    flags 标识
    
    run_list 运行列表
    
    mm 内存结构
    
    real_parent 真父
    
    parent 养父
    
    tty 在哪个终端启动
    
    files 打开的文件
    
    signal 自己持有的信号
    
    物理地址和线性地址映射关系

    结构体:保存进程元数据的结构

    tast_struct : 进程元数据放至结构体中,称为任务结构体。一个进程也称为一个任务

    1.6、链表

        1、任务结构体的组织结构

        2、每个结构体的结束处指向下一个有相同结构的结构体的起始处

    1.7、链表类型

        循环链表:最后 一个结构体的结束处指向第一个结构体的起始处

        双向链表:结构体的结束处指向下一个结构的起始处,并且此起始处又能指向上一个结构体的开始处

        双向循环链表:both above

    二、进程类型

      密集型

            CPU密集型:优先级低,运行进程少时,也可获取大量CPU资源;     非交互式

            IO密集型:优先级高,消耗CPU资源少,在需要CPU时,尽量满足。  交互式

        前、后台

            前台进程:在终端(控制器、虚拟、模拟)启动。 在终端也能启动后台进程(服务进程)或将前台进程送到后台,以守护模式运行;

            守护进程(后台进程):在系统引导过程中启动的进程,跟终端无关的进程。

    进程创建:程序分配cpu资源及内存资源,即为一个进程

    刚开机时,进程放在cpu上运行,等内核掌控一切,创建内核空间

    内核创建第一个进程(用户空间建立)/sbin/init

    init进程:

        1、代替内核完成用户空间中操作
    
        2、不能代替内核完成 系统调用的执行

    进程创建子进程

        1、子进程也能创建子进程
    
        2、子进程和父进程共用一段内存空间,内存空间只读
    
        3、当子进程需要修改内存空间中的数据时,基于写时复制完成

    进程销毁:父进程替子进程收尸,如果父进程先于子进程挂。则为子进程找一个养父,才能收尸。

    进程的状态:

        ready: 在进程队列中等待运行
    
        runing: 在cpu上运行
    
        sleeping: 睡眠
    
        stopped: 在内存中,有task struct但不会调度至cpu上运行,除非手动启动
    
        zombie: 没有父进程清理尸体

    睡眠

       可中断睡眠:interruptable
    
            运行队列:等待被调度至CPU上运行
    
            过期队列:CPU时间消耗完毕
    
        不可中断睡眠 : uninterruptable
    
            过期队列:系统调用等待IO过程 

    进程运行中的进程需要完成特定功能

        1)系统调用: 特权指令的封装(程序操作硬件时,发起系统调用) 
    
        2)子进程完成:父进程调用程序,运行程序创建一个子进程完成功能。

    进程优先级、进程调度、进程队列

    进程优先级:0-139,
    
        0-99:实时优先级,不可调。
    
        100-139(-20,19)静态优先级:普通用户只能调高,root用户没有限制

     进程调度:kernel按cpu划分时间片,依据优先级从运行队列挑选出优先级最高的队列,下次调度至cpu上运行

            只扫描运行队列,找到优先级最高的队列,即为下次调度至cpu上执行的进程

        a)、进程队列:一个优先级对应2个队列:等待被调度至cpu上运行的的队列、过期队列

            1、提升进程调度能力

            2、一共有280个队列

         b) 、过期队列:运行队列运行完毕,过期队列和运行队列会互换位置

    Linux 多任务模式:抢占式多任务

        进程运行时,有几个时间点可以被其他高于当前进程的进程所抢占。被抢占的进程,调度至过期队列,等待下一个循环

    系统调用等待IO过程:

    发起系统调用的进程,等待系统调用IO时,也会被调度至过期队列中,等待下一个循环

    系统调用内核完成IO操作

    第一阶段:kernel将磁盘中的数据加载至内存中

    第二阶段:将Kernel内存中的数据复制到进程内存中(进程IO过程)

     

    IPC: Inter Process Communication

        同一主机: 信号、share memory 、 semenphor 

            信号 signal(masage queue)
    
            共享内存, share memory 找一段内存空间扔数据,另一个进程从内存中读数据
    
            旗语 semnphor
    
            管道: pipe

      不同主机: rpc,socket

            rpc ---remote processcure call 本机发起调用,在另一个主机执行

            socket---ip: port 通信基于TCP,通信前建立TCP连接,二者间,建立虚拟链路

    三、IO模型

    同步、异步

    阻塞、非阻塞

    左侧进程在内核完成特权指令时的的状态。

    右侧内核执行特权指令的阶段

    同步IO

    阻塞:进程挂起,第二阶段看着内核将数据复制到进程内存中(挂起)

    非阻塞:进程不挂起,反复查看内核是否已经完成第一阶段,第二阶段看着内核将数据复制到进程内存中

    异步IO

  • 相关阅读:
    CentOS查看CPU信息、位数、多核信息
    Linux常用命令大全
    chmod命令详细用法
    tar命令的详细解释
    yum和rpm命令详解
    LeetCode 241. Different Ways to Add Parentheses
    LeetCode 139. Word Break
    LeetCode 201. Bitwise AND of Numbers Range
    LeetCode 486. Predict the Winner
    LeetCode 17. Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/liuzhiyun/p/11403523.html
Copyright © 2011-2022 走看看