计算机操作系统整体概览


前言

计算机系统是由硬件与系统软件组成的,它们共同工作来运行应用程序,尽管操作系统的具体实现在不断的变化着,但是内在概念,原理却没有改变。

一、一个简单的c语言程序

首先通过一个简单的c语言程序,开始我们的操作系统之旅。下面的这个程序是由程序员创建开始,到系统上运行,输出简单的信息,然后终止。下面将沿着这个程序的生命周期,介绍一系列的概念以及专业术语。

#include <stdio.h>
int main()
{
	printf("hello world\n");
	return 0;
}

二、信息就是位+上下文

hello程序的生命周期是从一个源程序(源文件)开始的,文件名是hello.c。经过一系列的处理形成可执行文件(hello.exe),这个可执行文件是由值0和1组成的(又称为比特)序列,8个位组织成一组,称为字节
现代计算机系统大部分都采用ASCII标准来表示文本字符,实际上就是用一个字节大小的整数值来表示每个字符。
hello.c程序是以字节序列的方式存储在文件中的,每个字节都有一个整数值,代表一个字符,例如整数35代表“#”
通过hello.c的表示方法表达了一个思想:系统中所有的信息,都是由一串比特表示的,区分不同的数据对象的唯一方法就是数据对象的上下文。

三.程序被其他程序翻译成不同的格式

hello程序的生命周期是从一个高级c语言开始的,高级语言类似于自然语言,我们能容易理解,但计算机无法理解,为了能够在系统上运行,每条c语句都必须转化为一系列的机器语言指令,然后将这些指令按照一种称为可执行目标程序的格式打好包,并以二进制磁盘文件形式存放起来,以便将来运行。
在Linux系统上,从源文件到目标文件的转化是由编译器驱动程序完成的。

linux> gcc -o hello hello.c

gcc编译器驱动程序读取源文件hello.c,并把它翻译成可执行文件hello。这个翻译过程分为四个阶段:

  1. 预处理器(cpp)将hello.c程序翻译成hello.i程序
  2. 编译器(ccl)将hello.i程序翻译成hello.s程序
  3. 汇编器(as)将hello.s程序翻译成hello.o程序
  4. 链接器(ld)链接hello.o和其它的文件(如printf.o)形成hello.exe程序

因此,一个c语言程序的翻译过程可分为四个阶段:

  1. 预处理阶段:预处理器(cpp)根据以字符#开头的命令,修改原始C程序。
  2. 编译阶段:编译器(ccl)将文本文件hello.i翻译成文本文件hello.s,它包含一个汇编语言程序。
  3. 汇编阶段:汇编器(as)将hello.s翻译成机器语言指令hello.o,这是一个二进制文件,包含一系列的指令编码。如果在文本编辑框中打开,将会是一堆乱码
  4. 链接阶段:因为hello程序调用了prinntf函数,这个函数是C编译器提供的一个标准C库中的一个函数。printf函数存放于一个名为printf.o的文件中,现在只需要利用链接器(ld)将者两个文件合并,最后生成一个可执行目标文件。这个可执行目标文件可以被加载到内存中,由系统执行。

四.为什么要理解编译系统是怎样工作的?

对于前面提到的hello程序,可以依靠编译系统来生成有效的机器代码。

  1. 优化程序性能
  2. 理解链接时出现的错误:“为什么无法解析一个引用?”,“静态变量与全局变量的区别?”
  3. 避免安全漏洞:缓冲区溢出错误,堆栈原理

五.处理器读取并解释存储在内存中的指令

通过上面的翻译过程,现在hello程序以及由系统翻译成可执行目标文件,并放在磁盘上。
现在要在Linux上运行该程序,只需要将文件名输入shell应用程序中即可。

linux> ./hello
hello, world
linux>

shell是一个命令解释器,它输出一个提示符,等待输入一个命令行,然后执行这个命令。

1.系统的硬件组成

为了能够理解hello程序运行时发生了啥,需要了解一个典型系统的硬件组织。

  1. 总线;贯穿整个系统的一组电子管道。它携带信息字节并负责在各个部件间传递。通常总线被设计成传送定长的字节快,也就是(word)。一个字中的字节数,就是字长
  2. I/O设备:系统与外部世界的联系通道。
  3. 主存:一个临时存储设备,在处理器执行程序时,用来存放程序和程序处理的数据。
  4. 处理器:解释存储在主存中指令的引擎。从系统通电开始,处理器一直在不间断的执行程序计数器(pc)指向的指令,在更新pc使其执行下一条指令。处理器按照一个指令执行模型来工作的,这个模型就是指令集架构(ISA)

2.运行hello程序

初始的时候,shell程序执行它的指令,等待输入命令,当输入“./hello”后,shell将字符逐一读入寄存器,然后放到主存中,当点击回车按键时,shell程序知道了我们结束了命令的输入,然后shell执行一系列指令将hello目标文件中的代码和数据从磁盘复制到主存。一旦目标文件hello中的代码和数据被加载到主存,处理器就开始执行hello程序中的机器语言指令。这些指令将“hello, world\n”字符串从主存复制到寄存器文件,再从寄存器文件中复制到显示设备,最终显示再屏幕上。
这里说一个后面介绍的技术:直接存储器存取(DMA),利用这个技术,数据可以不通过处理器直接从磁盘到达主存。

