1.1 什么是操作系统

1.1.1 作为扩展机器的操作系统

向应用程序提供的基本抽象(自顶向下)。

1.1.2 作为资源管理者的操作系统

管理一个复杂系统的各个部分(自底向上)。

1.2 操作系统的历史

1.2.1 第一代(1945~1955):真空管和穿孔卡片

连程序设计语言甚至是汇编语言都没有。

1.2.2 第二代(1955~1965):晶体管和批处理系统

主要用于科学与工程计算,用FORTRAN语言或汇编语言进行编程。典型的操作系统是FMS(FORTRAN Monitor System,FORTRAN监控系统)IBSYS(IBM为7094机配备的操作系统)

1.2.3 第三代(1965~1980):集成电路芯片和多道程序设计

多道程序设计(multiprogramming)分时系统(time sharing system)出现,小型机崛起。

1.2.4 第四代(1980至今):个人计算机

各种现代操作系统迅速发展。

1.3 计算机硬件介绍

1.3.1 处理器

计算机的“大脑”即中央处理器(central processing unit,CPU),从内存中取出指令并执行之。在每个CPU基本周期中,首先从内存中取出指令,解码以确定其类型和操作数,接着执行之,然后取指、解码并执行下一条指令,经过多个周期,程序被执行完成。
每个CPU都有其一套可执行的指令集(汇编语言)。
每个CPU内部都有一些用来保存关键变量和临时数据的寄存器、一些对程序员可见的专门寄存器如程序计数器(用来保存将要取出的下一条指令的内存地址)、程序状态字(Program Status Word,PSW)寄存器(包含了条件码位、CPU优先级、模式即内核态或用户态以及各种其他控制位)。
现代CPU同时取出多条指令的机制:流水线(pipeline)超标量CPU(将指令解码后先装入一个保持缓冲区)
在内核态运行时,CPU可以执行指令集中的每一条指令,并且使用硬件的每种功能。操作系统在内核态下运行,从而可以访问整个硬件;相反,用户程序在用户态下运行,仅允许执行整个指令集的一个子集和访问所有功能的一个子集。为了从操作系统中获得服务,用户程序必须使用系统调用(system call)陷入内核并调用操作系统。TRAP指令把用户态切换成内核态,并启用操作系统,当有关工作完成后,在系统调用后面的指令把控制权返回给用户程序。
Moore定律指出:芯片中晶体管的数量每18个月翻一番。
多核多线程(multithreading)超线程(hyperthreading)处理器出现。

1.3.2 存储器

计算机存储层次结构(自顶向下成本越来越低、存取速度越来越慢、容量越来越大):

  1. 寄存器(1ns,<1KB)
  2. 高速缓存(2ns,4MB):自顶向下分别为L1、L2、L3高速缓存,即SRAM
  3. 内存(10ns,512~2048MB):主存,即DRAM
  4. 磁盘(10ms,200~1000GB)

主存是存储器系统的主力,通常称为随机访问存储器(Random Access Memory,RAM),过去有时称为磁芯存储器,所有不能在高速缓存中得到满足访问的请求都会转往主存。
非易失性随机访问存储器与主存不同,切断电源后并不丢失其内容,如只读存储器(Read Only Memory,ROM),速度快且便宜,在工厂中就被编程完毕,然后再也不能被修改。
电可擦除可编程只读存储器(Electrically Erasable PROM, EEPROM)闪存(flash memory)也是非易失性的,但是与ROM相反,它们可以擦除和重写。

1.3.3 磁盘

一个磁盘中有一个或多个金属盘片相叠,以5400/7200/10800rpm的速度旋转,每个盘面有一个机械臂横悬其上,臂上的磁头可以读取一段环形区域,称为磁道(track),把一个给定臂位置上的所有磁道合并起来,组成了一个柱面(cylinder),每个磁道划分为若干扇区,扇区的典型值是512字节,较外的柱面比较内的柱面有更多扇区。

1.3.4 磁带

用于磁盘的备份。

1.3.5 I/O设备

实现输入输出的方式:

  1. 用户程序发出一个系统调用,内核将其翻译成一个对应设备驱动程序的过程调用,然后设备驱动程序启动I/O并在一个连续不断的循环中检查该设备是否完成了工作,然后操作系统将控制返回给调用者。这种方式称为忙等待(busy waiting),其缺点是要占据CPU,CPU一直轮询设备直到对应I/O操作完成。
  2. 设备驱动程序启动设备、操作系统阻塞调用者并安排其他工作进行且让该设备在操作完成时完成一个中断(interrupt),设备驱动程序在这个时候返回。
  3. 为I/O使用一种特殊的直接存储器访问(Direct Memory Access,DMA)芯片,可以控制在内存和某些控制器之间的位流,而无需持续的CPU干预,解决了大批量I/O时设备驱动程序多次发出中断影响CPU效率的问题。

1.3.6 总线

是计算机各功能部件间传送信息的公共通信干线。

1.3.7 启动计算机

