一个完整的计算机系统:静态
最底层是硬件,硬件之上是操作系统,也叫内核(即kernel),操作系统提供的是系统调用,在内核之上,是各种库,提供库函数,在此之上是各种应用程序,应用程序可能是基于库函数实现的,也可能直接使用系统调用。
x86引入了访问特权等级(0-3)的机制,x86 cpu共有4个特权级 level0 到 level3 ,也称为ring0~ring3,其中level0特权级最高,level3特权级最低。level0(即ring0,特权指令)只能由内核执行,处理器通过识别CPL、DPL、RPL这3中种特权级进行特权级检验。
内核的功能:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能
一个程序运行分为用户模式和内核模式,用户模式下,cpu运行用户指令,当程序需要用到内核功能时,就会调用系统调用,进入内核模式,cpu运行内核指令。
模式切换:从用户模式到内核模式和从内核模式到用户模式的切换。
时间片:每个进程不能始终占有cpu,而是使用一段固定的时间,即时间片。
进程切换:多个进程同时运行,轮流使用cpu,就是进程切换。
保存现场:进程切换时,需要保存进程的状态,以便下次能够接续执行。
恢复现场:再次执行中断的进程,需要先恢复上次保存现场的状态。
Process(进程):运行中的程序的副本;进程有自己的生命周期。(程序是静态的文件)
内核要为每一个运行的进程创建一个元数据,存储进程状态信息,格式是固定的,叫做任务结构体,task struct,多个任务的task struct组成的链表:task list
进程创建:内核加载完毕,创建第一个进程init,来管理用户空间
init
父子关系:进程都由其父进程创建,父进程调用fork(),创建子进程,子进程与父进程一开始拥有相同的空间,当子进程需要修改数据时,发生写时拷贝(CoW),clone()父进程,然后指向克隆后的起始空间,执行自己的修改操作。
进程优先级:0~139
1-99:实时优先级:(数字越大,优先级越高)
100-139:静态优先级(数字越小,优先级越高)
Nice值:-20~19
内存分配:page frame:页框,线性地址空间,物理地址空间。
MMU:Memory Management Unit,线性地址到物理地址映射
IPC:Inter Process Communication
同一主机:signal、shm——shared memory、semerphor
不同主机:rpc——remote procedure call、socket
Linux内核:抢占式多任务
进程类型:
守护进程:daemon,在系统引导过程中启动的进程,跟终端无关的进程;
前台进程:跟终端相关,通过终端启动的进程。
注意:也可把在前台启动的进程送往后台,以守护模式运行。
进程状态:
运行态:running
就绪态:ready
睡眠态:一次I/O需要两步:从磁盘到内核内存,从内核内存到用户内存。
可中断:interruptable
不可中断:uninterruptable
停止态:暂停于内存中,但不会被调度,除非手动启动之:stopped
僵死态:zombie
进程的分类:
CPU-Bound:多分CPU时间片
IO-Bound:优先级高
Linux进程查看及管理的工具:pstree、ps、pidof、pgrep、top、htop、glance、pmap、vmstat、dstat、kill、pkill、job、bg、fg、nohup
pstree:显示进程树
Centos7中:起始进程是systemd
Centos6中:起始进程是init
ps:process state,进程状态查看工具。report a snapshot of the current processes
每一个进程都会映射到/proc目录下的一个数字目录,对应的这个数字目录下有一个cmdline文件,说明启动这个进程的命令:
目录中还包含其他一些文件,包含了更多的信息,Linux系统各进程的相关信息均保存在/proc/PID目录下的各文件中。因为这些文件及信息相对复杂,于是就有了各种进程查看工具,都是来遍历这个目录,以不同格式显示相关信息。
ps [OPTION] ...
选项:支持两种风格
常用组合:aux
u:以用户为中心组织进程状态信息显示
a:与终端相关的进程
x:与终端无关的进程
[root@localhost ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.2 1.5 128932 7636 ? Ss 1