进程相关的概念
- 程序:编译好的二进制文件,(在磁盘上,不在内存上),不占用系统资源(cpu,内存,打开的文件,设备,锁…)
- 进程:活跃的程序,占用系统资源.在内存中执行.
- 并发:一个时间段有多个进行在运行,但在一个时间点只有一个进程在运行.
1>区别单道程序设计模式与多道程序设计模式
单道程序设计模式:一个cpu,多个任务,但计算机是一个任务运行完后再运行下一个任务(比如DOS系统)
多道程序设计模式:一个cpu,多个任务,通过时钟中断分派cpu的运行时间给不同的进程.可以实现并行运行.(将cpu的运行时间分段,将每一个进程的运行时间也分段,比如都是100ns,每个进程一次占用cpu100ns后切换给其他进程,cpu运行ns级,人观察是ms级,所以我们就感觉是并行进行的多个进程) - cpu和mmu
1>cpu
程序存储在网络或则硬盘上,通过预处理-编译-汇编-链接变成二进制文件,运行起来,此时就进入内存,又因cpu的运算速度远高于内存,所以用cache(高速缓存)来提高效率.cpu的预取器在cache取出指令,译码器辨别要运用哪些寄存器,然后交ALU运算.计算结果再次存回寄存器到cache到内存再到相关的外设.
2>MMU(内存管理单元)
作用:
a:映射虚拟地址与物理内存地址;
b:设置内存访问级别(比如内核区(0)与用户区的访问级别(3)就不一样)
程序运行时,系统会分配0-4G的虚拟地址空间(不是真实存在的,是指能用的空间大小是4G,真实占用大小一般没有那么大),MMU就负责映射物理地址与虚拟地址的对应关系.用户使用的是虚拟地址,不需要关心实际的物理地址(MMU负责),以及访问权限的设置.
- 进程控制块
每一个进程在内核区都有一个进程控制块,来维护进程的相关信息,通过task_struct结构体实现.
task_struct结构体存储的部分内容:
1>进程ID ;
2>进程的状态 (就绪,运行,挂起,停止);
就绪态:等待cpu分配时间片;
运行态:进程得到cpu,开始运行;
挂起态:等待除cpu以外的资源,也叫阻塞态或则暂停;
停止态:进程运行完毕.
3>进程切换时需要保存和恢复的cpu寄存器;(并行运行,要对不同进程的现场进行保护)
4>MMU维护的虚拟地址对应的物理地址信息;
5>描述终端的信息;
6>当前进程的工作目录;
7>umask码;(保护文件的访问权限的)
8>fd,文件描述符;
9>信号相关的信息;
10>用户id和组id;
11>回话和进程组;
12>进程可以使用的资源上线(ulimit -a //可以查看)