1.1 操作系统的基本概念
从操作系统的角度上来划分计算机体系结构:
这里注意一点: 编译器属于应用程序。
操作系统:是指控制和管理计算机系统的 硬件 和软件 资源,合理的组织、调度计算机的工作与资源分配,进而为用户和其他软件提供 方便接口与环境的程序集合。
操作系统是计算机系统最基本的系统软件。(软件的分类 :系统 /应用)
1.1.2操作系统的特征
- 并发
- 共享
- 虚拟
- 异步
1.并发
我们在理解并发时,要建立两个前提: 多道程序环境 和 单处理机环境。
同时也要区分并发(concurrence)和并行(parallel)的区别。
多道程序环境下,一段时间内,宏观上有多道程序在同时执行,而在每一时刻,单处理机环境中,实际只能有一个程序在执行。
从微观角度上说,这些程序其实是分时交替执行的。
操作系的并发实际上是通过分时得以实现的。这其实是时分复用的一种表现。
//TODO后续会补充甘特图
2. 共享
系统中的资源可供内存中多个并发执行的进程共同使用。
java 的多线程模型 以及JVM中对这种资源共享的场景使用非常多,比如在JVM中 的运行时数据区,粗略的可以分为线程共享的和线程独占的区域
线程共享区包括:
--- 堆,方法区
线程独占的区域包括:
---JVM栈(局部变量表,操作数栈,方法返回地址,动态链接,其他信息),本地方法栈,PC寄存器。这里补充一句:堆内的Eden区 根据不同的JVM 可能会分出一部分作为TLAB,而它是线程私有的 。
资源共享会存在很多内存安全问题,这些等到进程调度和进程同步问题再继续深入。
共享分为两种方式:
- 互斥共享
一段时间内,只允许一个进程访问该资源。比如打印机,磁带。我们称这种资源为 临界区。 - 同时访问
在同一时间段内由多个进程 "同时"访问,这里的"同时"是宏观上的,微观上仍然是并发的。
总结:没有真正的共享(即 同一时刻,多个进程一起去访问某一资源,为什么?其实一起读还好,如果微观上,同时修改某一资源,就会造成ABA,脏读,等乱七八的问题,这又涉及到原子性问题,暂时不深入)。
并发和共享是 OS 最基本的两个特征,两者之间互为存在的条件:
- 资源共享 是以程序并发为条件的
- 系统若不能堆资源共享提供有效的管理,则必会影响程序的并发执行
3.虚拟
把物理上的一个实体 变为若干个逻辑上的对应物。
比如 一个处理器,通过划分时间片的方式,让多个进程在一段时间内,交替运行,形成了一种 多道程序"同时"工作的错觉。而每个用户感觉都有一个处理器(CPU) 都在为自己服务,这就是时分复用技术,称之为 虚拟处理器。
再比如,我们一个游戏的大小 50G,而内存只有8G,不可能把游戏全部资源一股脑加载到内存中,通过虚拟存储技术,进行内存的调度,扩充,让终端用户觉得更大的内存容量,这其实就是一种虚拟存储器。这是一种空分复用技术。
4.异步
先啰嗦一句:
我们在写Java的时候,涉及到线程竞争临界资源时,最简单的办法,就是通过一个关键字synchronized 来实现线程互斥访问。
那么请问,这个单词实际含义是什么?
千万不要搞混这两个单词:
synchronized :同步。(解决异步性产生错误的一种手段,它的实现本质其实是管程)
Asynchronism:异步。
那么到底什么是操作系统的异步?
多道程序环境允许多个程序的并发执行,但是由于资源有限,进程的执行并不是一贯到底的,而是走走停停,它以不可预知的速度向前推进,这就是进程的异步性。(具体还是要通过进程调度算法去进一步理解,所谓的 不可预知性)
这就导致一个问题——幂等性。
简单来说,就是异步性使得操作系统运行在一种随机的环境下,可能会导致进程产生与时间相关的错误(比如我们希望ABC三个进程的执行顺序是确定的,但是每次程序运行结果却不一致,或者对全局变量访问的顺序不一致,导致程序出错)。所以,保证操作系统在相同的运行环境下,多次运行进程后得到的结果是相同的。
1.1.3 操作系有的目标和功能
- 处理机管理
- 存储器管理
- 设备管理
- 文件管理
- OS还需要向用户提供接口
- OS 还可以扩充机器
1.OS作为计算机系统的资源管理者
- 处理机管理
- 存储器管理
- 设备管理
- 文件管理
2.OS作为用户和计算机硬件之间的接口
-
命令接口、
-
联机命令接口(交互式命令接口)
适用于分时或实时操作系统 比如我们常见的Linux shell 命令行的单一命令输入,执行。 -
脱机命令接口(批处理命令接口)
适用于批处理系统,一次执行多道命令
-
-
程序接口
程序接口由一组系统调用(也称为广义指令)组成,用户通过在程序中使用这些系统调用来请求操作系统为其服务。如各种外设,申请分配和回收内存。
3.OS实现对计算机资源的扩充
扩充裸机。
//待续