操作系统OS笔记
操作系统概述
操作系统定义
操作系统,是计算机系统中最基本、最重要的系统软件,是其它软件的支撑。控制和管理计算机系统的硬件和软件资源,合理的组织计算机工作流程,并为用户使用计算机提供公共和基本的服务。
操作系统组成
计算机采用的都是冯·诺依曼体系结构,一台计算机由 运算器、控制器、存储器、输入和输出 五大部件组成。
(1)运算器 (ALU,Arithmetic Logic Unit)进行算术、逻辑运算并暂存结果。
(2)控制器 (CU,Control Unit)控制、指挥程序, 数据输入、运行 并处理运算结果。
(3)存储器 存放数据和程序。 Memory
(4)输入/输出设备 将人们熟悉与机器能识别进行信息形式的转换。I/O
计算机系统组成
(1)中央处理单元:(CPU,Central Process Unit)运算器和控制器被合在一起的统称。
(2)CPU执行程序是由一组保存在存储器中的指令组成。
(指令处理步骤:取指令和执行指令)
操作系统的发展过程
(1)简单计算机系统(无操作系统):早期计算机、资源等待人工操作,造成“人机矛盾”、计算机资源利用率低、具有脱机I/O技术
(2)单道批处理系统:磁盘+监控程序,控制作业一个接一个连续处理、自动性、顺序性、单道性
(3)多道批处理系统:交替执行内存中的若干道用户作业、多道性、宏观上的并行性、微观上的串行性
(4)分时系统 : 多个用户分享CPU的时间、交互性、及时性、独立性、多路性(宏观上共享系统资源,微观上轮流运行时间片)
(5)实时系统:及时性、交互性、独立性、多路性、高可靠性
操作系统的主要功能
(1)处理器管理
①进程控制:创建和撤销进程、控制进程间的状态转换
②进程同步:对并发执行的进程进行协调
③进程通信:相关进程间的信息交换
④进程调度:按调度算法在等待执行进程中选出其中一个并为其分配 CPU、设置运行环境,使其投入运行
(2)存储管理
①内存分配:为每道程序分配必要的内存空间。(动态、静态两种方式)
②内存保护:确保每道程序都只在自己的内存空间里运行,防止因一道程序的错误而干扰其它程序,也绝不允许用户程序随意访问操作系统的程序和数据。
③地址映射:把目标程序中的逻辑地址转换成为内存空间中的物理地址
④内存扩充:借助虚拟存储技术,在不增加物理内存空间的前提下,从逻辑上对内存进行扩充。
(3)设备管理
①缓冲管理:在CPU和I/O设备之间设置缓冲区,则可以有效缓解速度不匹配的矛盾,提高CPU的利用率,从而提高系统吞吐量。
(缓冲:在内存中划出来用作暂时存放信息的一部分区域。)
②设备分配:根据用户所请求的设备类型、数量,按照一定分配算法对设备进行分配。
③设备处理:由CPU向设备控制器发出I/O命令,启动指定的I/O设备、完成用户规定的I/O操作,并对设备发来的中断请求进行及时响应和处理。
④虚拟(逻辑)设备管理:操作系统通过设备虚拟技术,把每次仅供一个进程使用的独享设备改造成能被多个用户使用的设备。
(4)文件管理
①文件存储空间管理:操作系统统一对文件的存储空间进行管理,提高存储空间的利用率,同时也提高文件系统的存取速度。
②目录管理:为便于用户在外存上找到自己所需的文件,系统会为每个文件建立一个目录项。在不同的系统中,目录有着不同的组织方式
(目录/文件目录:是用来描述系统中所有文件基本情况的一个表。)
③文件读写管理:对文件进行读写操作,是文件管理必须具备的最基本的操作。该功能可根据用户的请求,从外存指定区域把指定数量的信息读入到内存指定的用户区或系统区,或将指定数量的信息从内存写入外存指定区域。
④文件保护:为防止系统中的文件被非法窃取和破坏所提供的有效存取控制机制。
⑤文件系统的安全性:文件系统避免因软件或硬件故障而造成信息破坏的能力。
(5)用户接口
①命令接口:用户可以通过该接口向作业发出命令,以控制作业的运行。(便于用户直接或间接控制自己的作业)
②程序接口:由一组系统调用组成,每当应用程序要求操作系统提供某种类型的服务时,便调用具有相应功能的系统调用。(用户程序取得操作系统服务的唯一途径)
③图形接口:采用图形化的操作界面,用非常容易识别的图标将系统的各种命令直观、逼真的表示出来,用户通过简单的点击鼠标,借助菜单、对话框,就可以完成对应用程序和文件的操作,极大方便了用户的使用。
操作系统结构
(1)单体结构:在单体结构中,操作系统是一组过程的集合,每一过程都有一个定义好的接口,包括入口参数和返回值。过程间可以相互调用而不受约束。
运行效率高,但难以理解、难以维护,难以验证其正确性。
(2)模块化结构:功能通过逻辑独立的模块来划分,通过相关模块间定义良好的接口来实现模块间的调用。
模块具有良好的封装性,系统能作为抽象数据类型或对象方法来实现,有利于操作系统的理解和维护,缺点是存在潜在的性能退化。
(3)可扩展内核结构:将操作系统内核分为基础核心(包括公共必须的基本功能集合)和其它核心功能两部分。
(4)层次结构:操作系统由若干层组成,最内层是裸机,即机器的硬件功能部分,其它各层可以看成是一系列的虚拟机,每一层提供一组完整的功能,并且该组功能仅仅依赖于该层以内的各层。缺点是限制过于严格。
操作系统的特征(基本特征 + 新特征)
基本特征:
(1)并发性(操作系统的第一个重要特征)
并发是指在一段时间内有多道程序同时在计算机内运行。
(2)共享性
计算机系统中的资源共享有两种类型:
①互斥共享:该类资源的分配必须以作业/进程为单位,在一个作业/进程没有运行完之前,另一个作业/进程不得使用该类资源
②“同时”共享:是指多个作业/进程可“同时”使用该类资源,这里的“同时”和并发性中的“同时”有着相同的含义
(3)虚拟性
操作系统使用某种技术,将物理上的一个资源或设备变成逻辑上的多个资源或设备。
(4)异步性(不确定性)
在操作系统控制下的多个作业的执行顺序和每个作业的执行时间是不确定的,即进程是以人们不可预知的速度向前推进。
新特征:
(1)微内核体系结构 : 将代码移到更高层,仅保留一最小内核。使系统结构的设计更加简单、灵活,也使得分布式系统的构造更为方便
(2)多线程 :把执行一个应用程序的进程划分成可以同时运行的多个线程,开销更少。
(3)对称多处理: 要求操作系统可以调度进程或线程到所有的处理器上运行,比单处理器结构具有更多的潜在优势,其存在对用户透明。
(4)分布式操作系统: 支持分布式处理的软件系统,是在由通信网络互联的多处理机体系结构上执行任务的系统。
(5)面向对象设计: 简化了进程间资源和数据的共享,便于保护资源免受未经授权的访问。
中断
中断的基本概念
(1)中断定义
指CPU在执行一个程序时,对系统发生的某个事件(程序自身或外界的原因引起)会做出的一种反应。
CPU暂停正在执行的程序,保留当前程序的运行现场后自动转去处理相应的事件,处理完该事件后,又返回到之前的程序断点,继续执行被中断的程序。
(2)中断作用
①实现CPU与I/O设备并行工作 ②实现硬件故障处理 ③实现人-机联系 ④实现多道程序和分时操作 ⑤实现实时处理 ⑥实现应用程序和操作系统的联系 ⑦实现多处理机系统中处理机之间的联系。
(3)中断类型
①按中断功能分类:硬件故障中断、程序性中断、外部中断、输入/输出中断、访管中断(软中断)。
②按中断方式分类:强迫性中断、自愿中断。
③按中断来源分类:外中断、内中断。
(4)中断嵌套
前一个中断处理程序的执行被终止,转而执行新的中断处理程序。
(5)中断优先级(系统根据中断事件的重要性和紧迫程度,将中断源划分为若干个级别,称为中断优先级。)
一般情况下,中断优先级的顺序为:硬件故障中断>自愿性中断>程序性中断>外部中断>输入/输出中断。
(6)中断屏蔽
PS:自愿性中断不能屏蔽
某些时候,系统在处理低优先级的中断事件时,并不希望它被高优先级的中断所打断,此时就可借助中断屏蔽技术来实现该需求。
中断在操作系统中的地位
中断不仅是进程得以运行的直接或间接的“向导”,而且也是进程被激活的驱动源,所以,中断是实现操作系统功能的基础,是整个操作系统赖以活动的基础。
(1)中断是多道程序并发执行的推动力
(2)操作系统是由中断驱动的
中断响应过程
发现中断源 ---> 保护和恢复现场 ---> 中断响应
中断处理过程
中断处理的功能是由硬件和软件配合完成的。
硬件负责中断进入过程,即发现和响应中断请求,把中断的原因和断点记下来供软件处理时查询,同时引出中断处理程序;
中断的分析处理和处理后的恢复执行等工作由软件来完成。
向量中断
由中断源引起CPU进入中断服务程序的中断过程称为向量中断。
为了提高中断处理的速度,在向量中断中,对每一个中断类型都设置一个中断向量。
中断向量包括该类中断的中断服务程序的入口地址和处理器状态字(PSW)。
进程和线程
进程概述
1. 程序的顺序执行及其特征
把一个应用程序分成若干程序段,各程序段间必须按照某种先后次序顺序执行,仅当前一程序段/操作执行完后,才能执行后继程序段/操作
①顺序性 ②封闭性 ③可再现性
2. 程序的并发执行及其特征
(前趋图: 有向无环图)
①间断性(异步)性 ②失去封闭性 ③不可再现性
3. 进程的概念及其特征
①定义:进程是进程实体的运行过程,是系统进行资源分配和调度的一个独立单位。
②进程使程序能够并发执行,并能够对并发执行的程序进行描述和控制 。
进程是程序的一次执行;
进程是可以和别的计算并发执行的计算;
进程是定义在一个数据结构上,并能够在其上进行操作的一个程序;
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调 度的一个独立单位。
③进程与程序:
程序是静态的,进程是动态的
一个进程可以包含多个程序,一个程序也可以被多个进程执行。
4. 进程状态
进程的三个基本状态:就绪状态、执行状态、阻塞状态
(1)两状态模型 (运行态和非运行态)
(2)五状态模型 (就绪态、运行态、阻塞态、新建态、终止态)
①新建态(New):刚刚创建的新进程,通常是指进程控制块已经创建,但还没有加载到系统内存中的进程。
②就绪态(Ready):进程等待系统为其分配处理器,已经具备了除处理器之外的进程执行所需要的所有条件。
③运行态(Running):进程已获得所需资源并占据处理器,处理器正在执行该进程。
④阻塞态 (Blocked):(等待态、挂起态、睡眠态)进程在等待某个事情的发生而暂时不能运行。
⑤终止态 (Terminate):进程或者因为执行结束或者因为被撤销而从可执行进程组中退出。
(3)挂起状态的引入
①原因:处理器的速度比I/O要快很多,有可能内存中所有进程都在等待I/O事件的完成,导致处理器处于空闲状态。
②引入挂起概念:内存中没有就绪的进程时,系统将内存中处于阻塞的进程换出到外存中的挂起队列,而将外存中的就绪进程激活,换入到内存。
5. 进程控制块
进程控制块(Process control block, PCB)是操作系统用来记录进程状态和相关信息,控制进程运行的数据结构,是进程的唯一标识符。
进程控制 (进程管理中最基本的功能)
(原语:由若干条指令构成、可完成特定功能的程序段)
1. 进程创建和终止
(1)系统为新建进程申请一个空白的进程控制块,获得一个唯一的进程标识符。
(2)系统为新建进程分配运行所需的资源,包括:内存、处理器时间、I/O设备等。
(3)进程控制块(PCB)初始化。
(4)设置链接,如果就绪队列允许新进程插入,则将新进程插入就绪队列。
(1)根据需要终止进程的进程标识符,从PCB集合中查找对应的进程,从中读出该进程的状态。
(2)若被终止进程正处在执行状态,则应立即终止执行,并设置相应调度信息,用于指示该进程被终止后应重新进行调度。
(3)将被终止进程所拥有的所有资源归还给其父进程,或者归还给系统。
(4)若被终止进程还拥有子孙进程,则将其所有子孙进程一并终止。
(5)归还PCB所占据的空间。
2. 进程阻塞和唤醒
(1)正在执行的进程立即终止执行,把PCB中的进程状态由执行改为阻塞,并将处理机状态写入PCB中。
(2)将PCB插入阻塞队列中,等到事件的发生或操作的完成。
(3)系统将处理机重新分派给另一就绪进程,按照新进程的处理机状态更新处理机环境,就绪进程开始执行。
(4)当被阻塞进程等待的事件发生或者等待的操作完成时,则操作系统会通过唤醒原语将等待该事件的进程唤醒。
(1)根据进程标识符从等待该事件的阻塞队列中找到需要唤醒的进程PCB。
(2)将PCB中的进程状态阻塞改成就绪,并将该进程插入到就绪队列中。
3. 进程挂起和激活
(1)根据进程标示符,在PCB集合中找到需要挂起的进程。
(2)检查挂起进程的状态。
(1)根据进程标示符,在PCB集合中找到需要激活的进程。
(2)检查激活进程的状态。
线程
1. 线程简介
(1)线程(轻量级进程):调度和分派的基本单位
进程(任务):资源分配的基本单位
(2)引入进程目的:使多个程序能并发执行,提高资源利用率和系统吞吐量
引入线程目的:减少程序在并发执行时所付出的时空开销,使操作系统具有更好的并发性。
2. 多线程
(1)概念
多线程进程(Multiplethreaded process)——同一进程中设计出多条控制流,并且满足:
①多控制流之间可以并行执行;
②多控制流切换不需通过进程调度;
③多控制流之间可以通过内存直接通信联系,从而降低通信开销。
(2)多线程环境下进程:被定义为资源分配的基本单位
与其相关: ①存放进程映象的虚拟地址空间
②受保护地对处理器、其他进程、文件和I/O资源的访问
(3)多线程环境下线程:一个进程内包含一个或者多个线程
每个线程包括:①线程执行状态 ②当线程处于非运行状态时,有一个受保护的线程上下文,用于存储现场信息 ③一个执行堆栈 ④容纳每个线程的局部变量的存储空间 ⑤与进程内的其它线程共享访问进程的内存空间和资源
(4)线程的主要特性
①并发性:同一进程的多个线程可在一个或者多个处理机上并发或并行地执行
②共享性:同一个进程中的所有线程共享但不拥有进程的状态和资源
③动态性:生命周期中经历各种状态的变化
④结构性:具有唯一标识符和线程控制块
(线程:操作系统中的调度和分派的基本单位)
(5)线程状态
线程的关键状态:运行态、就绪态和阻塞态
3. 线程实现与线程模型
(1)线程实现
①用户级线程(User level thread, ULT)
线程管理的所有工作都由应用程序完成,内核意识不到线程的存在。
优点:线程切换不需要转换到内核空间,节省模式切换开销;调度算法可以是基于不同进程量身定做;用户级线程的实现与操作系统平台无关,可在任何操作系统中进行。
缺点:许多系统调用会引起阻塞;多线程应用不能利用多处理机技术进行多重处理,进程每次只有一个线程处于运行状态。
②内核级线程(Kernel level thread, KLT)
线程管理的所有工作都是由内核完成,应用程序并没有参与其中。
优点:内核能够同时为同一进程中多个线程分配多个处理器,即能让多个线程并行执行;如果进程中一个线程被阻塞,内核可为该进程中的其它线程分派处理器资源使其运行;可采用多线程技术,提高系统执行速度和效率。
缺点:进行线程与同一进程内其它线程切换时,需要从用户态转到内核态进行,从而导致较大的系统开销。
③组合方式
组合方式多线程机制能够结合KLT和ULT两者的优点,并克服了其各自的不足。
(2)线程模型
①多对一模型 (一内核线程多用户线程)
②一对一模型 (一内核线程一用户线程)
③多对多模型 (多内核线程多用户线程)
互斥和同步
1. 并发原理:临界资源、临界区等多种术语
(1)临界区(Critical section)
临界区:使用临界资源的程序代码。
临界资源,多个进程间采取互斥的方式实现对临界资源的共享访问
是一段程序代码,进程将在此代码中访问共享的资源,当另一个进程已经在该代码中运行时,则该进程不能在这段代码中执行
(2)竞争
多个进程在访问一个共享数据时,结果依赖于它们执行的相对时间,这种关系称为竞争
(3)同步
系统中有一些相互合作、协同工作的进程,它们之间的相互联系称为进程的同步
(4)互斥
多个进程因争用临界区内的共享资源而互斥的执行,即当一个进程在临界区访问共享资源时,其它进程不能进入该临界区访问任何共享资源
(5)死锁
两个或两个以上的进程因其中的每个进程都在等待其它进程执行完毕而不能继续执行,这样的情形称为死锁
(6)饥饿
是指一个可运行的进程虽然能继续执行,但被调度程序无限期的忽视而不能执行的情况
(7)并发原理
①两种制约关系:直接相互制约 和 间接相互制约
②多进程共享临界区所遵循调度原则:空闲让进、忙则等待、有限等待、让权等待
2. 硬件同步
(1)TestAndSet指令
boolean TestAndSet(boolean *lock){
boolean temp = *lock;
*lock = TRUE;
return temp;
}
//TestAndSet指令实现互斥示例
do{
while(TestAndSet(&lock))
;// do nothing
// critical section
lock = FALSE;
// remainder section
}while(TRUE);
(2)Swap指令(对换指令)
void Swap(boolean *a, boolean *b){
Boolean temp = *a;
*a = *b;
*b = temp;
}
//用Swap指令实现互斥示例
do{
data = TRUE;
while(data == TRUE)
Swap(&lock, &data);
// critical section
lock = FALSE;
// reminder section
}while(TRUE);
3. 信号量机制
(1)整型信号量
signal(s):通过信号量s传送信号
wait(s): 通过信号量s接收信号
//整型信号量操作定义
void wait(s){
while(s<=0)
; //do nothing
s--;
}
void signal(s){
s++;
}
//记录型信号量数据结构定义
typedef struct{
int value;
QueueType queue;
}semaphore;
(2)记录型信号量
整型信号量机制没有满足让权等待的原则,可能使进程处于饥饿的忙等状态。
//wait()操作
void wait(semaphore *s){
s.value--;
if(s.value < 0){
block(s.queue); // add this process into s.queue
}
}
//signal()操作
void signal(semaphore *s){
s.value++;
if(s.value <= 0){
wakeup(s.queue); // remove a process from s.queue
}
}
①s.value值为正:表示在对进程进行阻塞之前对信号量s可以实施的wait()操作个数,即系统中某类资源实际可用数目;
②s.value值为负:其绝对值表示阻塞队列s.queue中等待的进程个数;
③每次wait()操作,意味着进程请求一个单位的该类资源,使系统中可供分配的该类资源数减少一个。
④每次signal()操作,表示执行进程释放一个单位资源,使系统中可供分配的该类资源数增加一个。
(3)二元信号量
(4)信号量的应用
4. 管程机制
5. 三个经典的进程同步问题
(1)生产者-消费者问题
①问题描述
假设有n个生产者和m个消费者,连接在一个有k个公用缓冲区的有界缓冲上,pi表示生产者进程,cj表示消费者进程。 满足:
A. 只要缓冲区未满,生产者pi即可将生产的产品放 入空闲缓冲区中
B. 只要缓冲区不为空,消费者进程cj就可从缓冲区从取走并消耗产品
②用信号量解决生产者-消费者问题
利用互斥信号量mutex实现多个进程对公用缓冲区的互斥使用,初始化为1
利用信号量empty和full分别记录公用缓冲区中空缓冲区和满缓冲区的个数,分别初始化为k和0。
③用信号量解决生产者-消费者问题
int nextin = 0, nextout = 0;
item buffer[k];
semaphore mutex = 1, empty = k, full = 0;
void producer(){
while(TRUE){
//produce an item in nextp;
wait(empty); //等待空闲缓冲区
wait(mutex); //互斥使用缓冲池
buffer[nextin] = nextp;
nextin = (nextin + 1) % k;
signal(mutex);
signal(full);
}
}
void consumer(){
while(TRUE){
wait(full); //等待满的缓冲区
wait(mutex); //互斥使用缓冲池
nextc = buffer[nextout];
nextout = (nextout + 1) % k;
signal(mutex);
signal(empty);
//consume the item in nextc;
}
}
void main(){
parbegin (producer, consumer);
}
(2)读者-写者问题
①问题描述
有一个多个进程共享的数据区,我们把只要读该数据区的进程记为Reader进程(读者),把只要往数据区中写数据的进程记为Writer进程(写者)。满足:
A. 允许多个读者同时执行读操作
B. 一次只能有一个写者可以执行写操作
C. 如果一个写者在执行写操作,则其它任何读者都不能执行读操作
②用信号量解决读者-写者问题
利用互斥信号量wmutex实施读者与写者在读写时的互斥,
设置整型变量readercount用于记录正在读的进程个数
计数变量readercount本身是可以被多个读者访问的临界资源,设置互斥信号量mutex控制多个读者对readercount的修改
semaphore mutex = 1, wmutex = 1;
int readercount = 0;
void reader(){
while(TRUE)
{
wait(mutex);
if (readcount == 0)
//表示来的是第一个读者,需要等待用于控制读写互斥的wmutex信号量。
wait(wmutex);
readercount++;
signal(mutex);
// read operation
wait(mutex);
readercount--;
if (readcount == 0)
//表示最后一个读者离开,需要释放用于控制读写互斥的wmutex信号量。
signal(wmutex);
signal(mutex);
}
}
void writer(){
while(TRUE)
{
wait(wmutex);
// write operation
signal(wmutex);
}
}
void main(){
parbegin (reader, writer);
}
(3)哲学家就餐问题
①问题描述
有五位哲学家,用一生来思考和吃饭。他们围坐在一张圆桌旁边,桌子中央有一大碗米饭,桌上还有五个碗和五只筷子,他们的生活方式是交替地进行思考和进餐。平时,当某位哲学家进行思考时,他不与其它哲学家交互。当他感觉到饥饿时,便试图拿起与其左右最靠近他的筷子。满足:
A. 一个哲学家每次只能拿起一只筷子,且他不能从其他哲学家手里拿筷子
A. 只有在他拿到两只筷子时才能进餐
②用信号量解决哲学家就餐问题
每一只筷子的使用都必须是互斥的,在某一时刻只允许一个哲学家使用
利用一个信号量表示一只筷子,五只筷子的信号量数组定义为semaphore chopstick[5]
semaphore chopstick[5] = {1,1,1,1,1};
int i;
void philosopher (int i){
while(TRUE){
// think
wait(chopstick[i]);
wait(chopstick[(i+1) % 5]);
// eat
signal(chopstick[(i+1) % 5]);
signal(chopstick[i]);
}
}
void main(){
parbegain (philosopher(0), philosopher(1), philosopher(2), philosopher(3), phi
losopher(4));
}
6. 信息传递
(1)概念
消息传递(Message passing)作为当前应用最为广泛的一种进程间通信机制,为进程间信息传递和交换的实现提供了很好的保障
(消息:消息是一组信息,由消息头和消息体组成)
(2)同步
①阻塞send:发送进程阻塞,直到消息被接收进程接收
非阻塞send:发送进程发送消息并再继续操作
阻塞receive:接收者阻塞直到请求的消息到达
非阻塞receive:接收者收到一条有效消息或一条空消息
②组合形式:
阻塞send,阻塞receive;
非阻塞send,阻塞receive;
非阻塞send,非阻塞receive。
(3)寻址方式
① 直接:send(destination, message) receive(source, message)
② 间接:消息传递并不是在发送进程和接收进程之间直接进行,而是通过一个被称为信箱(Mailbox)的共享的数据结构完成
利用信箱进行通信,发送进程和接收进程存在如下的对应关系:一对一、多对一、一对多和多对多。
(4)互斥
send(mbox, msg)原语表示向信箱mbox中发送msg消息
receive(mbox, msg)表示从信箱mbox中取走msg消息
问答题
(来自亲爱的瑶妹)
1.什么是操作系统?
操作系统,是计算机系统最基本,最重要的系统软件,是其它软件的支撑。控制和管理计算机系统中的硬件和软件资源,合理组织计算机的工作流程,并为用户使用计算机提供基础和公共的服务。
2.多道程序(multiprogrammming)和多重处理(multiprocessing)有何区别?
多道程序是作业之间自动调度执行、共享系统资源,并不是真的同时执行多个作业,它是微观上串行,宏观上并行。而多重处理系统配置多个CPU,能真正地同时执行多道程序。要有效使用多重处理,必须采用多道程序设计技术,而多道程序设计原则上不一定要求多重处理系统的支持。
3.简述并发和并行的区别。
并发是多个事件在同一时间段发生,并行是多个事件在同一时刻发生
1.名词解释: 互斥、同步、临界区、临界资源、死锁、饥饿。
(1)互斥:多个进程因争用临界区的临界资源而互斥地执行,当一个进程在临界区访问共享资源时,其它进程不能进入该临界区访问任何共享资源
(2)同步:系统中有一些相互合作、协同工作的进程,它们之间的相互联系称为进程的同步.
(3)临界区:是一段程序代码,进程将在此代码中访问共享的资源,当有一个进程访问该段代码时,其它进程不能在此代码中执行
(4)临界资源: 在一段时间内只允许一个进程访问的资源称为临界资源.
(5)死锁: 两个或者两个以上的进程因其中的每个进程都在等待其他进程执行完毕而不能继续执行
(6)饥饿:指一个进程可继续执行,但被调度程序无限期地忽视而不能执行的情况
2.试比较进程和程序的区别。
程序是完成特定任务的一组指令的结合,可以永久保存,具有静态性
而进程是程序在某一次数据结构的执行过程,是系统进行资源分配和调度的基本单位具有动态性;一个进程可以包括多个程序,一个程序可以被多个进程执行
3.并发进程间的制约有哪两种? 引起制约的原因分别是什么?
直接制约和间接制约
直接制约是由并发进程互相共享对方的私有资源所引起的
间接制约是由竞争共有资源而引进的
4.什么是线程?试述线程与进程的区别
通常把调度和分配的基本单位称为线程或轻量级进程
把资源分配的基本单位称为进程或任务
进程间相互独立,同一进程的各个线程之间共享它们
调度和切换不同,线程上下文切换比进程上下文切换要快得多
进程之前的并发性低,线程之间的并发性高
标签:总结,操作系统,中断,信号量,线程,进程,执行,OS From: https://www.cnblogs.com/robber-is-best/p/17866962.html