0%

操作系统概述

操作系统和其结构的关系

首先明确操作系统的作用:
1> 方便用户
2> 提高资源使用率

操作系统与计算机各层次的关系

操作系统管理系统中的各种资源,控制用户和应用程序的工作流程。

(1) OS对各层的管理和控制包括下以方面:

  • 控制CPU的工作

  • 访问存储器

  • 设备驱动、中断处理

  • 控制、管理

  • 提供方便的用户界面

  • 提供优质的服务

(2) 各层对OS的制约和影响

下层硬件环境的制约:

  • 提供OS运行环境
  • 限制了OS的功能实现

存储程序式计算机的结构和特点

主要说的就是冯式结构计算机。

集中顺序过程控制的特点

①过程性:模拟人们手工操作

②集中控制:由CPU集中管理

③顺序性:程序计数器

早期的计算机是单用户OS,是顺序计算模型。他的问题就是CPU的利用率不高。

操作系统形成和发展过程

操作系统发展的初期阶段

手工操作阶段

  • 独占性
  • 串行性

批处理阶段

出现监管程序

联机批处理

解决了人机矛盾。

①特点:监督程序、作业自动过渡

②问题:CPU高速与I/O慢速的矛盾

③解决办法:由卫星机负责I/O

监管程序是为了审查作业对系统资源的要求,满足就把作业调入主存中。

注意:联机的意思是CPU对I/O的控制方式,如果CPU是直接控制I/O的操作,就是联机操作方式

脱机批处理

为了克服CPU高速和/O低速之间的矛盾。

①特点:主机与卫星机并行操作

②问题:调度不灵活;保护问题

③解决办法:硬件技术的发展——通道技术、中断技术

主机负责计算、卫星机负责I/O工作。作业通过卫星机输入到磁带上,然后移到主机上。

执行系统

提供了系统保护,避免了磁盘的拆卸。

(1) 什么是执行系统

借助于通道与中断技术,由主机控制I/O工作。原有的监督程序不仅要负责调度作业自动地运行,而且还要提供I/O控制功能。它常驻主存,称为执行系统。

(2) 特点

主机、外设并行操作;增强了保护能力

(3) 基本功能

I/O控制功能、调度

(4) 问题主机与外设的并行是有限度的,还依赖于程序运行的特征。

操作系统的形成

多道程序设计技术

其自动处理过程是:首先,由监督程序将磁带上的第一个作业装入内存,并把运行控制权交给该作业。当该作业处理完成时,又把控制权交还给监督程序,再由监督程序把磁带(盘)上的第二个作业调入内存。计算机系统就这样自动地一个作业一个作业地进行处理(顺序性),直至磁带(盘)上的所有作业全部完成(自动性)。内存中仅有一道程序运行,即监督程序每次从磁带上只调入一道程序进入内存运行,当该程序完成或发生异常情况时,才换入其后继程序进入内存运行(单道性),这样便形成了早期的批处理系统;

从上述分析可知,在输入操作系统结束之前,处理机处于空闲状态,原因是I/O处理与本道程序相关。

① 什么是多道程序程序设计技术

多道程序设计技术是在计算机主存中同时存放几道相互独立的程序这些程序在管理程序控制之下,相互穿插地运行。当某道程序因某种原因不能继续运行下去时(如等待外部设备传输数据),管理程序便将另一道程序投入运行。

② 多道运行的特征

  • 多道
  • 宏观上并行
  • 微观上串行(由下面的运行过程可知,本质上还是串行运行的,只不过提高了CPU的利用率,导致宏观上看前来是并行的)

1、运行过程

​ 在该系统中,用户所提交的作业都先存放在外存上并排成一个队列,称为“后备队列”(首先将作业放置在磁盘中,然后再由磁盘调入道内存中);然后,由作业调度程序按一定的算法从后备队列中选择若干个作业调入内存,使它们共享 CPU和系统中的各种资源。

2、优缺点

​ 提高资源利用率:共享资源的充分利用;

​ 提高系统吞吐量:系统在单位时间内完成的总工作量;

​ 平均周转时间长:作业从进入系统开始直至作业完成并推出系统所经历的时间;

​ 无交互能力:用户无法与自己的作业进行交互;

3、多道批处理系统应该解决的问题

​ 处理机的管理;

​ 内存的管理;

​ I/O设备的管理;

​ 文件的管理;

​ 作业的管理;

分时技术

① 什么是分时技术

22所谓分时技术,是把处理机时间划分成很短的时间片(如几百毫秒)轮流分配给各个应用程序使用,如果某个程序在分配的时间片用完之前计算还未完成,该程序就暂时中断,等待下一轮继续计算。

注意:CPU是一个独占资源

② 分时处理

一台计算机与许多终端设备连接,终端用户以联机方式使用计算机。

实时技术

①什么是实时

计算机对于外来信息能够在被控对象允许的截止期限(deadline)内作出反应。

②实时处理

实时处理以快速反应为特征,对实时信号能在截止期限之内处理并作出反应。
实时处理具有实时性和可预测性。

计算机体系结构与操作系统的关系

(1) 单CPU计算机配置的操作系统

批量操作系统 分时操作系统

实时操作系统 个人计算机操作系统

