进程管理:

什么是文件? 其实就是磁盘上的存储空间(一段数据流)

存储方式有: 二进制存储或者是文本存储(字节存储和2进制大有不同,2进制更紧凑)

SHELL脚本 是纯文本的,不能单独执行,用的就是bash解释器(#!/bin/bash) 无论是可执行文件(像ls,cat,这些二进制执行文件)和shell脚本(纯文本,由bash解释器去执行),都是最终成为一个数据流的,交于CPU去处理的。 shell脚本是交给/bin/bash运行,而ls,cat这些可执行文件,也是有依赖公共库文件的

程序只要读数据和输出数据,其实都是I/O数据流的 进程是程序的实例,各个进程不会互相干扰和识别的

内核的作用: 内核是资源调度工具,上图的箭头,其实都是由内核去管理的,分配管理各个进程和CPU处理机制相关的东西。 Linux本身就是抢占式多任务的(根据时钟驱动去抢占) 程序和内核申请资源的话,才能由内核调度给CPU去运行

CPU的计算能力: 是靠时间流逝来进行的 内存的计算能力呢?是空间,大多为分页内存空间,也叫作内存页面(page frame: 页框),而且这个页框是固定大小的 运行程序不是加载程序所有,可能就是加载了一部分,使用固定大小的页框去存储 这个跟磁盘上的磁盘块其实也是差不多的

进程在使用内存空间的时候的机制? 进程不知道内存中是不连续的,而内核是知道的,所以内核都是虚拟了一个空间给进程,让进程以为自己在内存的空间都是连续的,而且每一个进程都以为自己有一个固定大小的内存使用,如果是32位系统,进程都会以为他有4G的内存可用

进程以为自己在内存中的页框都是连续的

Linux的Swap分区就是Window的虚拟内存(Window的这样说法是不太合适的)
因为Swap分区它只是存储一些最近最少使用的,腾出内存空间给新的进程使用,而硬盘保存的只是临时存储的,需要交给CPU再次处理的话,还是需要交还给内存再传送的。

内存映射(产生:共享内存空间)如下图:

Linux中,所有进程的父进程(守护进程)都是init,而Centos7.0+之 后父进程(守护进程)都是systemd init --> 父进程终止子进程,也需要跟内核去申请去执行的,所以每一个进程都有一定的记录信息,让父进程或者是我们用户本身去找到这个进程,通常我们就是用的进程ID去管理这个进程 fork()

C语言的追踪进程的方式:双向循环链表

所谓查看进程数据,就是通过数据结构的标示去访问的
不然我们去访问/proc的话,根本是看不懂的,这就需要进程管理工具帮我们去查看并显示成我们能够接受清晰的数据
父进程调度子进程,相当于领导分派任务,你给我返回一个结果就行了,返回结果之后,父进程在继续往下执行

进程之间可以共享共享库,不过是不能共享数据的 比如两个进程不能同时打开一个文件

线程是一个进程的多个实例

CPU是有保护机制的,之前说的环0,1,2,3(普通的在环3,内核的在环0;23没用先) CPU时钟驱动: 是根据以下去占用CPU去让CPU执行的 进程优先级: 进程调度:进程调度是内核的核心功能之一

公平: 结果公平: 起点公平:

每一个进程刚创建的时候优先级是一样的,当某一个进程占据CPU时间过长,就要降低优先级,而一些没有用的就需要加大优先级,而这个也是有内核去完成的

如下: 就是线性地址空间组织结构图 栈放的是本地变量 堆一般放文件中的数据啊,等等

上图可以看到 4GB的内存,其中1GB给了内核,3G给了其他

Linux一共有140个队列,也就是有140个优先级 0-99实施优先级,是属于内核管理的优先级。越大,优先级越高,所以99的优先级是最高的 而100-140属于用户可以设置的,也就是所谓的Nice值,对应着就是-19到+20,值越小优先级越高

有了这些概念,就可以学习一些进程管理的命令了。