系统

计算机运行起来以后,就是由内核和运行在内核之上的众多进程来实现的(kernel+process)

内存分为 :    线性内存:

物理内存:

计算机的所有运行都只在内存和CPU中运行!

内核空间:在整个系统中,内核运行的所在位置或空间

用户空间:在整个系统中,用户进程运行所在的位置或空间

进程恢复(内核工作时,进程是轮循工作的)

负责追踪每一个进程执行状态信息,而且还必须明确知道当前系统上一共有多少个进程,那他怎么追踪呢?

内核在他自己的空间中(内核空间)维持有一个内核数据结构(task struct)

任务结构(task struct):使用一个横向的表(数据表),包含PID、name、父进程、上一次执行的指令到哪里了.......

恢复现场:用户空间中保存的是用户的进程,而任务结构表保存在内核空间,CPU中有寄存器,CPU运行时,会把任务状态表装载进来。

当用户空间的进程运行中断时,CPU会保存现场,会将进程进行到第几个指令保存在内核空间的任务状态中。

当用户空间的进程执行完后,程序就会退出用户空间,内核会销毁内核空间的任务状态表。

程序由指令和数据组成

在真正的物理内存中,由多个进程和一个内核共处在同一个硬件上的,要想形成这种机制,我们的CPU必须将内存化分成除了内核之外的内存,许许多多的位置都给他化分成一个个的页框,每一个都是固定大小的存储单元,当任何一个进程(process)启动起来时,假如说这个进程需要10k空间,由我们的内核接受进程的申请,内核负责在内存中找三个这样的页面给这个进程(很可能这三个页框是不相邻的),但是在每个进程自身看来,这些空间是连续的。内核管理这些空间,所以在内存的内核空间中维护着一张表,这张表在任务结构数据表下的一个子结构,这个子结构中定义了每一个页面数据和他存储的具体页框的对应关系,

堆内存:一个进程要打开一个文件时,文件中有数据,这些数据要载入内存中才能被CPU访问,必须要把这个文件载入内存,要是真正放入物理内存,内核必须申请几个页面,把数据放进内存。数据若扩大,内核还会继续申请页面。根据需要不停的动态申请的内存空间

MMU(内存管理单元):它是中央处理器(CPU)中用来管理虚拟存储器、负责虚拟地址映射为物理地址、物理存储器的控制线路,

TLB:传输后备缓冲器是一个内存管理单元用于改进虚拟地址到物理地址转换速度的缓存。

进程状态

stopped:停止状态,不会被调动

ready:就绪,排队中

executing:正在运行当中

sleep:睡眠状态,运行中需要别的数据切换给其他数据

uninterruptible  sleep :不可中断的睡眠,他需要调动的外部资源仍然没有满足,就算把它调动到CPU上也不能继续运行。

interruptible    sleep :可中断睡眠,任务执行完成,但后面还可能会执行其他任务,呆在这里等待着。

zombie:僵尸进程,正常运行了,也结束了,但是他所占据的内存就不释放。

D :不可中断睡眠

R :运行或就绪

S :可中断进程

s :会话进程的首进程

T :停止

Z :僵死

< :高优先级进程

N :低优先级进程

L :多线程进程

+ :前台进程组中的进程

进程优先级

进程优先级是从0到139,一共是140个进程,

从100到139是由用户控制的,数字越小优先级越高!

从0到99是由内核调整的。数字越小,优先级越低。

每一个进程都有一个nice值,普通用户仅能够跳大自己的进程的nice值。

nice值负20到19

nice值:手动调整静态优先级

查看优先级:ps  -e  -o  class,rtprio,pri,nice,cmd

-e  查看所有和终端相关的进程

-o  自定义显示字段

class 调度类别

rtprio  实时优先级

pri  静态优先级

nice 手动调整静态优先级  -20-19

cmd  命令/内核线程

3、始终都是由高优先级进程运行,那低优先级的进程怎么办?

进程类别

交互式进程:IO密集型的,等待IO

批处理进程:CPU密集型的,守护进程,大量的计算。。。

实时进程:随时要运行,立即执行/响应。

调度器功能:记录系统中所有进程的执行情况;选择占有处理机的进程;进行进程上下文切换。

调度是根据优先级完成的

4、linux内部优先级分为三类

实时优先级:实时进程优先级,1-99,数字越小,优先级越低。跟内核相关的。

静态优先级:跟用户相关的,100-139,数字越小,优先级越高。

5、调度类型

实时进程

SCHED_FIFO :先进先出队列

SCHED_RR : 轮调,

SCHED_Other:用来调度100-139之间优先级进程,用户进程

6、动态优先级:内核随时监控着这些优先级,若是某一个进程已经很长时间停留在那里。内核会在内部临时性的调高他的优先级。

也可以降低进程的优先级。

始终监视100-139之间的进程,用户进程。

7、调整优先级

用户模式进程使用nice调整100-139

nice    优先级值     COMMAND    :以这个优先级启动

renice  -n  新优先级值    PID号/进程号    :对已经启动起来的进程进行调整

内核模式进程/实时进程使用chrt调整1-99

