1.多道程序设计技术:
允许多个程序同时进入内存并运行,为了提高系统效率
2.并发环境:
一段时间间隔内,单个处理机有两个及以上的程序同时处于开始运行但尚未结束的状态,并且次序不是事先确定的
在并发环境中执行的程序叫并发程序
3.进程的定义:process(对CPU的抽象)
具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位 又称任务
程序的一次执行过程;是正在运行程序的抽象;系统资源以进程为单位分配,如内存、文件、独立的地址空间;操作系统将CPU调度给需要的进程
特性:
(1)并发性:任何进程都可以与其他进程一起向前推进
(2)动态性:进程是正在执行程序的实例 进程是动态产生的,动态消亡的;进程在生命周期内,三种状态之间转换
(3)独立性:进程是资源分配的一个独立单位 e.g.各进程的地址空间相互独立
(4)交互性:指进程在执行过程中可能与其他进程产生直接或间接的关系
(5)异步性:每个进程都以其相对独立的,不可预知的速度向前推进
4.进程控制块PCB:
又称进程描述符、进程属性
操作系统用于管理控制进程的一个专门数据结构
记录进程的各种属性,描述进程的动态变化过程
PCB是系统干支进程存在的唯一标识
进程表:所有进程PCB的集合
5.PCB包括:
(1)进程描述信息:进程标识符,进程名,用户标识符。进程组关系
(2)进程控制信息:当前状态;优先级;代码执行入口位置;……
(3)所拥有的资源和使用
(4)CPU的现场信息:寄存器值 指向进程页表的指针
6.不同操作系统中的PCB
linux:task_struct
windows:EPROCESS KPROCESS PEB
7.进程状态:
运行态:占有CPU,并在CPU上运行
就绪态:已经具备运行态,但由于没有空闲CPU,而暂时不能运行
等待态:因等待某一事件而暂时不能运行(阻塞态、封锁态、睡眠态)
8.进程状态转化:
(1)就绪->运行:调度程序选择一个新的进程运行
(2)运行->就绪:运行进程用完了时间片,一个高优先级进程进入就绪态,抢占正在运行的进程
(3)运行->等待:请求OS服务,对资源的访问尚不能进行,等待I/O结果,等待另一个进程提供信息
(4)等待->就绪:所等待的事件发生了
9.进程的其他状态:
创建:已完成创建一进程所必须的工作;但尚未统一执行该进程
终止:终止执行后,进程进入的状态;可完成一些数据统计工作;资源回收
挂起:用于调节负载;进程不占用内存空间,其进程影响交换到磁盘上
10.进程队列:
操作系统为每一类的进程建立一个或者多个队列
队列元素为PCB
多个等待队列等待的事件不同
就绪队列也可以是多个
单CPU运行只能有一个进程
11.原语:
完成某种特定功能的一段程序,具有不可分割性或不可中断性,即原语的执行必须是连续的,在执行过程中不允许被中断 (原子操作)
12.进程的创建:
给新进程分配一个唯一的便是以及进程控制块
为进程分配地址空间
初始化进程控制块:设置默认值
设置相应的队列指针:把新进程加到就绪队列链表中 unix:fork/exec windows:CreateProcess
13.进程的撤销:
结束进程:收回进程所占有的资源:关闭打开的文件、断开网络连接、回首分配的内存……
撤销该进程的PCB
unix:exit windows:TerminateProcess
14.进程阻塞:
当被等待的时间未发生时,由进程自己执行阻塞原语,使自己由运行态变为阻塞态
15.Unix的几个进程控制操作:(都是系统调用)
fork() 赋值调用进程来建立新的进程 是最基本的进程建立过程
exec() 包括一系列的系统调用,他们都是通过一段新的程序代码覆盖原来的地址空间,实现进程执行代码的转化
wait() 提供初级进程同步操作,能使一个进程等待另外一个进程的结束
exit() 用来终止一个进程的运行
16.Unix中的fork()实现:
为子进程分配一个空闲的进程描述符 proc进程
分配给子进程唯一的标识pid
以一次一页的方式复制父进程地址空间(linux中采用了写时复制技术COW加快创建进程Copy-On-Write)具体看这里
以父进程处集成共享资源,如打开的文件和当前工作目录等
将子进程的状态设置为就绪,插入到就绪队列
对子进程返回标识符0
想父进程返回子进程pid
17.进程层次结构:
unix进程家族树 init为根
windows:地位相同
18.进程&程序的区别:
进程能更准确刻画并发,而程序不能
程序是静态的,进程是动态的
进程是有生命周期的,有诞生有消亡,短暂的;而程序是相对长久的
一个程序可以对应多个进程
19.进程映像:(即程序+数据+栈(用户栈、内核栈)+PCB)
对进程指向活动全过程的静态描述:由进程地址空间内容、硬件寄存器内容及与该进程相关的内核数据结构、内核栈组成
用户相关:进程地址空间(包括代码段、数据段、堆栈、共享库……)
寄存器相关:程序计数器、指令寄存器、程序状态寄存器、栈指针、通用寄存器等的值
内核相关:静态部分:PCB及各资源数据结构;动态部分:内核栈(不同进程在进入内核后使用不同的内核栈)
20.上下文切换:
将CPU硬件状态从一个进程换到另一个进程的过程
进程运行时,其硬件状态保存在CPU上的寄存器中
寄存器:程序计数器、程序状态寄存器、栈指针、通用寄存器、其他控制寄存器的值
进程不运行时,这些寄存器的值保存在进程控制块PCB中;当操作系统要运行一个新的进程时,将PCB中的相关值送到对应的寄存器中
21.线程的引入:应用、开销、性能
(1)构造服务器的三种方法:
多线程:有并发、阻塞系统调用
单线程进程:无并发、阻塞系统调用
有限状态机:有并发、非阻塞系统调用、中断
(2)线程之间通信如需调用内核(同一进程内的线程)
22.线程的基本概念:
进程两个基本属性:资源的拥有者,CPU的调度单位(线程继承了这个属性)
线程是进程中的一个运行实体,是CPU的调度单位,有时候将线程成为轻量级进程,即在进程中增加了多个执行序列
23.线程的属性:
有标识符ID;有状态及状态转换-需要提供一些操作;不运行时需要保存的上下文:有上下文环境:程序计数器等寄存器;有自己的栈和栈指针;共享所在进程的地址空间和其他资源;可以撤销、创建另一个线程:程序开始是以一个单线程进程方式运行的
24.线程的实现:
(1)用户级线程:
在用户空间建立线程库:提供一组管理线程的过程
运行时系统:完成线程的管理工作(操作、线程表)
内核管理的还是进程,不知道线程的存在
线程的切换不需要内核态特权
e.g.POSIX线程库:PTHREAD
多线程编程接口,以线程库方式提供给用户
yield 线程资源让出CPU
优点:
线程切换快;调度算法是应用程序特定的;用户级线程课运行在任何操作系统上
(2)核心级线程:
内核管理所有线程管理,并向应用程序提供API接口
内核维护进程和线程的上下文
线程的切换需要内核支持
以县城为基础进行调度
e.g windows
(3)混合模型:
线程创建在用户空间完成
线程调度等在内核态完成
25.可再入程序(可重入):
可被多个进程同时调用的程序,具有以下性质:
它是纯代码,即在执行过程中自身不改变;调用它的进程应该提供数据区