(2) 具有并行结构的计算机系统配置的操作系统

网络操作系统(计算机网络,松耦合)
多处理机操作系统(多处理机系统,紧耦合)
集群操作系统(分布存储的多计算机系统)
并行分布式系统(分布存储的多计算机系统)
分布式系统(具有单一用户界面,支持分布式数据处理)
分布式实时系统(支持分布式实时数据处理)

操作系统的定义

资源共享与资源竞争

  • 资源共享:多个计算任务对计算机系统资源的共同享用
  • 资源竞争:多个计算任务对计算机系统资源的争夺

操作系统的定义和特征

(1) 操作系统的定义

操作系统是一个大型的程序系统,它负责计算机系统软、硬件资源的分配;控制和协调并发活动;提供用户接口,使用户获得良好的工作环境。

(2) 操作系统的特征

并发
能处理多个同时性活动的能力

共享
多个计算任务对系统资源的共同享用

不确定性
操作系统能处理大量的、随机的事件序列,使各用户的计算任务正确地完成。

操作系统的资源管理功能

操作系统的主要功能:

  • 对系统资源实施管理和调度
  • 控制和协调并发活动
  • 对外提供用户界面

计算机系统中最重要的资源就是CPU内存也是计算机系统的重要资源。

处理机管理

(1) 提出进程调度策略

确定将CPU先分给哪个用户程序,它占用多长时间,下一个又该轮到哪个程序运行等问题。

(2) 给出进程调度算法

确定进程调度下一个进程的顺序

(3) 进行处理机的分派

在调度时机到来时,进行处理机分派。

存储器管理

(1) 存储分配和存储无关性

确定各应用程序在主存中的位置及所占区域的大小;应用程序无需关心存储细节,由存储管理模块提供地址重定位能力。

(2) 存储保护

系统提供基址、界限寄存器等存储保护方法,使各应用程序相互隔离。

(3) 存储扩充绪论——操作系统的资源管理功能

系统提供虚拟存储技术,扩大逻辑主存。

设备管理

(1) 设备无关性

设备无关性是指用户向系统申请和使用的设备与实际操作的设备无关,以达到方便用户、提高设备利用率的目的。

(2) 设备分配

操作系统为各应用程序和运行实体分配各种设备。设备分配通常采用三种基本技术:独享、共享及虚拟技术。

(3) 设备的传输控制

设备的传输控制包括:启动设备、中断处理、结束处理三个方面

信息管理(文件系统)

文件系统为用户提供一种简便的、统一的存取和管理信息的方法,并解决信息的共享、数据的存取控制和保密等问题。

  • 信息组织
  • 存取方法
  • 文件共享
  • 文件安全
  • 文件完整性
  • 磁盘空间分配

操作系统的基本类型

批量操作系统

采用多道程序设计技术。该系统把用户提交的程序组织成作业形式。作业成批送入计算机,然后由作业调度程序自动选择作业,在系统内多道运行。

比较远古。

特点

  • 系统吞吐率高

    合理的搭配多道程序即可

  • 作业周转时间长,用户使用不方便

    用户向系统提交作业到获得系统的处理信息的时间间隔就是作业周转时间

分时操作系统

分时操作系统是操作系统的另一种类型。它一般采用时间片轮转的办法,使一台计算机同时为多个终端用户服务。该系统对每个用户都能保证足够快的响应时间,并提供交互会话功能。

特点

①并行性

宏观上并行

②独占性

微观上串行,当时间片很短时,就会形成独占的错觉

③交互性

用户和计算机之间可以进行命令行的交互对话

实时操作系统

实时操作系统对外部输入的信息,能够在规定的时间内处理完毕并作出反应。

特点

i 可靠性和安全性
放在第一位,系统的效率放在第二位。

ii 及时响应

这是实时操作系统的核心特点

实时系统

配置了实时操作系统的系统。该系统可以对科学实验、医学成像、工业控制、武器装备控制和特定显示系统进行实时控制的系统。

硬实时系统

系统必须满足应用程序对截止期限(deadline)的要求,若错过了截止期限,将导致灾难性后果。

软实时系统

系统中截止期限被错过的情况下,只造成系统性能下降而不会带来严重后果。

个人操作系统

windows是单用户多任务操作系统

UNIX系统是多用户多任务分时操作系统

Linux系统是多用户多任务系统

多处理机系统

广义上说,使用多台计算机协同工作来完成所要求的任务的计算机系统都是多处理机系统。传统的狭义多处理机系统是指利用系统内的多个CPU并行执行用户多个程序,以提高系统的吞吐量或用来进行冗余操作以提高系统的可靠性。

① 包含两个或多个功能相当的处理器

② 所有处理器共享一个公共内存

③ 所有处理器共享I/O通道、控制器和外围设备

④ 由一个操作系统控制

网络操作系统

网络操作系统把计算机网络中的各台计算机有机地结合起来,提供一种统一、经济而有效的使用各台计算机的方法,实现各个计算机之间的互相传送数据。网络操作系统最主要的特点是网络中各种资源的共享以及各台计算机之间的通信。

有点类似于集中式

分布式系统

