内容大纲
- 1、操作系统概述
- 1.1 OS定义及特征
- 1.2 OS的发展
- 2、进程
- 2.1 进程概念及特征
- 2.2 进程的状态及转换
- 2.3 进程组织、控制与通信
- 3、线程
- 3.1 线程基本概念
- 3.2 线程与进程
1.1操作系统的定义及特征
(1) 操作系统的主要工作
- a 用户告诉操作系统执行该程序。该程序在运行前一般在外存上存放着,操作系统通过目录表从外存找到该程序。
- b. 内存管理模块根据程序的大小为代码和变量分配内存,文件系统定位并读磁盘块将该程序写入内存。
- c. 系统创建进程以执行该程序,进程由进程控制块(PCB)和代码、数据组成,PCB是系统用于管理进程的数据结构。
- d. 进程开始执行, scanf(“%d%d”,&a,&b);涉及到硬件输入设备(如键盘)的操作,设备处理模块投入工作,使用户输入数据,用户无须关心设备端口状态以及机械操作细节。
- e. 操作系统以系统功能调用的形式在内部提供了完成从输入设备输入数据的程序模块,该模块负责所有涉及硬件机械电子特性的处理。
- f. printf(“a+b=%d\n”,a+b);涉及到CPU的计算处理功能和输出设备(如显示器)的操作,在多任务系统中,需要有专门的处理机调度模块负责分配处理机和保护处理机现场,在进程间完成进程切换的工作。
- g. return 0;结束用户进程的运行,将控制权返回给操作系统,操作系统回收用户进程所占用的内存等软硬件资源,进行结束处理,用户同样无须关心这些善后事宜。
- h. 对于用户来说,操作系统屏蔽了上述处理过程,用户只需通过鼠标的点击或者在程序中简单地安排几条系统功能调用即可完成,无需关心底层细节。
- i. 综上所述,操作系统在执行程序的过程中向用户提供了文件存取服务、内存分配服务、处理机调度服务、设备分配和处理服务等功能。
(2) 操作系统定义
- 从所处的位置看,操作系统充当了计算机用户和计算机硬件资源之间的媒介。用户是通过操作系统来使用计算机的。
-
定义:OS 是一个系统程序集合,管理和控制计算机的所有软件和硬件资源,合理地组织计算机工作流程,以便有效地利用系统资源,为用户提供一个功能强大、使用方便的工作环境。
(3) 操作系统特征---并发
并发性(Concurrence)是指两个或两个以上的运行程序在同一时间间隔段内同时执行。
并发性的例子:
- ①多个I/O设备同时在输入输出;
- ②设备输入输出和CPU计算同时进行;
- ③内存中同时有多个程序被启动交替、穿插地执行。
(3) 操作系统特征---共享
- 共享指操作系统中的资源(包括硬件资源和信息资源)可被多个并发执行的进程所使用。
第一种是互斥共享。在同一时间内却只允许一个进程访问这些资源,称为临界资源。如打印机、磁带机,以及一些变量、数据等都是临界资源。
第二种是同时访问。允许同一时间内多个进程对它进行访问,这里“同时”是宏观上的说法。典型的可供多进程同时访问的资源是磁盘。 - 共享性和并发性是操作系统两个最基本的特征,它们互为依存。
(3) 操作系统特征---异步性
- 在多道程序环境中,允许多个进程并发执行,由于资源有限而进程众多,多数情况,进程的执行不是一贯到底,而是“走走停停”。
- 进程以不确定的方式运行,这种不确定性给系统带来了潜在的危险,有可能导致与时间有关的错误。但只要运行环境相同,操作系统必须保证多次运行作业,都会获得完全相同的结果。
1.2 操作系统的发展
- 单道批处理系统
- 多道批处理系统
- 分时系统
- 实时系统
单道批处理系统
严格地说,它只能算作是OS的前身而并非是现在人们所理解的OS。
由操作员将若干作业合成一批,由监督程序依次将作业调入主存并运行,主存中始终只有一个作业在运行。特点:自动性、顺序性、单道性。
单道批处理系统中,内存中仅有单个作业在运行,致使系统中仍有许多资源空闲,设备利用率低,系统性能较差。
在输入操作结束之前,处理机空闲,其原因是I/O处理与本道程序有关。所以就提出了多道程序的概念。
多道批处理系统
多道批处理系统是指允许多个程序同时进入一个计算机系统的主存储器并启动进行计算的方法。在该系统中, 用户所提交的作业都先存放在外存上并排成一个队列,称为“后备队列”;然后,由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享CPU和系统中的各种资源。
多道程序合理搭配输入输出为主与计算为主程序交替运行,充分利用资源,提高系统效率。
特点:
- 多道:计算机内存中同时存放多道相互独立的程序。
- 并行:宏观上并行运行,微观上串行运行。
- 无序性:程序完成顺序与程序提交顺序不一定相同。
-
调度性:程序从提交到完成须经多次调度。
单、多道程序运行示意图
分时系统
分时系统把处理机的运行时间分为很短的时间片,一般采用时间片轮转的方式,使一台计算机为多个终端服务。
- 推动多道批处理系统形成和发展的主要动力,是提高资源利用率和系统吞吐量。
- 推动分时系统形成和发展的主要动力,则是用户的需求。
- 典型案例:超市的收银机。
分时系统的特点
- 交互性:系统能及时响应用户的请求,方便程序的调试和修改。
- 多路性:多个用户分别利用不同的终端,共享系统资源,获得主机的服务。
- 独立性:各用户独立操作,互不干扰。
- 及时性:系统能在用户可接受的时间内处理用户请求。
UNIX是当今最流行的一种多用户分时操作系统。
实时操作系统
实时操作系统(Real Time Operating System)是指当外界事件或数据产生时,能够接收并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制监控的生产过程或对处理系统作出快速响应,并控制所有实行任务协调一致运行的操作系统。
典型应用:飞行器的自动控制,飞机订票系统、银行管理系统等。
2.1 进程概念及特征
(1) 进程的引入
- 在单道操作系统中,任何时候内存中只有一道程序(计算活动),程序(计算)运行的蓝本(程序)只有一个,程序与计算之间具有一对一的关系,将依照蓝本(程序)进行的计算活动称为程序(与蓝本叫法相同)并无明显不妥之处。
- 在多道操作系统中,内存中可以同时存在两道或两道以上的计算(Task)运行,若每道计算的蓝本(程序)互不相同,则仍可以程序的概念描述每个计算。但如果有某两道计算的蓝本(程序)相同,仅处理的数据(原料)不同,则称这两个计算是一个程序或两个程序均自相矛盾。因为以“程序”称呼“计算”产生了混淆,由此提出了“进程”这个名词来称呼“计算”。
(2) 进程的概念
- 进程是程序关于某个数据集合的一次执行过程,是一个可并发执行的具有独立功能的动态实体,也是操作系统进行资源分配、调度和保护的基本单位。
—有些系统称进程为“任务”(task)或“活动”(active)。 - 进程包括:程序(代码/文本)、数据、工作栈、堆、进程控制块PCB(Process Control Block)
(3) 进程的理解
进程的属性 (进程与程序比较)
- 结构性:进程包含了数据集合和运行于其上的程序。每个进程至少包含三个组成要素:程序块、数据块和进程控制块。
- 共享性:同一程序运行于不同数据集合上时,构成不同的进程。多个不同的进程可以共享相同的程序,所以进程和程序不是一一对应的。 (函数的递归调用也是不同数据共享相同函数,在这一点上类似于进程,但不相同,因为函数不是进程)
- 动态性:进程由创建而产生,由调度而执行,由撤销而消亡。程序是一组有序指令序列,作为一种系统资源是永久存在,是静态的概念。
2.2 进程的状态及转换
(1) 三态模型
进程的三种基本状态
进程从创建而产生至撤销而消亡的整个生命周期,可用一组状态加以刻划:
运行态(running):进程占有处理器正在运行。
就绪态(ready):进程具备运行条件,系统若为之分配处理器便可运行。
等待态(wait):又称为阻塞(blocked)态或睡眠(sleep)态,进程不具备继续运行条件,正在等待某个事件的完成。
通常,当一个进程创建后,就处于就绪状态。每个进程在执行过程中,任一时刻只能处于上述三种状态之一。在一个进程执行过程中,它的状态将会发生变化。
(2) 五态模型
五态模型在三态模型的基础上,引进了新建态和终止态(又称结束态)。
- 新建态---对应进程刚被创建的状态。为一个新进程创建必要的管理信息,它并没有被提交执行,而是在等待操作系统完成创建进程的必要操作。
-
终止态---进程的终止,首先,等待操作系统进行善后,然后,退出主存。进入终止态的进程不再执行,但依然临时保留在系统中等待善后。一旦其他进程完成了对终止态进程的信息抽取之后,系统将删除该进程。
2.3 进程组织、控制与通信
(1) 进程的组织
- 进程有4个要素:进程控制块、程序块、数据块、堆栈。
- 进程程序块:即被执行的程序,规定了进程一次运行应完成的功能。通常它是纯代码,可被多个进程共享。
- 进程数据块:程序加工处理的对象,包括全局变量、局部变量和常量等的存放区以及开辟的工作区,为一个进程专用。
- 系统堆栈/用户堆栈:每一个进程都有一个系统/用户堆栈,用于过程调用或系统调用时的信息存储和参数传递。
- 进程控制块:每一个进程都有唯一的进程控制块,存储进程的标志信息、现场信息和控制信息。创建进程时建立进程控制块,撤销进程时回收进程控制块。
主存储器中的进程是如何组成的?
进程上下文(context)---操作系统中把进程物理实体和支持进程运行的环境合称为进程上下文(context)。
当系统调度新进程占有处理器时,新老进程随之发生上下文切换。进程的运行被认为是在上下文中执行。
进程上下文分成3类
- 1、用户级上下文:由用户进程的程序块、用户数据块和用户堆栈组成的进程地址空间。
- 2、系统级上下文:包括进程控制块、内存管理信息、进程环境块,及系统堆栈等组成的进程地址空间。
- 3、寄存器上下文:由程序状态字(PSW)寄存器和各类控制寄存器、地址寄存器、通用寄存器、用户栈指针等组成。
(2) 进程控制块
- 进程控制块是进程存在的唯一标识。每个进程都有且仅有一个进程控制块( Process Control Block)。
- PCB是操作系统用于记录和刻划进程状态及有关信息的数据结构,也是操作系统掌握进程的唯一数据结构,是操作系统控制和管理进程的重要要依据。
- PCB包括了进程执行时的情况,以及进程让出处理器后所处的状态、断点等信息。
进程控制块 (PCB)
进程控制块中保存了与进程相关的全部信息
- 进程状态
- 程序计数器
- CPU寄存器
- CPU 调度信息
- 内存管理信息
- 记账信息
- I/O 状态信息
(3) 进程的控制
进程控制是对系统中所有的进程实施有效的管理,具有创建新进程、撤销已有进程、实现进程状态的切换等。
在操作系统中,一般把进程控制用的程序段称为原语,原语的特点是执行期间不允许中断,是一个不可分割的基本单位。
创建
允许已存在的进程创建新的进程。 生成其它进程的进程称父进程(Parent Process),被生成进程称子进程(Child Process) 。
子进程可以继续创建自己的子进程,由此系统中形成了一棵进程树。
子进程可以继承父进程所有资源.子进程撤销,应归还资源给父进程,父进程撤销,同时撤销其所有子进程。
创建流程
(1)分配一个唯一的进程标识号,申请一个空白PCB。
(2)为新进程分配资源,包括内存空间(保存程序、数据、栈等),还有其他各种资源。
(3)查找辅存,找到进程正文段并装入到进程地址空间的正文区。
(4)初始化进程控制块(如状态、PSW、栈等),设置优先级。
(5)把进程加入就绪进程队列,或直接将进程投入运行。
(6)通知操作系统的某些模块,如记账程序、性能监控程序。
阻塞唤醒
进程的阻塞是指一个进程让出处理器,去等待一个事件。通常,进程自己调用阻塞原语(block)阻塞自己。阻塞是自主行为,只有处于运行态的进程才能将其转换成阻塞态。
当一个等待事件结束时会产生一个中断,从而激活操作系统,在系统的控制之下被阻塞的进程唤醒。进程的阻塞和唤醒是由进程切换来完成的。
终止
进程终止的原因:
- 进程正常运行结束。
- 异常结束,如发生存储区越界、保护错、非法指令、严重的输入输出错误等。
-
外界干预,进程应外界的请求而终止。如用户干预、父进程请求、父进程终止。
(4) 进程的通信
进程通信是指进程之间的信息交换。根据信息量的多少分为:
- 低级通信— 进程之间交换的信息量较少且效率低。如进程同步和互斥。
- 高级通信—进程之间交换的信息量较多且效率高。又分:
- 共享存储器,指进程之间通过对共享存储区读写来交换数据。
- 消息传递系统,指进程间的通信以消息为单位,程序员可通过通信原语实现通信,按其实现方式不同可分为:
- 直接通信方式,发送进程直接把消息发送给接收进程。
- 间接通信方式,发送进程把消息发送到某个中间实体(信箱),接收进程从中取得消息。
- 管道通信系统,利用称为管道的文件实现进程通信。
共享存储器
管道
用于连接读进程和写进程以实现它们之间通信的共享文件,称为“管道”。发送进程(写进程)以字符流形式将大量数据送入管道,接收进程(读进程)从管道接收数据。
管道(共享文件)通信机制
- 管道属于一种共享文件通信机制。
- 管道连接读写进程实现通信。写进程往管道一端写入信息,读进程从管道另一端读信息。
- 管道机制应具备互斥(一次仅由一个进程读写)、同步(阻塞和唤醒)和确定对方是否存在。
- 在LINUX系统中,管道大小为1页,即4K字节。若写满,则对管道的write()调用被阻塞。若读空,则对管道的read()调用被阻塞。
- 管道是一次性操作,数据一旦被读取,它就从管道中被抛弃,释放空间以便写入其他数据。
3.1 线程基本概念
(1) 线程的引入
在传统的操作系统中,进程是系统进行资源分配、处理器调度的基本单位。进程在任一时刻只有一个执行控制流。
传统进程给并发程序设计带了的问题:
- 进程切换开销大,在对进程进行切换时,由于要保留当前进程的CPU环境和设置新选中进程的CPU环境,为此需花费不少处理机时间。
- 进程通信代价大,每次通信均要涉及通信进程之间或通信进程与操作系统之间的信息传递。
- 进程之间的并发性粒度较粗,并发度不高,过多的进程切换和通信延迟使得细粒度的并发得不偿失。
解决问题的基本思路— 引入“线程”
把进程的两项功能------“独立分配资源”与“被调度分派执行”分离开来:
- 进程作为系统资源分配和保护的独立单位,不需要频繁地切换;
- 线程作为系统调度和分派的基本单位,能轻装运行,会被频繁地调度和切换。
(2) 线程的定义及理解
-
线程(thread) —是一个CPU调度单位,是进程中的一个执行路径,有时称“轻量级进程” 。
它由线程ID,程序计数器、寄存器集合和堆栈组成。
它与同属于一个进程的其它线程共享其代码段、数据段和其它操作系统的资源(如打开文件和信号)。
同一个进程中的所有线程共享进程获得的主存空间和资源。 - 进程在任一时刻只有一个执行控制流,通常将这种结构的进程称单线程(结构)进程。
- 多线程(结构)进程是在同一进程中设计出多条控制流(每一个控制流称为一个线程),多条控制流之间可以并行执行;多控制流之间可通过内存区直接通信,切换开销小。
单线程进程和多线程进程
(3) 线程的实现
线程的实现分三类:用户级线程ULT ( User Level Thread, 如Java,Informix) 和内核级线程KLT(Kernel Level Thread, (如Windows 2000/XP) 以及支持用户级线程ULT和内核级线程KLT的混合式(如Solaris) 。
在ULT中,有关线程管理的所有工作都由应用程序完成。在KLT中则由系统直接支持和管理,应用程序中没有进行线程管理的代码,只有一个到内核级线程的编程接口。
内核级线程
实现原理
- 在纯内核级线程设施中,线程执行中可通过内核创建线程原语来创建其他线程。内核要为整个进程及进程中的单个线程维护现场信息,应在内核中建立和维护PCB及TCB。
- 内核级线程优点
- 1、多处理器上,内核能同时调度同一进程中多个线程并行执行。
- 2、进程中的一个线程被阻塞了,内核能调度同一进程的其它线程或其他进程中的线程占有处理器运行。
- 3、内核线程数据结构和堆栈很小,KLT切换快,内核自身也可用多线程技术实现,能提高系统的执行速度和效率。
- 内核级线程的主要缺点
- 应用程序线程在用户态运行,而线程调度和管理在内核实现,在同一进程中,控制权从一个线程传送到另一个线程时需要用户态-内核态-用户态的模式切换,系统开销较大。
用户级线程
- 在纯ULT设施中,线程管理工作由应用程序做,内核不知道线程的存在。应用程序均需通过线程库进行程序设计。线程库是一个ULT管理的程序包,实质上是线程的运行支撑环境。
- ULT线程创建过程:进程开始只有一个线程,它可以创建新线程,通过过程调用把控制权传送给“创建”过程,由线程库为新线程创建一个TCB,并置为就绪态。然后,按一定的调度算法把控制权传递给进程中处于就绪态的一个线程。当控制权传送到线程库时,当前线程的现场信息应被保存,而当线程库调度一个线程执行时,要恢复它的现场信息。
ULT优点
- 线程切换不需要内核特权方式:因为所有线程管理数据结构均在单个进程的用户空间中,管理线程切换的线程库也在用户地址空间中运行,因而进程不需要切换到内核方式来做线程管理。
- ULT能运行在任何OS上,内核在支持ULT方面不需要做任何改变。线程库是可被所有应用共享的应用级实用程序,许多当代操作系统和语言均提供ULT线程库。
ULT的缺点
- 若线程执行系统调用时,不仅该线程被阻塞,且进程内的所有线程会被阻塞。
- 纯ULT中,多线程应用不能利用多重处理的优点。内核在一段时间里,分配一个进程仅占用一个CPU,进程中仅有一个线程能执行。
混合式线程
在混合式系统中,内核支持KLT多线程的建立、调度和管理,同时也提供线程库,允许应用程序建立、调度和管理ULT。应用程序的多个ULT映射成一些KLT。
在混合式系统中,一个应用中的多个线程能同时在多处理器上并行运行,且阻塞一个线程时并不需要封锁整个进程。
3.2 线程与进程
进程与线程的比较
- 调度:在引入线程的操作系统中,进程仅作为拥有资源的基本单位,而线程是系统调度、分派的基本单位。
- 并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,线程之间也可以并发。
- 拥有资源:在设有线程的操作系统中,进程是拥有资源的一个独立单位,线程仅拥有少量能保证其正常运行所必须的资源。
- 系统开销:由于进程相对较重,因此,操作系统进程调度的开销大大高于线程调度的开销。