极简操作系统总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DanielDingshengli/article/details/82817003

极简操作系统总结

概览

操作系统本身也是软件(汇编/c),用来管理计算机硬件资源,提供通用服务给计算机程序。
操作系统的基本任务包括:文件管理,内存管理,进程管理,输入输出处理和包括硬盘和打印机等的外围设备的控制。

内存管理

1.记录内存中被使用的部分是被谁使用了,还有哪些部分没有被使用
2.操作系统决定哪个进程什么时候能得到多少内存空间
3.分配内存空间给需要的进程
4.当一个进程结束或者被终止了,腾出分配给它的内存空间

处理器管理

1.跟踪处理器(CPU),记录进程状态
2.给进程分配处理器
3.回收处理器

设备管理

1.(输入输出控制器)跟踪所有设备
2.决定哪个进程什么时候以及多久享用设备
3.高效分配设备
4.回收设备

文件管理

1.记录信息、位置和使用情况
2.决定让谁得到文件资源
3.分配文件资源
4.回收文件资源

其他

1.安全性 依靠密码技术预防访问不被授权访问的程序和数据
2.控制系统性能 记录请求和响应之间的延迟
3.作业统计 记录不同的作业和用户对时间和资源的使用
4. 错误发现帮助 Production of dumps, traces, error messages, and other debugging and error detecting aids.
5. 协调其他软件和用户 为不同的电脑系统用户协调和分配编译器、解释器和汇编器

操作系统类型

批处理操作系统

1.用户和作业之间没有交互行为
2.CPU经常闲置,因为机械的输入输出设备比CPU慢
3.难以提供需要的优先级

分时操作系统

1.快速响应
2.避免软件复制
3.减少CPU空闲时间
缺点:
1.稳定性
2.用户程序和数据的安全和完整
3.数据通信的问题

分布式操作系统

分布式系统使用多个中央处理器来服务多个实时应用程序和多个用户。数据处理作业也相应地分布在处理器中。
1.通过资源分享设施 一个站点的用户可以享用另一个站点的资源
2.通过电子邮件加速数据交换
3.如果一个站点失效了,其余的站点继续运作
4.更好地服务客户
5.减少主机负荷
6.减少程序处理的延迟

网络操作系统

网络操作系统运行在服务器上,并为服务器提供管理数据、用户、组、安全、应用程序和其他网络功能的能力。
1.集中式服务器非常稳定
2.安全性是可以管理的
3.对新技术和硬件的升级可以很容易地集成到系统中
4.从不同的位置和系统类型可以远程访问服务器
缺点:
1.服务器的购买和运行都比较贵
2.大部分操作依靠一个中心
3.需要定期维护和更新

实时操作系统

当一个处理器的操作有严格的时间要求,或者数据流和实时系统可以作为一个专用应用程序的控制设备时,就会使用实时系统。一个实时操作系统必须有明确的定义,固定的时间约束。通常用于科学实验,工业控制和交通控制。

服务

操作系统提供执行的环境给程序,提供执行程序的服务给用户

程序执行

1.加载程序到内存
2.执行程序
3.处理程序结果
4.提供进程同步机制
5.提供进程通信机制
6.提供死锁处理机制

输入输出操作

一个输入输出子系统包括输入输出设备和相应的驱动软件。驱动隐藏了硬件设备的独特性。
1.输入输出操作是对文件的读写或者具体的设备的读写
2.操作系统提供对需要的设备的使用权

文件系统处理

文件系统通常被组织到目录中,以方便导航和使用。
1.读写文件的程序
2.许可程序对文件进行操作
3.只读、读写、不可读等等的许可权限
4.提供接口让用户创建或者删除文件
5.提供接口让用户创建或者删除目录
6.提供接口让用户创建或者删除文件备份

通信

分布式系统是一个不共享内存、外围设备或时钟的处理器的集合,系统管理所有进程之间的通信。多个进程通过网络中的通信线路相互通信。
1.交换两个进程需要的数据
2.进程们可以在同一台或不同台电脑上,但是它们要通过计算机网络通信
3.通信有两种方式,分别是共享存储和消息传递

错误处理

错误可以在任何时间和任何地点发生。在CPU、输入/输出设备或内存硬件中可能会出现错误。
1.操作系统持续地检查可能的错误
2.确保正确如一地运算

资源管理

多用户和多任务环境中,诸如主存、CPU周期和文件存储等资源将被分配给每个用户或作业
1.操作系统使用调度程序管理各种资源
2.CPU调度算法用于更好地利用CPU

保护

考虑到一个计算机系统拥有多个用户和多个并发执行的进程,必须保护不同的进程,避免彼此的干扰。
1.确保所有的系统资源都是能控制的
2.确保外部的输入/输出设备不受无效访问的影响
3.操作系统通过密码为每个用户提供身份验证功能