分布式计算机系统是由多台计算机组成并满足下列条件的系统:系统中任意两台计算机通过通信方式交换信息;系统中的每一台计算机都具有同等的地位,即没有主机也没有从机; 每台计算机上的资源为所有用户共享;系统中的任意若千台计算机都可以构成一个子系统,并且还能重构;任何工作都可以分布在几台计算机上,由它们并行工作、协同完成。用于管理分布式计算机系统的操作系统称为分布式计算机系统。该系统的主要特点是:分布性和并行性。分布式操作系统与网络操作系统本质上的不同之处在于分布式操作系统中,若干台计算机相互协同完成同一任务。

分布式系统和计算机网络系统的共同点是:多数分布式系统是建立在计算机网络之上的,所以分布式系统与计算机网络在物理结构上是基本相同的。
他们的区别在于:分布式操作系统的设计思想和网络操作系统是不同的,这决定了他们在结构、工作方式和功能上也不同。网络操作系统要求网络用户在使用网络资源时首先必须了解网络资源,网络用户必须知道网络中各个计算机的功能与配置、软件资源、网络文件结构等情况,在网络中如果用户要读一个共享文件时,用户必须知道这个文件放在哪一台计算机的哪一个目录下;分布式操作系统是以全局方式管理系统资源的,它可以为用户任意调度网络资源,并且调度过程是“透明”的。当用户提交一个作业时,分布式操作系统能够根据需要在系统中选择最合适的处理器,将用户的作业提交到该处理程序,在处理器完成作业后,将结果传给用户。在这个过程中,用户并不会意识到有多个处理器的存在,这个系统就像是一个处理器一样。

操作系统的结构和硬件支持

操作系统虚拟机

配置在裸机上的第一层软件是操作系统。在裸机上配置了操作系统后就构成了操作系统虚拟机。

操作系统虚拟机的指令系统

裸机的指令系统:机器指令

操作系统虚拟机的指令系统:
1、操作命令

  • 键盘命令
  • 作业控制语言
  • 图形化用户界面

2、系统功能调用

操作系统的结构

层次结构

操作系统由许多层构成,每一层都提供一项功能,并且该功能依赖于该层以内的各层。“洋葱结构”。

各层之间的模块只能是单向依赖或单向调用(如只允许上层或外层模块调用下层或内层模块)关系。将整体式结构的无序性变为有序性

优点:化整为零(功能分解);结构清晰、不构成循环;易于调试、易于修改、易于扩充、易于维护、易于保证正确性(增加或替换一层不影响其它层)

微内核OS结构(客户机/服务器)

在微内核设计背后的思想是为了实现高可靠性,将操作系统划分成小的、良好定义的模块,只有其中一个模块–微内核–运行在内核态上,其余的模块,由于功能相对弱些,则作为普通用户进程运行。特别地由于把每个设备驱动和文件系统分别作为普通用户,这些模块中的错误虽然会使这些模块崩溃,但是不会使得整系统死机。

特点如下:

1.运行在核心态的内核:内核提供所有操作系统基本都具有的那些操作,只提供了一个很小的功能集合。

2.运行在用户态的并以客户机/服务器方式运行的进程层:除内核部分外,操作系统所有的其他部分被分成若干个相对独立的进程,每一个进程实现一组服务,称为服务进程。

客户机/服务器运行模式:
客户机进程与服务器进程之间的通信是采用发送消息进行的,这是因为每个进程属于不同的虚拟地址空间,它们之间不能直接通信,必须通过内核进行,而内核则是被映射到每个进程的虚拟地址空间内的,它可以操纵所有进程。客户机进程发出消息,内核将消息传给服务进程。服务进程执行相应的操作,其结果又通过内核用发消息方式返回给客户机进程。

客户机/服务器运行模式的优点:
将操作系统分成若干个小的并且自包含的分支(服务进程),每个分支运行在独立的用户进程中,相互之间通过规范一致的方式接收发送或消息而联系起来。操作系统在内核中建立起了最小的机制,而把策略留给用户空间中的服务进程,这带来了很大的灵活性。
可靠:分支独立只包含,单一故障不影响其它。
灵活:方便增加新的服务功能。
适宜于分布式环境:不同服务进程可以运行在不同处理器或计算机上。

客户机/服务器运行模式的缺点:
所有的用户进程只能通过微内核相互通信,微内核本身就成为系统的瓶颈,在一个通信很频繁的系统中,微内核往往不能提供很好的效率。

实例操作系统的结构

UNIX操作系统的结构

  • UNIX核心层
    • 处理机管理
    • 存储管理
    • 设备管理
    • 文件系统
  • UNIX实用层
    • 实用程序 —— 编辑程序、调试程序、系统状态监控、 文件管理等实用程序
    • 存储管理软件工具 ——源代码控制程序SCCS、文档准备程序包等

Linux系统的核心结构

Linux系统一般有4个主要部分:

内核、shell、文件系统和应用程序。内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。

shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。

用户态和核心态

Linux系统将自身划分为两部分,一部分为核心软件,即是kernel,也称作内核空间,另一部分为普通应用程序,这部分称为用户空间。

windows系统的结构

运行时的组织结构

调用一个给定的OS的内部例程有两种方式:

  • 系统功能调用方式

