zoukankan      html  css  js  c++  java
  • 进程管理

    进程管理
        1、操作系统基础
            调用:kernel通过给应用程序提供system call方式来提供硬件资源;
            注意:这个应用程序也包括库文件;
            库文件是运行在ring 0上的一段程序代码,不对客户直接提供应用;
            中断、保护现场

        2、进程运行原理(一个进程与多个进程)
            一个进程:首先我们需要把硬盘中的程序代码加载到内存(复制),再将这段程序放到CPU上运算,此时,这段程序就会去调用(也会自动生成)很多的进程;由这些进 程来完成程序所指定的任务;
    在这个过程当中:我们就需要解决数据输入与输出,还有存储的问题

    (不讨论多核、CPU多线程的情况)
            多个进程:在电脑中一般都是存在多个进程的,而CPU却只有一个,我们就使用time space的方式来给进程分配固定的时间来运行;某个进程只能在轮到自己运行的时候 才会被放到CPU上执行,时间一到就会自动被踢下来,CPU则会执行下一个进程;
    问题:
        1、进程谁先谁后的问题?
            进程优先级
        2、如果进程没有运行完就被踢下来了怎么办?--解决数据存储的问题
        3、如果进程造反了怎么办?

        3、进程优先级
            0-139
            0-99 实时进程 越大越优先
            100-139 非实时进程 越小越优先
            【特性:普通用户可以转让自己的优先级】
            nice值:定义普通进程的优先级,-20 - 19
            轮了一圈以后怎么办?
              在我们内存上,会提供一个空间;这个空间会专门用来存放运行过后的进程;
              当所有的进程运行完成一遍有,这个空间,就会和原有空间对调;再提供给CPU读取;
              一直轮换,知道进程运行完成;

        4、进程数据怎么办?
            1、程序数据
            2、输入数据输出数据(运行到一半留下的数据)
            3、进程元数据
            task struct 数据结构体:它定义了进程数据的存储格式;我们将进程数据,以及进程元数据存储tast struct中;这种结构下,方便CPU快速存储于读取;

        物理地址空间--线性地址空间
            进程在运行后的一些数据,通过线性地址对应的物理地址,存储到内存(页框page);MMU(内存管理单元)就是用来将不连续的物理地址转换为连续的线性地址;
    这些分开的页框的数据又两种组织形式:1、链表型数据 2、双向链表

        5、如果进程造反了怎么办?
            linux结构下进程也是树形结构 -- pstree
            内核管理不会去直接管理;一般所有的进程都由上一级进程来管理--父子进程概念;
            最大的进程--init,有权限去管理所有的进程;

        正常情况:
            1、如何生成子进程
              写实复制:
              父进程在需要完成一项工作的时候自己无法完成,则需要生成对应的子进程来完成这项工作,并且把自己的内存空间中的数据复制一份交给子进程,用来存储子进程所运行数据;--这个过程我们就叫做写实复制;
            2、子进程完成任务以后,如果关闭
              子进程任务完成,功成身退,交出所有的占用资源;再由父进程关闭子进程,这个周期就结束了;

        6、进程间的通讯原理
            1、主机内进程通讯
              single 信号通讯
              共享内存
              管道形式
            2、主机间的进程通讯
              streams -- rpc
              socket

        7、进程类型
            守护进程 -- 维护系统的正常运行
            普通进程 -- 提供应用

            另外一种分类方式:根据占用资源的不同
            占用CPU多进程 -- 后台运行进程
            占用内存多的进程 -- 前台要显示进程

        8、进程的状态
            进程和程序比较起来,进程是有生命周期的,他会死去;
              1、running 运行
              2、sleeping状态
              3、stop 停止状态
              4、zombie 僵死状态
              5、中断状态

    ==========================================================

    回顾:
        进程管理:
            调用
        内核空间 用户空间
            1个进程运行:
            多进程再单核单线程cpu上运行的情况:
        cpu资源
            1、谁先谁后?
            2、数据存储的问题?
              task struct
              page -- 页框是一个虚拟概念,页框之间并不知道对方的存在,只知道自己独占内存空间
            3、进程暴走了
              父子进程的概念
              写实复制
            4、进程的分类、进程的通讯、进程状态

    ==========================================================

        进程管理的命令
            pstree
        通过树形结构显示进程关系
            yum install psmisc -y
        *ps
        查看进程状态--当前运行状态;(这一刻)
        PID 进程ID
        TTY 启动该进程的终端是谁 pts
        TIME 进程累计再CPU上运行的时长
        CMD 启动该进程进程命令程序

        ps的常用组合:
          ps -aux
          USER 进程所属用户
          PID
          %CPU
          %MEM
          VSZ virtual memory size 虚拟内存大小;进程自己再内存中真是占用的线性地址空间大小
        RSS 常驻内空间(不可以进行内存交换 -- swap)
          TTY
        STAT 进程状态
          R running
          S sleeping
          T stoped
          Z zombie
        附加状态
          s 代表是lead进程--bash
          + 前端进程
          < 高优先级进程
          N 低优先级进程
          D 表示不可中断
          W 没有足够的内存可以分配
          l 表示多线程进程;多线程 -- 把一个进程拆分为多个线程来完成,这样提高进程运行速度
        START 进程启动时间
          TIME
          COMMAND
          ps -ef
        PPID 父进程号
          C 进程运行再那个CPU上
          ps -ejH
        以树形结构显示进程
          ps -eo
        自定义参数格式
          ps -eo uid,pid,comm
          ps -U
        查看指定用户所运行的进程
          ps -U root

        top
          与ps相反,top实时状态,会动态刷新
          k --> 关闭进程 输入PID即可;
          h --> 帮助页面

        调整top排序:
          M 根据内存大小进行排序
          P 根据CPU利用率来进行排序
          T 根据使用CPU累计时长来进行排序
          N 根据PID来进行排序

        可以详细显示最上面的命令
          1 2 3
          htop
          top的高级版本,默认yum源中是没有的,需要去下载并编译安装使用
          vmstat
          查看虚拟机内存的相关信息
          进程信息
          内存信息
          交换内存信息
          system系统IO相关信息 -- in cs
          cpu信息
          -s //以统计的形式来显示相关信息
          pmap
        报告内存的映射信息
          pmag pid
          映射内存空间中的物理地址信息和CPU所能识别的线性地址信息;
        pidof
        通过进程ID(UID)来查看进程号(PID)
          pidof bash
          dstat
          默认没有为我们安装上 yum install dstat
          动态的显示各种信息,可以自己定义
          建议:去man dstat
        kill
          管理进程
          通过kill对进行发送响应的操作信号
          1信号 HUP -- 让进程重读配置文件,不重启进程
          2信号 INT -- 中断进程
          9信号 KILL -- 强制关闭进程,不去保存进程数据
          15信号 TERM -- 优雅关闭
          kill -l //查看系统支持所有信号
          kill -9 pid
        pgrep
          进程过滤,也可以做进程查找--类似于pidof
        pkill
          直接去关闭进程--可以按照UID(名字)来关闭进程
          jobs

        ctrl + z

          fg -- 切回到后台进程 : jobs -l + -- 默认切回来的指定进程;
          COM & //脚本运行的时候
          bg -- 将前端送到后台



  • 相关阅读:
    java简单计算器,只能鼠标点击数字
    可以掉落和滑动的星星
    servlet生成数字验证码
    web服务器底层-http请求与相应
    Codeforces 990D Graph And Its Complement 【构造】【性质】
    2018美团CodeM编程大赛 Round A Problem 2 下棋 【贪心】
    Codeforces 988F Rain and Umbrellas 【dp】
    Codeforces 988D Points and Powers of Two 【性质】【卡常】
    Codeforces 981D Bookshelves 【dp】【性质】
    POJ 2104 K-th Number 【主席树】【不带修改】
  • 原文地址:https://www.cnblogs.com/Eucalyptusleaves/p/11451882.html
Copyright © 2011-2022 走看看