北京大学《操作系统原理》(陈向群主讲)课堂笔记(一)
一、操作系统概述
1.1、操作系统做了什么?
以c语言helloworld为例子:
#include<stdio.h> int main(int argc, char *argv[]) { puts("hello world"); return 0; }
用户告诉操作系统执行helloworld程序。
如何告知?
1、命令行输入相应的命令
2、鼠标双击helloworld图标
操作系统:找到helloworld程序的相关信息,检查其类型是否是可执行文件;并通过程序首部信息确定代码和数据在可执行文件中的位置并计算对应的磁盘块地址。
文件格式?
1、Windows操作系统下可执行文件格式是.exe。
2、Linux操作系统下可执行文件格式是.elf。
操作系统:创建一个新的进程,并将helloworld可执行文件映射到该进程结构,表示由该进程执行helloworld程序。
操作系统:为helloworld程序设置CPU上下文环境并跳到程序开始处(假设调度程序选中helloworld程序,会在下一个指令周期跳到程序开始处)。
执行helloworld程序的第一条指令,发生缺页异常。
为什么呢?
因为程序在执行的时候会先把代码的程序和数据读入内存,CPU才能去执行。但是此时helloworld程序还没有把代码的程序和数据读入内存,所以此时硬件机制就会捕获出缺页异常,并且把控制权交给操作系统。
操作系统(页式存储方案):分配一页物理内存,并将代码从磁盘读入内存,然后继续执行helloworld程序。
有的时候程序内存很大,一页物理内存不足以存储整个程序,因此在执行过程中会发生多次的缺页异常。然后到磁盘读入程序到内存,这个过程会执行多次。
helloworld程序执行puts函数(系统调用),在显示器上打印出字符串。
操作系统:找到要将字符串送往的显示设备,通常设备是由一个进程控制的,所以操作系统将要写的字符串发送给该进程。
操作系统:控制设备的进程告诉设备的窗口系统要显示字符串,窗口系统确定这是一个合法的操作,然后将字符串转换成像素,将像素写入设备的存储映像区。
视频硬件将像素转换成显示器可接收的一组控制/数据信号。
显示器解释信号,激发液晶屏。
用户可在屏幕上看到了“hello world”。
1.2、操作系统的定义与作用
操作系统是什么?
操作系统是计算机系统中的一个系统软件,是一些程序模块的集合。
1、它们能以尽量有效、合理的方式组织和管理计算机的软硬件资源。
2、合理地组织计算机的工作流程,控制程序的执行并向用户提供各种服务功能。
3、使得用户能够灵活、方便地使用计算机,使整个计算机系统高效率运行。
解读几个关键词。
有效:系统效率,资源利用率
CPU利用率充足与否?I/O设备是否忙碌?
合理:各种软硬件资源的管理是否公平合理
如果不公平、不合理,则可能会产生什么问题?
方便使用:用户界面或编程接口。
操作系统的三个作用
资源的管理者 → 有效
硬件资源:CPU,内存,设备(I/O设备、磁盘、时钟、网卡等)
软件资源:磁盘上的文件、各类管理信息等
向用户提供各种服务 → 方便使用
对硬件机器的扩展 → 扩展能力
怎么管理资源?
跟踪记录资源的使用状况。
如:哪些资源空闲,分配给谁使用,允许使用多长时间等。
确定资源分配策略--算法。
静态资源策略。
动态资源策略。
实施资源的分配与回收。
提高资源的利用率。
保护资源的利用。
协调多个进程对资源请求的冲突。
从资源管理的角度 - 五大基本功能
进程/线程管理(CPU管理)
进程线程状态、控制、同步互斥、通信、调度等。
存储管理
分配/回收、地址转换、存储保护、内存扩充等。
文件管理
文件目录、文件操作、磁盘空间、文件存取控制等。
设备管理
设备驱动、分配回收、缓存技术等。
用户接口
系统命令、编程接口。
OS是各种系统服务的提供者
在操作系统之上,从用户角度来看:
操作系统为用户提供了一组功能强大、方便易用的命令或系统调用。
典型的服务:
进程的创建、执行;文件和目录的操作;I/O设备的使用;各类统计信息等。
OS是硬件之上的第一层软件
应用程序
------------虚拟机器界面
操作系统
-----------物理机器界面
硬件
OS对硬件机器的扩展
操作系统在应用程序与硬件之间建立了一个等价的扩展机器(虚拟机)。
对硬件抽象,提高可移植性;比底层硬件更容易编程。
1.3、操作系统的主要特征
操作系统的特征:并发、共享、虚拟和随机。
OS特征-并发
并发:指处理多个同时性活动的能力。
由于并发将会引起很多的问题:活动切换、保护、相互依赖的活动间的同步。
在计算机系统中同时存在多个程序运行,单CPU--
宏观上:这些程序同时在执行。
微观上:任何时刻只有一个程序真正在执行,即这些程序在CPU上是轮流执行的。
并行:与并发相似,但多指不同程序同时在多个硬件部件上执行。
OS特征-共享
共享:操作系统与多个用户的程序共同使用计算机系统中的资源(共享有限的系统资源)
操作系统要对系统资源进行合理分配和使用。
资源在一个时间段内交替被多个进程所用。
互斥共享(如打印机)
同时共享(如可重入代码、磁盘文件)
OS特征-虚拟
虚拟:一个物理实体映射为若干个对应的逻辑实体(分时或分空间)。
虚拟是操作系统管理系统资源的重要手段,可提高资源利用率。
如:
CPU:每个进程的“虚处理机”。
存储器:每个进程都有独立的虚拟地址空间(代码+数据+堆栈)。
显示设备:多窗口或虚拟终端。
OS特征-随机
随机:操作系统必须随时对以不可预测的次序发生的事件进行响应并处理。
如:
进程的运行速度不可预知:多个进程并发执行,“走走停停”,无法预知每个进程的运行推进的快慢。
难以重现系统在某个时刻的状态(包括重现运行中的错误)。
1.4、典型操作系统的架构
Windows操作系统的体系结构
抽象成四层:
应用程序 系统功能调用 操作系统 计算机硬件
UNIX架构
抽象成四层:
UNIX命令和库 系统调用接口 内核 硬件
LINUX架构
略
ANDROID操作系统的整体架构
Android应用程序
Email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理等
应用程序框架
开发者可以完全使用核心应用程序所使用的APIs框架视图、内容提供者、资源管理器等
系统库和Android运行时
Android包含一个C/C++库的集合,供Android系统的各个组件使用。如:系统c库、3D库、SQLite、媒体库等
Linux内核
提供核心系统服务,例如:安全、内存管理、进程管理、网络协议栈、驱动模型
1.5、操作系统的分类
操作系统的发展历程
操作系统发展是随着计算机硬件技术、应用需求的发展、软件新技术的出现而发展的。
目标:充分利用硬件、提供更好的服务。
发展历程:大型机器→个人计算机→网络→移动计算→云计算→泛在计算(物联网)→机器人。
传统操作系统的分类
批处理操作系统
分时操作系统
实时操作系统
个人计算机操作系统
网络操作系统
分布式操作系统
嵌入式操作系统
批处理操作系统
问题:慢速的输入输出处理直接由主机来完成,输入输出时,CPU处于等待状态。
解决方案:
卫星机:完成面向用户的输入输出(纸带或卡片),中间结果暂存在磁带或磁盘上。
单道批处理系统:一次只处理一个作业。
多道批处理系统:一次处理多个作业。
SPOOLING系统(Simultaneous Peripheral Operation On-Line,同时的外围设备联机操作,又称假脱机技术)
批处理系统的实现通常采用的技术。
思想:利用磁盘做缓冲,将输入、计算、输出分别组织成独立的任务流,使I/O和计算真正并行。
工作原理:
用户作业加载到磁盘上的输入井。
按某种调度策略选择几个搭配得当的作业,调入内存。
作业运行的结果输出到磁盘上的输出井。
运行结果从磁盘上的输出井送到打印机。
现代计算机系统的打印过程通常采用的是SPOOLing技术。
分时操作系统
时间片:操作系统将CPU的时间划分成若干个片段,称为时间片。
操作系统以时间片为单位,轮流为每个终端用户服务,每次服务一个时间片。
其特点是利用人的错觉,使用户感觉不到计算机在服务他人。
追求目标:及时响应(依据是响应时间)。
响应时间:从终端发出命令到系统给予回答所经历的时间。
通用操作系统
分时系统与批处理系统结合。
原则:分时优先,批处理在后。
“前台”:需要频繁交互的作业。
“后台”:时间性要求不强的作业。
实时操作系统
实时操作系统:指使计算机能及时响应外部事件的请求,在规定的严格时间内完成对该事件的处理,并控制所有实时设备和实时任务协调一致地工作。
分类:
第一类:实时过程控制。
工业控制、航空、军事控制等。
第二类:实时通信(信息)处理。
电讯(自动交换机)、银行、飞机订票、股市行情。
追求目标:
对外部请求在严格时间范围内作出响应。
高可靠性。
特征:
关键参数是时间。例子:工业过程控制系统-汽车装配线。
硬实时系统:某个动作绝对必须在规定的时刻或时间范围完成。
软实时系统:接受偶尔违反最终时限。
个人计算机操作系统
计算机在某一时间内为单用户服务。
追求目标:
界面友好,使用方便。
丰富的应用软件。
网络操作系统
基于计算机网络在各种计算机操作系统上按网络体系结构协议标准开发的软件。
功能:网络管理,通信,安全,资源共享和各种网络应用。
追求目标:相互通信,资源共享。
分布式操作系统
分布式系统:或以计算机网络为基础,或以多处理机为基础,基本特征是处理分布在不同计算机上。
分布式操作系统:是一个统一的操作系统,允许若干个计算机可相互协作共同完成一项任务。操作系统可将各种系统任务在分布式系统中任何处理机上运行,自动实现全系统范围内的任务分配、自动调度、均衡各处理机的工作负载。
处理能力增强、速度更快、可靠性增强、具有透明性。
嵌入式操作系统
嵌入式系统
在各种设备、装置或系统中,完成特定功能的软硬件系统。如汽车、手机、电视机、MP3播放器。
它们是一个大设备、装置或系统中的一部分,这个大设备、装置或系统可以不是“计算机”。
通过工作在反应式或对处理时间有较严格要求环境中。
嵌入式操作系统
运行在嵌入式系统环境中,对整个嵌入式系统以及它所操作、控制的各种部件装置等等资源进行统一协调、调度、指挥和控制的系统软件。
二、处理器概述
2.1、处理器状态(模式)
中央处理器(CPU)
处理器由运算器、控制器、一系列的寄存器以及高速缓存构成。
两类寄存器:
用户可见的寄存器:高级语言编译器通过优化算法分配并使用,以减少程序访问内存次数。
控制和状态寄存器:用于控制处理器的操作。通常由操作系统代码使用。
控制和状态寄存器
用于控制处理器的操作。
在某种特权级别下可以访问、修改。
常见的控制和状态寄存器:
程序计数器(PC),记录将要取出的指令的地址。
指令寄存器(IR),记录最近取出的指令。
程序状态字(PSW),记录处理器的运行状态。如条件吗、模式、控制位等信息。
操作系统的需求-保护
从操作系统的特征考虑:并发、共享。
提出要求:实现保护与控制。
需要硬件提供基本运行机制:
处理器具有特权级别,能在不同的特权级运行的不同指令集合。
硬件机制可将OS与用户程序隔离。
处理器的状态(模式)
现代处理器通常将CPU状态设计划分为两种、三种或四种。
在程序状态字寄存器PSW中专门设置一位,根据运行程序对资源和指令的使用权限而设置不同的CPU状态。
特权指令和非特权指令
操作系统需要两种CPU状态:
内核态:运行操作系统程序。
用户态:运行用户程序。
特权指令:只能由操作系统使用、用户程序不能使用的指令。
例如:启动I/O、内存清零、修改程序状态字、设置时钟、允许/禁止中断、停机。
非特权指令:用户程序可以使用的指令。
例如:控制转移、算术运算、访管指令、取数指令。
实例:x86系列处理器
x86支持4个处理器特权级别。
特权环:R0、R1、R2和R3。
从R0到R3,特权能力由高到低。
R0相当于内核态;R3相当于用户态;R1和R2则介于两者之间。
不同级别能够运行的指令集合不同。
目前大多数基于x86处理器的操作系统,只用了R0和R3两个特权级别。
CPU状态之间的转换
用户态→内核态
唯一途径:中断/异常/陷入机制
内核态→用户态
设置程序状态字PSW
一条特殊的指令:陷入指令(又称访管指令,内核态有时又称为管理态)
提供给用户程序的接口,用于调用操作系统的功能(服务)。
例如:int,trap,syscall,sysenter/sysexit。