1关于线程
线程是程序执行流的最小单元,是独立运行(或调度)的基本单位,因此线程可以独立执行程序。
进程是拥有资源的基本单位,线程只拥有一点必不可少的资源。因此线程是没有独立的地址空间的,它们共享进程的地址空间。
2进程与程序的根本区别是什么
说到这个问题,我们就得先知道一个事,什么是进程?
进程是程序的一次执行,它有着创建,活动,暂停,终止等过程,具有一定的生命周期,是动态的产生,变化和消亡的。动态性是程序最基本的特征。
从定义中我们就能看出,进程与程序的本质区别是:程序是静态的,进程是动态的。程序是指令的有序集合,无执行含义,而进程则强调执行的过程。进程具有并行特征,而程序没有。
3什么是进程控制块?
为了使参与并发执行的程序(含数据)能独立的运行,必须为之配置一个专门的数据结构,称为进程控制块(Process Control Block,PCB)。系统利用PCB来描述进程的基本情况和运行状态,进而控制和管理进程。相应地,由程序段,响应数据段和PCB三部分构成了进程映像。所谓创建进程,实质上是创建进程映像中的PCB;而撤销进程,实质上是撤销进程的PCB。
4进程会长生不死吗?
进程有它的生命周期,不会一直存在于系统中,也不一定需要用户显示地撤销。进程在时间片结束时只是就绪,而不是撤销。阻塞和唤醒时进程生存期的中间状态。进程可在完成时撤销,或在出现内存错误时撤销。
5系统动态DLL库中的系统进程,被不同的进程调用,它们是相同还是不同呢?
进程是暂时的,程序是永久的;进程是动态的,程序是静态的;进程至少由代码,数据和PCB组成,程序仅需代码和数据即可;程序代码经过多次创建可对应不同的进程,而同一个系统的进程(或线程)可以由系统调用的方法被不同的进程(或线程)多次使用。
它们是相同的。
6就绪队列的进程数目与处理器效率有关吗?
我感觉这就像是排队买火车票,管你排一个人还是一百个人,售票员的速度都是一样的,因此是无关。
7什么是原语?
进程控制的主要功能是对系统中的所有进程实施有效的管理,它具有创建新进程,撤销已有进程,实现进程状态转换等功能。在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,它是一个不可分割的独立单位。
8一个进程的读磁盘操作完成后,操作系统针对该进程必做的是
修改进程状态为就绪态,其实读磁盘操作可以理解为申请打印机之类的设备,在没有申请到的时候,进程自己会陷入阻塞状态,申请到了以后会转为就绪状态。
9啥玩意是用户级线程,啥玩意是内核级线程
用户级线程(User-level Thread)
在用户级线程中,有关线程管理(线程的创建,撤销和切换等)的所有工作都由应用程序完成,内核意识不到线程的存在。因此用户级线程可以在不支持内核级线程的操作系统上实现。我感觉这个有点类似于皇权不下县,县里面只有县太爷,下面就没有政府的官员了,难道皇上会知道某某县某某村人丢了一头牛吗?这很显然不可能对吧。哪一天皇上嗝屁换人了,下面人该种地还是种地啊,难道皇上发丧下面人就不种地了?这不可能啊。
内核级线程(Kernel-Level Thread)
在内核级线程中,线程管理的所有工作由内核完成,应用程序没有进程线程管理的代码,只有一个到内核级线程的编程接口。内核为进程及其内部的每个线程维护上下文信息,调度也在内核基于线程框架的基础上完成。
因为内核级线程要跑到内核去完成,多跑了很多路,因此它的效率比用户级线程要低,这是很合理的。
线程与线程控制块的对应关系是一对一,多对一,多对多。
10父进程与子进程;主程序与子程序
父进程通过执行fork调用可以得到一个子进程,两个进程各自有自己的地址空间。
父进程与子进程的PSW是相同的,但是PC是发生改变的
父进程创建子进程后,父进程与子进程同时执行。
主程序调用子程序后,主程序暂停在调用点,子程序开始执行,直到子程序返回,主程序才开始执行。
11进程和程序之间可以形成一对一,一对多,多对一,多对多等关系,为什么会这样呢?
程序是静态的指令合集,进程是程序动态的执行过程。静态的程序除占用磁盘空间外,不需要其他系统资源,只有执行中的进程才需要分配内存,CPU等系统资源。
一对一
执行一条命令或运行一个应用程序时,进程和程序形成一对一的关系;
一对多
进程在执行过程中可以加载执行不同的应用程序,从而形成一对多的关系;
多对一
以不同的参数或数据多次执行同一个应用程序时,形成多对一的关系;
多对多
并发的执行不同的应用程序时,形成多对多的关系。
12为什么进程之间的通信必须借助操作系统内核功能?
进程无法访问其他进程的地址空间
为了保证多个进程能够互不干扰的共享物理内存,操作系统利用硬件地址机制对进程的地址空间进行了严格的保护,限制每个进程只能访问自己的地址空间。所以进程无法访问其他进程的地址空间,必须借助于操作系统的系统调用函数实现进程之间的通信。
进程通信方式
(1)共享内存区
通过系统调用创建共享内存区,多个进程可以连接同一个共享内存区,通过访问共享内存区实现进程之间的数据交换。使用共享内存区时需要利用信号量解决同步互斥问题。
(2)共享文件
利用操作系统提供的文件共享功能实现进程之间的通信。这时,也需要信号量来解决文件共享操作中的同步和互斥问题。
(3)管道系统
管道是单向的,因此是先进先出的,允许多个进程向管道写入数据,允许多个进程从管道读出数据。在读写过程中,操作系统保证数据的写入顺序和读出顺序是一致的。进程通过读写管道实现通信
(4)消息传递
用户缓冲区消息————>内核消息队列————>另一用户缓冲区
13操作系统的多进程运行环境
(1)为支持多进程的并发执行,需要哪些数据结构
为支持多进程的并发执行,系统为每个进程建立了一个进程控制块(PCB),用于进程的控制和管理。PCB中记录了有关进程的一些描述信息和控制信息,包括进程标识符,进程当前的状态,优先级,进程放弃CPU时的现场信息,以及指示组成进程的程序和数据在存储器中存放的位置,资源使用信息,进程各种队列的连接指针和反应进程之间隶属关系的信息。
(2)原语
创建新进程原语,阻塞进程原语,唤醒进程原语,终止进程原语
14前趋图
描述进程或程序各部分之间执行的先后顺序的有向无环图
前趋图的对象是语句和程序段
15程序的顺序执行
顺序性,封闭性,可再现性
16程序的并发执行
间断性,失去封闭性,不可再现性
17单处理机中,进程与进程不能并行
因为进程在运行时必须占有处理机,两个进程不能同时占有一个处理机。
18通道是DMA的进一步演化。
19单处理机情况下,执行状态的进程至多有1个
就绪态必须经过调度才能变成执行态,也就是必须经过分配处理机这个步骤才能变成执行态。
中断将会使中断服务程序由就绪态转为运行态
20进程内的各线程可以分布于多个处理机,即可并发又可并行
进程只能属于一个处理机,只能并发不能并行。
创建新线程需要提供相应的参数,如指向线程主程序的入口地址,堆栈的大小,线程的优先级。
21内核级线程切换开销大,用户级线程切换开销小
系统调用对于用户级线程的影响大,都会阻塞,对内核级线程的影响小,仍可以运行。
22多对一模型不能并行,一对一模型可以并行
多对一模型,多个用户级线程映射到一个内核级线程,这一个内核级线程一直在使用,因此无法并行。一对一模型,一个用户级线程映射到一个内核级线程,这若干个内核级线程互不干扰,互不限制,因此可以并行。
内核级线程的调度由操作系统完成,操作系统不知道用户级线程,因此操作系统不需要为用户级线程建立线程控制块
23进程控制块和数据块都是系统创建的,不是用户创建的,不是临时性的,因为是挑出来空白PCB赋值
24外部标识符由创建者提供,内部标识符由系统提供。
25什么是操作系统内核?
操作系统内核是指操作系统中和硬件密切相关的模块(如中断处理程序),为什么说中断服务程序与硬件密切相关?这是因为中断服务程序的前三步,关中断,保存断点,取出中断服务程序的入口地址送往都是由硬件来实现的;常用设备的驱动程序(如键盘鼠标的驱动程序),运行频率较高的模块(时钟管理,进程调度)
不同操作系统的功能未必相同
26进程的层次结构?
unix允许允许父进程创建子进程,windows通过句柄/令牌控制控制其他进程,没有父子关系。
27引起进程创建的事件?
用户登录,作业调度,提供服务,应用请求