前期基础知识准备,linux进程及作业管理相关的知识:ip命令,ss命令,配置文件,centos7
ifcfg,ip,netstat,ss命令使用
配置文件:
/etc/sysconfig/network-scripts/
ifcfg-IFNAME 网卡配置文件
route-IFNAME 静态路由配置文件
nmcli, nmtui的使用
操作系统的组成部分(从底层硬件到顶层应用程序)
应用程序
库 进行library调用,为了便于编程
内核 kernel
硬件
内核的功用:进程管理,文件系统,网络功能,内存管理,驱动程序,安全功能
指令发给CPU运行,需要特权操作如何处理?
如果程序不是面对硬件研发,而是面对应用程序和库进行的研发,需要调用硬件的时候要通过内核,等待内核反馈调用结果,等待调用的过程,程序会停下来了(软中断),内核把调用的功能放到CPU上,内核反馈调用结果后,程序继续执行。
运行用户代码时表示运行在用户模式下,执行内核代码时,表示运行在内核模式下,用户模式也叫用户空间,内核模式也叫内核空间。
在用户模式与内核模式之间变化叫做模式切换。如果大量时间都花在内核模式上,那么程序是不理想的。
注意:这里有一个概念,特权指令,一般只能内核可以调用/管理硬件,这里内核不是指管理员
如何能实现将有限的资源分配到进程无限反复连接中?
利用时间节点,任务结束立即换其他任务,多个cpu如何排序?根据进程的优先级,如果一个进程霸占CPU如何处理?利用优先级更高的对它进行处理,这里一个高级别的工具就是进程调度工具。换到下一个进程时,会把前面的进程覆盖掉,多次运行时如何防止丢失?通过把进程运行当前状态保存下来,CPU中有计数器可以进行记录。但也会不断会发生保存线程切换线程。线程的信息保存在哪里?保存在内核,因此内核要了解每个线程。
内核为每个进程创建一个源数据结构,特定的组织形式,
process:运行中的程序的一个副本
存在生命周期,从创建开始直到结束
Linux内核存储进程信息的固定格式:task struct
多个任务的task struct组件的链表:task list
列表,有先后顺序,指向下一个进程,最后一个指向第一个,也有双向的列表,双向循环列表。
当进程试图运行特权指令时,cpu就会立即唤醒内核,因为cpu会被中断触发,中断优先级非常高,此时只允许内核处理进程,
进程创建:
开机的时候,等待内核启动,内核开始接管后,内核启动第一个进程init,init后续用户空间的所有管理功能,负责向内核提交指令。
init 由kernel创建
进程都由其父进程创建
fork(),clone()
子进程不能离开父进程存活,子进程与父进程使用同一个内存空间,子进程要修改数据,子进程把父进程的数据复制出来,放在新的内存区间,即写实复制。子进程需要由父进程销毁。子进程开始工作的时候,父进程处于静默状态,直到子进程完成工作并反馈给父进程,父进程继续执行。
多个进程需要运行,但CPU和内核只有一个?如何判读先运行哪个?等待运行的进程很多的时候如何处理?进行遍历。
海量进程的时候,遍历太慢怎么办?
扫描每个队列的首部,先进行总体判断,程序算法的复杂度
big o的概念
o(1)复杂度增加,时间恒定,o(logn),o(n),o(n^2),o(2^n)
进程优先级:
0-139
1-99 实时优先级
100-139 静态优先级 用户可以调动
数字越小,优先级别越高
nice值
-20,19对应100-139
进程内存
同一进程涉及的数据不同时,对内存的占用也是不同的,如何确定分配的内存?把设备内存切割成固定大小的片段,一般时4k,从众多页框中找一些空闲的分给进程,将多个片段虚拟化合并成一个空间分配给进程。
线性地址空间,名义上进程可以使用的最大可能空间。
物理地址空间,真正分配给进程使用的实际空间。
这里有先进后出和后进后出的方式
LRU, 最近最少使用算法
如果原先地址被占用,必须生成新的地址,重新映射。
缺页异常,需要重新载入,有大异常和小异常的概念。
常驻内存级,不能被交换,虚拟内存集,可以被交换。
page frame, 页框,用于存储页面数据
MMU, memory management unit
IPC, inter process communication
同一主机上
signal
shm shared memory
semenohor
不同主机上:
rpc,remote procecure call 远程调用
socket, 保存自己的地址和端口以及通信方的地址和接口,通过tcp或udp协议交换
linux内核,抢占式多任务
进程类型
守护进程,daemon,在系统引导过程中启动的进程,跟终端无关的进程
用户进程,用户终端启动的进程,前台进程,跟终端相关,通过终端启动的进程
注意,也可把在前台启动的进程送往后台,以守护模式运行
进程状态
运行态,running
就绪态,ready
睡眠态
可中断,interruptable
不可中断,uninterruptable
停止态,暂停于内存中,但不会被调度,除非手动启动之,stopped
僵死态,zombie
I/O两个过程,磁盘到内存,内存到进程内存。存在同步和异步的概念。
进程的分类
cpu-bound cpu密集型
io-bound io密集型
内核监测到进程占用cpu过多,会将其优先级降低
还可以深入学习《linux内核的设计与实现》,《深入理解linux内核》