性能

批处理

在程序开始之前,把程序和数据收集在一起。批处理活动如下:
在这里插入图片描述

多任务

当一个任务执行时,在完成或者需要执行输入输出前它通常只执行一个很短的时间。
在这里插入图片描述

多程序

当两个或多个程序同时驻留在内存中时共享处理器
在这里插入图片描述
需要CPU调度和内存管理

实时系统

1.操作系统通常从传感器数据中读取并做出反应
2.保证在固定的时间间隔中做出正确的反应

多任务缓冲处理(Spooling)

当设备具有不同的数据访问率时,处理输入/输出设备数据 。
在这里插入图片描述

进程

概念

进程是一个正在执行的程序。是系统进行工作的基本单元。
下图是一个进程在内存中布局的简化版
在这里插入图片描述
1.Stack 栈
栈包含临时的数据,诸如方法或者函数的参数,返回地址,局部变量
2.Heap 堆
进程运行时动态分配的内存空间
3.Text 文本
程序计数器的值和处理器中寄存器的内容
4.Data 数据
包含全局变量和静止变量

程序

一个计算机程序是计算机用来执行具体任务的一组指令。进程是程序的动态实例。
一组计算机程序,库还有相关数据组成软件。

进程生命周期

通常进程有5个状态
1.开始
进程第一次被创建或开始时的初始状态
2.准备
进程准备被分派到一个CPU中。
3.运行
被操作系统中的调度程序分派到CPU中去执行
4.等待
如果需要等待像用户输入,打开的文件之类的资源,进程进等待状态
5.终止/退出
一旦进程结束执行,或者被操作系统终止,它会转移到终止状态,等待被内存清理
在这里插入图片描述

进程控制块

进程控制块是操作系统用来维护每一个进程设立的数据结构。PCB是由一个整数进程ID标识的(PID)。
1.Process State 进程状态
2.Process privileges 等级
允许/不允许接触系统资源
3.进程ID
每一个进程的特殊标志
4.Pointer 指针
指向父进程
5.Program Counter 程序计数器
指向进程要执行的下一条指令的内存地址
6.CPU registers
用以执行运行状态的各种CPU寄存器值
7.CPU Scheduling Information CPU调度信息
调度流程所需的进程优先级和其他调度信息
8.Memory management information 内存管理信息
包括页表、内存限制、段表的信息,取决于操作系统使用的内存
9.Accounting information 统计信息
包括用于执行的CPU数量、时间限制、执行ID
10.IO status information 输入输出状态信息
分配给进程的输入/输出设备列表
在这里插入图片描述

进程调度

进程调度是进程管理器处理从CPU中删除运行的进程,以及根据特定策略选择另一个进程的过程。

进程调度队列

操作系统维护所有在进程调度队列中的PCB。
操作系统为每一个进程状态维护一个单独的队列,同一个状态下的所有进程的PCB都被放置在同一个队列中。
当进程的状态发生改变时,它的PCB从当前队列中脱离出来,并移动到它的新状态队列中。
在这里插入图片描述
run queues只能有一个cpu内核只能进入一个,合并在cpu中。

调度程序

1.长期调度程序
也被成为作业调度程序。长期调度程序决定哪个程序被系统处理,它从队列中选择并加载进程到内存中。
作业调度程序的主要目标是提供一种平衡的作业组合,如输入/输出和处理器绑定。它还控制多程序设计的程度。如果多程序设计的程度是稳定的,那么进程创建的平均速率必须等于离开系统的进程的平均离开速率。
2.短期调度程序
也被称为CPU调度程序。它的主要目标是根据所选的标准来提高系统性能。它是对进程就绪状态到运行状态的改变。CPU调度程序在准备执行的进程中选择一个进程,并将CPU分配给其中一个进程。
决定下一个被执行的进程,并分配CPU给他。
3.中期调度程序
从内存中清除进程,减少多程序设计的程度。
一个运行的进程可能因为需要输入输出请求而被挂起。
将挂起的进程以处到二级存储器中为其他进程腾出内存空间,这个过程叫做交换,它对于改善进程混乱是必要的。
在这里插入图片描述

上下文切换

上下文切换是在PCB中存储和恢复CPU的状态或者上下文,以便一个进程可以下次可以从相同的地方重新开始执行。这个技术让多进程共享一个CPU。
当调度程序将CPU从执行一个进程切换到执行另一个进程时,当前运行的进程的状态被存储到PCB中。在此之后,接下来运行的进程的状态是从它自己的PCB上加载的,用于设置PC、寄存器等。在这一点上,第二个进程可以开始执行。在这里插入图片描述
由于寄存器和内存状态必须被保存和恢复,上下文切换的计算量非常大。为了避免上下文切换时间过长,一些硬件系统使用两个或更多的处理器寄存器。
当以个进程被切换,下面的信息是需要被存储的:
在这里插入图片描述

