概述
【现代操作系统】第一章:引论∑
标签(空格分隔):【现代操作系统】
第一章:引论
-
操作系统:为用户程序提供一个更清晰的计算机模型,并管理输入/输出设备。
-
用户与之交互的程序,如果基于文本通常称为shell,如果基于图标则称为图形用户界面(GUI,Graphical User Interface).
每个人都会对诸如Windows,Linux,macOS等操作系统有所体验,但这些交互是很肤浅的。甚至包括shell和GUI并不是操作系统的一部分,尽管这些程序使用操作系统来完成工作。
下图给出了主要部件的简化视图。
- 内核态(管态、核心态):在这个模式中,操作系统具有对所有硬件的完全访问权,可以执行机器能够运行的任何指令。
- 用户态:在该模式下只能使用了机器指令的一个子集。特别的,那些 影响机器控制 或 可以进行I/O操作的指令,在用户态下都是被禁止的。
用户接口程序(shell或GUI)处于用户态程序中的最底层。
注意:在嵌入式系统(该系统没有内核态) 或者 解释系统(它采用解释方式而非硬件方式区分组件,如基于Java的操作系统)中,上述区别是模糊的。
另外,在许多系统中,一些在用户态下运行的程序协助操作系统完成特权功能。在这类系统中,很难划分出一条明显的界限。
1.1 什么是操作系统
操作系统很难有准确的定义。操作系统有两个基本上独立的任务,一是管理硬件,二是为应用程序提供借口。
1.1.1 作为扩展机器的操作系统
在机器语言级别,多数计算机的体系结构是十分原始的,而且编程困难。例如SATA(Serial ATA)硬盘,我们是使用硬盘驱动(disk driver)来进行软硬件交互(而不用深入细节,而不是是直接使用接口。
在这里,操作系统的任务是隐藏硬件,来呈现给程序良好的抽象。
1.1.2 作为资源管理者的操作系统
现代计算机包含处理器、存储器、始终、磁盘等等许多设备。在这里,操作系统的任务是在相互竞争的程序之间有序地控制对处理器、存储器以及其他I/O接口设备的分配。
资源管理包括两种不同方式来实现共享资源:时间上复用 和 空间上复用。
1.2 操作系统历史
第一台数字计算机是Babbage发明设计的。但可惜这是一条纯机械的装置,没有操作系统。
第一代:真空管和穿孔卡片。
第二代:晶体管和批处理系统。
第三代:集成电路和多道程序设计。
第四代:个人计算机。
第五代:移动计算机。
1.3 计算机硬件简介
1.3.1 CPU
CPU是从内存中取出指令并执行之。
在每一个CPU基本周期中,先从内存中取出指令,编码以确定其类型和操作数,然后执行,循环以上步骤,直到程序被执行完成。
每一个CPU都有一套可执行的专门指令集。因此,x86处理器不能执行ARM程序,反之ARM处理器也不能执行x86程序。
对于CPU而言,访寸寻找指令和数据花费的时间 比 执行指令花费的时间 长很多。因此CPU内部有一些用来保存关键变量和临时数据的寄存器。
除此之外,大多数CPU还有一些对程序员可见的专用寄存器,例如 程序计数器、堆栈指针、程序状态字体。
- 程序计数器:保存了下一条指令的内存地址。并且在指令取出后,程序计数器自动加一。
- 堆栈指针:指向内存中当前栈的顶端。
- 程序状态字(Program Status Word,PSW ):包含了条件码位(由比较指令设置),CPU优先级、模式(用户态或内核态,一个二进制位来控制),以及各种其他控制位。
操作系统必须知晓所有的寄存器。例如,在时间多路复用CPU中,操作系统经常会终止正在运行的某一个程序并启动/再启动另外一个程序。每次停止一个运行的程序,操作系统必须保存所有的寄存器值,这样在稍后该程序被重新运行时,可以把这些寄存器重新装入。
为了改善性能,CPU设计师早就放弃了同时读取、解码和执行一条指令的简单模型。当代CPU具有同时取出多条指令的机制,即流水线机制。
比流水线机更先进的设计是 超标量CPU。 在该设计模式中,由多个执行单元,例如,一个CPU用于整数算术运算,一个用于浮点算术运算,一个用于布尔运算等。只要由一个执行单元空闲,就马上检测缓冲区是否还有可以处理的指令。当然,这种设计模式有自己的缺陷,例如程序的指令经常不按序执行。
-
系统调用:用户使用系统调用来从操作系统中获取服务。
-
TRAP指令:计算机使用陷入指令来执行系统调用,TRAP指令使用户态切换为内核态。
-
多线程/超线程:允许CPU保持两个不同的线程状态,然后在纳秒级的时间尺度内来回切换。多线程并不是并行处理,一个时刻内只有一个进程在运行。
1.3.2 存储器
- 寄存器:存储系统的顶层,最靠近CPU的存储器。和CPU速度一样快(由相同的材料做成),访问没有时延。但价格放归,容量小。
- 高速缓存:由硬件控制,主存被分割为高速缓存行(cache line)。一般被放到CPU附近的位置。价格昂贵,大小有限。很多计算机设置多级高速缓存。
- 主存:存储系统的主力,通常称为随机访问存储器(Random Access Memory, RAM),RAM的最大特征便是断电后丢失内容。另外,计算机使用只读存储器(Read Only Memory, ROM),ROM断电后内容不会丢失,因此用于启动计算机的引导加载模块就存放在ROM中。
- 磁盘:磁盘容量大且便宜,速度慢。其低俗的原因是磁盘是一种机械装置。当然还有一些根本不是磁盘的磁盘,比如固态硬盘。
1.3.3 I/O设备
除了CPU与存储器之外,操作系统还需要管理I/O设备。
I/O设备包括两部分:设备控制器、设备本身。
设备控制器是插在电路板上的一块/一组芯片,这块电路板物理地控制设备,它从操作系统接受命令。由于每类设备控制器都是不同的,所以需要对不同的软件进行控制,设备驱动程序完成该项工作。
设备本身有一个相对简单的接口,该接口既不能做很多工作,又已经被标准化了。
实现输入/输入的方式有三种:1. 忙等待,即查询方式。2. 终端方式。3. 直接存储器访问(Direct Memory Access,DMA)。
1.3.4 总线
-
共享总线架构:多个设备使用一些相同的导线传输数据。
-
并行总线架构:通过多条导线发送数据的每一个字。
-
串型总线架构:使用数据通路来传递集合了所有位的一条消息。
-
即插即用:系统自动收集有关I/O设备的心细,集中赋予中断级别和I/O地址,然后通知每块卡所使用的数值。
1.3.5 启动计算机
每台计算机上有一块母板,母板上有一块名为 基本输入输出系统(Basic Input Output System, BIOS)的程序。
在计算机启动时,BIOS开始运行,它首先检查安装的RAM的数量,键盘和其他基本设备是否已经安装并正常响应。接着,它开始扫描PCIe和PCI总线并找出连接上面的所有设备。如果现有设备和系统上一次启动时设备不同,则新的设备将被配置。然后,BIOS通过尝试存储在CMOS存储器中的设备清单决定启动设备(此时用户可以进入一个BIOS配置程序,对设备清单进行修改)。启动设备上的第一个扇区被读入内存内存并执行。然后,操作系统询问BIOS来获得配置信息。对于每种设备,系统检查对应的设备驱动程序是否存在。一旦设备驱动程序就位,操作系统就将它们调入内核。随后初始化有关表格,创建需要的任何北京进程,启动登入程序。
1.4 操作系统分类
- 大型操作系统:用于大型机。主要面向多个作业的同时处理。
- 服务器操作系统
- 多处理器操作系统
- 个人计算机操作系统
- 掌上操作系统
- 嵌入式操作系统:不允许用户安装软件,所有的软件都保存在ROM中。其主要特征是:不可信的软件肯定不能在嵌入式系统上运行。
- 传感器节点操作系统
- 实时操作系统:硬实时操作系统/软实时操作系统
- 智能卡操作系统
1.5 操作系统的概念
1.5.1 进程
-
进程:进程本质上正在执行的一个程序。与每个进程相关的还有资源集,包括寄存器(程序计数器和堆栈指针)、打开文件的清单、突出的报警、有关进程清单,以及运行该程序所需要的其他基本信息。进程基本上是容纳运行一个程序所需要的所有信息的容器。
-
地址空间:从某一个最小值的存储位置到某个最大值的存储位置的列表。在地址空间中,进程可以进行读写。同时,改地址空间存放有可执行程序,程序的数据以及程序的堆栈。
-
进程表(process table):进程表是数组/链表结构,保存了一个进程有关的所有信息(除了该进程自身地址空间的内容),当前存在的每一个进程都占用进程表中的一项。
-
UID(User IDentification): 系统管理器授权给每个进程使用一个给定的UID。每一个被启动的进程都有一个启动该进程的用户UID(子进程与父进程有一样的UID)。
-
GID(Group IDentification):每一个组有一个GID,用户可以是某一个组的成员。
1.5.2 地址空间
如果有一个进程有比计算机内存还大的地址空间,且该进程希望使用全部的内存,该从如何处理?
早期计算机无法处理。现在,可以使用虚拟存储技术。
1.5.3 文件
如前所述,操作系统一个重要的功能是隐藏磁盘和其他I/O的细节特征,提供给程序员一个良好的、清晰的独立于设备的抽象文件类型。
- 目录(directory):
- 根目录(root directory):目录的顶部。
- 绝对路径名:包含了从根目录到该文件的所有目录清单。
- 工作目录(working directory):若给定一个路径没有以斜线开头,则将在工作目录下寻找。
- 文件描述符(file descriptor):读写文件之前,首先检查文件的访问权限,若权限许可,则返回文件描述符;否则返回一个错误码。
- 特殊文件(special file):提供特殊文件文件是为了使I/O设备看起来像文件一般。有两类特殊文件,块特殊文件 与 字符特殊文件。
- 管道(pipe):管道是一种虚文件,它可以连接两个进程。
1.5.4 输入/输出
每个操作系统都有管理其I/O设备的I/O子系统。
某些I/O软件是设备独立的,即这些I/O软件部分可以同样应用于许多或者全部的I/O设备上。I/O软件的其他部分,如设备驱动程序,是专门为特定的I/O设备设计的。
1.5.5 保护
管理系统的安全性完全依赖于操作系统。
1.5.6 shell
操作系统是进行系统调用的代码。
编译器、编辑器、汇编程序、链接程序、效用程序、命令解释程序等虽然十分重要,但并不是操作系统的组成部分。
shell是UNIX下的命令解释器,虽然shell不是操作系统的一部分,但是它体现了许多操作系统的特性,并且很好地说明了系统调用的具体用法。shell同时也是终端用户与操作系统之间的接口(除非用户使用的是图形化界面)/
shell分为很多种,例如sh、csh、ksh、bash等。
用户登录时,同时启动了一个shell。它以终端作为标准输入和标准输出。首先显示 提示符(prompt)
我的微信公众号
最后
以上就是紧张月光为你收集整理的【现代操作系统】第一章:引论的全部内容,希望文章能够帮你解决【现代操作系统】第一章:引论所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复