====================================概念
1.PCB的概念
描述进程-PCB PCB包含了进程的所有信息
为了描述控制进程的运行,系统中存放进程的管理和控制信息的数据结构称为
进程控制块(PCB Process Control Block),它是进程实体的一部分,是操作系统中最重要的记录性数据结构。它是进程管理和控制的最重要的数据结构,每一个进程均有一个PCB,在创建进程时,建立PCB,伴随进程运行的全过程,直到进程撤消而撤消。
process control block
进程控制块
2.进程的通俗理解
内存中的程序称为进程
3.一个进程必要的信息(至少两个部分)
(1).属于自己进程的数据和代码
(2).描述此进程的结构体(即PCB)
linux 中的PCB叫
task_struct
同等于 shell 与 bash的关系
4.内存中进程的数据结构
所有描述进程的结构体连起来的关系有链式,除此之外同时还有其他链接方式,很复杂。
5.task_struct
{
标示符 : 描述本进程的唯⼀一标⽰示符,⽤用来区别其他进程。
状态 :任务状态,退出代码,退出信号等。
优先级 :相对于其他进程的优先级。
程序计数器:程序中即将被执⾏行的下⼀一条指令的地址。
内存指针:包括程序代码和进程相关数据的指针,还有和其他进程共享的内存块的指针。
上下文数据:进程执⾏行时处理器的寄存器中的数据。
I/O状态信息:包括显⽰示的I/O请求,分配给进程的I/O设备和被进程使⽤用的⽂文件列表。
记账信息:可能包括处理器时间总和,使⽤用的时钟数总和,时间限制,记账号等。
}
task_struct 中的状态 有r (running) s(sleep) 等
r:理解r状态,r状态表面该进程允许放在CPU上运行,有可能在等,内存中可能有多个r状态的进程,类比学生吃饭排队的例子
所有r状态由一个调度队列来管理s:c语言中的sleep函数其实就是让程序变成s状态(s状态是有时间的)
引入一个概念PC指针
用于标记程序正在执行程序的位置
PC指针中保存了当前正在只执行的指令的下一条指令的地址
为了防止一个死循环一直占用CPU资源
引入了 :时间片
时间片:占用CPU资源的一个基本单位
我们把一个时间段内所有任务都得以推进--我们称为并发
如果是多个cpu运行多个程序叫做并行
进程运行切换其他进程时保存数据(比如寄存器中的数据) 再次运行的时候会加载数据 (这些数据都存在)
类比 大学生去当兵保留学籍 回来后再恢复学籍
进程间的切换必须要做的事情:保存/切换/上下文
======================================上机操作
ps aux 显示所有的进程
top 相当于Windows下的任务管理器
对proc的解释:
Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统硬件及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态。
执行命令 :ls /proc 可以xian显示当前正在运行的进程 ,但是以文件的形式、
蓝 {MOD}的数字代表不同进程的ID , 用于区别不同的进程
cd proc/1933 进入某一个进程文件
进程中的cwd为当前工作目录
getpid() 获得当前进程的PID 它的返回值就是pid
类型为无符号整型
kill -9 4545 杀死进程(-9是命令的参数,4545是进程的ID号)
getppid() 返回父进程IP 这个进程就是bash(命令行解释器)
创建子进程:媒婆找一个实习生办事
fork:分支 创建一个新进程(创件了一个新的PCB)
fork下面的所有代码都会被执行两次
fork有两个返回值 给父进程返回子进程的PID 给子进程返回0
返回值为pid_t类型 pid_t是int类型