调度算法

调度算法分有优先级和没有优先级的。没有优先级的算法中一旦有一个进程进入运行状态,它在分配给它的时间用完之前不会被挤掉,但是有优先级的算法中,低级别的进程在运行时随时会被高优先级的挤掉。

First Come First Serve 先进先服务

1.实现是基于FIFO队列的
2.平均等待时间很长导致性能差
在这里插入图片描述

Shortest Job Next 最短作业优先

1.非抢占式的优先调度算法
2.等待时间最少
3.在需要提前知道CPU运行时间的批处理系统中容易实施
4.在不能提前知道CPU运行时间的交互式系统中不可能实施
5.处理器需要提前知道进程要占用多长时间
在这里插入图片描述

优先级调度算法

1.在批处理系统中最普遍的非抢占式1算法
2.每一个进程分配一个优先级。高优先级的先执行
3.同一优先级的进程先进先服务
4. 优先级可以取决于需要的内存、时间或者其他任何资源
在这里插入图片描述

最短剩余时间优先

1.是最短时间优先的抢占式版本
2.处理器被分配给最接近完成的进程,但它可能会被更短时间的进程抢占
3.不可能在交互式系统中实现
4.经常用于批处理环境中

循环调度算法

1.抢占式
2.给每一个进程提供一个固定时长的时间片去执行
3.一点一个进程执行完了一个时间片,它会被其他进程抢占
4.被抢占的进程需要用到上下文切换
在这里插入图片描述

多级别队列调度

多级别队列调度算法不是一个独立的调度算法,是其他已存算法的组合
1.用多个队列维护具有相同特征的进程
2.每一个队列可以有自己的调度算法
3.有先级分配给每一个队列
例如,cpu限制的作业可以在一个队列中调度,所有的i/o绑定作业在另一个队列。然后进程调度程序交替地从每个队列中选择作业,并根据分配给队列的算法将它们分配给CPU。

多线程

定义

线程是进程中的执行流,有自己的程序计数器跟踪下一条被执行的指令,自己的寄存器存放工作变量,有自己的堆栈包含执行历史。
线程与它对等的线程共享少量的信息,比如代码段、数据段和打开的文件。当一个线程改变一个代码段内存项时,所有其他线程都能看到。
每个线程都属于一个进程,并且没有线程可以在进程之外存在。在这里插入图片描述
在这里插入图片描述

线程优点

1.最小化了上下文切换时间
2.给进程提供了并发能力
3.高效率通信
4.以更大的规模和效率使用多处理器架构

用户级线程

线程管理内核不关心线程的存在。线程库包含了创建和销毁线程的代码,用于线程间传递消息和数据的代码,还有调度线程执行要保存线程上下文的代码。
在这里插入图片描述

内核级线程

线程管理有内核来做。在应用程序代码中没有线程广利代码。内核线程直接由操作系统支持。
任何应用程序都可以被编程为多线程的。应用程序中的所有线程都在单个进程中得到支持。
内核为整个过程维护上下文信息,并为流程中的个体线程维护上下文信息。
与用户线程相比,内核线程的创建和管理通常要慢一些。
优势:
1.内核可以同时调度来自同一进程的多个线程
2.如果一个进程中的一个线程被阻塞,内核可以调度同一进程的另一个线程
3.内核例程本身可以是多线程的
缺点:
1.内核级线程通常创建和管理速度都很慢
2.在同一个进程中,从一个线程到另一个线程的控制权转移需要一个模式来切换到内核

多线程模型

1.多对多模型
在这里插入图片描述
2.多对一模型
在这里插入图片描述
当一个线程阻塞,整个进程会被阻塞。只有一个线程可以一次访问内核,因此多个线程不能在多处理器上并行运行。如果用户级线程库在操作系统中以一种系统不支持的方式实现,那么内核线程就会使用多对一关系模式。
3.一对一模型
在这里插入图片描述

差别

在这里插入图片描述

内存管理

进程地址空间

操作系统负责在内存分配给程序时将逻辑地址映射到物理地址。
符号地址,相对地址,物理地址
在这里插入图片描述
在编译时和加载时地址绑定方案中,虚拟和物理地址是相同的。虚拟地址和物理地址在执行时地址绑定方案中是不同的。
由程序产生的所有逻辑地址的集合被称为逻辑地址空间。与这些逻辑地址相对应的所有物理地址的集合被称为物理地址空间。
从虚拟地址到物理地址的运行时映射是由内存管理单元完成的。MMU是硬件设备。
MMU地址转换机制如下:
1.基本寄存器的值被添加到由用户进程生成的每个地址,在发送到内存时将其视为偏移量。例如,如果基本寄存器值为10000,那么用户使用地址位置100将被动态地重新分配到位置10100。
2.用户程序处理虚拟地址,它从来没有看到真正的物理地址。

