现代操作系统: 第一章 引言

现代计算机由一个或多个处理器、主存、磁盘、打印机、鼠标、显示器、网络接口以及各种其他输入/输出设备组成。多数计算机有两种运行模式:内核态和用户态。软件中最基本的部分是操作系统,它运行在内核态。

在这里插入图片描述

操作系统由硬件进行保护,防止用户试图对其进行修改 操作系统和普通软件的主要区别,如果用户不喜欢某个特定的应用软件,用户可以重新写一个软件。但是不能自行写一个属于操作系统中的一部分的时钟中断处理程序。因为这个程序是由硬件保护,防止用户试图对它进行修改。

1.1 什么是操作系统

操作系统就是一种运行在内核态的软件

操作系统的作用概括起来主要有两个方面的作用:

  1. 操作系统创建好的抽象,并且实现和管理它所创建的抽象对象。
  2. 记录哪个程序在使用什么样的资源,对资源请求进行分配,评价使用代价,并且为不同的的程序和用户调解互相冲突的资源请求。

另外,对于操作系统的理解,从不同角度看的,有不同的定义,

自顶向下看:操作系统为应用程序提供基本抽象,从而使应用程序在此基础上可以组合功能。

自底向上看:操作系统用来管理复杂系统的各个部分,对资源的请求进行分配,调节不同程序见相互冲突的资源请求。

资源管理包括以下两种不同的复用方式实现多路复用共享资源:在时间上复用和在空间上复用。

  • 在时间上复用:当一个资源在时间上复用时,不同的程序或用户轮流使用它。
  • 在空间上复用:每个客户都得到资源的一部分,从而取代了客户排队。

1.2 操作系统的历史

第一代:真空管和穿孔卡片

第二代:晶体管和批处理系统

第三代:小规模集成电路和多到程序设计

第四代:个人计算机(大规模集成电路)

第五代:移动计算机(手机、平板等)

1.3 计算机硬件简介

操作系统地作用:操作系统扩展了计算机指令集并且管理计算机资源。

在这里插入图片描述

1.3.1 处理器

计算机的大脑是CPU,它从内存中取出指令并且执行它。在每个CPU基本周期内,首先从内存中取出指令,解码以确定其类型和操作数,接着执行它,然后取指、解码并执行下一条指令。按照这一方式,程序被执行完成。

所有的CPU内部都有一些用来保存关键变量和临时数据的寄存器。

对程序员可见的专用寄存器:

  • 程序计数器:它保存了将要取出的下一条指令的内存地址。
  • 堆栈指针:它指向内存中当前堆栈的顶端,该栈包含了每一个执行过程的栈针。

CPU取出指令执行的机制,是通过内部的取指单元、解码单元、执行单元三部分完成。为了提高效率。现在CPU通常可以同时取出多条指令。当CPU执行指令n时,它可以正在对指令n+1解码,并读取指令n+2,这样,当执行完指令n后,无需等待,就可以直接执行n+1,然后n+2,这样的机制,称为流水线(pipeline)。

在这里插入图片描述

多数CPU有两种模式,即前面提到的内核态和用户态:

  1. 当在内核态运行时,CPU可以知悉指令集中的每一条指令,并且使用硬件的每种功能。在台式机器和服务器上,操作系统在内核态中运行,从而可以访问整个机器。
  2. 用户程序在用户态中运行时,仅仅运行执行整个指令集的一个子集和访问所有功能的一个子集。在用户态中有关I/O和内存保护的所有指令是禁止的。

多核体系架构和多线程

在这里插入图片描述

1.3.2 存储器

典型的存储层次结构及其一个大概的访问时间如下:

在这里插入图片描述

存储器中的顶层是CPU中的寄存器

下一层次为高速缓存,CPU读取数据时,如果数据在高速缓存行中,则成为高速缓存命中。提升高速缓存命中有利于提升效率。

再下一次是主存。主存通常称为随机访问器。

1.3.3 磁盘

下图是常见的机械硬盘结构:

在这里插入图片描述

在任意一个给定臂的位置,每个磁头可以读取一端环形区域,称为磁道。把一个给定的臂的位置上的所有磁道合并起来,组成了一个柱面。每个磁道可以分为若干扇区。

现如今,许多计算机中支持一种著名的虚拟内存机制。这种机制使得期望运行大于物理内存的程序称为可能,器方法是将程序放在磁盘上去,而将主存作为一种缓存,用来保存最频繁使用的部分程序。

1.3.4 I/O设备

I/O设备一般包括两个部分:设备控制器和设备本身。设备控制器的任务是为操作系统提供一个简单的接口。

每类设备控制器都是不同的,所以需要不同的软件进行控制。专门与控制器对话,发出命令并接受相应的程序,称为设备驱动程序

实现输入输出有三种方式:

  1. 第一种,用户程序发出一个系统调用,然后就执行I/O过程,CPU一直等待I/O的数据,直到得到数据后处理,处理完以后返回结果,CPU才继续处理其他事情。这种方式称为忙等待。

  2. 第二种是通过中断机制。设备驱动程序启动并让设备在操作完成时发出一个中断。设备驱动程序在这个时刻立即返回。操作系统接着在需要时阻塞调用者并安排其他工作进行。当设备驱动程序检测到该设备的操作完毕时,它发出一个中断通知操作完成。

  3. 第三种,使用直接存储器访问芯片(DMA,Direct Memory Access),直接控制位流,可以控制在内存和某些控制器之间的位流,而无须持续的CPU干预。

