作者: 康凯森
日期: 2016-04-03
分类: 笔记
中断:其他模块(I/O,存储器)中断 处理器正常处理过程 的机制。
第一种方法是当正在处理一个中断时,禁止再发生中断。
第二种方法是定义中断优先级,允许高优先级的中断打断低优先级的中断 处理器的运行。
高速缓冲存储器是比主存小而快的存储器,用以协调主存跟处理器,作为最接近储存地址的缓冲区。
考虑因素: 价格, 容量, 访问时间
速度: 寄存器 > 高速缓存 > 内存 > 磁盘
批处理(多道程序设计)的目标 : 充分使用处理器 分时的目标: 减少响应时间
内核是操作系统最常使用的部分,它存在于主存中并在特权模式下运行,响应进程调度和设备中断。
多道程序设计是一种处理操作,它在两个或多个程序间交错处理每个进程。
虚地址指的是存在于虚拟内存中的地址,它有时候在磁盘中有时候在主存中。 实地址指的是主存中的地址。
操作系统维持着四种不同类型的表:内存,I/O,文件,进程
内存,I/O和文件是代表进程而被管理的,因此进程表必须有对这些资源的直接或者间接引用。
进程是操作系统对正在运行的程序的一种抽象
阻塞:进程是否等待一个事件 挂起:进程是否已经被换出内存
处理器为了执行另外的进程而终止当前正在执行的进程,这就叫进程抢占
交换是指把主存中某个进程的一部分或者全部内容转移到磁盘。当主存中没有处于就绪态的进程时,操作系统就把一个阻塞的进程换出到磁盘中的挂起队列,从而使另一个进程可以进入主存执行
1、管道:管道是单向的、先进先出的、无结构的、固定大小的字节流,它把一个进程的标准输出和另一个进程的标准输入连接在一起。写进程在管道的尾端写入数据,读进程在管道的道端读出数据。数据读出后将从管道中移走,其它读进程都不能再读到这些数据。管道提供了简单的流控制机制。进程试图读空管道时,在有数据写入管道前,进程将一直阻塞。同样地,管道已经满时,进程再试图写管道,在其它进程从管道中移走数据之前,写进程将一直阻塞。
无名管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系(通常是指父子进程关系)的进程间使用。
命名管道:命名管道也是半双工的通信方式,在文件系统中作为一个特殊的设备文件而存在,但是它允许无亲缘关系进程间的通信。当共享管道的进程执行完所有的I/O操作以后,命名管道将继续保存在文件系统中以便以后使用。
2、信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其它进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
3、消息队列:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
4、信号:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
5、共享内存:共享内存就是映射一段能被其它进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的IPC方式,它是针对其它进程间通信方式运行效率低而专门设计的。它往往与其它通信机制(如信号量)配合使用,来实现进程间的同步和通信。
6、套接字:套接字也是一种进程间通信机制,与其它通信机制不同的是,它可用于不同机器间的进程通信。
进程标识,处理器状态信息,进程控制信息
用户模式下可以执行的指令和访问的内存区域都受到限制。这是为了防止操作系统受到破坏或者修改。而在内核模式下则没有这些限制,从而使它能够完成其功能
发生模式切换可以不改变当前正处于运行态的进程的状态。发生进程切换时,一个正在执行的进程被中断,操作系统指定另一个进程为运行态。进程切换需要保存更多的状态信息。
进程是系统进⾏资源分配和调度的基本独⽴单位; 线程是进程的⼀个实体,是CPU调度和分派的基本单位。
⼀个线程只属于⼀个进程,⼀个进程中可以有多个线程
资源分配给进程,进程内的线程共享该进程的资源
多进程和多线程在执⾏过程中都需要⼀定的同步机制进⾏同步
本质:进程是拥有系统资源的基本单位,⽽线程是调度和分配的基本单位
地址空间和其他资源:进程间(⼀般)相互独⽴,⽽同⼀进程的各线程之间共享进程资源
通信:进程间通信根据场景不同会使⽤不同的通信⼿段(信号、共享内存、管道、套接字等),⽽线程通常使⽤共享内存⽅式并需要⼀定的同步与互斥⼿段辅助
系统开销:进程在创建和切换的开销远⼤于线程,但进程相⽐线程更加健壮(因为进程之间相互独⽴)
从概念上: 进程:一个程序对一个数据集的动态执行过程,是分配资源的基本单位。 线程:一个进程内的基本调度单位。线程的划分尺度小于进程,一个进程包含一个或者更多的线程。
从执行过程中来看: 进程:拥有独立的内存单元,而多个线程共享内存,从而提高了应用程序的运行效率。 线程:每一个独立的线程,都有一个程序运行的入口、顺序执行序列、和程序的出口。但是线程不能够独立的执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
从逻辑角度来看(重要区别): 多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但是,操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理及资源分配。
继承数据是分开的:共享复杂,需要用IPC;同步简单。
多线程共享进程数据:共享简单;同步复杂。
进程占用内存多,切换复杂,CPU利用率低
线程占用内存少,切换简单,CPU利用率高
进程创建销毁、切换复杂,速度慢
线程创建销毁、切换简单,速度快
进程编程简单,调试简单
线程编程复杂,调试复杂
进程间不会相互影响
一个线程挂掉将导致整个进程挂掉
进程适应于多核、多机分布 ;如果一台机器不够,扩展到多台机器比较简单 线程适应于多核分布
1 需要频繁创建销毁的优先用线程。
2 需要进行大量计算的优先使用线程。
3 强相关的处理用线程,弱相关的处理用进程。
4 可能扩展到多机分布的用进程,多核分布的用线程。 5 都满足需求的情况下,用你最熟悉、最拿手的方式。
临界资源就是一次只允许一个进程访问的资源 所谓临界区就是进程中访问临界资源的那段程序代码
空闲让进,忙则等待,有限等待,让权等待
P,V操作是因为Dijkstra是荷兰人,P指的是荷兰语中的“proberen”,意为“测试”,而V指的是荷兰语中的“verhogen”,意为“增加”。
P(S): while (S≤0) {do nothing};
S=S-1;
V(S): S=S+1;
但是这样明显违反了“让权等待的原则”
P(S): S.value = S.value-1;
if(S.value < 0)
block(S,Q);
V(S): S.value = S.value + 1;
if(S.value <= 0)
wakeup(S,Q);
P操作相当于“等待一个信号”,而V操作相当于“发送一个信号”,在实现同步过程中,V操作相当于发送一个信号说合作者已经完成了某项任务,在实现互斥过程中,V操作相当于发送一个信号说临界资源可用了。实际上,在实现互斥时,P,V操作相当于申请资源和释放资源。
同步与互斥实现的P,V操作虽然都是成对出现,但是互斥的P,V操作出现在同一个进程的程序里,而同步的P,V操作出现在不同进程的程序中
内部碎片是指由于被装入的数据块小于分区大小而导致的分区内部所浪费的空间。外部碎片是与动态分区相关的一种现象,它是指在所有分区外的存储空间会变成越来越多的碎片的
逻辑地址是指与当前数据在内存中的物理分配地址无关的访问地址,在执行对内存的访问之前必须把它转化成物理地址。
相对地址是逻辑地址的一个特例,是相对于某些已知点(通常是程序的开始处)的存储单元。
物理地址或绝对地址是数据在主存中的实际位置。
在分页系统中,进程和磁盘上存储的数据被分成大小固定相等的小块,叫做页。而主存被分成了同样大小的小块,叫做帧。一页恰好可以被装入一帧中。
分段是细分用户程序的另一种可选方案。采用分段技术,程序和相关的数据被划分成一组段。尽管有一个最大段长度,但并不需要所有的程序的所有段的长度都相等
简单分页:一个程序中的所有的页都必须在主存储器中程序才能正常运行,除非使用覆盖技术。
虚拟内存分页:不是程序的每一页都必须在主存储器的帧中来使程序运行,页在需要的时候进行读取。
一个进程的驻留集是指当前在主存中的这个进程的页的个数。
一个进程的工作集是指这个进程最近被使用过的页的个数。