静态加载和动态加载

静态加载:加载时,程序和数据全被加载到内存中。
动态加载:动态例程的库被存放在磁盘上,只有在运行时才会被加载。

静态链接和动态链接

静态链接:当使用静态链接时,链接器将一个程序所需的所有其他模块组合成一个可执行程序,以避免任何运行时依赖。
动态链接:当使用动态链接时,不需要将实际的模块或库与程序链接起来,而是在编译和链接时提供对动态模块的引用。

内存和硬盘间交换

尽管性能通常会受到交换过程的影响,但它有助于并行地运行多个大进程,这就是交换的原因,也被称为内存压缩技术。

交换进程所需的时间包括移动整个进程到二级存储器中的时间和复制进程到内存的时间,还有进程重新获得主存的时间。
在这里插入图片描述

内存分配

低地址内存——操作系统占用的内存
高地址内存——用户进程放在高地址中
1.单分区分配方法
在这种类型的分配中,重新定位寄存器方案用于保护用户进程,以及防止改变操作系统代码和数据。重新定位寄存器包含最小物理地址的值,而限制寄存器包含逻辑地址的范围。每个逻辑地址必须小于限制寄存器。
2.多分区分配方法
在这种类型的分配中,主存被划分为若干个固定大小的分区,每个分区应该只包含一个进程。当一个分区是空闲的时候,从输入队列中选择一个进程,并将其加载到空闲分区中。当流程终止时,分区就可以用于另一个进程。

存储碎片

当进程被加载并从内存中删除时,空闲内存空间被分解成小块。有时,考虑到它们的小尺寸和内存块仍然没有使用,进程不能被分配到内存块中。这个问题被称为碎片化。在这里插入图片描述

计算机可以处理比系统上实际安装的数量更多的内存。这个额外的内存实际上被称为虚拟内存,它是一个用来模拟计算机RAM的硬部分。
分页是一种内存管理技术,在这种技术中,进程地址空间被分解成相同大小的区块(size is power of 2, between 512 bytes and 8192 bytes)。类似地,主存被分为小的固定大小的(物理)内存块,称为帧。帧的大小与页面的大小保持一致,以便对主存进行最佳利用,避免外部碎片化。在这里插入图片描述

地址翻译

页面地址被称为逻辑地址,由页码和偏移量表示。

Logical Address = Page number + page offset

帧地址被称为物理地址,由一个帧码和偏移量表示。

Physical Address = Frame number + page offset

页映射表被用来跟踪进程的页和物理内存中的帧的联系。
在这里插入图片描述
当系统将一个帧分配给任何页面时,它将这个逻辑地址转换为一个物理地址,并在整个程序的执行过程中创建一个条目到页表中。
当一个进程被执行时,它相应的页会被加载到任何可用的内存帧。假设在一个时间点,你的程序有8kb,但你的内存只能容纳5kb,计算机会移动闲置或不需要的内存页到二级存储器里,在需要的时候把它们加载回来。
这个过程在整个程序的执行过程中继续,在这个过程中,操作系统不断地从主存中删除空闲页面,并将它们写到次要内存中,并在程序需要时将它们返回。
优缺点:
1.分页减少了外部碎片,但仍然受到内部碎片的影响
2.页易于实施,效率高
3.页和帧大小相等,易于交换
4.页表需要额外的内存空间,堆小内存的系统不友好

段是一种内存管理技术,在这种技术中,每个作业被分成几个不同大小的区段,每个模块包含执行相关功能的片段。每个段实际上是程序的不同逻辑地址空间。
当一个进程被执行时,它的相应的段被加载到不同的内存中,尽管每个段都被加载到一个连续的可用内存块中。分段内存管理与分页非常相似,但这里的段是可变长度的,因为分页页面的大小是固定的。
操作系统为每个进程维护一个段映射表,以及一个空闲内存块的列表,以及段号、它们的大小和在主存中相应的内存位置。对于每一个片段,表存储段的起始地址和段的长度。对内存位置的引用包括标识一个线段和偏移量的值。在这里插入图片描述

虚拟内存

虚拟内存的主要优点是程序可以比物理内存大。
MMU的工作是将虚拟地址转换为物理地址。
在这里插入图片描述

需求页

一个需求分页系统非常类似于一个分页系统,它的交换位置在二级内存中,而页面只按需加载,而不是预先加载。上下文切换发生时,操作系统没有复制任何旧的程序的页面到磁盘或新项目的任何页面到内存,相反,它只是开始执行新程序后加载页面,获取程序的第一个页面引用。
当执行一个程序时,一旦程序引用了内存中没有的页,处理器会将无效内存引用当做页错误处理,然后把cpu控制权交给操作系统去获取需要的页到内存中

