进程的概念、组合和特征
-
进程和程序的区别?
程序是存放在外存(硬盘)里面的可执行文件(一系列的指令集合),是静态的;而进程是程序的一次执行过程,是动态的,同一个程序执行多次会创建多个进程。 -
操作系统如何区别各个不同的进程?
当进程被创建的时候,操作系统会给所创建的进程分配一个唯一的,不重复的PID,即进程ID号,一般操作系统对进程ID号执行**++**的操作。
-
PCB所记录的内容包括哪些?
- 进程标识符(PID),用户标识符(UID),让操作系统区分各个进程。
- 记录给进程分配了哪些资源,包括分配了多少内存,正在使用哪些I/O设备,正在使用哪些文件等等,从而实现操作系统对资源的管理。进程控制块结构体可下载Linux内核源码查看。
- 记录进程的运行情况,如CPU使用时间,磁盘使用时间,网络流量使用等等,从而实现操作系统对进程的控制和调度。
-
进程的实际组成包括哪些部分?
主要是PCB、程序段和数据段。其中PCB是给操作系统用的,而程序段和数据段是给自己用的。- 程序段、数据段、PCB三部分组成了进程实体。
- 进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
-
进程的特征有哪些?
🐦 动态性:进程是程序的一次执行过程,有创建、运行和消亡周期。
🐦 并发性:内存中有多个进程实体,各进程可以并发执行。
🐦 独立性:进程是独立运行、独立获取资源、独立接受调度的基本单位。
🐦 异步性:各个进程独自以各自的速度执行,操作系统需要提供进程同步机制解决异步问题。
🐦 结构性:每个进程会配置一个PCB,结构上看进程由程序段、数据段和PCB组成。
进程的状态和转换、进程的组织方式
- 一个进程的状态有哪些?其中的转换过程是怎么样的?
- 创建态:当进程被创建的时候处于创建态,在这个阶段操作系统会为进程分配资源、初始化PCB等。
- 就绪态:当进程创建完成之后就进入就绪态,等待操作系统将其调度到CPU上执行。
- 运行态:当进程上到CPU执行时,就处于运行态,执行指令序列。
- 阻塞态: 若进程在CPU上执行的时候发出系统调用请求使用外设资源,而外设资源被占用时,则操作系统会让其下CPU进入阻塞态。
- 终止态: 当进程执行完任务之后会执行**“exit”系统调用**,请求操作系统终止该进程,此时进程进入终止态,操作系统会回收相关资源(PCB,内存等)。
- 进程是通过什么方式进行组织的?
- 链式方式:操作系统会管理一系列队列,比如就绪队列、阻塞队列等。通过执行指针索引到相对应的进程并让操作系统将其调度上CPU执行。PS:阻塞队列可以有多种,因为外设资源可以有多种。
- 索引方式:操作系统会管理一系列索引表,比如就绪索引表、阻塞索引表,这些表会索引各个进程PCB,操作系统都是通过表指针的方式进行感知。
进程控制
-
什么是进程控制?
就是要通过操作系统实现进程的状态转换。 -
如何实现进程控制?
进程的控制需要原语操作实现对进程的状态转换,如果程序不能一气呵成的执行的话,就会影响到操作系统对进程的管理。 -
如何实现原语操作?
通过关中断指令和开中断指令实现。正常情况下,CPU没执行完一条指令都会例行检查是否有中断信号需要处理,若有则暂停运行当前程序,转而运行中断处理程序。 -
原语应用在哪些方面?
- 进程的创建:
✌️ 包括分配资源,初始化PCB等创建原语的操作。
✌️ 引起进程创建的事件,比如用户登陆、作业调度(多道批处理系统中,若有新的作业放入内存,会创建进程)、提供服务(用户向操作系统提出某些请求)、用户请求(调用fork等函数)。- 进程的撤销:
💤 撤销原语,比如终止进程的PCB,将进程的资源返回给操作系统。
💤 引起进程终止的事件,比如正常结束(exit系统调用),异常结束,外界干扰。- 进程的阻塞和唤醒:
💫 阻塞原语: 找到要阻塞的进程对应的PCB并保护运行现场,然后将PCB信息更改为“阻塞态”。
💫 引起进程阻塞的事件,比如需要等待系统分配资源,等待其他进程执行等。
💫 唤醒原语: 在等待队列中寻找PCB,从等待队列中移除并设置进程为就绪态。
💫 引起进程唤醒的事件,比如等待的事件发生。- 进程的切换:
💖 切换原语: 运行态与就绪态的相互转换。
💖 引起进程切换的事件: 当前进程时间片到、有更高优先级的进程到、当前进程主动阻塞、当前进程终止。
进程间通信(IPC)
⭐️总体概念:进程间通信指的是两个进程之间产生数据交互。
-
为什么进程间通信需要操作系统支持?
出于安全的考虑,操作系统都会为每个进程分配独立的地址空间。因此,进程间不能直接访问,需要有操作系统才能完成进程间的通信。 -
进程间的通信方式及原理?
- 共享存储:
若进程支持共享存储功能,则操作系统可以开辟一段共享存储区,进程间可以往共享存储区中读写数据。比如Linux中的shm_open()、mmap()、PV操作函数等。基于存储区的共享方式速度很快,是一种高级通信方式。但是基于数据结构的共享,速度慢,限制多,是一种低级通信方式。
- 消息传递:
⭐️ 进程间的数据交换以格式化的信息为单位。进程通过操作系统提供的发送消息/接收消息两个原语进行数据交换。
💧 直接通信方式: 通过操作系统内核中的消息队列直接发送包含PID进程号的消息包。
💧 间接通信方式: 进程向操作系统申请一个邮箱,然后将消息包丢到该信箱,另外一个进程从信箱中拿出消息包进行消息处理。- 管道通信:
⭐️ 通过一个特殊的共享文件pipe管道,进行数据的传递,就像水管一样,只能是半双工通信。区别于基于存储区的通信方式,管道通信是以循环队列的方式进行数据的传输。