本文是操作系统系列的第一篇,以下是文章目录
浅入理解计算机系统(1)- 操作系统的两个基本功能和三个抽象概念
浅入理解计算机系统(2)- 程序的机器级表示
浅入理解计算机系统(3)- RAM和ROM,处理器和主存的那些事
操作系统相信大家都很熟悉,这个我们耳熟能详的名字以及那些我们每天都在用,但是没有特别留意的功能或硬件,实际上在背后替我们做了很多很多的事情。那么接下来将带大家“浅入”了解一下操作系统背后的“真相”。
操作系统的两个基本功能
防止硬件被失控的应用程序滥用
一般来说,高级语言控制硬件都是需要通过系统调用间接请求的。例如Java会调用本地(native)方法,本地方法进行系统调用。
向应用程序提供简单一致的机制来控制复杂而又大不相同的低级硬件设备
例如磁盘、网络适配器、键盘、鼠标、显示器等设备
三个基本的抽象概念实现上面的两个基本功能
进程
进程是操作系统对正在运行的应用程序的一种抽象。在一个系统上可以同时运行多个进程,而每个进程都好像在独占硬件(处理器、主存和I/O设备)。进程是操作系统里最小的资源分配单位。
并发
多个进程看似可以同时运行,实际上是并发运行。即一个进程的指令和另一个进程的指令交错执行,如下图:
PS: 执行一会A进程的指令,又执行一会B进程的指令,再执行一会A进程的指令,称为并发。A进程和B进程的指令同时执行,称为并行。在多核处理器环境下可以实现并行。
上下文切换
当处理器并发执行多个进程时,是通过在进程间切换实现的,这个过程称为上下文切换。当某个进程发生长时间等待(例如I/O操作)或者当前进程的执行时间片结束时,处理器会将当前进程的上下文(程序计数器、栈等)保存起来,等待下一次进程执行时再重新加载,然后加载另一个待执行的进程的上下文。
线程
在现代系统中,一个进程可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据(例如Java中的堆)。线程是操作系统里调度的基本单位。
虚拟内存
虚拟内存为每个进程提供了一种假象,即每个进程都在独占地使用主存。每个进程看到的内存地址都是一致且连续的,称为虚拟地址空间。当需要访问主存中的某个地址但没有击中缓存时,处理器生成一个虚拟地址,由内存管理单元利用页表动态翻译成物理地址。
虚拟地址空间
虚拟地址空间由多个准确定义的区组成
- 程序代码和数据
-> 直接按照可执行目标文件内容指定的大小初始化。 - 运行时堆
-> 堆可以在运行时动态的扩展和收缩。 - 共享库
-> 大约在地址空间的中间部分是一块用来存放像C标准库和数据库这样的共享的代码和数据的区域。 - 栈
-> 位于用户虚拟地址空间顶部的是用户栈,编译器用它来实现函数调用。和堆一样可以在运行时动态地扩展和收缩。 - 内核虚拟内存
-> 地址空间顶部的区域是为内核保留的,不允许应用程序读写这个区域的内容或直接调用内核代码定义的函数。
文件
文件即字节序列,以Linux系统为例,每个I/O设备,包括磁盘、键盘、显示器时甚至网络都可以看作是文件。所有的I/O操作都可以看作是通过调用一小组称为Unix I/O的系统函数对文件的读取与写入。
通过上面的内容相信已经对操作系统的基本功能有一定的了解,那么接下来介绍一下系统的硬件组成以及它们之间是怎么互相协作的
系统的硬件组成
总线
贯穿整个系统的一组电子管道,携带信息字节并负责在各个部件间传递。通常把总线被设计成传送定长的字节块,也就是字(word)。各个硬件通过总线相互通信,例如处理器与I/O桥之间的系统总线,主存与I/O桥之间的内存总线,I/O桥与外部I/O设备的I/O总线。
I/O设备
系统与外部设备的联系通道,每个I/O设备都通过一个控制器或适配器与I/O总线相连。控制器与适配器的区别在于封装方式,控制器是I/O设备本身或者系统的主印制电路板(主板)上的芯片组,适配器是插在主板插槽上的卡。
主存
临时存储设备,在处理器执行程序时候用于存放程序代码和程序处理的数据。
从物理上来说,主存是一组动态随机访问存储器(DRAM)芯片。
从逻辑上来说,主存是一个线性的字节数组,每个字节都有唯一的地址(数组索引),这些地址从0开始。
处理器
中央处理单元(CPU),简称处理器,是解释(或执行)存储在主存中的指令的引擎。
高速缓存存储器
处理器从寄存器读取数据比从主存中读取几乎要快100倍,因此系统设计者采用更小更快的存储设备,即高速缓存存储器(cache memory,简称cache或高速缓存)。高速缓存是用静态随机访问存储器(SRAM)实现的,SRAM比DRAM速度更快,但成本也更高。现代系统一般会有三级缓存:
- L1高速缓存 -> 容量可达到数万字节,读取速度几乎与访问寄存器一样快。
- L2高速缓存 -> 容量为数十万到数百万字节,通过一条特殊的总线连接到处理器。
- L3高速缓存
本文内容源自《深入理解计算机系统 第三版》以及本文作者的个人理解补充,只涉及一些个人认为重要概念描述和协作原理的简单描述,并不深入剖析每一个点。
如果有不准确或者错误的地方欢迎评论指出。
感谢你的阅读。