第1章 引论

现代计算机系统由一个或多个处理器、主存、磁盘、打印机、键盘、鼠标、显示器、网络接口以及各种其他输入/输出设备组成。一般而言,现代计算机系统是一个复杂的系统。如果每位应用程序员都不得不掌握系统的所有细节,那就不可能再编写代码了。而且,管理这些部件并加以优化使用,是一件挑战性极强的工作。所以,计算机安装了一层软件,称为操作系统,它的任务是为用户程序提供一个更好、更简单、更清晰的计算机模型,并管理刚才提到的所有设备。

用户与操作系统交互的程序,基于文本的通常称为shell,而基于图标的则称为图形用户界面(GUI),它们实际上并不是操作系统的一部分,尽管这些程序使用操作系统来完成工作。

下图给出了这里所讨论的主要部件的一个简化视图。图的底部是硬件。硬件包括芯片、电路板、磁盘、键盘、显示器以及类似的设备。在硬件的顶部是软件。多数计算机有两种运行模式:内核态和用户态。软件中最基础的部分是操作系统,它运行在内核态(也称为管态,核心态)。在这个模式中,操作系统具有对所有硬件的完全访问权,可以执行机器能够运行的任何指令。软件的其余部分运行在用户态下。 在用户态下,只使用了机器指令中的一个子集。特别地,那些会影响机器的控制或可进行I/O操作的指令,在用户台中的程序里是禁止的。在本书中,我们会不断讨论内核态和用户态之间的差别,这些差别在操作系统的运行中扮演着极其重要的角色。

1.1 什么是操作系统

作为扩展机器的操作系统
作为资源管理者的操作系统

1.2操作系统历史

第一代:真空管和穿孔卡片(1945-1955)
第二代:晶体管和批处理系统(1955-1965)
第三代:集成电路和多道程序设计(1965-1980)
第四代:个人计算机(1980至今)
第五代:移动计算机(1990至今)

1.3计算机硬件简介

从概念上讲,一台简单的个人计算机可以抽象成类似于下图的模型。CPU、内存以及I/O设备都由一条系统总线连接起来并通过总线与其他设备通信。

1.3.1处理器

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

每个CPU都有一套可执行的专门指令集。所以,x86处理器不能执行ARM程序,而ARM处理器也不能执行x86程序。由于用来访问内存以得到指令或数据的时间要比执行指令花费的时间长得多,因此,所有的CPU内都会有一些用来保存关键变量和临时数据的寄存器。这样,通常在指令集中提供一些指令,用以讲一个字从内存调入寄存器,以及将一个字从寄存器存入内存。其他的指令可以把来自寄存器、内存的操作数组合,或者用两者产生一个结果,如将两个字相加并把结果存在寄存器或内存中。

除了用来保存变量和临时结果的通用寄存器外,多数计算机还有一些对程序员可见的专用寄存器。其中之一是程序寄存器,它保存了将要取出的下一条指令的内存地址。在指令取出之后,程序计数器就被更新以便指向后继的指令。

另一个寄存器是堆栈指针,它指向内存中当前栈的顶端。该栈包含了每个执行过程的栈帧。一个过程的栈帧保存了有关的输入参数、局部变量以及那些没有保存在寄存器中的临时变量

当然还有程序状态字(Program Status Word,PSW) 寄存器。这个寄存器包含了条件码位(由比较指令设置)、CPU优先级、模式(用户态或内核态),以及各种其他控制位。用户程序通常读入整个PSW,但是,只对其中的少量字段写入。在系统调用和I/O中,PSW的作用很重要。

操作系统必须知晓所有的寄存器。在时间多路复用(time multiplexing)CPU中,操作系统经常会中止正在运行的某个程序并启动(或再启动)另一个程序。每次停止一个运营着的程序时,操作系统必须保存所有的寄存器值,这样在稍后该程序被再次运行时,可以把这些寄存器重新装入。

为了改善性能,CPU设计师早就放弃了同时读取、解码和执行一条指令的简单模型。许多现代CPU具有同时取出多条指令的机制。例如,一个CPU可以有单独的取指单元、解码单元和执行单元,于是当它执行指令n时,还可以对指令n+1解码,并且读取指令n+2. 这样的机制称为流水线(pipeline) ,下图a是一个有着三个阶段的流水线示意图。更长的流水线也是常见的。
在多数的流水线设计中,一旦一条指令被取进流水线中,它就必须被执行完毕,即便前一条取出的指令是条件转移,它也必须被执行完毕。