六.高速缓存

通过helo程序的执行过程,我们发现了一个问题,就是信息一直在从这里复制到那里,又从那里复制到这里,一直做重复的工作,浪费了大量的时间。为了解决这个问题引入了高速缓存(cache).
由机械原理,较大的存储设备要比较小的存储设备运行的慢。在处理器与主存之间放一块高速缓存寄存器,用来存放处理器近期可能使用的信息,可以节约大量时间。

七.存储设备层次结构

在处理器和一个较大较慢的存储器之间插入一个更小更快的存储器已成为一个普遍的观念,由此形成了一个存储器层次结构。
由上到下依次为:

  1. 寄存器
  2. L1高速缓存SRAM
  3. L2高速缓存SRAM
  4. L3高速缓存SRAM
  5. 主存DRAM
  6. 本地二级存储(本地磁盘)
  7. 远程二级存储(分布式文件系统,Web服务器等)。

存储器层次结构的主要思想是上一层的存储器作为下一层存储器的高速缓存。

八.操作系统管理硬件

shell和hello程序都没有直接访问键盘,显示器和主存,取而代之的是它们依靠操作系统提供的服务。因此可以理解操作系统是应用程序与硬件之间插入的一层软件,所有应用程序对硬件的操作尝试都必须经过操作系统。
操作系统由两个基本功能:

  1. 防止硬件被失控的应用程序滥用。
  2. 向应用程序提供简单一致的机制来控制复杂庞大的低级硬件设备。

操作系统通过几个抽象概念来实现这两个功能:

1.进程

像hello这样的程序在运行时在操作系统上运行时,会给用户一种假象,就好像系统上只有这一个程序在运行。这个假象是通过进程的概念来实现的。
进程是操作系统对正在运行的程序的一种抽象。在一个操作系统上可以同时运行多个进程,而每个进程就好像在独占的使用硬件。
并发运行是指说一个进程的和另一个进程的指令是交错执行的。在大多数系统中,需要运行的进程数是多于可以运行它们的CPU个数的。传统系统在一个时刻只能执行一个进程,而在拥有多核处理器的系统中可以同时执行多个进程。
无论单核还是多核系统,一个CPU宏观上看去都像是在并发的执行多个进程,这是通过处理器在进程间切换来实现的。操作系统实现这种交替执行的机制称为上下文切换
操作系统保持跟踪进程运行所需要的状态信息,这种状态,就是上下文
从一个进程到另一个进程的切换是由操作系统**内核(kernel)**管理的。内核是操作系统代码常驻内存的部分。内核是系统管理全部进程所用代码和数据结构的集合。

2.线程

通常我们认为一个进程只有单一的控制流。但是在现代系统中,一个进程实际上可以由多个称为线程的执行单元组成,每个线程都运行在进程的上下文中,并共享同样的代码和全局数据。

3.虚拟内存

虚拟内存是一个抽象概念,它为每个进程提供了一个假象,即每个进程都以为自己在独占的使用主存。每个进程看到的内存都是一样的,称为虚拟地址空间
虚拟内存的运作需要硬件和操作系统软件之间精密复杂的交互。基本思想是把一个进程虚拟内存的内容存储在磁盘上,然后用主存作为硬盘的高速缓存。
文件。

4.文件

文件就是字节序列。每个I/O设备都可以看成是文件。

九.系统之间利用网络通信

至此,系统简单介绍已经结束,前面一直把系统视为一个孤立的硬件和软件的集合体。实际上,系统经常通过网络和其他其他连接在一起。从一个单一的系统来看,网络可视为一个I/O设备。
随着Internet这样的全球网络的出现,从一台主机复制信息到另一台主机已成为计算机系统重要的用途之一。这些内容将在第11章描述。

十.重要主题

1. 1.Amdahi定律

:当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性以及加速程度。

2. 并发和并行

:术语并发(concurrency)是一个通用的概念,指一个同时具有多个活动的系统;而术语并行(parallelism)指的是用并发来使一个系统运行的更快。

  1. 线程级并发
  2. 指令级并行
  3. 单指令,多数据并行

3. 计算机系统中抽象的重要性

抽象是计算机科学中最为重要的概念之一。在学习操作系统时,介绍了三个抽象:

  1. 文件是对i/O设备的抽象
  2. 虚拟内存是对程序存储器的抽象
  3. 进程是对一个正在运行的程序的抽象
  4. 虚拟机是对整个计算机的抽象

总结

计算机系统是由硬件和系统软件组成的,它们共同协作以运行应用程序。计算机内部的信息被表示 为一组组的位,它们依据上下文有不同的解释方式。程序被其它程序翻译成不同的形式,开始是ASCII文本,后被编译器和链接器翻译成二进制可执行文件。
处理器读取并执行存放在主存里的二进制指令。因为计算机花费了大量的时间在内存,I/O设备和寄存器之间复制数据,所以将系统中的存储设备划分成层次结构。在层次模型中,位于高层的存储设备比底层的存储设备高更快。
操作系统内核是应用程序和硬件之间的媒介。它提供三个基本抽象:1)文件是对I/O的抽象;2)虚拟内存是对主存和磁盘的抽象;3)进程是对处理器,主存和I/O设备之间的抽象。
网路提供了计算机系统之间的通信手段。从特殊角度来看,网络就是一种I/O设备。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BabyOne~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值