只能通过用户程序间接调用:

  • 客户端/服务器方式

将操作系统服务作为系统服务进程来提供,服务请求和服 务响应是通过消息传递来实现的。
提供服务的是服务器,调用服务的是客户端

处理机的特权级

区分处理机状态是为了保护操作系统

处理机的态,又称为处理机的特权级,是中央处理机的工作状态。当前处理机正在执行哪类程序,决定处理机的态。

处理机状态的分类

① 管态 (Supervisor mode)

操作系统的管理程序执行时机器所处的状态,又称处理机的特权级。在此状态下处理机可使用全部指令(包括一组 特权指令);使用全部系统资源(包括整个存储区域)。

② 用户态(User mode)

用户程序执行时机器所处的状态称为用户态。在此状态下禁止使用特权指令,不能直接取用资源与改变机器状态, 并且只允许用户程序访问自己的存储区域。

处理机状态的特权指令集

① 涉及外部设备的输入/输出指令

② 修改特殊寄存器的指令

③ 改变机器状态的指令

实例操作系统处理机的状态

① DOS系统
不分态

② Windows 系统
3环 用户态
0环 系统态
还有1、2环预留

③ UNIX系统 (Linux)系统
00 核态
01 管态
11 用户态

中断及其处理

在上述的处理机的状态可见,假设用户程序执行时,超过了它的权限要求,就要把系统从用户态转变为管态。在这个过程中,系统将发生中断。

中断

所谓中断是指某个事件 (例 如电源掉电、定点加法溢出 或I/O传输结束等) 发生时, 系统中止现行程序的运行、 引出处理事件程序对该事件 进行处理,处理完毕后返回 继续执行 断点继续执行的过程。

需要明确的是中断是硬件和软件结合实现的:硬件实现的中断进入;软件的中断处理过程。

中断类型

(1) 按中断功能分类

① 输入输出中断: I/O传输结束或出错中断

② 外中断: 时钟中断、操作员控制台中断、通信中断等

③ 机器故障中断 :电源故障、主存取指令错等

④ 程序性中断 :定点溢出、用户态下用核态指令、非法操作

⑤ 访管中断 :对操作系统提出某种需求时所发出的中断(例如:printf)

(2) 按中断方式分类

① 强迫性中断: 不是正在运行的程序所期待的中断。 如:输入输出中断、外中断、机器故障中断、程序性中断

② 自愿中断: 是运行程序所期待的事件。 如:访管中断

(3) 按中断来源分类

① 中断 :由处理机外部事件引起的中断

② 俘获 :由处理机内部事件引起的中断

③ 中断与俘获的例

中断进入(响应)

(1) 保护现场和恢复现场

① 现场

在中断的那一时刻能确保程序继续运行的有关信息。

ⅰ 后继指令所在主存的单元号
ⅱ 程序运行所处的状态
ⅲ 指令执行情况
ⅳ 程序执行的中间结果等

② 保护现场

当中断发生时,必须立即把现场信息保存在主存中,这一 工作称之为保护现场。

③ 恢复现场

程序重新运行之前,把保留的该程序现场信息从主存中送 至相应的指令计数器、通用寄存器或一些特殊的寄存器中。 完成这些工作称为恢复现场。

(2) 程序状态字 (psw)

① 定义

反映程序执行时机器所处的现行状态的代码。

② 内容

指令地址、指令执行情况、处理机状态、应屏蔽的中断等。

③ 程序状态字的例子

ⅰ IBM 370 机 程序状态字内容 → PSW:寄存器
ⅱ IBM PC 机 程序状态字内容 → CS IP 指令地址、 flag 标志寄存器
ⅲ PDP 11系列机 程序状态字内容 → PC 指令计数器 、PS 处理器状态寄存器

(3) 什么是中断响应

中断响应是当中央处理机发现已有中断请求时,中止现行 程序执行,并自动引出中断处理程序的过程。

(4) 中断响应所需的硬件支持

指令计数器、处理机状态寄存器、系统堆栈、中断向量表

(5) 中断响应过程

① 保留程序断点及处理机有关信息

② 自动转入相应的中断处理程序执行

(6) 中断响应的实质

交换指令地址及处理机的状态信息

软件中断处理

当硬件完成了中断进入过程后,由相应的中断处理程序得到控制权,进入了软件的中断处理过程。

Linux系统的特权级与中断处理

硬件部分和上述讨论的一致。区别在于其软件部分。

Linux将中断分为两个部分:

  • 上半部:中断处理有严格时间限制的工作,是关键而紧迫的部分。
  • 下半部:处理可以稍后完成的工作,是可以被打断的。

操作系统的用户接口

用户工作环境

用户工作环境的形成

由OS为用户提供:

(1) 系统提供各种硬件、软件资源

(2) 设计并提供使用方便的命令集合

(3) 将OS装入计算机并初始化,形成可供使用的工作环境

操作系统的初启

(1) 系统引导的任务

将操作系统的必要部分装入主存并对系统进行初始化工作,最终使系统处于命令接收状态。

  • 初始引导:把系统核心装入主存中的指定位置,并在指定地址启动
  • 核心初始化:执行系统核心的初启子程序,初始化系统核心数据(初始化系统数据结构和参数)
  • 系统初始化:为用户使用系统做准备