1.3.5 总线

总线就是CPU连接其他设备的线,各种设备间的数据传输通过总线完成。

在这里插入图片描述

  • 共享总线架构表示多个设备使用一些相同的导线传输数据。
  • 并行总线架构表示通过多条导线发送数据的每一个字。(PCI总线)
  • 串行总线架构通过一条被称为数据通路的链路传递了集合了所有位的一条消息,这非常像网络包。(PCIe总线)

PCIe恰好相反,它使用分离的端到端的链路。

1.3.6 启动计算机

通电后,系统首先启动BIOS里面的程序, BIOS全称基本输入输出系统(Basic Input Output System), 内部包含了一下基本的参数设置,以及接下来要启动的程序,从而把系统启动起来。

1.4 操作系统大观园(各种操作系统)

操作系统有很多,主要有:大型机操作系统、服务器操作系统、多处理器操作系统、个人计算机操作系统、掌上计算机操作系统、嵌入式操作系统、传感器节点操作系统、实时操作系统、智能卡操作系统。

1.5 操作系统概念

操作系统中有很多基本概念和抽象,它们是需要理解的核心内容,主要有:进程、地址空间、文件、I/O(输入输出)、保护、shell.

1.5.1 进程

进程的本质是正在执行的一个程序。可以简单理解一个进程就是一个程序,但有时,一个程序包含多个进程。进程是对CPU处理器的一个抽象概念,可以把进程看做一个资源调度的集合,通常包含的资源有:寄存器(程序计数器和堆栈指针)、打开文件的清单、突出的警报、有关进程的清单以及程序需要的其他信息。

与每个进程相关的是地址空间,这是从某个最小值的存储位置到每个最大值的存储位置的列表。在这个地址空间中,进程可以进行读写。该地址空间中存放有可执行程序、程序的数据以及程序的堆栈。

一个进程包括:进程的地址空间和对应的进程表项(其中包括寄存器以及稍后重启该进程所需要的许多信息)。

若一个进程能够创建一个或者多个进程(或称为子进程),而且这些子进程又能创建子进程,则很容易就形成进程树。合作完成某些作业的相关进程经常需要彼此之间进行通信以便同步完成他们的工作,这就是进程间的通信

在这里插入图片描述

1.5.2 地址空间

计算机的主存用来保存正在执行的程序,为了找到程序在主存(也就是内存)的位置,物理内存设置了对应的地址编号,地址编号的一个集合就是地址空间。 物理地址空间是有限的,这是设备决定的,不过有虚拟地址空间技术。地址空间这个概念其实就是对内存的一个抽象,用来方便管理内存及进程。

该进程在执行的时候,看到和使用的内存都是虚拟内存地址。

对于32位的操作系统,该虚拟地址空间位2^32 位4GB

1.5.3 文件

文件这个概念的抽象是为了描述数据的集合,这个比较好理解。在现实中的文件其实就是某些资料装订在了一起,这些资料通常保存的也是某些数据(文字、图表等)。

在UNIX中有一个重要的概念是特殊文件。提供特殊文件是为了使I/O设备看起来像文件一样。这样的特殊文件有两种:

  • 块特殊文件:那些可以随机存取的块组成的设备,如磁盘等
  • 字符特殊文件:字符特殊文件用于打印机、调制解调器和其他接受或输出字符流的设备。

管道:管道是一种虚文件,它可以连接两个进程。当进程A想对进程B发送数据的时候,它把数据写到管道上,仿佛管道就是输出文件一样。进程B可以通过读取该管道而得到数据,仿佛管道就是一个输入文件一样。

在这里插入图片描述

1.5.4 输入/输出 I/O

主要是指输入输出设备,通过这些设备来输入或输出数据, 比如键盘、打印机等。键盘输入字母,就可以在硬盘或者其他位置输出文字。

1.5.5 保护

计算机有大量信息,用户希望对其进行保护。对一个文件来说,通常有三种状态,可读(只能读取,不可修改),可写(只能写入,不可读出),可读可写。

rwxr-x–x 的含有是对于用户所有者是可读、可写、可执行。对于同一个组的用户可以读、和执行。对于其他用户只能执行。对于一个目录来说,x的含义是运行查询。

1.6 系统调用

先简单了解下系统调用的流程,下图是调用一个read方法的过程:

在这里插入图片描述

然后是一些常用的调用函数:

在这里插入图片描述

1.6.1 用于进程管理的系统调用

在这里插入图片描述

1.6.2 用于文件管理的系统调用

1.6.3 用于目录管理的系统调用

1.7 操作系统结构

1.7.1 单体系统

整个操作系统以单一程序的方式运行,所有过程链接成一个大型可执行二进制程序

1.7.2 层次式系统

整个系统分了很多层,每一层都进行一些封装,再给上一层次调用,从而可以加入一些限制进行保护。

1.7.3 微内核

微内核的设计思想是,为了实现高可靠性,将操作系统划分为小的、良好定义的模块,只有其中一个模块—微内核—运行在内核态,其余的模块由于功能相对较弱,则作为普通用户进程运行。

在这里插入图片描述

1.7.4 客户端-服务器模式

1.7.5 虚拟机

猜你喜欢

转载自blog.csdn.net/qq_21125183/article/details/83791243