比流水线更先进的设计是超标量CPU,如图b所示。在这种设计中,有多个执行单元,例如,一个CPU用于整数算数运算,一个CPU用于浮点算术运算,一个CPU用于布尔运算。两个或更多的指令被同时取出、解码并装入暂存缓冲区中,直至它们执行完毕。只要有一个执行单元空闲,就检查保持缓冲区中是否还有可处理的指令,如果有,就把指令从缓冲区中移出并执行之。这种设计存在一种隐含的作用,即程序的指令经常不按顺序执行。在多数情况下,硬件负责保证这种运算的结果与顺序执行指令时的结果相同,但是,仍然有部分令人烦恼的复杂情形被强加给操作系统处理,我们会在后面讨论这种情况。

除了用在嵌入式系统中的非常简单的CPU之外,多数CPU都有两种模式,即前面提到的内核态和用户态。通常,在PSW中有一个二进制位控制这两种模式。当在内核态运行时,CPU可以执行指令集中的每一条指令,并且使用硬件的每种功能。在台式机和服务器上,操作系统在内核态下运行,从而可以访问整个硬件。而在大多数嵌入式系统中,一部分操作系统运行在内核态,其余的部分则运行在用户态。

相反,用户程序在用户态下执行,仅允许执行整个指令集的一个子集和访问所有功能的一个子集。一般而言,在用户态中有关I/O和内存保护的所有指令是禁止的。当然,将PSW中的模式位设置成内核态也是禁止的。

为了从操作系统中获得服务,用户程序必须使用系统调用(system call) 以陷入内核并调用操作系统。TRAP指令把用户态切换成内核态,并启用操作系统。当有关工作完成之后,在系统调用后面的指令把控制权返回给用户程序。到目前为止,请读者把它看成一个特别的过程调用指令,该指令具有从用户态切换到内核态的特别能力。

有必要指出的是,计算机使用陷阱而不是一条指令来执行系统调用。其他的多数陷阱是由硬件引起的,用于警告有异常情况发生,如试图被零除或浮点下溢等。在所有的情况下,操作系统都得到控制权并决定如何处理异常情况。有时,由于出错的原因,程序不得不停止。在其他情况下可以忽略出错(如下溢数可以被置为零)。

多线程和多核芯片

Moore定律指出,芯片中晶体管的数量每18个月翻一番。Moore定律已经保持了30年,有希望至少再保持10年。在那以后,每个晶体管中原子的数目会变得太少,并且量子力学将扮演重要角色,这将阻止晶体管尺寸的进一步缩小。

使用大量的晶体管引发了一个问题:如何处理它们呢? 这里我们可以看到一种处理方式:具有多个功能部件的超标量体系结构。 但是,随着晶体管数量的增加,再多晶体管也是可能的。一个由此而来的必然结果是,在CPU芯片中加入了更大的缓存,人们肯定会这么做,然而,原先获得的有用效果将最终消失。

显然,下一步不仅是由多个功能部件,某些控制逻辑也会出现多个。 Intel Pentium 4 引入了被称为==多线程(Multithreading)或超线程(hyperthreading)==的特性。近似地说,多线程允许CPU保持两个不同的线程状态,然后在纳秒级的时间尺度内来回切换。(线程是一个轻量级进程,即一个运行中的程序。将在第2中讨论。)例如,如果某个进程需要从内存中读出一个字(需要花费多个时钟周期),多线程CPU则可以切换至另一个线程。多线程不提供真正的并行处理。在一个时刻只有一个进程在运行,但是线程的切换时间则减少到纳秒数量级。

1.3.2存储器

1.3.3磁盘

1.3.4I/O设备

1.3.5总线

1.3.6启动计算机

1.4操作系统大观园

大型机操作系统
服务器操作系统
多处理器操作系统
个人计算机操作系统
掌上计算机操作系统
嵌入式操作系统
传感器节点操作系统
实时操作系统
智能卡操作系统

1.5操作系统概念

进程
地址空间
文件
输入/输出
保护
shell
个体重复系统发育

1.6系统调用

用于进程管理的系统调用
用于文件管理的系统调用
用于目标管理的系统调用
各种系统调用
Windows Win32 API

1.7操作系统结构

单体系统
层次式系统
微内核
客户端-服务器模式
虚拟机
外核

1.8依靠C的世界

C语言
头文件
大型编程项目
运行模型

