读的英文版所以有的地方自己理解可能有问题。
1.1
操作系统干了什么
主要从系统视角和用户视角分析
1.2电脑操作系统结构
1.2.1
机器上电后,程序从ROM或者EEPROM中通过CPU调度启动。
这里提到一个重要的操作中断,提到了中断相关信息的存储。
1.2.2 存储结构
CPU负责运算,memory负责存储程序和数据。memory的使用主要从速度、价格、断电数据是否被抹除这几个维度考量。因此引出了多级存储。越往下,成本越低、速度越慢、数据不会受到断电的影响。
1.2.3 I/O
存储只是I/O设备的一部分,设备管理器的作用是在buffer storge和外围设备中间搬运数据,从设备管理器引出device driver这个概念。device driver负责设备管理和控制系统的调度。设备管理在数据搬运完成后会通过中断通知device driver,device driver再通知控制系统。在大量数据操作时,使用DMA,设备管理会在数据全部搬运完之后才通知device driver,这样只会产生一次中断,CPU的工作不会受到影响。(我理解时中断就会打断CPU,所以中断次数越少,CPU就可以腾出时间来处理其他事情)
1.3电脑系统结构
1.3.1单处理器系统
一个电脑系统是由许多的special-purpose processors组成
,如果只有一个通用CPU就是单处理器系统
1.3.2多处理器系统
多处理器系统有三个重要的优点:
Increased throughput. 但是并不是N个处理器性能就提升N倍。
Economy of scale.多个处理器共用一套外部设备、memory等
Increased reliability.如果一个处理器遇到问题,其他处理器可以帮忙,整个系统不会因此停止运行。(这个最重要)
graceful degradation到fault tolerant。优秀的操作系统应该做到fault tolerant,The HP NonStop 的解决方案时两个cpu运行一套命令,如果结果不同就再从另外两个cpu上开始运行。多核处理器有两种模式AMP和SMP,SMP应用更多一些。SMP下cpu有自己的寄存器和cache但是它们共享memory。SMP需要更加注意I/O,避免cpu等待,造成资源浪费等情况。
在多核处理器的背景下,cpu和memory control是一体的,那么也就意味着memory access 要从UMA到NUMA。
现在的趋势是一个CPU有多核,多核的优势表现在CPU通讯更快,更省电,简单来说就是多个单核CPU被单个多核CPU取代。
1.3.3集群操作系统
多CPU的另一种形式就是clustered systems。利用LAN,即使被监控的机器挂掉,监控者也可以继续运行挂掉的机器上的程序。
例子:Linux的高性能集群,个人电脑通过网络组成集群,使用开源软件,性价比高。
两种模式:
-
asymmetric clustering
hot-standby mode监控其他程序,如果其他程序挂掉,hot-standby mode会变成active server。 -
symmetric clustering
所有的hosts 同时run applications 和monitor others。这样会更有效率,因为更多的机器被利用起来。
在cluster中,管理系统可以将问题分配给每台电脑,他们运算完后再将结果合并,更加高效
1.4 Operating-System Structure
Multiprogramming可以保证CPU总是保持在能运行程序的状态。
operating system将部分job放在memory,由于memory放不下所有job,所以将job放在disk的job pool中。operating system负责搬运job。从job的视角来看,可能job可能会等待资源,但是由于operating system的介入,如果当前job需要等待资源,cpu会切换到其他job。
Time sharing中 cpu的切换非常快,所以用户会感觉所有的job都在同时运行。
TIme sharing用于交互系统,比如用户从输入到输出的时间会很短。
interactive I/0的input 和 output 速度是不同的,比如input为打字 最多7字/秒,这对电脑来说太慢了,cpu不可能等着input,cpu会在这期间干其他事。
time sharing and multiprogramming 会出现几个任务都准备好被读入memory 的情况,这就需要系统选择哪个任务先被读入memory,会在第五、八、九章详细说明调度。
1.5 Operating-System Operations
打断机制不适用于handware 和 software的共享的情况,如果他们被打断了,可能就会影响到其他人使用handware和softwar。
好的程序需要做到一个程序的崩溃不能导致其他程序崩溃
1.5.1 Dual-Mode Operation
user mode 和 kernel mode
mode bit作为区分标示, kernel (0) or user (1).
user mode 和 kernel mode 可以保证用户的错误操作不会导致operating system的崩溃。
例子:privileged instructions只能运行在kernel mode中,如果运行在user mode 会被认为是非法的。
简单来说kernel mode拥有更高的权限,可以直接控与hardware交互,user mode责备限制在kernel mode之上。
System calls是user mode下向operating system发送请求的手段,operating system在收到system call之后会切换到kernel mode,kernel mode回根据system call的信息确定之后的操作。
如果没有两种mode的划分,用户程序会搞挂整个程序,多个程序同时对一个设备写入,会造成不可预知的结果。
一旦有了硬件级别的保护,hardware接收到错误,traps 操作系统(像interrupt过程),并将错误信息放在memory dump中。
1.5.2 Timer
这块需要再看看,有点不太明白
1.6 process management
Program在被执行的时候就是有进程了,进程会占用cpu memory I/O等,进程是active program。program是passive的。
process 是 system 工作的单元。
会在3到6节详细讨论。
1.7 memory management
Main memory 不可能同时装下所有程序,断电数据会丢失,所以为了让cpu效率更高和提高电脑响应速度,就需要memory management
设计遵守三个原则
• Keeping track of which parts of memory are currently being used and by whom
• Deciding which processes (or parts thereof) and data to move into and out of memory
• Allocating and deallocating memory space as needed
会在8、9节详细讨论
1.8 storage management
1.8.1File-System Management
1.8.2Mass-storage Mamagement
main memory由于容量和断电数据丢失的问题,需要secondary storage来辅助存储。
整理设计逻辑。
main memory
secondary storage
tertiary storage
1.8.3 caching
cache是CPU和 main memory数据交换的衔接,能防止CPU等待。
数据的操作可能经过层层拷贝。
如果只有一个 process问题会很简单,但是如果在多任务的环境下,每个CPU都有自己的local cache。一个数据被修改需要被通知到所有的cache,这个叫做cache coherency,这个一般是hardware问题。
1.8.4 I/O Systems
• A memory-management component that includes buffering, caching, and spooling
• A general device-driver interface
• Drivers for specific hardware devices
1.9 Protection and Security
更早的暴露问题,保护系统。
手段:
user list、group list和临时申请升级权限的机制。
1.10 Distributed Systems
与network相关联
主要讲了LAN和WAN。local network和wide-area network。
1.11 Special-Purpose Systems
1.11.1 Real-Time Embedded Systems
智能家居的设想,自动开关灯
1.11.2 Multimedia Systems
专门处理多媒体数据的操作系统
1.11.3 Handheld Systems
手持设备的系统,其中提到的一些问题,现在已经不太适用了。
实际内存不够大是最大的限制。
体积小->电池不会太大->电量有限->运行速度降低
input 和 ouput小,现在这个问题慢慢淡化了,手机屏幕越来越来大了
1.12 Computing Environments
1.12.1 Traditional Computing
简单介绍了一下,现在已经不流行了。
1.12.2 Client-Server Computing
- compute-server system
server接收请求,execute action,return result - file-server system
clients 可以增删改查文件
1.12.3 Peer-to-Peer Computing
distributed system的另一种结构。
所有的node都可以是peer,所以server的瓶颈是基本不存在的。
在peer-to-peer种服务获得一般有两种方式
- centralized lookup记录所有node的service,当node需要service时,先在centralized lookup中查询。
- node需要client之前需要先查询哪个node能提供它需要的service,通过discovery protocol的方式。
1.12.4 Web-Based Computing
简单讲了下
1.13 Open-Source Operating Systems
这段主要是讲了开源的好处,能看的出来作者很鼓励开源。
开源就意味着有更多的人会看你的代码,会有更多的意见提出
1.14 Summary
这段挺好的,总结很到位
opreating system本质上是一个软件程序,它管理硬件,为更上层的软件提供运行环境
Practice Exercises
32道问题,留着慢慢填坑。💥
CHAPTER 2 Operating System Structures
2.1 Operating-System Services
user interface
CLI和GUI,命令行和图形界面program execution
The system must be able to load a program into memory and to run that program. The program must be able to end its execution, either normally or abnormally (indicating error).I/O Operation
I/O操作,用户不能直接操作I/O,但是操作系统会提供操作I/O的方法。File-system manipulation
文件操作,增删改查等Communications
一般是process间的通信Error detection
容错机制Resource allocation
资源分配Accounting
Protection and security
2.2 User Operating-System Interface
主要是针对command line和 Graphical User Interfaces优缺点的分析,夹杂历史介绍。
2.3 System Calls
以例子讲解,往一个文件里写数据,然后将数据同步复制到另一个文件。
直接操作是很复杂的,由此引出了API的概念。
- 遵循API设计程序可以让程序适应各种支持此API的系统。
- API调用更加方便,容易理解
- 低耦合
2.4 Types of System Calls
主要从以下几个方面分析
process control, file manipulation, device manipulation, information maintenance, communications, and protection.
2.4.1 Process Control
错误,结果返回,多任务
在看一下💥
单任务和多任务对比
只有能执行一个任务,如果遇到错误,当前运行程序中止,错误信息保留到memory 中,下一次命令执行时会先执行错误信息
多任务中,shell在前台运行程序,后台也可以在运行程序,shell会占用I/O,如果当前程序有错误,shell会立刻执行后台程序,在程序全部执行完后再统一返回状态
2.4.2 File Management
主要讲如何确定想要操作的文件。
通过file attributes确定文件之后才能创建.读 写 关闭 等
2.4.3 Device Management
process需要的resource可以被看作是device
2.4.4 Information Maintenance
user program 和 operation system 之间传递信息
2.4.5 Communication
两种信息交换模式
sage-passing model
通过hostid和processid来确认信息交换的双方,这种process大部分是daemons,作为server。shared-memory model
They can then exchange information by reading and writing data in the shared areas
2.4.6 Protection
资源保护
2.5 System Programs
大体架构如下
Hardware .
operating system.
system programs.
Application programs .
system program 让用户直接面对界面而不是系统响应接口
2.6 Operating-System Design and Implementation
2.6.1 Design Goals
user goals 和 system goals
侧重不同会导致最终的效果差距很大,实际上就是用户和程序设计者的立场。
2.6.2 Mechanisms and Policies
2.6.3 Implementation
流行的编写方法是使用更高层次的语言,如C C++。有以下优点
- 编写更快,更容易被读懂
- 能被移植
缺点
- 速度慢,占用更多的存储空间
2.7 Operating-System Structure
2.7.1 Simple Structure
以MS-DOS为例
2.7.2 Layered Approach
优点
simplicity of construction and debugging
耦合低
缺点
layers 定义困难
层级过多,导致消息传递的效率低,需要一层一层传递
2.7.3 Microkernels
扩展性强
2.7.4 Modules
稍后看一下,💥
2.8 Virtual Machines
虚拟技术
2.8.2 Benefits
- 虚拟机可以保护host system
- operating system的修改和升级是很危险的,所以如果要升级需要占用很长时间,升级和修改都可以在虚拟机上做。
- 开发者同时运行可以多种类型的操作系统
PS:虚拟的标准很重要
2.8.3 Simulation
这个和virtual有什么不一样吗,这个需要再自己扩展💥
介绍了两个缺点
- 速度慢
- 工作量大
2.8.4 Para-virtualization
2.8.5 Implementation
同样有virtual user mode和 virtual kernel mode。
响应时间是不同的。