页面置换算法

在地址映射过程中,若在页面中发现所要访问的页面不在内存中,则产生缺页中断。当发生缺页中断时,如果操作系统内存中没有空闲页面,则操作系统必须在内存选择一个页面将其移出内存,以便为即将调入的页面让出空间。而用来选择淘汰哪一页的规则叫做页面置换算法。
一种页面置换算法查看硬件提供的页面的有限信息,并尝试选择应该替换哪些页面,以最小化页面遗漏的总数,同时将其与算法本身的主存储器和处理器时间的成本进行平衡。

先进先出算法

在这里插入图片描述

最佳页面置换算法

替换那些在最长时间内不会使用的页面。使用页面要使用的时间。
在这里插入图片描述

最近最久未使用(LRU)算法

如果以最近的过去作为不久将来的近似,那么就可以把过去最长一段时间里不曾被使用的页面置换掉。它的实质是,当需要置换一页时,选择在之前一段时间里最久没有使用过的页面予以置换。这种算法就称为最久未使用算法。

最少使用(LFU)置换算法

在采用最少使用置换算法时,应为在内存中的每个页面设置一个移位寄存器,用来记录该页面被访问的频率。该置换算法选择在之前时期使用最少的页面作为淘汰页。由于存储器具有较高的访问速度,例如100 ns,在1 ms时间内可能对某页面连续访 [1] 问成千上万次,因此,通常不能直接利用计数器来记录某页被访问的次数,而是采用移位寄存器方式。每次访问某页时,便将该移位寄存器的最高位置1,再每隔一定时间(例如100 ns)右移一次。这样,在最近一段时间使用最少的页面将是∑Ri最小的页。
LFU置换算法的页面访问图与LRU置换算法的访问图完全相同;或者说,利用这样一套硬件既可实现LRU算法,又可实现LFU算法。应该指出,LFU算法并不能真正反映出页面的使用情况,因为在每一时间间隔内,只是用寄存器的一位来记录页的使用情况,因此,访问一次和访问10 000次是等效的。

输入/输出硬件

设备控制器

设备驱动程序是可以插入操作系统来处理特定设备的软件模块。
设备控制器的工作原理类似于设备和设备驱动程序之间的接口。
输入输出单元(键盘、鼠标、打印机等)通常由一个机械部件和一个电子元件组成,其中电子元件被称为设备控制器。
每个设备都有一个设备控制器和一个设备驱动程序来与操作系统通信。设备控制器可以处理多个设备。作为一个接口,它的主要任务是将串行位流转换为字节块,在必要时执行错误校正。
任何连接到计算机的设备都通过插头和插座连接,插座连接到设备控制器。
在这里插入图片描述

与输入/输出设备通信

CPU必须有一种方法来将信息传递给一个输入/输出设备。有三种方法可以让CPU和设备进行通信。
1.特殊指令
2.内存映象的输入输出
当使用内存映射的输入/输出时,相同的地址空间由内存和输入/输出设备共享。该设备直接连接到特定的内存位置,这样一来,输入/输出设备就可以在不经过CPU的情况下将数据块转移到内存中。
在这里插入图片描述
3.直接存储器访问(DMA)
像键盘这样的慢设备会在每个字节被传输后产生一个中断到主CPU。
如果像磁盘这样的快速设备为每个字节生成一个中断,操作系统将花费大部分时间来处理这些中断。因此,典型的计算机使用直接存储器存取(DMA)硬件来减少这种开销。
外设直接将一块数据放在了 RAM 中,然后再产生一次中断,这样操作系统直接将内存中的那块数据传给想要获取这块数据的一个任务(或者放在内存的另一空闲部分),此时,系统就少了频繁响应外设中断的开销,也少了读取外设 IO 的时间开销(读取 RAM 比读取外设 IO 要快很多),这就是 DMA 的作用所在。
直接内存访问(DMA)意味着CPU授予的输入/输出模块权限,无需参与就可以读取或写入内存。DMA模块本身控制主存和输入输出设备之间的数据交换。只有传输的开始和结束涉及到CPU,只有在整块数据传输完成才会产生中断。
直接内存访问需要一个称为DMA控制器(DMAC)的特殊硬件,它负责管理数据传输,并仲裁对系统总线的访问。控制器是由源和目标指针(在哪里读/写数据)编写的,计数器用来跟踪传输的字节数,设置包括输入/输出和内存类型、中断和CPU周期的状态。在这里插入图片描述
步骤如下:
1.设备驱动程序被指示将磁盘数据传输到缓冲区地址X
2.然后,设备驱动程序指示磁盘控制器将数据传输到缓冲区
3.磁盘控制器开始DMA传输
4.磁盘控制器将每个字节发送到DMA控制器
5.DMA控制器将字节传输到缓冲区,增加内存地址,减少计数器C,直到C变成零
6.当C变成0,DMA中断cpu告知传输结束

