*引论*
1.用户与操作系统的交互方式(用户接口程序):shell(基于文本),图形用户界面GUI(基于图像)
2.主要部件简化图:
*1.1 什么是操作系统*
1.操作系统任务:为程序员提供一个资源集的清晰抽象,管理这些硬件资源。
1.1.1 作为扩展机器的操作系统
1.1.2 作为资源管理器的操作系统
1.操作系统主要任务:记录哪个程序在使用什么资源,对资源请求进行分配,评估使用代价,并且为不同的程序和用户调解互相冲突的资源请求。
多路复用:时间复用,空间复用
*1.2 操作系统的历史*
1.2.1 第一代:真空管和穿孔卡片
1.2.2 第二代:晶体管和批处理系统
1.2.3 第三代:集成电路与多道程序设计
1.2.4 第四代:个人计算机
1.2.5 第五代:移动计算机1.3.1 处理器
*1.3 计算机硬件简介*
1.3.1 处理器
1.所有CPU内部都有一些用来保存关键变量和临时数据的寄存器
2.程序计数器:寄存器之一,用于保存将要取出的下一条指令的内存地址
3.堆栈指针寄存器:指向内存中当前栈的顶端
4.程序状态字(PSW):保存条件码位,CPU优先级、模式,以及各种其他控制位
5.流水线:一个CPU有单独的取指单元、解码单元和执行单元
6.超标量CPU:有多个执行单元(CPU)
7.系统调用:从用户态切换到内核态,用户陷入内核并调用操作系统,TRAP指令把用户切换成内核态
8.计算机使用陷阱而不是一条指令来执行系统调用
9.moore定律:芯片上的晶体管的数量每18个月翻一倍
10. 使用大量晶体管处理方式:具有多个功能部件的超标量体系结构,多个控制逻辑(多线程或超线程)
11. 每个线程在操作系统看来就像是单个的CPU
12.多核CPU芯片
1.3.2 存储器
1.寄存器和cpu一样快
2.主存被分割为高速缓存行,在高速缓存中找到,即高速缓存命中
3.通常通过将引用内存地址的高位计算应该使用的缓存行。
4.L1缓存与L2缓存的差别:L1不存在任何时延,L2存在一到两个时钟周期时延
5。主存(随机访问存储器RAM)
6.只读存储器ROM、EEPROM\闪存:断电不丢失数据
7.CMOS:易失真的,电池驱动,记录时间。
8.主存和内存关系:
1.3.3 磁盘
1.磁道:每个磁头读取的一段环形区域
2.柱面:给定臂位置上所有磁道的合并
3.扇区:磁道的组成单位,典型值为512字节
4.固态硬盘:不属于磁盘,而是闪存
5.虚拟内存机制:对于运行大于物理内存的程序,将程序放在磁盘上,主存作为一种缓存,用来保存使用最频繁的部分程序,通过存储管理单元(MMU)快速映像内存地址到主存中的物理地址。
6.上下文切换:由一个程序切换到另一个程序
1.3.4 I/O设备
1.I/O设备一般由设备控制器和设备本身组成
2.控制器的任务:为操作系统提供一个简单的接口
3.设备驱动程序:每类设备控制器需要不同软件进行控制
4.设备驱动程序装入操作系统的三个途径
5.I/O端口空间:所有设备寄存器
6.实现输入输出的三种方式: (1)忙等待 (2)中断 (3)直接存储访问(DMA)
1.3.5 总线
1.传统PCI:并行总线架构 PCIe:串行总线架构
2.传统PCI.USB,SCSI等连接到集成中心
3.即插即用:每块I/O卡有一个固定的中断请求级别和用于其I/O寄存器的固定地址,系统自动菜鸡有关I/O设备的信息,集中赋予中断级别和I/O地址,然后通知每块卡所使用的数值。
1.3.6 启动计算机
1.BIOS(基本输入输出系统)程序:存放在一块闪速RAM中,内含底层I/O软件
BISO运行->检查各个硬件是否正常->尝试存储再CMOS存储器中的设备清单决定启动设备(从启动设备(USB或硬盘)第一个扇区读取分区表检查程序,检查哪个分区是活动的,从该分区读入第二个启动装在模块读入操作系统,并启动之)->操作系统询问BIOS,获得配置信息,将设备驱动程序调入内核,初始化表格,在终端启动登陆
*1.4 操作系统大观园*
1.4.1 大型机操作系统
1.4.2 服务器操作系统
1.4.3 多处理器操作系统
1.4.4 个人计算机操作系统
1.4.5 掌上计算机操作系统
1.4.6 嵌入式操作系统
1.4.7 传感器节点操作系统
1.4.8 实时操作系统
1.4.9 智能卡操作系统
*1.5 操作系统概念*
1.5.1 进程
1.进程: 本质上是一个正在执行的程序。基本上是指容纳一个程序所需要所用信息的容器。
2.地址空间、资源集、进程表
3.一个(挂起的)进程包括:进程的地址空间、对应的进程表项
4.子进程、进程间通信
5.警告信息、进程UID、用户UID、GID、超级用户
6.子进程和父进程UID相同
7. mount指令:
mount
是Linux下的一个
命令
,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来
1.5.2 地址空间
1.5.3 文件
1.目录、文件系统
2.根目录、路径名、工作目录、文件描述符(
文件描述符的有效范围是 0 到 OPEN_MAX。一般来说,每个进程最多可以打开 64 个文件(0 — 63),
习惯上,标准输入(standard input)的文件描述符是 0,标准输出(standard output)是 1,标准错误(standard error)是 2)、错误码、特殊文件(块特殊文件、字符特殊文件。保存在/dev目录下)
3.管道:一种虚文件,可以连接两个进程
1.5.4 输入/输出
1.5.5 保护(rwx位)
1.5.6 shell
1.提示符、重定向
1.5.7 个体重复系统发育
1.大型内存
2.保护硬件
3.硬盘
4.虚拟内存
1.6 系统调用
1.任何单CPU计算机一次只能执行一条指令
2.TRAP指令与过程指令差别:前者切换到内核态,后者不改变模式;前者不能跳转到任意地址
3.POSIX(
可移植操作系统接口):
POSIX标准定义了操作系统应该为应用程序提供的接口标准,是 IEEE
为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为ISO/IEC 9945
1.6.1 用于进程管理的系统调用
1.fork创建一个原有进程的精确副本,子进程中为0,父进程中等于子进程的PID号。
2.父进程执行waitpid系统调用等待子进程终止
3.execve引起整个核心映像被一个文件替代
4.exit:进程执行后的操作
5. UNIX的进程将存储空间分为三段:正文段(代码)、数据段(变量)、堆栈段。数据向上增长,堆栈反之
1.6.2 用于文件管理的系统调用
1.open函数、close函数、read、write、lseek指针
2.stat,fstat(针对打开的文件):查看文件信息
1.6.3 用于目录管理的系统调用
1.mkdir(创建空目录)、rmdir(删除空目录)、link(允许同一个文件以多个名称出现)
2.共享文件不同于复制,共享者共同改变文件。
3.i-节点 目录(包含(i-编号,ASCII名称)对的一个集合)
4.mount系统调用:允许将两个文件系统和合并为一个
1.6.4 各种系统调用
1.chdir(调用改变当前的工作目录)、chmod(改变文件模式)、kill
1.6.5 Windows win32 API
1.UNIX程序包括做各种处理的代码以及完成特定服务的系统调用,Windows程序通常是事件驱动程序
2.Win32应用编程接口(API)UNIX系统调用与库过程一一对应,win不是这样。
1.7 操作系统结构(内部)
1.7.1 单体系统
1.概念:整个操作系统在内核态以单一程序的方式运行,整个操作系统以过程集合的方式编写,链接成一个大型方式编写。
2.共享库,动态链接库(ddl)
1.7.2 层次式系统
1.概念:上层软件都是在下一层软件的基础上构建的 MULTICS、THE 系统
1.7.3 微内核
1.概念:为了减小错误代价,将操作系统划分成小的、良好定义的模块,只有其中一个模块-微内核-运行在内核态,其他的作为普通用户进程使用。 MINIX
2.机制(内核态)与策略(用户态)分离
1.7.4 客户端-服务器模式
1.概念:本质就是客户端进程和服务器进程
1.7.5 虚拟机
(1)VM/370
1.分时系统提供:多道程序;一个比裸机更方便的、有扩展界面的计算机 。VM目的将两者彻底隔离
2.核心:虚拟机监控程序,在裸机运行并且具备了多道程序功能
3.会话监控系统(CMS)
(2) 虚拟机的再次发现
1.虚拟化用在web托管:共享托管、独占托管
2. 虚拟机监控程序重命名为第一类虚拟机管理程序。
3.模拟器、二进制翻译
4. 两类的区别:二类利用宿主操作系统,一类必须实现所有功能。
(3) java虚拟机
1.JVM
1.7.6 外核
1.为虚拟机分配资源
1.8 依靠C的世界
1.8.1 C语言
1.8.2 头文件
1.8.3 大型编程项目
1.make的作用:读入makefile(记录各个文件之间的相关)在构建操作系统二进制码时,检查此刻需要哪个文件,而且对每个文件,检查自上次目标文件创建之后是否有任何它依赖的文件已经被修改
1.8.4 运行模型
1.操作系统代码都是直接在硬件上执行的,不用解释器,也不用即使编译。
1.9 有关操作系统的研究
1.10 本书其他部分概要
1.从程序员的观点来看,操作系统的基本目的是提供一些关键的抽象,其中最重要的是进程和线程、地址空间以及文件
1.11 公制单位
1.工业实践(采用10的幂)与计算机内部(采用2的幂)不统一
1.12 小结