进程相关概念
程序和进程
程序:是指编译好的二进制文件,在磁盘上,不占用系统资源(cpu、内存、打开的文件、设备、锁…)
进程:是一个抽象的概念,与操作系统原理联系紧密。进程是活跃的程序(程序员角度),占用系统资源,分配资源的基本单位(操作系统角度)。在内存中执行。(程 序运行起来,产生一个进程)
进程与程序的关系
程序就好像剧本,而进程呢就像一台戏。
同一个剧本可以在多个舞台同时上演。同样,同一个程序也可以加载为不同的进程(彼此之间互不影响)
- 程序占用磁盘空间,不占用系统资源
- 进程占用系统资源
- 程序没有生命周期,进程有生命周期
并发
并发:在操作系统中,一个时间段中有多个进程都处于已启动运行到运行完毕之间的状态。但,任一个时刻点 上仍只有一个进程在运行。
例如,当下,我们使用计算机时可以边听音乐边聊天边上网。 若笼统的将他们均看做一个进程的话,为什么 可以同时运行呢,因为并发。
单道程序设计
所有进程一个一个排对执行。若 A 阻塞,B 只能等待,即使 CPU 处于空闲状态。而在人机交互时阻塞的出现时 必然的。所有这种模型在系统资源利用上及其不合理,在计算机发展历史上存在不久,大部分便被淘汰了。
就是一群人排队,必须等前面人把事情处理完,前面人如果生病了或者突然有事走了,后面人不能办事,必须等前面的人回来办完才能轮到自己
多道程序设计
在计算机内存中同时存放几道相互独立的程序,它们在管理程序控制之下,相互穿插的运行。多道程序设计必 须有硬件基础作为保证。
时钟中断
即为多道程序设计模型的理论基础。 并发时,任意进程在执行期间都不希望放弃 cpu。因此系统需要 一种强制让进程让出 cpu 资源的手段。时钟中断有硬件基础作为保障,对进程而言不可抗拒。 操作系统中的中断
处理函数,来负责调度程序执行。
分时复用
在多道程序设计模型中,多个进程轮流使用 CPU(分时复用 CPU 资源)。而当下常见 CPU 为纳秒级,1 秒可以执 行大约 10 亿条指令。由于人眼的反应速度是毫秒级,所以看似同时在运行。 1s=1000ms,1ms=1000us,1us=1000ns 1000000000
实质上,并发是宏观并行,微观串行!
CPU和MMU
硬盘存储容量大,速度慢,磁盘把数据放到内存中,内存按理说可以直接把数据放到cpu中寄存器中去执行,但是为了提高效率,又在中间加了一个缓存Cache(缓冲区),通过Cache进入CPU
进到CPU中并不是整个程序,而是一条一条指令,以二进制形式处理,而从Cache进入CPU处理之前,要先经过预处理,编译,汇编,链接把程序中的每一条指令变为二进制
预取器
从cache中把指令取出来,交给译码器译码
译码器
分析指令干什么,要用什么寄存器
算术逻辑单元(ALU)
执行+,<<运算,所有的运算都是通过+,<<模拟出来。计算完后,把数据给CPU中的寄存器堆。再给缓存
MMU
两个相同的程序,运行两次,产生两个进程,用户块映射的物理内存不一样(因为进程彼此独立),但内核块映射的区域是一样的,PCB(进程描述符)位于内核空间当中,但是两个进程的PCB不一样,位于同一块物理内存里。
右边是虚拟地址空间,在程序运行时产生,虚拟内存其实不存在,所有的数据实际是放在内存条中,所以存在一个对映的关系,一个1GB的实际内存,如何编写出来4GB的虚拟内存?
虚拟地址,可用地址范围有4GB
例如:0x804a400 int a =10;//此时的地址是虚拟地址,它对应的实际地址是另外一个值
MMU就是帮忙对应虚拟地址和实际地址,也就是映射
另外一个问题,虚拟地址空间中,0~3GB
是用户可以使用的大小,而3~4GB
是内核空间,内核可以访问用户的空间,但用户访问不了内核的,但是实际内存中,并没有什么用户和内核的划分,所以需要有个东西来制定相应的访问权限的问题。
MMU设置修改内存访问级别的问题
进程描述符PCB
- 我们知道,每个进程在内核中都有一个进程控制块(PCB)来维护进程相关的信息
- ,Linux 内核的进程控制块是 task_struct 结构体。
- /usr/src/linux-headers-3.16.0-30/include/linux/sched.h 文件中可以查看 structtask_struct 结构体定义。
- PCB中的主要成员如下
-
进程 id。系统中每个进程有唯一的 id,在 C 语言中用 pid_t 类型表示,其实就是一个非负整数。
-
进程的状态,有就绪、运行、挂起、停止等状态。
-
进程切换时需要保存和恢复的一些 CPU 寄存器。
这里说一下,之前说过,CPU分时机制,可以在一个进程突然有事,不能运行的情况下,再运行其他程序,等这个程序可以运行时再再次运行,所以CPU寄存器中就保存了这个程序在离开时的状态,等这个程序再次回来时恢复
-
描述虚拟地址空间的信息。
虚拟地址与物理地址的对应关系,MMU中使用一张表记录改信息,这张表MMU维护,存储在PCB中
-
描述控制终端的信息。
-
当前工作目录(CurrentWorkingDirectory)。
-
umask 掩码。 用来保护文件创建或者修改的权限
-
文件描述符表,包含很多指向 file 结构体的指针。
-
和信号相关的信息。
-
用户 id 和组 id。
-
会话(Session)和进程组。
-
进程可以使用的资源上限(ResourceLimit) 。
进程状态
进程状态保存在PCB, 进程基本的状态有 5 种。分别为初始态,就绪态,运行态,挂起态与终止态。其中初始态为进程准备阶段,常 与就绪态结合来看。