轮询和中断输入/输出

计算机必须有一种方法来检测任何类型的输入的到达。轮询和中断这两种技术都允许处理器处理随时可能发生的事件,而这些事件与当前正在运行的进程无关。
1.轮询
轮询是使输入/输出设备与处理器通信的最简单方法。定期检查设备状态的过程,看是否该进行下一次的输入/输出操作,这是轮询。输入/输出设备只是将信息放入状态寄存器中,处理器必须来获取信息。大多数情况下,设备不需要被关注,当一个设备操作完成时,它将不得不等待,直到下一次被轮询程序询问。这是一种低效的方法,大部分的处理器时间浪费在不必要的轮询上。
把这个方法和老师比较一下,如果他们需要帮助的话,他们会不断地问班上的每一个学生。很明显,对于学生来说,当他们需要帮助的时候,更有效的方法是通知老师。
2.中断
当CPU接收到中断时,设备控制器会在总线上设置中断信号,这时需要CPU的注意。它保存当前状态,并使用中断向量(OS例程的地址来处理各种事件)调用适当的中断处理程序。当中断设备被处理时,CPU继续执行它原来的任务,就好像它从来没有被中断过一样。

输入/输出软件

在这里插入图片描述

设备驱动程序

设备驱动程序是可以插入操作系统来处理特定设备的软件模块。操作系统从设备驱动程序中获得帮助来处理所有的输入/输出设备。设备驱动程序封装与设备相关的代码,并以这样一种方式实现标准接口,代码包含特定于设备的寄存器读取/写入。设备驱动程序通常由设备的制造商编写,并在CD-ROM上与设备一起交付。
驱动程序工作如下:
1.接受来自设备独立软件的请求
2.与设备控制器交互以获取并提供输入/输出并执行所需的错误处理
3.确保请求被成功执行
设备驱动程序如何处理一个请求如下:
假设一个请求来读取块n。如果驱动程序在请求到达时处于空闲状态,那么它就会立即执行请求。否则,如果驱动程序已经忙于其他的请求,它将新请求放在未处理的请求的队列中。
“设备驱动程序”,是一种可以使计算机和设备通信的特殊程序,可以说相当于硬件的接口,操作系统只能通过这个接口,才能控制硬件设备的工作,假如某设备的驱动程序未能正确安装,便不能正常工作。
正因为这个原因,驱动程序在系统中的所占的地位十分重要,一般当操作系统安装完毕后,首要的便是安装硬件设备的驱动程序。不过,大多数情况下,我们并不需要安装所有硬件设备的驱动程序,例如硬盘、显示器、光驱、键盘、鼠标等就不需要安装驱动程序,而显卡、声卡、扫描仪、摄像头、Modem等就需要安装驱动程序。
设备驱动程序用来将硬件本身的功能告诉操作系统,完成硬件设备电子信号与操作系统及软件的高级编程语言之间的互相翻译。当操作系统需要使用某个硬件时,比如:让声卡播放音乐,它会先发送相应指令到声卡驱动程序,声卡驱动程序接收到后,马上将其翻译成声卡才能听懂的电子信号命令,从而让声卡播放音乐。
所以简单的说驱动程序提供了硬件到操作系统的一个接口以及协调二者之间的关系,而因为驱动程序有如此重要的作用,所以人们都称“驱动程序是硬件的灵魂”、“硬件的主宰”,同时驱动程序也被形象的称为“硬件和系统之间的桥梁”

中断处理程序

中断处理程序,也称为中断服务例程或ISR,是软件,或者更确切地说,是操作系统中的回调函数,或者更确切地说,是在设备驱动程序中,它的执行是由中断的接收触发的。
当中断发生时,中断过程会执行任何它必须做的事情,以处理中断,更新数据结构,并唤醒等待中断发生的进程。

与设备无关的输入输出软件

设备独立软件的基本功能是执行所有设备通用的输入/输出功能,并为用户级软件提供统一的接口。
1.设备驱动程序的统一接口
2.设备命名——用于映射到主要和次要设备号码的助记名称
3.设备保护策略
4.提供与设备无关的块大小
5.缓存来自设备的不能存储在最终的目的地的数据
6.块设备上的存储分配
7.分配和释放专用设备
8.错误报告

用户空间的I / O软件