经过这三个阶段,OS就处在接收命令的状态。

(2) 系统引导的方式

①现场独立引导方式(滚雪球方式,bootup)

OS核心文件存储在系统本身的存储设备中,由系统自己将OS核心程序读入主存并运行,建立一个操作环境。

适用于微机和大多数系统

②辅助下装方式(download)

OS主要文件不放在系统本身的存储设备中,在系统启动后执行下装操作,从另外的计算机系统中将操作系统常驻部分传送到该计算机中,使它形成一个操作环境。

适用于多计算机系统、由主控机与前端机构成的系统以及分布式系统。

(3) 独立引导方式(滚雪球方式) 的过程

①初始引导

  • 系统加电;
  • 执行初始引导程序,对系统硬件和配置进行自检,保证系统没有硬件错误;
  • 硬盘中读入操作系统引导程序,并将控制权交给该程序模块。

②引导程序执行

  • 引导程序执行,将操作系统核心文件读入内存,并将控制交给核心的初始化程序

③核心初始化

初始化系统数据结构及参数

  • 系统加电建立进程有关的数据结构;
  • 获得自由存储空间的容量,建立存储管理的数据结构;
  • 建立系统设备和文件系统的数据结构;
  • 初始化时钟。

④系统初始化

  • 完善OS的操作环境,装载命令处理程序(或图形用户界面),并初始化;
  • 在多用户系统中,为每个终端建立命令解释进程,使系统处于命令接收状态。

(4) Linux系统初启

Linux系统是以滚雪球的方式启动

加电或复位→BIOS的启动→ Boot Loader → OS初始化

系统生成

所谓系统生成,就是指为了满足物理设备的约束和需要的系统功能,通过组装一批模块来产生一个清晰的、使用方便的操作系统的过程。

一般是厂商进行组装

应用程序的处理

处理应用程序的步骤

编辑——编译——-连接——–运行

编译:

高级语言(我们这里指C源文件) 代码 转化为 汇编代码

1.1.1 预处理
预处理过程通过预处理器来完成, 预处理器是程序中处理输入数据,产生能用来输入到其他程序的数据的程序。输出被称为输入数据预处理过的形式,常用在之后的程序比如编译器中.

本文只讨论C预处理器, C预处理器是C语言、C++语言的预处理器。用于在编译器处理程序之前预扫描源代码,完成 头文件的包含, 宏扩展, 条件编译, 行控制(line control) 等操作。

对于C/C++语言预处理一般分为以下几个过程:

1.1.1.1 包含文件
所谓包含文件即为头文件 #include 到的文件, 在预处理的过程中会将其加入到预处理器的输出文件中, 以供编译程序处理.

汇编

将汇编代码翻译成目标机器语言的过程. 生成的目标文件也就是与源程序在逻辑上等效的机器语言代码.

生成的机器语言代码被称为目标代码, 生成的二进制文件被称为目标文件(.o), 也成为二进制文件.

链接:

链接过程是由链接器进行操作的. 链接器(英语:Linker),又译为链接器、连结器,是一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库链接为一个可执行文件

2.1.1 静态链接(编译时)
链接器将函数的代码从其所在地(目标文件或静态链接库中)拷贝到最终的可执行程序中。这样该程序在被执行时这些代码将被装入到该进程的虚拟地址空间中。静态链接库实际上是一个目标文件的集合,其中的每个文件含有库中的一个或者一组相关函数的代码。
优点: 只需保证在开发者的计算机有正确的库文件,在以二进制发布时不需考虑在用户的计算机上库文件是否存在及版本问题.
缺点: 生成的可执行文件体积较大。当初正是为了避免此问题,才开发了动态库技术。

2.1.1 动态链接 (加载, 运行时)
所谓动态链接,就是把一些经常会共用的代码(静态链接的OBJ程序库)制作成DLL档,当可执行文件调用到DLL档内的函数时,操作系统才会把DLL档加载存储器内,DLL档本身的结构就是可执行档,当程序有需求时函数才进行链接。透过动态链接方式,存储器浪费的情形将可大幅降低。静态链接库则是直接链接到可执行文件。
DLL档本身也是可执行文件, 在程序执行的时候直接进行动态调用即可.

静态链接 动态链接
编译时 加载, 运行时
lib在编译时就组装进exe文件 程序运行时exe文件可以动态的加载dll
不用考虑计算机库文件版本 节省内存, 维护性高
整个软件包只有exe文件 软件包中有exe和dll
lib文件是外部函数和变量, 在编译时复制进目标程序, 后缀为.a dll文件本身是可执行的, 在运行时动态链接, 可以包含源码, 数据, 资源的多种组合, 后缀为.so

连接类型

静态连接

一个源程序经编译后,生成一个可重定位的目标模块,并产生内部符号表和外部符号表,供连接程序(Link)使用。

①内部符号表

​ 本模块可以被其他程序调用的入口点。

②外部调用表

​ 本模块要调用的外部的程序模块名。操作系统的用户接口——应用程序的处理

③连接需要做的工作

  • 将各模块连接成为一个整体;
  • 构造全程符号表,在其中填写模块的逻辑地址;
  • 查找各程序段的外部调用表,填入对应调用函数的地址

