操作系统进程的概念:
计算机操作系统实质上就是一系列运行在内核和内核上的进程所组成,操作系统的各项功能也是由操作系统来组成的,内核进程和普通用户进程的区别就在于二者的运行空间不同:
内核进程:运行在内核空间
用户进程:运行在用防护空间
进程运行时会所需的数据和指令调入内存,此后,指令装入cpu寄存器,由cpu根据指令调用内存中的数据进行操作。在这操作的过程中,如果发现需要对硬件进行操作,则会向内核提出申请(进程通过系统调用【syscall】向内核发起申请),进入内核模式,因为只有内核能操作硬件。
内核接受这个请求之后便会转入内核模式,对应进程的指令此时就从cpu中退出执行,内核为其保留了状态信息(进程id,进程名称,执行到指令步骤),完成硬件操作之后,由内核模式退出至用户模式继续执行进程剩余指令,最终向用户返回执行结果。
同时每个进程还有对应的cpu时间,当cpu时间耗尽时也会退出cpu执行,并保存现场,装载其他的指令执行,待轮到这个指令执行的时候回复现场,接着上次执行的位置开始。
进程自己执行的时候是在内存中的,进程的描述信息放在内核中,内核为每个进程维护这一个内核数据结构(task structure)该数据结构保存了进程的相关信息,如:进程父id,进程id,进程名称,执行到那条指令,使用内存信息等。
进程具体执行的时候,内核会通过“任务结构:task structure”保存的状态信息到内存中找到相应的指令(即上次保存现场退出后最后执行的指令 )载入到cpu重新开始执行,这过程也叫恢复现场。
只有当进程运行完毕以后,才会释放对应的内存空间,内核维护的任务结构才会销毁。
进程状态:
Sopped:处于停止状态的进程
Ready:就绪,轮到该进程的时候能马上到CPU上运行
Executing:运行中的进程
Uninterruptible:不可中断的睡眠状态。如一个正在运行的进程,需要打开一个文件,此时会产生磁盘的IO请求,由于磁盘的IO速度较慢,此时进程会交出CPU,进入到睡眠状态,一直等到文件打开完毕后,才会重新唤醒该进程,调度到CPU上继续运行。若所需文件未打开,即使是手动调度到CPU上,该进程也不会运行。所以这种睡眠称为不可中断
Interruptible:可中断的睡眠状态。进程由于空闲而进入睡眠状态,如数据库进程,当执行完一个用户的请求后,该进程处于空闲状态,但数据库进程又不能退出(数据库进程以守护进程的模式运行)需要等待其他用户的请求到达,从而进入睡眠状态,当其他用户的请求到达时被重新唤醒调度到CPU上运行,这种睡眠称为可中断睡眠
Zombie:僵尸进程,进程运行完毕之后内存空间并没有释放,并且已经弄不清到底占据了哪些内存空间。会造成内存泄露
在linux中,所有的进程都是init的子进程,而init进程是由内核负责生成,其他的所有进程都是由init负责生成
linux进程树查看:
pstree:
[root@localhost 桌面]# pstree
systemd─┬─ModemManager───2*[{ModemManager}]
├─NetworkManager─┬─dhclient
│ └─2*[{NetworkManager}]
├─abrt-dbus───2*[{abrt-dbus}]
├─2*[abrt-watch-log]
├─abrtd
├─accounts-daemon───2*[{accounts-daemon}]
├─alsactl
├─at-spi-bus-laun─┬─dbus-daemon───{dbus-daemon}
│ └─3*[{at-spi-bus-laun}]
├─at-spi2-registr───{at-spi2-registr}
├─atd
├─auditd─┬─audispd─┬─sedispatch
│ │ └─{audispd}
│ └─{auditd}
├─avahi-daemon───avahi-daemon
├─bluetoothd
├─caribou───2*[{caribou}]
├─chronyd
├─colord───2*[{colord}]
├─crond
├─cupsd
├─2*[dbus-daemon───{dbus-daemon}]
├─dbus-launch
├─dnsmasq───dnsmasq
├─evolution-calen───6*[{evolution-calen}]
├─evolution-sourc───2*[{evolution-sourc}]
├─firewalld───{firewalld}
├─gconfd-2
├─gdm─┬─Xorg
│ ├─gdm-session-wor─┬─gnome-session─┬─abrt-applet───{abrt-applet}
│ │ │ ├─gnome-settings-───4*[{gnome-settings-}]
│ │ │ ├─gnome-shell─┬─ibus-daemon─┬─ibus-dconf───3*[{ibus-dconf}]
│ │ │ │ │ ├─ibus-engine-sim───2*[{ibus-engine-sim}]
│ │ │ │ │ └─2*[{ibus-daemon}]
│ │ │ │ └─7*[{gnome-shell}]
│ │ │ ├─gnome-software───3*[{gnome-software}]
│ │ │ ├─nautilus───4*[