《现代操作系统》第1章读书笔记-- 引论(未完成)相关推荐

  1. 《深入理解计算机系统》第七章读书笔记

    <深入理解计算机系统>第七章读书笔记 第七章:连接 连接 1.连接:将各种代码和数据部分收集起来并组合成为一个单一文件的过程.这个文件可被加载或拷贝到存储器并执行. 2.连接可以执行于编译 ...

  2. 《Go语言圣经》第一章 - 读书笔记

    <Go语言圣经>第一章 - 读书笔记 第一章 Go语言入门 01 Hello World 02 命令行参数 练习 练习1.1 练习1.2: 练习1.3: 03 查找重复的行 例子运行 du ...

  3. 电子数据取证第二章读书笔记

    电子数据取证第二章读书笔记 1.计算机硬件知识 内存与外存: 内存(Memory)是计算机的重要部件之一,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据.它是外 ...

  4. Android深度探索--HAL与驱动开发----第五章读书笔记

    第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们 ...

  5. 《构建之法》第4.17章读书笔记

    <构建之法>第4.17章读书笔记 第四章 原文语句: 异常不能跨过DLL或进程的边界来传递信息,所以异常不是万能的. 提出问题: 1.什么是DLL?DLL是来解决什么问题的? 网上说法: ...

  6. 期权、期货及其他衍生产品 第四章读书笔记 利率

    期权.期货及其他衍生产品 第四章读书笔记 利率 利率的种类 我国的利率体系 中央银行利率 金融机构利率 金融市场利率 利率的度量 连续复利利率和与之等价的每年m次复利利率的关联 零息利率 债券定价 债 ...

  7. Python编程:从入门到实践第六章读书笔记6.3遍历字典

    Python编程:从入门到实践第六章读书笔记6.3遍历字典 #coding:gbk#6.3.1遍历所有的键-值对 user_0 = {'username': 'efermi','first': 'en ...

  8. 《人人都是产品经理》第四章读书笔记及读后感作文2400字

    <人人都是产品经理>第四章读书笔记及读后感作文2400字: 最近一直在忙别的学习,以至于好久没有更新公众号了,也好久没有写读书笔记了.<人人都是产品经理>这本书其实早在一个月前 ...

  9. 第一行代码Android第二章读书笔记

    第一行代码Android第二章读书笔记 Activity 1.1 手动创建活动 1.2 Toast和Menu/销毁活动 Intent 2.1 显示/隐式 2.2 传递/返回数据 活动的生命周期 3.1 ...

最新文章

  1. 消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?大量消息持续积压几个小时,怎么办?...
  2. iOS MKMapView 地图视图
  3. 深度学习中的Normalization模型(附实例公式)
  4. Windows 8 IIS中配置PHP运行环境的方法
  5. Maximum.TV 发布西班牙语Silverlight TV网站
  6. ABAP 的历史,现在,和未来的讨论
  7. 第4关:HDFS-JAVA接口之删除文件
  8. VMware VMFS文件系统元数据不一致问题处理
  9. 自定义的Spinner文字居中
  10. atitit.技术选型方法总结为什么java就是比.net有前途
  11. SecureCRT信号灯超时时间已到
  12. IDEA 之搭建spring-boot maven报错Project ‘org.springframework.boot:spring-boot-starter-parent:2.2.0.RELEAS
  13. 快速有效分离RNA——土壤RNA纯化试剂盒
  14. linux invalid argument_Linux命令很熟悉,你知道它们的英文全称和中文解释吗?
  15. 老大“秃”伤悲的年轻人,正靠假发维持最后的体面
  16. Core的.mli文件在哪里
  17. java rrd 读取_rrd4j的使用详解1–数据保存入rrd文件 | 学步园
  18. 基于钉钉的多人协作项目办公
  19. 【数据库系统概论】-数据库设计
  20. Un-Routed Net ConStraint报错的原因

热门文章

  1. linux tomcat 突然验证码出不来
  2. Java接口和Java抽象类的认识
  3. localdatetime 默认时间_为什么建议使用你 LocalDateTime ,而不是 Date?
  4. 神经网络的核裂变模型
  5. BP神经网络分类2*2对角矩阵准确率数据汇总
  6. win10下处理“xxx不是内部或外部命令,也不是可运行的程序或批处理文件”
  7. 【Paper】2018_Nonlinear Consensus-Based Connected Vehicle Platoon Control Incorporating Car-Following
  8. 【Paper】2020_含时延约束的多智能体系统二分一致性
  9. LaTex 实数集R
  10. 2.6 多分类问题-机器学习笔记-斯坦福吴恩达教授