1,什么是进程?
简单来说,进程就是跑起来的程序。也可以说是一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间。
2,进程是怎样进行管理的?
进程是通过操作系统进行管理的,就是先描述出一个进程(明确出一个进程上面的一些相关属性),在组织若干个进程。
所谓的“创建进程”,就是先先创建出PCB,然后把PCB加到双向链表中;
所谓的“销毁进程”,就是找到链表上的PCB,并且从链表上删除;
所谓的“查看任务管理器”,就是遍历链表;
3,进程中PCB 里有啥?
pid(进程id) 进程的身份标识
内存指针:指明了这个进程要执行的代码/指令在内存的哪里,以及这个进程执行中依赖的数据都在哪里。
文件描述符表:程序运行过程中,要经常和文件打交道,进程没次打开一个文件,就会在文件描述符表上增加一项。
4,进程的调度是怎样进行的?(时间管理大师)
进程的调度,其实就是操作系统在考虑CPU资源如何进行进程分配......
通过PCB上以下一组属性来实现进程调度(一个系统同一时间,执行了很多的任务,这件事情就是所谓的“进程调度”),有以下属性
状态:就绪状态:随时可以去CPU上执行
阻塞状态/睡眠状态:暂时不可以去CPU上执行
Linux中的进程状态还有很多其他的
优先级:先给谁分配时间,后给谁分配时间,以及给谁分的多,给谁分的少....
记账信息:统计了没个进程,都分别被执行了多久,分别都执行了那些指令,分别排队了等了多久....用来给进程调度提供指导依据的。
上下文:就表示了上次进程被调度出CPU的时候,当时程序的执行状态;下次进程上CPU的时候,就可以恢复之前的状态,然后继续往下执行;
进程被调度出CPU之前,要先把CPU中的所有的寄存器中的数据都给保存到内存中(PCB的上下文字段中),相当于存档了
下次进程再被调度上CPU的时候,就可以从刚才的内存中恢复这些数据到寄存器中,相当于存档了
5,内存资源是如何分配的呢?(通过虚拟地址空间~~)
所谓的虚拟地址空间可以理解为操作系统提供的一个类似“公共空间”~~
由于操作系统上,同时运行着很多个进程,如果某个进程出现了bug,进程崩溃了,但并不会影响到其他进程,是由于“进程的独立性”来保证的,这就依赖了“虚拟地址空间”
6,进程中的通信
操作系统中,提供的“公共空间”有很多种,并且各有特点,有的存储空间大,有的小,有的速度快,有的慢,现在最主要的两种进程通信方式为:
文件操作
网络操作(socket)