在操作系统启动时,BIOS开始运行:

  1. 它首先检查所有安装的RAM数量,键盘和其他基本设备是否已安装并正常响应。
  2. 接着,它开始扫描ISA和PCI总线并找出连在上面的所有设备。如果现在的设备和系统上次启动的设备不同时,则配置新的设备。
  3. 然后,BIOS通过尝试存储在CMOS存储器中的设备清单决定启动设备。 典型的,如果存在软盘,则系统试图从软盘启动。如果失败则尝试CD-ROM。如果再次失败,则系统从硬盘启动。 启动设备的第一个扇区被读入内存并执行。这个扇盘包含一个对保存在启动盘面末尾分区表检查的程序,以确定哪个分区是活动的。
  4. 然后,从该分区读入第二个启动装载模块。来自活动分区的这个装载模块被读入操作系统,并启动之。
  5. 然后,操作系统询问BIOS,以获得配置信息。对于每种设备,系统检查对应的设备驱动程序是否存在。如果没有,系统要求用户插入含有该设备驱动程序的CD-ROM(由设备供供应商提供)。一旦有了全部的设备驱动程序,操作系统就将它们调入内核。然后初始化有关表格,创建需要的任何背景进程,并在每个终端上启动登陆程序或GUI。

1.4 操作系统大观园

1.4.1 大型机操作系统

主要用于高端Web服务器、大型电子商务服务站点和事务-事务交易服务器。

1.4.2 服务器操作系统

如Solaris、FreeBSD、Linux和Windows Server 200x。

1.4.3 多处理器操作系统

多数主流操作系统。

1.4.4 个人计算机操作系统

如Windows 10、Ubuntu、macOS。

1.4.5 掌上计算机操作系统

如Android、iOS。

1.4.6 嵌入式操作系统

如QNX、Vx Works。

1.4.7 传感器节点操作系统

如TinyOS。

1.4.8 实时操作系统

硬实时系统主要用于工业过程控制、民用航空和军事。
软实时系统主要用于数字音频、数字电话和多媒体系统。

1.4.9 智能卡操作系统

1.5 操作系统概念

1.5.1 进程

进程(process)本质上是正在执行的一个程序。与每个进程相关的是进程的地址空间(address space)
在许多操作系统中,与一个进程有关的所有信息除该进程自身地址空间的内容以外,均存放在操作系统的一张表中,称为进程表(process table),进程表是数组或链表结构,当前存在的每个进程都要占用其中一项。
一个(挂起的)进程包括:进程的地址空间,往往称作磁芯映像(core image),以及对应的进程表项,其中包括寄存器以及稍后重启动该进程所需要的许多其他信息。
合作完成某些作业的相关进程经常需要彼此通信以便同步它们的行为,这种通信称为进程间通信(interprocess communication)
系统管理器授权每个进程使用一个给定的UID标识(User Identification)。每个被启动的进程都有一个启动该进程的用户UID。子进程拥有与父进程一样的UID。用户可以是某个组的成员,每个组也有一个GID标识(Group Identification)。

1.5.2 地址空间

虚拟内存(virtual memory)机制相关。

1.5.3 文件

操作系统隐藏了磁盘和其他I/O设备的细节特性,并给程序员一个良好、清晰的的独立于设备的抽象文件模型。
大多数操作系统支持目录(directory)的概念,可把文件分类成组。
目录层结构中的每一个文件都可以通过从目录的顶部,即根目录(root directory)开始的路径名(path name)来确定。
管道(pipe)是一种虚文件,它可连接两个进程。

1.5.4 输入/输出

1.5.5 保护

1.5.6 shell

UNIX的命令解释器。

1.5.7 个体重复系统发育

  1. 大型内存
  2. 保护硬件
  3. 硬盘
  4. 虚拟内存

1.6 系统调用

由操作系统实现提供的所有系统调用所构成的集合即程序接口或应用编程接口(Application Programming Interface,API)

1.6.1 用于进程管理的系统调用

1.6.2 用于文件管理的系统调用

1.6.3 用于目录管理的系统调用

1.6.4 各种系统调用

1.6.5 Windows Win32 API

1.7 操作系统结构

1.7.1 单体系统

整个操作系统以过程集合的方式编写,链接成一个大型可执行二进制程序。使用这种技术,系统中每个过程可以自由调用其他过程,只要后者提供了前者所需要的一些有用的计算工作。调用任何一个你所需要的过程或许会非常高效,但上千个可以不受限制地彼此调用的过程常常导致系统笨拙且难于理解。并且,任何一个过程的崩溃都会连累整个系统。

1.7.2 层次式结构

将单体系统进一步通用化,就变成了一个层次结构的操作系统,它的上层软件都是在下一层软件的基础上构建的。

1.7.3 微内核

提供操作系统核心功能的内核的精简版本,它设计成在很小的内存空间内增加移植性,提供模块化设计,以使用户安装不同的接口。将通常与内核集成在一起的系统服务层被分离出来,变成可以根据需求加入的选件,这样就可提供更好的可扩展性和更加有效的应用环境。使用微内核设计,对系统进行升级,只要用新模块替换旧模块,不需要改变整个操作系统。

1.7.4 客户机-服务器模式

即Client-Server(C/S)结构,服务器负责数据的管理,客户机负责完成与用户的交互任务。

1.7.5 虚拟机

指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。

1.7.6 外核

为虚拟机分配资源,并检查使用这些资源的企图,以确保没有机器会使用他人的资源。

1.8 依靠C的世界

1.8.1 C语言

1.8.2 头文件

1.8.3 大型编程项目

1.8.4 运行模型

构建运行过程:预处理->编译->汇编->链接->运行。

1.9 有关操作系统的研究

1.10 本书其他部分概要

1.11 公制单位

1.12 小结

操作系统构建所依赖的基本概念是进程、存储管理、I/O管理、文件管理和安全。
任何操作系统的核心是它可处理的系统调用集。
操作系统的构建方式有多种。

博文补充(转):
操作系统知识点
《Linux内核设计与实现》读书笔记的目录

版权声明:本文为sigma711原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/sigma711/p/13740908.html