现代操作系统读书笔记--第一章 引论
*引论*
1.用户与操作系统的交互方式(用户接口程序):shell(基于文本),图形用户界面GUI(基于图像)
2.主要部件简化图:
1.用户与操作系统的交互方式(用户接口程序):shell(基于文本),图形用户界面GUI(基于图像)
2.主要部件简化图:
*1.1 什么是操作系统*
1.操作系统任务:为程序员提供一个资源集的清晰抽象,管理这些硬件资源。
1.操作系统任务:为程序员提供一个资源集的清晰抽象,管理这些硬件资源。
1.1.1 作为扩展机器的操作系统
1.1.2 作为资源管理器的操作系统
1.操作系统主要任务:记录哪个程序在使用什么资源,对资源请求进行分配,评估使用代价,并且为不同的程序和用户调解互相冲突的资源请求。
多路复用:时间复用,空间复用
1.操作系统主要任务:记录哪个程序在使用什么资源,对资源请求进行分配,评估使用代价,并且为不同的程序和用户调解互相冲突的资源请求。
多路复用:时间复用,空间复用
*1.2 操作系统的历史*
1.2.1 第一代:真空管和穿孔卡片
1.2.2 第二代:晶体管和批处理系统
1.2.3 第三代:集成电路与多道程序设计
1.2.4 第四代:个人计算机
1.2.5 第五代:移动计算机1.3.1 处理器
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.所有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.上下文切换:由一个程序切换到另一个程序
2.柱面:给定臂位置上所有磁道的合并
3.扇区:磁道的组成单位,典型值为512字节
4.固态硬盘:不属于磁盘,而是闪存
5.虚拟内存机制:对于运行大于物理内存的程序,将程序放在磁盘上,主存作为一种缓存,用来保存使用最频繁的部分程序,通过存储管理单元(MMU)快速映像内存地址到主存中的物理地址。
6.上下文切换:由一个程序切换到另一个程序
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地址,然后通知每块卡所使用的数值。
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.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.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相同
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.目录、文件系统
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.5 保护(rwx位)
1.5.6 shell
1.提示符、重定向
1.5.7 个体重复系统发育
1.大型内存
2.保护硬件
3.硬盘
4.虚拟内存
1.大型内存
2.保护硬件
3.硬盘
4.虚拟内存
1.6 系统调用
1.任何单CPU计算机一次只能执行一条指令
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.fork创建一个原有进程的精确副本,子进程中为0,父进程中等于子进程的PID号。
2.父进程执行waitpid系统调用等待子进程终止
3.execve引起整个核心映像被一个文件替代
4.exit:进程执行后的操作
5. UNIX的进程将存储空间分为三段:正文段(代码)、数据段(变量)、堆栈段。数据向上增长,堆栈反之
1.6.2 用于文件管理的系统调用
1.open函数、close函数、read、write、lseek指针
2.stat,fstat(针对打开的文件):查看文件信息
1.open函数、close函数、read、write、lseek指针
2.stat,fstat(针对打开的文件):查看文件信息
1.6.3 用于目录管理的系统调用
1.mkdir(创建空目录)、rmdir(删除空目录)、link(允许同一个文件以多个名称出现)
2.共享文件不同于复制,共享者共同改变文件。
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.1 单体系统
1.概念:整个操作系统在内核态以单一程序的方式运行,整个操作系统以过程集合的方式编写,链接成一个大型方式编写。
2.共享库,动态链接库(ddl)
1.7.2 层次式系统
1.概念:上层软件都是在下一层软件的基础上构建的 MULTICS、THE 系统
1.概念:上层软件都是在下一层软件的基础上构建的 MULTICS、THE 系统
1.7.3 微内核
1.概念:为了减小错误代价,将操作系统划分成小的、良好定义的模块,只有其中一个模块-微内核-运行在内核态,其他的作为普通用户进程使用。 MINIX
2.机制(内核态)与策略(用户态)分离
1.概念:为了减小错误代价,将操作系统划分成小的、良好定义的模块,只有其中一个模块-微内核-运行在内核态,其他的作为普通用户进程使用。 MINIX
2.机制(内核态)与策略(用户态)分离
1.7.4 客户端-服务器模式
1.概念:本质就是客户端进程和服务器进程
1.概念:本质就是客户端进程和服务器进程
1.7.5 虚拟机
(1)VM/370
1.分时系统提供:多道程序;一个比裸机更方便的、有扩展界面的计算机 。VM目的将两者彻底隔离
2.核心:虚拟机监控程序,在裸机运行并且具备了多道程序功能
3.会话监控系统(CMS)
1.分时系统提供:多道程序;一个比裸机更方便的、有扩展界面的计算机 。VM目的将两者彻底隔离
2.核心:虚拟机监控程序,在裸机运行并且具备了多道程序功能
3.会话监控系统(CMS)
(2) 虚拟机的再次发现
1.虚拟化用在web托管:共享托管、独占托管
2. 虚拟机监控程序重命名为第一类虚拟机管理程序。
1.虚拟化用在web托管:共享托管、独占托管
2. 虚拟机监控程序重命名为第一类虚拟机管理程序。
3.模拟器、二进制翻译
4. 两类的区别:二类利用宿主操作系统,一类必须实现所有功能。
(3) java虚拟机
1.JVM
1.JVM
1.7.6 外核
1.为虚拟机分配资源
1.为虚拟机分配资源
1.8 依靠C的世界
1.8.1 C语言
1.8.2 头文件
1.8.3 大型编程项目
1.make的作用:读入makefile(记录各个文件之间的相关)在构建操作系统二进制码时,检查此刻需要哪个文件,而且对每个文件,检查自上次目标文件创建之后是否有任何它依赖的文件已经被修改
1.8.1 C语言
1.8.2 头文件
1.8.3 大型编程项目
1.make的作用:读入makefile(记录各个文件之间的相关)在构建操作系统二进制码时,检查此刻需要哪个文件,而且对每个文件,检查自上次目标文件创建之后是否有任何它依赖的文件已经被修改
1.8.4 运行模型
1.操作系统代码都是直接在硬件上执行的,不用解释器,也不用即使编译。
1.操作系统代码都是直接在硬件上执行的,不用解释器,也不用即使编译。
1.9 有关操作系统的研究
1.10 本书其他部分概要
1.从程序员的观点来看,操作系统的基本目的是提供一些关键的抽象,其中最重要的是进程和线程、地址空间以及文件
1.11 公制单位
1.工业实践(采用10的幂)与计算机内部(采用2的幂)不统一
1.工业实践(采用10的幂)与计算机内部(采用2的幂)不统一
1.12 小结