文章目录
中断
是进入内核的唯一方法。
CPL
CPL是当前执行的程序或任务的特权级。它被存储在CS和SS的第0位和第1位上。通常情况下,CPL代表代码所在的段的特权级。当程序转移到不同特权级的代码段时,处理器将改变CPL。只有0和3两个值,分别表示用户态和内核态。
DPL
DPL表示段或门的特权级。它被存储在段描述符或者门描述符的DPL字段中(《操作系统篇-分段机制与GDT|LDT》中有提到),当当前代码段试图访问一个段或者门(这里大家先把门看成跟段一样,下面我们会介绍),DPL将会和CPL以及段或者门选择子的RPL相比较,根据段或者门类型的不同,DPL将会区别对待。
RPL
RPL是通过段选择子的第0和第1位表现出来的。RPL是代码中根据不同段跳转而确定,以动态刷新CS里的CPL,在代码段选择符中。而且RPL对每个段来说不是固定的,两次访问同一段时的RPL可以不同。操作系统往往用RPL来避免低特权级应用程序访问高特权级段内的数据,即便提出访问请求的段有足够的特权级,如果RPL不够也是不行的,当RPL的值比CPL大的时候,RPL将起决定性作用。也就是说,RPL相当于附加的一个权限控制,只有当RPL>DPL的时候,才起到实际的限制作用。
单道
所有进程一个一个排对执行。若A阻塞,B只能等待,即使CPU处于空闲状态。而在人机交互时阻塞的出现时必然的。所有这种模型在系统资源利用上极其不合理,在计算机发展历史上存在不久,大部分便被淘汰了。像以前的Dos就是单道程序设计系统。
多道
在计算机内存中同时存放几道相互独立的程序,它们在管理程序控制之下,相互穿插的运行。多道程序设计必须有硬件基础作为保证。
时钟中断即为多道程序设计模型的理论基础。 并发时,任意进程在执行期间都不希望放弃cpu。因此系统需要一种强制让进程让出cpu资源的手段。时钟中断有硬件基础作为保障,对进程而言不可抗拒。 操作系统中的中断处理函数,来负责调度程序执行。
在多道程序设计模型中,多个进程轮流使用CPU (分时复用CPU资源)。而当下常见CPU为纳秒级,1秒可以执行大约10亿条指令。由于人眼的反应速度是毫秒级,所以看似同时在运行。
实质上,并发是宏观并行,微观串行!
多道可以提高CPU的利用效率
并发
一个CPU上交替的执行多个程序
单核CPU同一时刻只能执行一个程序。
PCB
进程控制块
用来记录进程信息的数据结构
运行的程序和静态程序不一样
进程
进程是进行(执行)中的程序
多进程图像
进行之间相互切换
进程之间的切换要进行调度
进程调度的方法FIFO
Priority 优先级
进程=资源+指令执行序列
线程:保留了并发的优点,避免了进程切换的代价
进程和线程的基本概念
线程的概念
线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。
组成
当前指令指针(PC),寄存器集合和堆栈组成
好处
(1)易于调度。
(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。
3开销少。创建线程比创建进程要快,所需要的开销少
4 利于充分发挥多处理器的功能,通过创建多线程进程,每个线程在一个处理器上运行,从而实现应用程序的并发性,让每个处理器都能得到充分运行。
进程
定义
进程:一个具有一定独立功能的程序关于某个数据集合的一次运行活动,是系统进行资源分配和调度运行的基本单位。
组成
进程:每个进程都有独立的代码空间的数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程
(进程是资源进行资源分配的最小单位)
a. 程序
b. 数据
c. 进程控制块(PCB):为了管理和控制进程,系统在创建每个进程时,都为其开辟一个专用的存储区,用以记录它在系统中的动态特性。系统根据存储区的信息对进程实施控制管理。进程任务完成后,系统收回该存储区,进程随之消亡,这一存储区就是进程控制块。
进程控制快的内容
PCB随着进程的创建而建立,撤销而消亡。系统根据PCB感知一个进程的存在,PCB是进程存在的唯一物理标识(这一点可以类比作业控制块JCB)。
进程和程序的区别
1进程是动态的概念
进程是程序的一次执行过程,是动态的概念
2不同的进程可以执行同一程序
区分进程的条件:所执行的程序和数据的集合
两个进程即使调用同一个编译程序,只要他们运行在不同的数据集合上,他们也是两个进程,。例如:多个用户同时调用同一个编译程序编译他们编写的C语言源程序,由于编译程序运行在不同的数据集合(不同的C语言源程序)上,于是产生了一个个不同的进程。
3每个进程都有自己的生命周期
当操作系统要完成某个任务时,它会创建一个进程。当进程完成任务之后,系统就会撤销这个进程,收回它所占用的资源。从创建到撤销的时间段就是进程的生命期。
4 进程之间存在并发性
在一个系统中,同时会存在多个进程。他们轮流占用CPU和各种资源。
5. 进程间会相互制约
进程是系统中资源分配和运行调度的基本单位,在对资源的共享和竞争中,必然会相互制约,影响各自向前推进的速度
6进程可以创建子进程,程序不能创建子程序
7 从结构上讲,每个进程都由程序,数据和一个进程控制块PCB组成
进程的重要组成
动态特征:进程对应于程序的运行,动态产生、消亡,在其生命周期中进程也是动态的。
并发特征:任何进程都可以同其他进程一起向前推进。
独立特征:进程是相对完整的调度单位,可以获得CPU,参与并发执行。
交往特征:一个进程在执行过程中可与其他进程产生直接或间接关系。
异步特征:每个进程都以相对独立、不可预知的速度向前推进。
结构特征:每个进程都有一个PCB作为他的数据结构。
进程最基本的特征是并发和共享特征。
进程的三种基本状态
运行态: 运行状态:获得CPU的进程处于此状态,对应的程序在CPU上运行着。
** 阻塞状态**:为了等待某个外部事件的发生(如等待I/O操作的完成,等待另一个进程发来消息),暂时无法运行。也成为等待状态
就绪状态:具备了一切运行需要的条件,由于其他进程占用CPU而暂时无法运行。
程序状态的转换
a 运行态->阻塞态:比如正在运行的进程提出I/O请求,由运行态转化位阻塞状态
b阻塞状态->就绪状态 example I/O操作状态转化位就绪状态
c就绪状态:具备了一切运行需要的条件,由于其他进程占用CPU而暂时无法执行
进程的类型
a系统进程:操作系统用来管理资源的进程,当系统进程处于运行态时CPU处于管态,系统之间的关系由操作系统负责
b 用户进程:操作系统可以独立执行的的用户程序段,当用户进程处于运行态时,CPU处于目态,用户进程之间的关系由用户负责。
c 守护线程: 用来服务于用户线程;不需要上层逻辑介入。
不同类型的进程 前台进程、后台进程、守护进程
前台进程:是直接与用户交互,用户可以直接看到的
后台进程:用户无法看到的,前台进程与后台进程是可以相互转换的。
守护进程:是一种特殊的后台进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件,它只能在后台运行。
多线程
多线程指操作系统能同时运行多个任务
同步和互斥的区别:
当有多个线程的时候,经常需要去同步这些线程以访问同一个数据或资源。例如,假设有一个程序,其中一个线程用于把文件读到内存,而另一个线程用于统计文件中的字符数。当然,在把整个文件调入内存之前,统计它的计数是没有意义的。但是,由于每个操作都有自己的线程,操作系统会把两个线程当作是互不相干的任务分别执行,这样就可能在没有把整个文件装入内存时统计字数。为解决此问题,你必须使两个线程同步工作。
同步
所谓同步,是指散步在不同进程之间的若干程序片断,它们的运行必须严格按照规定的某种先后次序来运行,这种先后次序依赖于要完成的特定的任务。如果用对资源的访问来定义的话,同步是指在互斥的基础上(大多数情况),通过其它机制实现访问者对资源的有序访问。在大多数情况下,同步已经实现了互斥,特别是所有写入资源的情况必定是互斥的。少数情况是指可以允许多个访问者同时访问资源。
互斥
是指散布在不同进程之间的若干程序片断,当某个进程运行其中一个程序片段时,其它进程就不能运行它们之中的任一程序片段,只能等到该进程运行完这个程序片段后才可以运行。如果用对资源的访问来定义的话,互斥某一资源同时只允许一个访问者对其进行访问,具有唯一性和排它性。但互斥无法限制访问者对资源的访问顺序,即访问是无序的。
进程间通信的方式
1)管道(pipe)及有名管道(named pipe):管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。
(2)信号(signal):信号是在软件层次上对中断机制的一种模拟,它是比较复杂的通信方式,用于通知进程有某事件发生,一个进程收到一个信号与处理器收到一个中断请求效果上可以说是一致的。
3)消息队列(message queue):消息队列是消息的链接表,它克服了上两种通信方式中信号量有限的缺点,具有写权限得进程可以按照一定得规则向消息队列中添加新信息;对消息队列有读权限得进程则可以从消息队列中读取信息。
(4)共享内存(shared memory):可以说这是最有用的进程间通信方式。它使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程中对共享内存中数据得更新。这种方式需要依靠某种同步操作,如互斥锁和信号量等。
(5)信号量(semaphore):主要作为进程之间及同一种进程的不同线程之间得同步和互斥手段。
(6)套接字(socket):这是一种更为一般得进程间通信机制,它可用于网络中不同机器之间的进程间通信,应用非常广泛。
进程和线程的关系:
1 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
2资源分配给进程,同一个进程的所有线程共享该进程的所有资源
3 处理机分给线程,即真正在处理机上运行
4 线程在执行的过程中,需要协作同步。不同进程间要利用消息通信的方法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体。
多线程的优点与缺点
优点
使用线程可以把占据时间长的程序中的任务放到后台去处理
用户界面可以更加简单,吸引人,
程序的运行速度可能加快
在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下可以释放一些珍贵的资源如内存占用等等。
多线程的缺点
如果有大量的线程,会影响程序运行的性能,因为操作系统需要在它们之间相互切换
更多的线程需要更多的内存空间
线程的中止需要考虑其对程序运行的影响
多线程技术在IOS软件开发中也有举足轻重的位置。
线程和进程的五个阶段
创建、就绪、运行、阻塞、终止
多线程的概念
多线程是指同一程序中有多个顺序流在执行
主线程的重要性
1,它是产生其他子线程的线程
2 通常它必须最后完成执行,因为它执行各种关闭动作。
进程和线程的区别:
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。