操作系统全家桶:传送门
一、操作系统引述:https://blog.csdn.net/diviner_s/article/details/108829327
二、处理器管理:https://blog.csdn.net/diviner_s/article/details/108940809
三、存储器管理:https://blog.csdn.net/diviner_s/article/details/112245241
四、设备管理:https://blog.csdn.net/diviner_s/article/details/112250905
五、文件管理:https://blog.csdn.net/diviner_s/article/details/112253441
六、用户接口:https://blog.csdn.net/diviner_s/article/details/112255959
6.1 用户接口
一、用户接口的发展
- 早期操作系统对外提供的接口很简陋,功能也单一,包括脱机的作业控制语言(或命令)和联机的键盘操作命令。
- 在分时系统出现后 ,不仅为程序员提供编程服务的系统调用,而且提供功能强大的命令行接口。在一维空间运行。
- 图形用户接口(常称做图形界面),它是二维空间界面。
- 现在有不少游戏软件在三维硬件显示卡的支持下实现三维动画效果。
二、用户接口类型
- 1、程序接口(系统调用接口)
- 2、命令接口(操作接口)
- 1)联机用户接口(交互式命令接口)
命令方式:命令行方式、批处理方式
图形界面方式 - 2)脱机用户接口(批处理命令接口)
作业控制语言/命令
作业控制说明书
- 1)联机用户接口(交互式命令接口)
三、程序接口
- 1、系统调用:是操作系统提供的、系统与用户程序之间的接口,是操作系统提供给程序员的接口,一般位于操作系统核心的最高层。
- 从感觉上系统调用类似于过程调用,都由程序代码构成,使用方式相同 — 调用时传送参数。
- 两者有实质差别:过程调用只在用户态下运行,不能进入核心态;而系统调用可以实现从用户态到核心态的转变。
- 系统调用可分为5个类别:进程控制、文件管理、设备管理、信息维护和通信。
2、库函数:它们本身并不属于操作系统的内核部分,而且运行在用户态下。库函数涉及文件管理、状态信息、文件修改、程序设计语言的支持、程序装入和执行、通信等方面内容。
- UNIX/Linux系统中系统调用与库函数之间的关系:
3、系统调用使用方式:在UNIX/Linux系统中,系统调用和库函数都是以C函数的形式提供给用户的,它有类型、名称、参数,并且要标明相应的文件包含。open系统调用可以打开一个指定文件,其函数原型说明如下:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *path, int oflags);
不同的系统调用所需要的头文件(又称前导文件)是不同的。下例程序利用fork( )创建子进程,利用getpid( )和getppid( )分别获得进程的PID和父进程PID,使用sleep( )将相关进程挂起几秒钟。
#include <unistd.h>
#include <sys/types.h>
#include <stdio.h>
#include <errno.h>
int main(int argc,char **argv)
{ pid_t pid,old_ppid,new_ppid;
pid_t child,parent;
parent=getpid(); /*获得本进程的PID*/
if((child=fork())<0){
fprintf(stderr,"%s:fork of child failed:%s\n",argv[0],strerror(errno));
exit(1); }
else if(child==0){ /*此时是子进程被调度运行*/
old_ppid=getppid();
sleep(2);
new_ppid=getppid(); }
else {
sleep(1);
exit(0); } /*父进程退出*/
/*下面仅子进程运行*/
printf("Original parent:%d\n",parent);
printf("Child:%d\n",getpid());
printf("Child's old ppid:%d\n",old_ppid);
printf("Child's new ppid:%d\n",new_ppid);
exit(0);
}
4、系统调用的处理方式:
- 1、一般处理方式:不同版本的UNIX系统提供的系统调用的数目不同,实现它们的汇编代码形式通常都以trap指令开头(在Linux系统中是通过中断指令“INT 0X80”实现的)
trap指令的一般格式是:
trap xx
参数1
参数2
……
当CPU执行到trap指令时,产生陷入事件。所有的陷入事件有一个总的服务程序,即陷入总控程序。系统调用处理函数根据trap指令后面的系统调用号去查系统调用入口表,然后转入各个具体的系统调用处理程序。 - 系统调用入口表sysent结构:
- 2、系统调用实现过程:
四、命令接口
1、命令的一般使用方式
- 1)常用shell种类
Bourne shell(简写sh)
C shell(简写csh)
Bourne Again Shell(简写bash)
Korn shell(简写ksh) - 2)shell命令的一般格式
命令名 [选项] [参数1] [参数2] …
例如: cp –f file1.c myfile.c - 3)使用shell命令时,应注意:
- 命令名必须是小写的英文字母。
- 一般格式中由方括号括起来的部分是可选的。
- 选项是对命令的特别定义,以“-”开始,多个选项可用“-”连起来。
- 参数提供命令运行的信息或命令执行过程中使用的文件名。
- 如果命令行中没有提供参数,命令将从标准输入文件(即键盘)上接收数据,输出结果显示在标准输出文件(即显示器)上,而错误信息则显示在标准错误输出文件(即显示器)上。
- 命令在正常执行后返回一个0值,表示执行成功;而非0值表示失败。
- UNIX/Linux操作系统的联机帮助对每个命令的准确语法都做了说明。
2、命令解释程序
- 1)实现方式:命令解释程序的基本功能是接收用户输入的命令,然后解释并且执行。它不是操作系统的内核部分。
- 实现命令的常见方式:
- ① 内置方式(内部命令):命令解释程序本身就包含执行该命令的代码。
- ② 外置方式(外部命令):每条外置命令都对应专门的系统程序,通常以可执行文件的形式存放在磁盘上。外置命令是通过创建子进程,并在子进程的空间中执行的。
- 2)shell程序设计:shell不仅作为命令解释程序出现,它还是一种高级程序设计语言。
- 【例】由三条简单命令组成的shell程序(文件名为ex1)
$ cat ex1
date
pwd
cd … - 【例】带有控制结构的shell程序(文件名为ex2)
- 【例】由三条简单命令组成的shell程序(文件名为ex1)
$ cat ex2
#!/bin/bash
# If no arguments, then listing the current directory.
# Otherwise, listing each subdirectory.
if test $# = 0 then ls .
else
for i
do ls -l $i | grep '^d'
done
fi.
3、系统程序:又称标准程序,或者使用程序。是为用户提供的一些公共操作等,常用的有编辑程序、编译程序、调试程序、等等。
- 系统程序是可以直接使用的。
- 系统程序大致可包括以下几类:
文件管理类
状态信息类
程序设计语言支持类
程序的装入与执行支持类
通信类
其他软件工具类
4、批处理操作方式:
- 系统规定了一种特殊的文件,称为批处理文件,例如扩展名为“.BAT”的文件。
- 首先编辑批处理文件,将需要重复执行或连续执行的若干命令按要求顺序写入批处理文件,然后保存。
- 操作系统还支持使用特殊的控制命令,编辑和在执行批处理文件时可以使用参数,提高执行处理能力。
- 需要使用时执行批处理文件就可以。
- 批处理文件一次建立、可多次执行,方便用户操作,节省时间,减少出错。
5、脱机命令接口:
- 1)“作业”与“作业步”
- 2)“作业控制语言”与“作业控制命令”
- 3)作业控制说明书
- 4)将“作业控制说明书”和程序、数据等内容一起输入计算机,然后就可以按照作业控制说明书的要求完成作业。
- 5)用于批处理系统
五、图形用户界面
- 菜单
- 图标
- 窗口
- 对话框
- 按钮
- ……
6.2 其他特殊操作系统
6.2.1 嵌入式操作系统
一、嵌入式操作系统概述
- 嵌入式系统是以应用为中心、以计算机技术为基础的,其软、硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。
1、嵌入式软件系统的体系结构
2、基本功能
- 嵌入式内核是操作系统的核心基础和必备部分,其他部分要根据嵌入式系统的需要来确定。
- 最大特点就是可定制性,即能够提供对内核的配置或裁剪功能,可以根据应用需要有选择地提供或不提供某些功能,以减少系统开销。
3、发展历史
- 1)无操作系统阶段:主要特点是系统结构和功能相对单一,处理效率较低,存储容量较小,几乎没有用户接口。
- 2)简单操作系统阶段:主要特点是出现了大量高可靠、低功耗的嵌入式CPU(如Power PC等),并得到迅速发展。
- 3)实时操作系统阶段:主要特点是操作系统的实时性得到了很大改善,已经能够运行在各种不同类型的微处理器上,具有高度的模块化和扩展性。
- 4)面向Internet阶段:主要特点是与网络密切结合,大大方便用户使用,系统功能更强,提高安全保护措施。
4、操作系统选择
- 硬件平台的选择中最重要的是处理器选择,其主要因素包括:处理性能、技术指标、功耗、软件支持等。
- 软件平台选择的关键点是操作系统的选择。
- 需考虑的关键点有:所提供的开发工具(如编译器、调试器等)、可移植性、内存要求、可裁剪性、是否提供* 硬件驱动程序、实时性能等。当然,还要选择合适的编程语言以及集成开发环境。
5、嵌入式系统应用开发流程
二、嵌入式操作系统内核及其实现
1、任务管理与调度
- 1)任务:任务是一个独立的执行线程,可以与其他的并发任务竞争处理器时间。
- 2)构建任务模型:在任务模型中,管理用户程序时,是把整个应用看成是一个进程;进行处理时,则将该应用划分为多个任务。
- 3)任务的组成:① 代码;② 数据;③ 堆栈
- 4)任务管理:可以通过创建、删除、挂起、解挂、设置优先级等操作对任务进行管理。任务是动态实体,可以处于以下合法状态之一:睡眠、就绪、运行、等待。
- 5)任务的属性:与任务相关的参数是任务属性。
包括任务优先级(Priority)、周期(Period)、计算时间(Computation Time)、就绪时间(Ready Time),截止时间(Deadline)等。- 截止时间分为:
硬截止时间(Hard Deadline)
软截止时间(Soft Deadline)
- 截止时间分为:
- 6)任务的调度算法:多采用基于静态优先级的可抢占式调度。
2、中断与时间管理
- 1)中断:在大多数嵌入式处理器体系结构中都提供中断机制。
- 2)时间管理模块:时间管理模块用一个统一的方式来解决,提供定时中断,实现延时和超时控制。
- 3)中断管理功能
- 4)时间管理功能
提供定时中断,即时钟节拍;
提供日历时间,负责与时间相关的任务管理工作;
提供软定时器的管理功能。
3、任务的同步和通信
- 嵌入式系统中使用任务原语实现任务的同步和通信。
- 1)信号量:在实时操作系统中,信号量可以是一个二值信号量或一个计数信号量。
- 2)事件:在嵌入式实时内核中,事件是一种表明预先定义的系统状况已经发生的机制。一个或多个事件构成一个事件集。
- 3)消息:任务间的通信方式可分为直接通信和间接通信。直接通信方式是指在通信过程中,双方必须明确地知道彼此的存在。间接通信方式是指在通信过程中,通信双方不需要指出消息的来源或去向,而通过中间机制进行发送和接收,即邮箱和消息队列。
- 4)管道:嵌入式系统的管道提供一个简单数据流,当管道空时,阻塞读的任务;当管道为满时,阻塞写的任务。
- 5)异步信号:异步信号机制也称软中断机制,异步信号又称软中断信号。需要处理异步信号的任务由两部分组成:一个是与异步信号无关的任务主体,另一个是ASR(异步信号服务例程)。对异步信号的主要操作包括:“安装异步信号处理例程”和“发送异步信号到任务”。
- 6)共享内存:实现任务间通信最常用的方法是使用共享数据结构,尤其是当所有任务都在同一地址空间的条件下。
- 7)任务间的耦合度:在嵌入式多任务系统中,任务间的耦合程度是不一样的。
- 8)任务优先级反转:高优先级任务需要等待低优先级任务释放资源的现象,称作优先级反转(Priority Inversion)。
4、内存管理
- 嵌入式系统对内存管理的普遍要求是最小的碎片、最小的管理负载和确定的分配时间。通常不采用虚拟存储管理,而采用静态内存分配和动态内存分配。
- 1)考虑因素:内存管理方式简捷,一般不使用虚拟存储技术。内存保护可以有两种方式。一种是平面内存模式;一种是内存保护方式,可以使用防止地址越界和防止操作越权手段。
- 2)内存管理模式:① 静态分配模式 ② 动态分配模式
- 3)存储区管理:常用的嵌入式内存管理方式有定长存储区和可变长存储区两种。对分区的操作:创建/删除分区、获得/释放内存块、获取分区ID、获取当前创建的分区数、获取当前所有分区的ID、获取分区信息。
- 4)内存保护:一般嵌入式系统采用内存管理单元MMU提供的内存保护功能。其保护方式是:如果一个MMU处在嵌入式系统中,则物理地址按页寻址;每个内存页有一组相关的属性,包括:该页是否含有代码或数据;该页是否可读、可写、可执行;该页的CPU访问模式是特权指令模式,还是非特权指令模式。
5、I/O管理
- 通常,设计一个嵌入式系统的目的就是专门用来控制某些设备,并适应该设备的特殊需求。
- 嵌入式I/O系统主要由I/O设备、设备驱动程序、I/O子系统组成。
- I/O设备分为字符设备和块设备。
每个I/O设备都有一个负责完成简单读/写操作的驱动程序,并为用户程序提供一个有关自身属性的I/O应用编程接口。 - I/O子系统定义一组标准的I/O操作函数,所有I/O设备驱动程序都支持这个函数集合。
三、嵌入式操作系统实例简介 —μCLinux
1、μCLinux系统架构:
- μCLinux操作系统主要由三个基本部分组成:引导程序、μCLinux内核(由内存管理、进程管理和中断处理等构成)和文件系统。
2、内存管理:它无法使用虚拟存储管理技术及其相应的内存保护技术。μCLinux采用实存管理策略,采用分页存储管理技术。因为系统不含MMU,所以无法使用磁盘交换空间。
3、文件系统:μCLinux系统多采用Romfs文件系统,该文件系统相对简单、占用空间较少。Romfs是只读的文件系统,禁止写操作。
4、多进程管理:μCLinux的进程管理都通过vfork实现。
5、μCLinux本身并不支持特定的实时性应用。通过相应的修改,可以提供基于内核空间和用户空间的硬实时和软实时的系统调用(如RT-Linux或RTAI系统)。
6.2.2 分布式操作系统
一、分布式系统概述
- 1、分布式系统是多个处理机通过通信线路互连而构成的松散耦合系统,它对用户是透明的。
- 2、分布式系统的特征:①分布性;②自治性;③并行性;④全局性
- 3、分布式系统的优点:(1)资源共享 (2)加快计算速度
(3)可靠性高 (4)方便快捷的通信 - 4、分布式系统的缺点:主要是可用软件不足,系统软件、编程语言、应用程序以及开发工具相对很少;还存在通信网络饱和或信息丢失以及网络安全问题,方便的数据共享同时意味着机密数据容易被窃取。
二、分布式操作系统概述
1、基本说明:
- 分布式操作系统是配置在分布式系统上的共用操作系统。用户利用透明的方式访问系统内的远程资源,即用户访问远程资源的方式和访问本地资源相同。
2、分布式操作系统的基本功能:
- ① 进程管理
- ② 通信管理
- ③ 资源管理
3、4种多机系统的比较
- 1)多处理器系统(Multiprocessor Systems)
- 每个节点只有一个CPU,所有外部设备都是共享的
- 共享同一个内存,彼此紧密地耦合在一起
- 整个系统共享同一操作系统
- 2)多计算机系统(Multicomputer Systems)
每个节点除CPU外,还有本地内存和网卡,有时也有用于分页的硬盘
多计算机的各个节点运行同样的操作系统
整个系统共享同一个文件系统,集中式管理方式 - 3)网络系统(Network Systems)
每个节点是一个完整的计算机,不仅有CPU、内存,还有完整的一组设备。各节点上有本地操作系统,其上加上网络软件,构成网络操作系统 - 4)分布式系统(Distributed Systems)
分布式系统有很多特征与网络系统相同。分布式系统是虚拟的单机系统,通常各节点上运行统一的操作系统,利用消息机制实现通信,具备数据迁移、计算迁移和进程迁移等功能。
4、分布式系统的设计目标
- 1)透明性:分布式系统的一个重要特征是系统的分布性对用户是完全透明的。可在两个层次上实现透明性:①对用户隐藏分布性;②系统对程序透明。分布式系统不同种类的透明性:
- 2)灵活性:分布式操作系统的内核模型有两种:单内核模型和微内核模型。
- 单内核模型基本上是在现有的集中式操作系统上附加一些网络设施,再集成一些远程服务。
- 微内核模型是一种新式结构。微内核是操作系统的极小核心。它将各种操作系统共同需要的核心功能提炼出来,形成微内核的基本功能。所有其他的系统服务都通过微内核之外的服务器实现。
- 分布式操作系统的两种内核模型:
- 3)可靠性:可靠性涉及的方面包括可用性、安全性和容错性。
① 可用性表示系统可以正常工作的时间比例
② 安全性指文件和其他资源必须受到保护,防止未授权使用。
③ 容错性指在一定限度内对故障的容忍程度。 - 4)高性能:性能指标包括多个方面,如执行速度、响应时间、吞吐量、系统利用率、网络通信能力,等等。通信是影响分布式系统性能的基本问题
- 5)可扩展性:扩展可分为水平扩展和垂直扩展。水平扩展指添加或移去客户工作站,对系统性能影响很小;垂直扩展指移植到更大的或更快的服务器或多服务器上。
三、分布式操作系统的实现
1、通信问题
- 在分布式系统中没有共享内存,通过传递消息实现通信。本质上,协议就是规定通信如何进行的一系列规则,在广域分布式系统中这些协议划分为多个层次,每一层都有自己的目标和规则。
- 基于局域网的系统通常采用客户-服务器模型。针对客户-服务器模型中通信要做大量输入/输出的缺陷,提供了远程过程调用(RPC)方法。
2、进程管理
1)进程迁移
① 数据迁移(Data Migration):整体传送是把文件整体地从节点B传送到节点A。部分传送仅把用户当前需要的部分文件从节点B传送到节点A。
② 计算迁移(Computation Migration):在某些情况下,传送计算比传送数据更有效。
③ 进程迁移(Process Migration):进程迁移是计算迁移的逻辑延伸。当一个进程被提交执行时,并不一定始终都在同一节点上运行,整个进程(或者其中一部分)可能在不同的节点上执行。采用进程迁移方式可使各节点的工作负载均衡;加速计算,减少整个进程的周转时间;提高硬件适宜性和软件适宜性;提高远程大量数据访问的效率。2)同步问题
时钟同步:系统中的时钟并不需要绝对同步
事件排序:对系统中所发生的事件进行排序
前趋关系:若A和B是两个相关事件,并且A在B之前发生,则有前趋关系A→B。
并发事件:如果两个事件A和B彼此没有前趋关系,即A不先于B,B也不先于A,则称这两个事件为并发事件。唯一重要的是,任何关心两个并发事件的进程都认可某个次序。
逻辑时钟:表示在进程内部各事件发生先后顺序的惟一记数值。
一个事件的时间戳就是该事件的逻辑时钟值。3)互斥问题
① 集中式算法:基本思想是,在系统的所有活动进程中选择一个进程作为协调者(即运行在最高网址的机器上的某个进程),由协调者负责对临界区进行管理。- 优点:能够实现互斥,不会出现饥饿现象,且易于实现
- 缺点:
① 协调者是单点失效,会使整个系统瘫痪
② 大型系统中单一的协调者会成为系统性能的瓶颈
② 分布式算法:其思想是,进程想进入临界区时,就建立并发送消息;得到许可,就可以进入临界区。退出临界区时,发送OK消息,并从队列中删除这些进程。
- 优点:弥补集中式算法的不足
- 缺点:比集中式算法更慢、更复杂,代价也更高
③ 令牌环算法:令牌本身是一种特定格式的报文。进程持有令牌,便能进入临界区。能够正确地实现进程互斥,而且不会出现饥饿现象;但也存在令牌丢失和进程失效两个问题。
3、死锁问题
- 在分布式系统中从不使用死锁避免方法,也很难实现预防。所以普遍使用死锁检测和恢复方法。
- 分布式系统采用的死锁检测算法的基本原理与集中式系统相同。
4、文件系统
- 1)文件传送:文件传送分成上传/下载模式和远程存取模式两种类型。
- 2)目录结构:层次文件系统
设计分布式文件系统的一个关键问题是,所有机器(和进程)的目录层次结构视图是否完全相同。与之密切相关的一个问题是,是否有一个全局根目录,即所有机器都以它作为根。 - 3)命名透明性:
透明性有两种形式 — 位置透明性和位置无关性。 - 4)文件共享语义
当多个用户共享同一文件时,必须精确定义读/写语义,以免出现歧义问题。
对所有操作按绝对时间排序,返回值总是最近的一个,这种模式称做顺序一致性。
如果进程A修改了某个文件,当A关闭该文件时,它把副本发送给服务器,以后进程执行读操作时就得到新值。这种语义规则称做会话语义。
5、中间件
1)中间件的概念
中间件用来解决分布系统的异构问题。中间件是位于硬件、操作系统等平台和应用之间的通用服务,这些服务有标准的程序接口(API)和协议。
中间件是一种独立的系统软件或服务程序,可以帮助分布式应用软件在不同的技术之间共享资源,它位于客户端/服务器的操作系统之上,管理计算机资源和网络通信。
其主要目的是实现应用与平台的无关性。满足大量应用的需要、运行于多种硬件和操作系统平台、支持分布计算、支持标准的协议、支持标准的接口,这些都是任何一类中间件所具备的特点。
中间件位于客户机服务器的操作系统之上,管理计算机资源和网络通信。
中间件是一类软件,而非一种软件
中间件不仅仅实现互连,还要实现应用之间的互操作
中间件是基于分布式处理的软件,最突出的特点是其网络通信功能
中间件使应用程序开发变得更容易,通过提供统一的接口,隐藏异构系统和分布式系统下低级别编程的复杂度2)中间件在分布式系统中的位置
3)中间件结构:中间件在客户–服务器结构中的作用示意图
4)几种主要的中间件
- 数据库访问中间件:数据库访问中间件通过一个抽象层访问数据库,典型技术如Windows平台的ODBC和Java平台的JDBC等。
- 远程过程调用(RPC):为客户机/服务器分布计算提供支持。
- 面向消息中间件(MOM):向消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并可基于数据通信进行分布系统的集成。
- 分布式对象中间件:如Sun的RMI/EJB、Microsoft的DCOM等。
- 事务中间件:完成事务管理、负载平衡、失效恢复等任务。