这些库提供了更丰富和简化的接口来访问内核的功能,或者最终与设备驱动程序交互。大多数用户级的输入/输出软件都是由库过程组成的,有一些例外,比如假脱机系统,这是一种在多编程系统中处理专用的输入/输出设备的方法。
i/o库(如stdio)在用户空间中,为操作系统驻留的设备独立的i/o 软件提供一个接口。例如,putchar()、getchar()、printf()和scanf()是C编程中可用的用户级输入/输出库stdio的例子。

内核输入/输出子系统

内核输入/输出子系统负责提供与输入/输出相关的许多服务。
1.调度 内核调度一组输入/输出请求,以确定执行它们的良好顺序。当应用程序发出阻塞的输入/输出系统调用时,请求被放置在该设备的队列上。内核输入/输出调度器重新排列队列的顺序,以提高整个系统的效率和应用程序所经历的平均响应时间。
2.Buffering 内核输入/输出子系统维护一个称为缓冲区的内存区域,它在两个设备之间或设备与应用程序操作之间传输数据时存储数据。为了应对数据流的生产者和消费者之间的速度不匹配,或者在具有不同数据传输大小的设备之间进行调整,可以进行缓冲。
3.Caching 内核维护缓存内存,这是保存数据副本的快速内存区域。对缓存副本的访问比访问原始副本更有效。
4.假脱机和设备预订 线轴是一个缓冲区,它可以容纳一个设备的输出,比如打印机,它不能接受交叉数据流。假脱机系统一次将排队的spool文件复制到打印机。在一些操作系统中,假脱机由系统守护进程管理。在其他操作系统中,它是由一个内核线程处理的。
5.错误处理 使用受保护内存的操作系统可以防止许多类型的硬件和应用程序错误。

文件系统

一个文件是一个被命名的相关信息集合,它被记录在次级存储器上,如磁盘、磁带和光盘。一般来说,文件是由文件创建者和用户定义的位、字节、行或记录的序列。

文件结构

文件结构应该按照操作系统能够理解的要求格式进行。
1.一个文件根据它的类型有一个特定的结构
2.文本文件是将字符序列组织成行的序列
3.源文件是一系列程序和函数的序列
4.对象文件是被组织成块的字节序列,这是机器可以理解的
5.当操作系统定义不同的文件结构时,它还包含支持这些文件结构的代码。Unix,MS-DOS支持最小的文件结构

文件类型

文件类型是指操作系统区分不同类型文件的能力,如文本文件源文件和二进制文件等。
1.普通文件
这些是包含用户信息的文件
这些可能有文本、数据库或可执行程序
用户可以在这些文件上应用各种操作,比如添加、修改、删除甚至删除整个文件
2.目录文件
这些文件包含文件名列表和与这些文件相关的其他信息
3.特殊文件
诸如设备文件
这些文件代表物理设备,如磁盘、终端、打印机、网络、磁带驱动器等

文件访问机制

1.顺序存取
顺序访问是指以某种顺序访问记录的方式。文件中的信息按顺序处理,一个记录在另一个记录之后。这种访问方法是最原始的方法。示例:编译器通常以这种方式访问文件。
2.直接/随机存取
随机存取文件组织提供直接访问记录
每个记录都有自己的地址在文件的帮助下可以直接访问阅读或写作
这些记录不需要在文件中任何序列中,它们不需要在存储介质的相邻位置
3.索引顺序访问
这个机制是建立在顺序存取基础上的
为每个文件创建一个索引,其中包含指向各个块的指针
索引是按顺序搜索的,它的指针被用来直接访问文件

空间分配

文件通过操作系统分配磁盘空间。操作系统部署遵循三种主要方式来分配磁盘空间到文件。
1.连续分配
每个文件在磁盘上占用一个连续的地址空间
分配的磁盘地址是线性的
易于实施
外部碎片化是这种类型分配技术的一个主要问题
2.链接分配
每个文件都带有一个到磁盘块的链接列表
目录包含链接/指针到文件的第一个块
没有外部碎片
在顺序存取文件中有效地使用
在直接存取文件的情况下效率低下
3.索引分配
为连续和链接分配问题提供解决方案
一个索引块被创建,它具有所有指向文件的指针
每个文件都有自己的索引块,它存储文件占用的磁盘空间的地址
目录包含文件索引块的地址

安全

如果计算机程序是由未经授权的用户运行的,那么他/她可能会对存储在其中的计算机或数据造成严重损害。因此,计算机系统必须被保护,以防止未经授权的访问,恶意访问系统内存、病毒、蠕虫等。我们将在本章中讨论以下主题。

身份验证

身份验证指的是识别系统的每个用户,并将执行程序与这些用户关联起来。操作系统的职责是创建一个保护系统,确保运行特定程序的用户是可靠的。
1.用户名/密码
2.用户卡/密钥
用户需要在“卡片槽中穿孔卡片”,或者输入由操作系统提供的密钥生成器生成的密钥,以便登录到系统中。
3.用户属性-指纹/眼视网膜模式/签名