④静态连接的缺点

​ 静态连接将所需的外部函数链接到目标文件中形成为一个可执行文件。若多个应用程序都调用了同一个库中的外部函数,那么,多个应用程序的目标文件中都会包含这个外部函数对应的代码

动态连接

动态连接不需要将外部函数链接到目标文件中。而是在应用程序中需要调用外部函数的地方作记录,并说明要使用的外部函数名和引用入口号。

用户接口(用户界面)

操作系统的用户接口分为:操作接口和程序接口。

(1) 操作界面(命令接口)

用户使用操作界面来组织工作流程和控制程序的运行。

(2)系统功能服务界面(程序接口)

用户程序在其运行过程中,使用系统功能调用来请求操作系统的服务。

操作接口

分为以下三种形式:其形式和操作系统的类型有关。

  • 键盘命令(具有交互操作方式的操作系统:分时操作系统、个人计算机操作系统,是联机处理方式)
  • 图形化界面(具有交互操作方式的操作系统:分时操作系统、个人计算机操作系统)
  • 作业控制语言(批处理操作系统,是脱机处理方式)

作业控制语言(JCL)

  • 一种命令语言,包括作业处理命令和资源请求命令
  • 脱机方式下系统提供作业控制语言
  • 批处理系统中作业的组成
    • 作业申请:作业名、需用CPU时间、最迟完成时间、资源请求(主存、外设)等
    • 操作说明书:编辑命令、编译命令、连接命令、运行命令等
    • 程序与数据

结合之前的脱机处理方式,这种方式要求我们提前预测可能出现的处理,因为无法控制作业的运行过程。

键盘命令

  • 操作系统为联机用户提供的一种操作命令,用户通过这一组命令直接控制和干预程序的运行
  • 系统为联机用户提供键盘命令
  • 键盘命令的功能
    • 分时操作系统——用于注册、通信、注销的各类命令
    • 个人计算机操作系统——用于通信的各类命令

图形用户界面

  • 菜单驱动方式面向屏幕的交互方式,将键盘命令以屏幕方式来体现;命令和系统能完成的操作,用菜单分类分窗口列出;用户像点菜一样选择命令或某种操作,以控制系统去完成指定的工作;菜单系统的类型有多种,如下拉式菜单、上推式菜单和随机弹出式菜单
  • 图符驱动方式图符(Icon)也称图标,是一个小小的图符符号,代表操作系统中的命令、系统服务、操作功能、各种资源。良好的用户交互界面,将菜单驱动、图符驱动、面向对象技术等集成在一起,形成一个图文并茂的视窗操作环境。

图形用户界面的特点

  • 所有程序以统一的窗口形式出现
  • 提供统一的菜单格式
  • 系统资源、系统命令、操作功能以图标表示
  • 统一的操作方法

(1) MS-DOS ─ ─ 键盘命令、系统功能调用

(2) Windows─ ─图形用户界面、系统功能调用

(3) Linux (UNIX) ─键盘命令(XWindow)、系统功能调用

系统功能调用(程序接口)

系统功能调用是用户在程序一级请求操作系统服务的一种手段,它是带有一定功能号的“访管指令”。其功能是由操作系统中的程序完成的,即由软件方法实现的。

用户程序如何调用系统功能:通过访管方式。

需要注意到系统的程序是处于管态的,用户程序是处于用户态的。我们无法像用户程序调用用户程序一样调用系统程序(会发生处理机状态的转换)。

访管方式

访管指令(自愿进管指令)

svc n svc 表示机器访管指令的操作码记忆符,n为地址码(功能号)

用户可以使用不同功能号的访管指令来请求不同的功能

访管中断

当处理机执行到访管指令时发生中断,该中断称为访管中断,它表示正在运行的程序对操作系统的某种需求。

借此中断,机器状态由用户态转为管态。访管中断处理程序会转到用户程序所需要的系统程序。

系统调用的特点

不同的操作系统,系统调用实现的具体方法有所不同,但其实质特点相同:

  • 每个系统调用对应一个系统调用号(要请求调用某个系统功能就要在访管时给出对应的功能号)
  • 每个系统调用有一个对应的执行程序段
  • 每个系统调用要求一定数量的输入参数和返回值
  • 整个系统有一个系统调用执行程序入口地址表

系统功能调用vs. 库函数

在程序设计语言(如C语言)中,往往提供与各系统调用对应的库函数,应用程序可通过对应的库函数来使用系统调用

库函数的目的是隐藏访管指令细节,使系统调用更象过程调用,但一般地说,库函数属于用户程序而非系统程序(但是有些库函数是不涉及系统调用的)

库函数在执行是不会导致CPU状态的变化,但是其系统调用的代码属于OS,故在系统调用的代码执行的时候就会让CPU的状态由用户态变为管态

操作系统为用户提供系统调用也出于安全和效率考虑,使得用户态程序不能自由地访问内核关键数据结构或直接访问硬件资源

Linux系统调用由两部分组成:

  • 核心函数:实现系统调用功能的(内核)代码
  • 接口函数:提供给应用程序的API,以库函数形式存在Linux的lib.a中

Linux系统调用控制程序