chrt  -f  -p  新优先级   PID号  (已经启动了的进程)

chrt  -r  -p  新优先级   PID号  (已经启动了的进程)

chrt  -r/-f   新优先级   COMMAND   (还没有启动的进程)

-f:调整SCHED_FIFO 先进先出队列 类别的

-r:调整SCHED_RR 轮调 类别的

-p:pid号

详解Linux操作系统的进程的更多相关文章

  1. 详解Linux操作系统的iptables原理及配置

    linux网络防火墙 netfilter :内核中的框架,过滤框架,网络过滤器! iptables  :实现数据过滤.net.mangle等规则生成的工具 防火墙:硬件.软件.规则(匹配规则.处理办法 ...

  2. Linux下ps命令详解 Linux下ps命令的详细使用方法

    http://www.jb51.net/LINUXjishu/56578.html Linux下的ps命令比较常用 Linux下ps命令详解Linux上进程有5种状态:1. 运行(正在运行或在运行队列 ...

  3. Linux进程上下文切换过程context_switch详解--Linux进程的管理与调度(二十一)

    1 前景回顾 1.1 Linux的调度器组成 2个调度器 可以用两种方法来激活调度 一种是直接的, 比如进程打算睡眠或出于其他原因放弃CPU 另一种是通过周期性的机制, 以固定的频率运行, 不时的检测 ...

  4. Linux操作系统的进程管理和作业管理

    Linux操作系统的进程管理和信号 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.lsof命令详解 1>.lsof概述 list open files查看当前系统文件的工 ...

  5. 从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

    做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感 ...

  6. 详解Linux运维工程师高级篇(大数据安全方向).

    hadoop安全目录: kerberos(已发布) elasticsearch(已发布)http://blog.51cto.com/chenhao6/2113873 knox oozie ranger ...

  7. 详解Linux运维工程师

    运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火……(相对表示就是 Python 比较火) 之前写过运维 ...

  8. 一文详解 Linux 系统常用监控工一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)具(top,htop,iotop,iftop)

    一文详解 Linux 系统常用监控工具(top,htop,iotop,iftop)     概 述 本文主要记录一下 Linux 系统上一些常用的系统监控工具,非常好用.正所谓磨刀不误砍柴工,花点时间 ...

  9. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

随机推荐

  1. SCDM导入点数据

    我们有时候需要把外部的点导入SCDM当中,但是SCDM没有像ICEM或者DM那样直接提供点导入的选项,是不是SCDM就无法导入点的数据了呢?答案当然是否定的.把点导入SCDM中的方法总结如下(示例数据 ...

  2. C++判断计算式是大端存储模式,还是小端存储模式

    小端存储:数据的低字节存储在地址空间的低字节位,数据的高字节存储在地址空间的高字节位. 大端存储:数据的低字节存储在地址空间的高字节位,数据的高字节存储在地址空间的低字节位. 判断计算机是小端还是大端 ...

  3. java基础之 hashmap

    Hashmap是一种非常常用的.应用广泛的数据类型,最近研究到相关的内容,就正好复习一下.网上关于hashmap的文章很多,但到底是自己学习的总结,就发出来跟大家一起分享,一起讨论. 1.hashma ...

  4. 微信网页授权+获取用户基本信息+强制关注+JSSDK分享参数

    网页授权+获取用户基本信息+强制关注+JSSDK分享参数 //支付宝红包口令列表 public function view(){ $openid = ""; Vendor('Wei ...

  5. 解决mybatis中#{}导致的The error may involve defaultParameterMap的问题

    今天想实现给指定表插入数据,出现了 ### Error updating database. Cause: java.sql.SQLSyntaxErrorException: You have an ...

  6. solr配置同义词,停止词,和扩展词库(IK分词器为例)

    定义 同义词:搜索结果里出现的同义词.如我们输入”还行”,得到的结果包括同义词”还可以”. 停止词:在搜索时不用出现在结果里的词.比如is .a .are .”的”,“得”,“我” 等,这些词会在句子 ...

  7. 【06月18日】A股滚动市净率PB历史新低排名

    2010年01月01日 到 2019年06月18日 之间,滚动市净率历史新低排名. 上市三年以上的公司,2019年06月18日市净率在30以下的公司. 来源:A股滚动市净率(PB)历史新低排名. 1 ...

  8. 《Linux就该这么学》自学笔记_ch22_使用openstack部署云计算服务环境

    <Linux就该这么学>自学笔记_ch22_使用openstackb部署云计算服务环境 文章主要内容: 了解云计算 Openstack项目 服务模块组件详解 安装Openstack软件 使 ...

  9. selenium爬虫入门(selenium+Java+chrome)

    selenium是一个开源的测试化框架,可以直接在浏览器中运行,就像用户直接操作浏览器一样,十分方便.它支持主流的浏览器:chrome,Firefox,IE等,同时它可以使用Java,python,J ...

  10. Springboot Actuator之十一:actuator PublicMetrics

    前言接下来的几篇文章我们来分析一下spring-boot-actuator 中在org.springframework.boot.actuate.metrics中的代码,如图: 这里的代码不仅多,而且 ...