一次性密码

一次性密码提供了额外的安全性以及正常的身份验证。在一次性密码系统中,每当用户试图登录到系统时,都需要一个唯一的密码。一旦使用了一次性密码,就不能再次使用它。一次性密码以各种方式实现。
1.随机数 用户提供的卡片上有数字和相应的字母。系统要求随机选择的数字对应的数字。
2.密钥 用户被提供了一个硬件设备,它可以创建一个带有用户id的秘密id。系统要求在登录之前每次都生成这样的秘密id。
3.网络密码
一些商业应用程序在注册的移动/电子邮件中向用户发送一次性密码,这是在登录之前必须输入的。

程序威胁

程序威胁的一个常见例子是在计算机中安装的程序,它可以通过网络将用户凭证并发送给一些黑客。
1.特洛伊木马
这样的程序会捕获用户登录凭证,并将它们存储到恶意用户中,这些用户稍后可以登录到计算机,并可以访问系统资源。
2.暗门
如果一个程序被设计为按要求工作,在它的代码中有一个安全漏洞并且在不知情的情况下执行非法操作那么它就被称为有一个暗门。
3.逻辑炸弹
逻辑炸弹是一种情况,当程序在某些条件满足时才会发生错误,否则它就会成为一个真正的程序。它更难被发现。
4.病毒
病毒的名字表明可以在计算机系统上复制自己。它们是高度危险的,可以修改/删除用户文件,崩溃系统。病毒是一种嵌入在程序中的小代码。当用户访问程序时,病毒开始嵌入到其他文件/程序中,并使系统无法使用。

系统威胁

系统威胁指的是滥用系统服务和网络连接来给用户带来麻烦。系统威胁可用于在一个名为“程序攻击”的完整网络上启动程序威胁。系统威胁创建这样的环境,操作系统资源/用户文件被滥用。以下是一些众所周知的系统威胁的列表。
1.蠕虫
蠕虫是一种通过将系统资源使用到极端级别来抑制系统性能的过程。蠕虫进程生成它的多个副本,其中每个副本使用系统资源,阻止所有其他进程获得所需的资源。蠕虫进程甚至可以关闭整个网络。
2.端口扫描
端口扫描是一种机制或方法,黑客可以通过这种机制检测系统漏洞,从而对系统进行攻击。
3.拒绝服务
拒绝服务攻击通常会阻止用户合法使用该系统。例如,如果拒绝服务攻击浏览器的内容设置,用户可能无法使用internet。

LINUX

在这里插入图片描述

内核组件代码以一种称为内核模式的特殊特权模式执行,它可以完全访问计算机的所有资源。这段代码代表一个单一进程,在单个地址空间中执行,不需要任何上下文切换,因此非常高效和快速。内核运行每个进程,并向流程提供系统服务,为进程提供受保护的硬件访问。
在内核模式中不需要运行的支持代码是在系统库中。用户程序和其他系统程序在用户模式下工作,无法访问系统硬件和内核代码。用户程序/实用程序使用系统库来访问内核函数以获得系统的低级别任务。

架构

在这里插入图片描述
shell–向内核提供一个接口,将内核功能的复杂性隐藏在用户中。shell接受来自用户的命令并执行内核的功能。

操作系统信号量

Dijkestra提出了一种用于管理复杂互斥问题并发过程的重要技术。他引入了一个新的同步工具,叫做信号量。
1.二元信号
2.技术信号
二进制信号量只能取0和1的值。计数信号量可以取非负整数值。
两个标准操作,等待和在信号量上定义信号。进入临界段是由等待操作控制的,从一个关键区域退出,由信号操作来处理。等待,信号操作也被称为P和V操作。
1.等待命令P(S)将信号量值降低1。如果结果值变为负值,那么P命令会被延迟,直到满足条件为止
2.V(S)即信号操作将信号量值增加1
在P(S)和V(S)中,信号量的互斥被强制执行。如果多个进程同时尝试P(S),则只允许一个进程继续进行,其他进程将等待。这些操作被定义为以下:


P(S) or wait(S): 
If S > 0 then
   Set S to S-1
Else
   Block the calling process (i.e. Wait on S)

V(S) or signal(S): 
If any processes are waiting on S
   Start one of these processes
Else
   Set S to S+1

信号量操作是作为操作系统服务实现的,所以等待和信号在本质上是原子的,也就是说,一旦启动,这些操作的执行就不能被中断。
因此,信号量是一种简单而强大的机制,以确保并发进程之间的互斥。

猜你喜欢

转载自blog.csdn.net/DanielDingshengli/article/details/82817003