(1)取系统调用号,检验合法性;

(2)建立调用堆栈,保护现场信息;

(3)根据系统调用号定位核心函数地址;

(4)根据通用寄存器内容,从用户栈中取入口参数;

(5)核心函数执行,把结果返回应用程序;

(6)执行退栈操作,判别调度程序scheduler是否将执行。

习题补充

第一章 习题及解答

1-2批处理系统和分时系统各具有什么特点?为什么分时系统的响应较快?

答:在批处理系统中操作人员将作业成批装入计算机,在程序运行期间用户不能干预,用户使用计算机的方式是脱机操作方式。批处理系统中作业成批处理,系统内多道程序是并发执行的,所以其特点是:系统吞吐率高,但作业周转时间长,用户使用不方便。

在分时系统中不同用户通过各自的终端以交互方式共同使用一台计算机,计算机以“分时”的方法轮流为每个用户服务,用户使用计算机的方式是联机操作方式。分时系统的主要特点是多个用户同时使用计算机的同时性,人机问答方式的交互性,每个用户独立使用计算机的独占性以及系统快速响应的及时性。

分时系统一般采用时间片轮转的方法,使一台计算机同时为多个终端用户服务,因此分时系统的响应较快。

1-3实时信息处理系统和分时系统从外表看来很相似,它们有什么本质的区别呢?

答:实时信息处理系统和分时系统从外表来看,都是一台计算机连接一个或多个终端设备;用户以联机方式直接与计算机交互。二者的本质区别是:

实时信息处理系统采用的进程调度策略是优先调度策略,而分时系统采用的进程调度策略是时间片轮转调度策略。

实时信息处理系统的终端设备通常只是作为执行装置或咨询装置,不允许用户编写新的程序或修改已有的程序。而分时系统的用户可以通过终端设备修改程序,可以与系统交互以控制程序的运行。

1-5什么是多道程序设计技术?试述多道程序运行的特征?

答:多道程序设计技术是指同时多个作业或程序进入主存并允许它们交替执行和共享系统中的各类资源。当一道程序因某种原因如 I/O 请求而暂停执行时,CPU立即转去执行另一道程序。多道程序运行具有如下特征:

多道:计算机内存中同时存放几道相互独立的程序。

宏观上并行:同时进入系统的几道程序都处于运行过程中,它们先后开始了各自的运行,但都未运行完毕。

微观上串行:从微观上看,主存中的多道程序轮流或分时地占有处理机,交替执行。

1-9 设一计算机系统有输入机一台、打印机两台,现有A、B两道程序同时投入运行,且程序A先运行,程序B后运行。程序A的运行轨迹为:计算50ms,打印信息100ms,再计算50ms,打印信息100ms,结束。程序B运行的轨迹为:计算50ms,输入数据80ms,再计算100ms,结束。回答如下问题。

(1)用图画出这两道程序并发执行时的工作情况。

(2)说明在两道程序运行时,CPU 有无空闲等待?若有,在哪段时间内等?为什么会空闲等待?

(3)程序 A、B 运行时有无等待现象?在什么时候会发生等待现象?

答:(1) 这两道程序并发执行时的工作情况如下图所示。

imgimgimgimg

CPU 50ms 50ms 50ms 100ms
输入机 80ms
打印机1 100ms 100ms
打印机2
A B

(2)CPU有空闲等待,当B 50ms计算完后,A 100ms打印仍在进行,中间CPU空闲 50ms。

(3)程序 A、B运行时有等待现象。当 B 80ms输入完成后,需等待20ms后才能进行计算。

第二章 习题及解答

2-1什么是操作系统虚拟机?

答:操作系统是最基本的系统软件,它是硬件功能的第一层扩充。配置了操作系统的计算机称为操作系统虚拟机。

操作系统虚拟机除了可使用原来裸机提供的各种基本硬件指令,还可以使用操作系统提供的操作命令和系统调度命令。

2-3什么是处理机的态?为什么要区分处理机所谓态?

答:所谓处理机的态就是处理机当前处于何种状态,正在执行哪类程序。为了保护操作系统,至少需要区分两种状态:管态和用户态。

操作系统是计算机系统中最重要的系统软件,为了能正确地进行管理和控制,其本身是不能被破坏的。为此,系统应能建立一个保护环境。当用户程序执行时,应有所限制,其所需资源必须向操作系统提出请求,自己不能随意取用系统资源,如不能直接启动外部设备的工作,更不能改变机器状态等。因此系统必须区分处理机的工作状态,即区分当时正在执行的程序的类别。

2-4 什么是管态?什么是用户态?二者有何区别?

答:管态又称为系统态,是操作系统的管理程序执行时机器所处的状态。在此状态下中央处理机可以使用全部机器指令,包括一组特权指令 (例如,涉及外部设备的输入/输出指令、改变机器状态或修改存储保护的指令) ,可以使用所有的资源,允许访问整个存储区。

用户态又称为目态,是用户程序执行时机器所处的状态。在此状态下禁止使用特权指令,不能直接取用资源与改变机器状态,并且只允许用户程序访问自己的存储区域。

二者的区别如下所述。

(1)处理机当前正在执行的程序类别不同。管态执行的是系统程序;用户态执行的是用户程序。

