之前看了现代操作系统这本书,但是没有好好的总结,看过很快就忘了,现在总结为了加深印象,对一些知识点了解的也更加透彻了。
操作系统的四个特性
并发:在一段时间内,运行多个程序,执行多个任务。从宏观上来说的。操作系统中引入进程的目的就是为了使程序能并发执行。
共享:资源共享,即系统中的资源可供多个并发执行的进程共同使用。由于资源的属性不同,多个进程对资源的共享方式也不同,可分为:互斥共享方式 和同时访问方式。
(1)互斥共享方式:一段时间内只允许一个进程访问该资源,如磁带机、打印机等,虽然可供多个进程使用,但为了打印或记录的结果不造成混淆,应规定一段时间内只允许一个进程访问该资源。
(2)同时共享方式:某些资源,一段时间内允许多个进程“同时”对他们进行访问,这个“同时”是宏观上,在微观上可能是分时共享,典型的例子:磁盘设备。
虚拟:把物理上的一台设备变成逻辑上的多台设备。虚,可以理解为是用户感觉上的。操作系统使用虚拟技术可以扩充内存空间。
异步:在多道程序环境下,允许多个程序并发执行。但由于资源有限,进程的执行不是一贯到底,而是走走停停,已不可预知的速度向前推进,这就是进程的异步性。异步性使得操作系统运行在一种随机的环境下,可能导致进程产生与时间有关的错误。
CPU管态和目态
CPU状态分为管态和目态,CPU的状态属于程序状态字PSW的一位,管态又称特权状态、系统态或核心态。通常,操作系统在管态下运行,CPU在管态下可以执行指令系统的全集。目态又称常态或用户态。机器处于目态时,程序只能执行非特权指令。用户程序只能在目态下运行。
操作系统的主要功能
- 处理机管理:处理机分配都是以进程为单位,所以处理机管理也被看做是进程管理。包括进程控制,进程同步,进程通信和进程调度。
- 存储器管理(或者内存管理):内存分配,内存保护,地址映射,内存扩充。
- 设备管理:管理所有外围设备,包括完成用户的IO请求;为用户进程分配IO设备;提高IO设备利用率;提高IO速度;方便IO的使用。
- 文件管理:管理用户文件和系统文件,方便使用同时保证安全性。包括:磁盘存储空间管理,目录管理,文件读写管理以及文件共享和保护。
- 提供用户接口:程序接口(如API)和用户接口(如GUI)。
进程和线程
进程的状态与转换
运行状态:进程正在处理机上运行。在单处理机环境下,每一时刻最多只有一个进程处于运行状态。
就绪状态:进程已处于准备运行的状态,即进程获得了除处理机之外的一切所需资源,一旦得到处理机即可运行。
阻塞状态,又称等待状态:进程正在等待某一事件而暂停运行,如等待某资源为可用(不包括处理机)或等待输入/输出完成。即使处理机空闲,该进程也不能运行。
注意区别就绪状态和等待状态:就绪状态是指进程仅缺少处理机,只要获得处理机资源就立即执行;而等待状态是指进程需要其他资源(除了处理机)或等待某一事件。
就绪状态 -> 运行状态:处于就绪状态的进程被调度后,获得处理机资源(分派处理机时间片),于是进程由就绪状态转换为运行状态。
运行状态 -> 就绪状态:处于运行状态的进程在时间片用完后,不得不让出处理机,从而进程由运行状态转换为就绪状态。此外,在可剥夺的操作系统中,当有更高优先级的进程就 、 绪时,调度程度将正执行的进程转换为就绪状态,让更高优先级的进程执行。
运行状态 -> 阻塞状态:当进程请求某一资源(如外设)的使用和分配或等待某一事件的发生(如I/O操作的完成)时,它就从运行状态转换为阻塞状态。进程以系统调用的形式请求操作系统提供服务,这是一种特殊的、由运行用户态程序调用操作系统内核过程的形式。
阻塞状态 -> 就绪状态:当进程等待的事件到来时,如I/O操作结束或中断结束时,中断处理程序必须把相应进程的状态由阻塞状态转换为就绪状态。
进程与线程
进程:进程是程序的一个运行过程,进程是系统资源分配和调度的基本单位。操作系统引入进程可以让程序并发执行,提高系统的并发效率来提高系统资源利用率和吞吐量。
线程:是比进程更小的可独立运行的基本单位,可以看做是轻量级的进程。线程是CPU调度的基本单位,操作系统在进程的基础上引入线程是为了进一步提高并发效率,同时减少并发的开销。
进程与线程的区别
- 调度方面:进程是资分配和调度的基本单位,线程是CPU调度的基本单位。
- 并发性:引入了线程的OS中,进程间可以并发,而且一个进程内部的多个线程之间也是可以并发的,这就使OS具有更好的并发性,有效的提高了系统资源利用率和吞吐量。
- 拥有资源:无论OS是否支持线程,进程都是基本的资源拥有单位,线程只拥有很少的基本的资源,但是线程可以访问所隶属的进程的资源(进程的代码段,数据段和所拥有的系统资源如fd)
- 内存空间:系统运行时,不同的进程的占有独立的地址空间,而一个进程内的多个线程可以共享进程的地址空间。
- 系统开销:创建或者撤销进程的时候,系统要为之创建或回收PCB,系统资源等,切换时也需要保存和恢复CPU环境。而线程的切换只需要保存和恢复少量的寄存器,不涉及存储器管理方面的工作。
- 通信:同一个进程中的多个线程共享地址空间,所以通信同步等都比进程要更为方便。
进程通信
进程通信是指进程之间的信息交换。PV操作是低级通信方式,髙级通信方式是指以较高的效率传输大量数据的通信方式。高级通信方法主要有以下三个类。
(1)共享存储
在通信的进程之间存在一块可直接访问的共享空间,通过对这片共享空间进行写/读操作实现进程之间的信息交换。在对共享空间进行写/读操作时,需要使用同步互斥工具(如 P操作、V操作),对共享空间的写/读进行控制。共享存储又分为两种:低级方式的共享是基于数据结构的共享;高级方式则是基于存储区的共享。操作系统只负责为通信进程提供可共享使用的存储空间和同步互斥工具,而数据交换则由用户自己安排读/写指令完成。
需要注意的是,用户进程空间一般都是独立的,要想让两个用户进程共享空间必须通过特殊的系统调用实现,而进程内的线程是自然共享进程空间的。
(2)消息传递
在消息传递系统中,进程间的数据交换是以格式化的消息(Message)为单位的。若通信的进程之间不存在可直接访问的共享空间,则必须利用操作系统提供的消息传递方法实现进程通信。进程通过系统提供的发送消息和接收消息两个原语进行数据交换。
(1)、直接通信方式:发送进程直接把消息发送给接收进程,并将它挂在接收进程的消息缓冲队列上,接收进程从消息缓冲队列中取得消息。
(2)、间接通信方式:发送进程把消息发送到某个中间实体中,接收进程从中间实体中取得消息。这种中间实体一般称为信箱,这种通信方式又称为信箱通信方式。该通信方式广泛应用于计算机网络中,相应的通信系统称为电子邮件系统。
(3)管道通信
管道通信是消息传递的一种特殊方式。所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间通信的一个共享文件,又名pipe文件。向管道(共享文件)提供输入的发送进程(即写进程),以字符流形式将大量的数据送入(写)管道;而接收管道输出的接收进程(即读进程),则从管道中接收(读)数据。为了协调双方的通信,管道机制必须提供以下三方面的协调能力:互斥、同步和确定对方的存在。
进程同步
多进程虽然提高了系统资源利用率和吞吐量,但是由于进程的异步性可能造成系统的混乱。进程同步的任务就是对多个相关进程在执行顺序上进行协调,使并发执行的多个进程之间可以有效的共享资源和相互合作,保证程序执行的可再现性
进程同步机制需要遵循的原则
1. 空闲让进:当没有进程处于临界区的时候,应该许可其他进程进入临界区的申请
2. 忙则等待:当前如果有进程处于临界区,如果有其他进程申请进入,则必须等待,保证对临界区的互斥访问
3. 有限等待:对要求访问临界资源的进程,需要在有限时间内进入临界区,防止出现死等
4. 让权等待:当进程因为无法及时获得临界资源而无法进入临界区的时候,需要释放处理机,暂时退让。
经典的进程同步问题:生产者-消费者问题;哲学家进餐问题;读者-写者问题
进程同步:信号量、管程、互斥
线程同步的方式
临界区、互斥量、事件、信号量四种方式