(2)执行的指令范围不同。管态下可以执行全部指令;用户态不能执行特权指令。

(3)使用资源范围不同。管态可以使用全部系统资源;用户态只能使用用户私有资源,如只能访问自己的存储区域。

2-6按中断的功能来分,中断有哪几种类型?

答:按中断的功能来分,中断有如下五种类型:

(1) I/O 中断

(2) 外中断

(3) 硬件故障中断

(4) 程序性中断

(5) 访管中断

2-11 什么是程序状态字?在微机中它一般由哪两个部分组成?

答:程序状态字是指反映程序执行时机器所处的运行状态的代码。在微机中它一般由指令计数器 PC 和处理机状态寄存器 PS 组成。

2-12 什么是向量中断?什么是中断向量?

答:向量中断是指当中断发生时,由中断源自己引导处理机进入中断服务程序的中断过程。中断向量就是存储该类型中断服务例行程序的入口地址和处理器状态字的存储单元。

2-18 Linux系统的中断处理为什么要分为上半部和下半部?

答:操作系统的中断机制实现了I/O设备与CPU以及多进程之间的同时执行,大大提高了系统效率。

操作系统的中断处理程序比较复杂,而且在系统一级处理时不允许打断。如何提高中断处理的效率?如何解决处理时间短的要求和处理事务复杂性的矛盾?Linux提出了一个很好的解决办法。Linux系统将中断处理程序分为两部分,将中断响应后必须立即处理的工作即刻执行(而且其执行时必须关中断),而将更多的处理工作向后推迟执行。即将中断处理程序分为上半部(tophalf)和下半部(bottom half)。Linux系统将中断处理程序分为上半部和下半部的目的是为了缩短关中断的时间,提高系统的处理能力。

第三章 习题及解答

3-3 处理应用程序分为哪几个步骤?这些步骤之间有什么关系?

答:处理应用程序分为四个步骤:编辑,编译,连接和运行。这些步骤是相互关联、顺序执行的。具体表现为:

每个步骤处理的结果产生下一个步骤所需要的文件;

每一个步骤能否正确地执行,依赖于前一个步骤是否成功地完成。

3-5 用户与操作系统的接口是什么?一个分时系统提供什么接口?一个批处理系统又提供什么接口?

答:用户与操作系统的接口是操作系统提供给用户与计算机打交道的外部机制。一个分时系统提供的接口有系统功能调用和键盘操作命令。一个批处理系统提供的接口有系统功能调用和作业控制语言。

3-8 什么是系统调用?对操作系统的服务请求与一般的子程序调用有什么区别?

答:系统调用是用户在程序一级请求操作系统服务的一种手段。编程人员利用系统调用,在源程序一级动态请求和释放系统资源,调用系统中已有的系统功能来完成那些与机器硬件部分相关的工作以及控制程序的执行等。因此,系统调用像一个黑箱子那样,对用户屏蔽了操作系统的具体动作而只提供有关的功能。

系统调用与一般过程调用的主要区别如下:(1)程序的性质不同。系统调用服务例程是操作系统程序的一部分,它在核态下执行。而用户子程序是用户程序的一部分,它在用户态下执行。(2)调用方式不同。系统调用是通过陷入到操作系统内核来实现的,调用它们需要中断处理机制来提供系统服务。而子程序调用是在用户程序中直接调用。

3-10 简述系统调用的执行过程。

答:系统调用命令的具体格式因系统而异,但由用户程序进入系统调用的步骤及执行过程大体相同。其执行过程如下:

1.保护用户程序的现场信息,同时把系统调用命令的编号等参数放入指定的存储单元;

2.根据系统调用命令的编号查找系统调用入口表,找到相应系统功能调用子程序的入口地址;

3.转到该子程序执行,当系统调用命令执行完毕,相应的结果通常返回给参数,这些参数放在指定的存储单元里;

4.系统调用命令执行完毕后恢复用户程序执行的现场信息,同时把系统调用命令的返回参数或参数区首址放入指定的寄存器中,供用户程序使用。

3-12 在Linux系统中,增加一个新的系统调用需要做哪些工作?

答:在Linux系统中,增加一个新的系统调用需要做的工作包括如下几个方面。

(1) 编写一个新增加的功能的服务例程。编写新增的服务例程,并加到内核中去,即在/usr/src/linux/kernel/sys.c文件中增加一个新的函数。

(2) 增加一个新的系统调用号。在linux中,每个系统调用被赋予一个唯一的系统调用号。找到linux中定义系统调用号定义的文件 (在include/asm-i386/unistd.h头文件中)。在此文件中按其规定的格式添加一项。

(3) 在系统调用表中登记新的系统调用号以及对应的服务例程。系统调用表记录了内核中所有已注册过的系统调用,它是系统调用的跳转表,实际上是一个函数指针数组,表中依次保存所有系统调用的函数指针。找到linux中的系统调用表 (Linux系统调用表保存在arch/i386/kernel/下的entry.S中)。在此文件中按其规定的格式增加一个新的系统调用号以及对应的服务例程。

(4) 新增加的服务例程要为Linux系统接受,必须重新编译内核,生成新的包含新增服务例程的内核。