请选择 进入手机版 | 继续访问电脑版

操作系统

[复制链接]
丶禁飞 发表于 2021-1-1 10:33:32 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
文章目次



   1.利用系统概述   

1.1 什么是利用系统

1.利用系统简述
从用户角度讲,利用系统是一个控制软件。
2.利用系统功能


  • 管理应用步调
  • 为应用步调提供服务(比如声卡的访问,网卡的访问)
  • 杀死应用步调
  • 资源管理(如CPU资源、内存资源)
  • 管理外设、分配资源

利用系统将CPU抽象成历程,将磁盘抽象为文件,将内存抽象为地点空间。
3.利用系统架条理布局


  • 硬件之上
  • 应用步调之下(为应用步调提供服务支撑)
4.利用系统的 shell 和 kernel
(1) shell 和 kernel


  • shell:面向应用步调,是利用系统对外提供的一种可见的服务。图形化方式shell和下令行方式shell。
  • kernel:面向计算机内部
(2) kernel的内部组件
kernel——利用系统内部组件,包罗:


  • CPU调治器
  • 物理内存管理
  • 虚拟内存管理(为上层应用提供尽大概大的内存空间)
  • 文件系统管理
  • 中断处理惩罚与设备驱动
(3) OS Kernel 的特征


  • 并发:计算机系统中同时存在多个运行的步调,需要OS管理和调治。
【注意】并行和并发的区别:并行是指在一个时间点上有多个步调同时运行,并发是指在一段时间内有多个步调同时运行。并行需要一个计算机系统中有多个CPU,这样才华使得同一个时间点上可以有多个步调同时运行,如果只有一个CPU,则无法完成并行的利用。


  • 共享:“同时访问”或资源共享。同一个时间点上对于某一个内存单元只能有一个步调访问,但可以把内存分为两部分,这样可以在同一时间点上有两个步调对这两部分举行分别访问。
  • 虚拟:将CPU虚拟为历程,将磁盘虚拟为文件,将内存虚拟为地点空间。使用多道步调设计技能,让每个用户都觉得有一个计算机专门为他服务。将一台物理机器虚拟成多个虚拟机器。
  • 异步:步调的执行不是一贯到底,而是走走停停,向前推进的速度不可预知。但只要运行情况相同,OS需要保证步调运行的效果也要相同。
1.2 利用系统布局

1.不分模块的单体内核


  • 代表产物:MS-DOS 。
  • 特点:比力简朴,功能较弱,没有模块化和分层设计。
2.模块化的单体内核


  • 代表产物:主流利用系统。
  • 特点:各个模块之间的相互调用方式是函数调用。
3.微内核


  • 代表产物:很少有利用系统采用微内核设计。
  • 特点:模块和模块之间不是通过函数通报这种仅有的方式实现,而是通过雷同于消息通报这种方式实现,使得利用系统更加容易扩展。尽大概把内核功能移到用户控件。内核中只放入根本的功能,比如消息通报、中断处理惩罚,而比如内存管理、文件系统、网络协议栈等功能放入外围以服务的形式存在,服务和服务之间通过内核的消息通报机制举行通信。比力安全、机动。
  • 缺点:性能不高。模块和模块之间的交互需要通过内核,与模块化的单体内核架构相比,比简朴的一次函数调用性能低许多。
4.外核


  • 存在于学术界。
  • 特点:将内核分为两块,一块与硬件打交道,另一块与应用步调打交道。
5.VMM(虚拟机监督器)


  • VMM存在于硬件之上,OS之下。VMM将单独的机器接口转换为许多幻象,每个这些接口(虚拟机)是一个原始计算机系统的有效副本,并完成所有的处理惩罚器指令。将一台计算机虚拟为多台计算机。
   2.启动、中断、异常及系统调用   

2.1 启动

1.计算机体系布局概述

【问】CPU加电之后,它执行的第一条指令在哪?
【答】CPU加电之后,会对里面的寄存器举行初始化到一个指定状态,从内存中读取第一条指令(内存中有一部分区域是ROM——只读存储器,是非易失的)。
2.启动时计算机内存和硬盘布局

当CPU加电后,初始化完成之后,里面的代码段寄存器和指令指针寄存器的值决定了CPU从内存当中读数据的位置。CPU初始化完成之后,CPU处于实模式下,实模式下的地点计算会把段寄存器左移四位然后加上当前指令指针,效果就是要访问的第一条指令的位置。
BIOS:根本输入输出系统。
BIOS需要提供以下服务:


  • 根本输入输出的步调:从磁盘上读数据,从键盘上读用户的输入。
  • 系统设置信息:比如系统从硬盘启动、网络启动又大概是从光盘启动。
  • 开机后自检步调
  • 系统自启动步调

依据BIOS的系统设置信息,从磁盘中将加载步调和利用系统内容加载到系统(计算机系统)中。详细过程为:
BIOS启动并初始化完成后,从磁盘上读引导扇区,然后跳转到指定的位置。引导扇区从文件系统中读取加载步调,然后系统将控制权转给加载步调,加载步调可以将利用系统的代码读到内存中(加载步调识别磁盘上的文件系统,将利用系统内核的镜像加载到内存中),并把利用权交给利用系统。
BIOS以中断调用的方式,提供了根本的I/O功能:


  • INT 10h:字符显示
  • INT 13h:磁盘扇区读写
  • INT 15h:检测内存大小
  • INT 16h:键盘输入
【注意】BIOS这些根本的I/O功能只能在x86的实模式下访问(保护模式不可)。
3.系统启动流程
步1:CPU初始化

【详情】
通过寄存器的值计算出要找的第一条指令在内存中的位置(即BIOS的位置),注意BIOS的位置只能在最底端的1MB空间中(因为是20位地点空间,最大地点空间只有1MB)。
步2:系统进入到BIOS中举行相关利用

【详情】
系统加电,BIOS初始化硬件,因为现代计算机系统有多个分区,所以BIOS读取主引导扇区(主引导纪录表明了从哪个文件系统中读取加载步调),主引导扇区读取运动分区引导扇区,引导扇区读取文件系统中的加载步调。
【1】BIOS初始化:


  • 硬件自检POST。
  • 检测系统中内存和显卡等关键部件的存在和工作状态。
  • 查找并执行显卡等接口卡BIOS,举行设备初始化。
  • 执行系统BIOS,举行系统检测(检测和设置系统中安装的即插即用设备)。
  • 更新CMOS中的扩展系统设置数据ESCD(反映出系统中安装的设备,当拔插设备时数据会有厘革)。
  • 按指定启动顺序从软盘、硬盘或光驱启动。
【2】主引导纪录MBR格式:

一共512个字节。


  • 启动代码:占446字节,用于查抄分区正确性和加载并跳转到磁盘上的引导步调。
  • 硬盘分区表:占64字节,用于形貌分区状态和位置,每个分区形貌信息占据16个字节,共4个分区(以4个分区为例)。
  • 竣事标记字:占2字节(所有的引导扇区都有一个竣事标记55AA,有了竣事标记才是一个正当的主引导纪录)。
【3】分区引导扇区格式



  • JMP跳转指令:跳转到启动代码,与平台相关(与CPU相关)。
  • 文件卷头:文件系统形貌信息。
  • 启动代码:跳转到加载步调(规定了加载步调存放的位置)。
  • 竣事标记:所有的引导扇区都有一个竣事标记。
步3:加载步调(bootloader)加载利用系统内核

【详情】
加载步调从文件系统中读取启动设置信息,启动设置信息参数表明了利用系统的启动方式(如安全模式、正常模式),依据设置加载利用系统内核。
4.系统启动规范


  • BIOS

    • 固化到计算机主板上的步调。
    • 包罗系统设置、自检步调和系统自启动步调。
    • BIOS-MBR(最多支持4个分区的计算机,因为一共只有512字节)、BIOS-GPT(全局唯一标识分区表,可以形貌更多分区的分区表)、PXE(网络启动的标准)。

  • UEFI

    • 接口标准。
    • 在所有平台上一致的利用系统启动服务。

2.2 中断、异常和系统调用

1.背景
(1) 为什么需要中断、异常和系统调用


  • 在计算机运行中,内核是被信任的第三方。
  • 只有内核可以执行特权指令。
  • 内核为上层应用步调提供服务,方便应用步调。
  • 内核与外界交互的方式是中断、异常和系统调用。
(2) 中断和异常希望管理的问题


  • 当外设与计算机交互时,系统需要使用中断机制做出适当的反映。
  • 当应用步调出现意想不到的行为时,需要举行异常处理惩罚(比如访问一个并不存在的内存空间,大概访问一个不可访问的内存空间)。
(3) 系统调用希望管理的问题


  • 需要通过系统调用来提供一个接口,让应用步调既方便地使用内核提供的服务,又不至于用户的行为对内核安全产生影响。
2.内核与外界的交互


  • 系统调用:应用步调主动向利用系统发出的服务请求
  • 异常:非法指令大概其他原因导致当前指令执行失败(如:内存堕落)后的处理惩罚请求
  • 中断:来自硬件设备的处理惩罚请求

  • 外部设备访问利用系统内核时,通过中断通道通知内核,内核通过设备驱动与外部设备举行信息交互。
  • 当应用步调执行出现异常时,利用系统内核会试图管理这一问题,如果无法管理,则应用步调会将占用的资源返还给利用系统。
  • 应用步调会使用函数库,这时不会与内核举行交互。内核、应用步调和函数库会间接地通过系统调用接口与内核举行交互。
3.中断、异常和系统调用相比力
源头:


  • 中断:外设
  • 异常:应用步调意想不到的行为
  • 系统调用:应用步调请求利用系统提供服务
响应方式:


  • 中断:异步
  • 异常:同步
  • 系统调用:异步或同步
处理惩罚机制:


  • 中断:连续,对应用步调时透明的
  • 异常:杀死大概重新执行意想不到的应用步调指令
  • 系统调用:等候或连续
4.中断和异常处理惩罚机制
(1) 中断处理惩罚机制
【硬件处理惩罚】


  • 在CPU初始化时设置中断使能标记
  • 依据内部或外部事件设置中断标记
  • 依据中断向量调用相应中断服务例程
【软件处理惩罚】


  • 现场生存(编译器)
  • 中断服务处理惩罚(服务例程)
  • 清除中单标记(服务例程)
  • 现场恢复(编译器)
【中断嵌套】
硬件中断服务例程可被打断(在处理惩罚一个中断时,可以允许出现其他的中断,可以通过优先级高低举行先后处理惩罚)


  • 差别硬件中断源可在硬件中断处理惩罚时出现
  • 硬件中断服务例程中需要临时克制中断请求(一定时间段中可以克制中断请求)
  • 中断请求会保持到CPU做出相应
(2) 异常处理惩罚机制


  • 异常服务例程可被打断:异常服务例程执行时大概出现硬件中断
  • 异常服务例程可嵌套: 异常服务例程大概出现缺页
5.系统调用的概念和实现
(1) 系统调用的概念和特点


  • 利用系统服务的编程接口
  • 通常由高级语言编写(C或C++)
  • 步调访问通常是通过高条理的API接口而不是直接举行系统调用
  • 三种最常用的应用步调编程接口(API)

    • Win32 API 用于 Windows
    • POSIX API 用于 POSIX-based systems(包罗UNIX,LINUX,MAC OS X的所有版本)
    • Java API 用于JAVA虚拟机(JVM)

(2) 系统调用的实现



  • 每个系统调用对应一个系统调用号,根据系统调用号选择对应的系统调用实现。系统调用接口根据系统调用号来维护表的索引。
  • 系统调用接口调用内核态中的系统调用功能实现,并返回系统调用的状态和效果。
  • 用户不需要知道系统调用的实现。

    • 需要设置调用参数和获取返回效果
    • 利用系统接口的细节大部分都隐藏在应用步调编程接口后(通过运行步调支持的库来管理)

6.步调调用(函数调用)与系统调用的差别之处
系统调用


  • INT和IRET指令用于系统调用。
  • 系统调用时,堆栈切换和特权级的转换。内核是受保护的,内核和应用步调之间使用差别的堆栈,所以会有一个内核的切换。内核态可以使用特权指令,直接对设备举行控制。
步调调用


  • CALL和RET用于通例调用。
  • 通例调用时没有堆栈切换。函数调用时,会把参数压入堆栈,需要参数的时候再从堆栈中出栈,执行步调后将效果压入堆栈再返回。
【注】系统调用比函数调用更安全。
7.开销
系统调用的开销比函数调用更大,因为有内核态和用户态的切换。详细如下:


  • 引导机制(切换引导,硬件的开销)
  • 创建内核堆栈
  • 参数验证(通报参数时需要有效性验证)
  • 内核态映射到用户态的地点空间(当切换到内核态时,内核需要访问到用户态的一些信息,会做一个地点空间上的映射,更新页面映射权限)
  • 内核态独立地点空间(映射会导致缓存的厘革,会导致TLB的内容失效)
   3.内存管理   

3.1 物理内存管理:一连内存分配

3.1.1 计算机体系布局/内存条理

1.计算机体系布局

总线上毗连CPU、内存和I/O设备,总线大概为32位总线大概为64位总线,表示一次数据的读写是32位或64位的。
CPU中包罗了ALU、寄存器、高速缓存、存储管理单元、控制逻辑等。
2.内存条理

CPU中的缓存有一级二级缓存,当CPU要读取数据时,如果高速缓存未掷中,则会继承访问内存,如果仍未找到,则会访问外存(虚拟内存)。
以上的几种访问读取速度差异巨大,速度有百万级的差距。
3.利用系统的内存管理方式
(1) 利用系统的内存管理

每个历程都有一段共同的地点空间——利用系统内核。每个历程有各自的内容,且地点是可以相互重叠的,相互之间不干扰。
存储管理单元(MMU)将逻辑地点空间转换为物理地点空间。
存储管理的特点:


  • 抽象:将线性的物理地点编号转换为逻辑地点空间。
  • 保护:保护地点空间,每个历程只能访问自己的空间。
  • 共享:各个历程之间可以共享一段地点空间,如利用系统内核,而不需要存多份。
  • 虚拟化:更大的地点空间,即逻辑地点空间中可以存数据的空间大于物理内存总量。
(2) 利用系统的内存管理方式


  • 重定位:地点访问采用段地点 + 偏移量的方式。
  • 分段:将历程的逻辑地点空间分为多段。
  • 分页:将内存分为最根本的单元。
  • 虚拟存储:现在多数系统(如 Linux)采用按需页式虚拟存储。
这样的管理方式对硬件的依赖水平很高,详细如下:


  • 与计算机存储架构紧耦合
  • MMU:处理惩罚CPU存储访问请求的硬件
3.1.2 地点空间和地点生成

1.地点空间的界说


  • 物理地点空间:硬件支持的地点空间。起始地点0,直到MAXsys。
  • 逻辑地点空间:在CPU运行的历程看到的地点。起始地点0,直到MAXprog。
执行指令时,指令中的逻辑地点转换为物理地点,在总线上访问对应的存储单元。
2.地点生成
(1) 逻辑地点生成

高级步调颠末编译生成汇编代码,汇编步调颠末汇编生成二进制机器码,可以被机器直接识别,机器码会与函数库等各个模块排成的序枚举行链接,链接后步调位置会发生厘革(例中后移100),在步调加载过程中会举行重定位,步调位置会继承发生厘革(例中后移1000)。
(2) 地点生成的时机
地点生成的三种情况:


  • 情况1:编译时确定地点:编译时起始地点已知。如果起始地点改变,必须重新编译。如功能手机(不支持功能扩展,软件扩展)起始地点在编译阶段已确定。
  • 情况2:加载时确定地点:编译时起始地点未知,编译器需生成可重定位的代码,加载时生成绝对地点。
  • 情况3:执行时确定地点:执行时代码可移动,需要地点转换(映射)硬件支持。
(3) 地点生成的过程

CPU执行一条指令时:MMU通过页表举行逻辑地点和物理地点的转换,CPU给总线发送物理地点请求。内存识别总线上的信息,如果是读信号,则发送物理地点的内容给CPU,如果是写信号,则吸收CPU数据到物理地点。其中物理地点和逻辑地点之间的映射利用依赖于利用系统实现。
3.地点查抄

CPU执行指令时,会访问逻辑地点对应的内容,如果访问数据段的数据,数据段有段基址和段长,如果访问的偏移量超过段长,则访问非法,抛出内存异常,如果在段长范围内,则访问对应物理地点中的内容。
3.1.3 一连内存分配

1.一连内存分配
给历程分配一块不小于指定大小的一连的物理内存区域。
2.内存碎片
空闲内存不能被使用的区域。比如两个地点空间中间夹的区域。因为每个历程竣事的时间不一致,先竣事的历程会在竣事后会释放空间,得到空闲内存,从而会出现内存碎片。



  • 外部碎片(右分图):分配单元之间的未被使用的内存。当需要分配的内存空间较大,而该区域空间较小时。
  • 内部碎片(左分图):分配单元内部的未被使用的内存,取决于分配单元是否要取整。比如需要510字节,但是分配空间只能分配2的整数幂,那就会空出2字节,该部分就是内部碎片。
3.动态分区分配
(1) 动态分区分配
当步调被加载执行时,分配一个历程指定大小可变的分区(块、内存块)。分区的地点是一连的。
(2) 利用系统需要维护的数据布局
因为历程的竣事序次差别,所以内存的差别区域会有空闲分区。需要利用系统来维护分区:


  • 所有历程的已分配分区
  • 空闲分区
(3) 动态分区分配策略


  • 最先匹配:重新到尾扫描空闲分区,只要找到一个合适大小的分区就直接使用该空闲分区。
  • 最佳匹配:扫描所有空闲分区,找到比需要的空间大的分区,而且是大的最少的空闲分区,这样使内存空间使用率到达最高。
  • 最差匹配:扫描所有空闲分区,找到比需要的空间大的分区,而且是大的最多的空闲分区。
(4) 最先匹配
说明:分配n个字节,使用第一个可用的空间比n大的空闲块。
原理&实现:


  • 空闲分区列表按地点顺序排序
  • 分配过程中,搜索第一个合适的分区
  • 释放分区时,查抄是否可与相近的空闲分区归并
优点:


  • 简朴
  • 在高地点空间有大块的空闲分区
缺点:


  • 外部碎片
  • 分配大块分区时较慢(因为前面都被切成了小块分区,前面没有大块分区,当需要分配大块分区时,前面的搜索时间较长,会有较大的开销)
(5) 最佳匹配
说明:分配n个字节时,查找并使用不小于n的最小空闲分区。
原理&实现:


  • 空闲分区列表按照大小排序(由小到大排序)
  • 分配时,查找一个合适的分区
  • 释放时,查找而且归并相近的分区(固然是地点相近)
优点:


  • 大部分分配的尺寸较小时,效果很好
  • 可以制止大的空闲分区被拆分
  • 可淘汰外部碎片的大小
  • 相对简朴
缺点:


  • 外部碎片
  • 释放分区较慢
  • 容易产生许多无用的小碎片
(6) 最差匹配
说明:分配n字节,使用尺寸不小于n的最大空闲分区。
原理&实现:


  • 空闲分区列表按照大小排序(由大到小排序)
  • 分配时,选最大的分区
  • 释放时,查抄是否可与相近的空闲分区归并,举行大概的归并,并调解空闲分区列表顺序
优点:


  • 中等大小的分配较多时,效果最好
  • 制止出现太多的小碎片
缺点:


  • 释放分区较慢
  • 外部碎片
  • 容易粉碎大的空闲分区,因以后续难以分配大的分区
4.碎片整理
内存分区已经分配给了历程,已经占据一定的内存空间,这时新创建的历程需要使用内存空间,但是只剩下小的碎片,没有足够大的一段内存空间。需要使用碎片整理来获取更大的内存空间。
碎片整理:通过调解历程占用空间的分区位置来淘汰或制止分区碎片。
(1) 碎片整理:紧凑


  • 碎片紧凑:通过移动分配给历程的内存分区,以归并外部碎片。
碎片紧凑的条件:所有的应用步调可动态重定位。
需要考虑的问题:什么时候移动和开销。不可以搬动处于运行状态的历程,只能搬动等候状态的历程。别的需要考虑开销的问题,通常不会为了一小块内存空间搬动许多历程,这样的开销是很大的,所以需要综合考虑。
(2) 碎片整理:分区对换


  • 分区对换:通过抢占并采取处于等候状态历程的分区,以增大可用的内存空间。

p2、p3分别处于停当和运行状态,p1处于等候状态。p1、p2、p3均占据着内存空间,这时新创建了一个历程p4,p4没有可用的内存空间,管理方法是将处于等候状态的历程p1搬到外存中,空出的内存就可以为p4使用,这种方式就是分区对换。该方式可以让更多的历程在系统中瓜代运行。

下图中:
任何时候只有一个历程在内存当中运行,处于暂停的历程会被放在外存当中,如果当前历程主动让出使用权限,会把它对换到外存当中,再把外存当中的历程对换到内存当中。这样就实现了多历程的瓜代运行。

【注意】瓜代的开销是非常大的,因为内存和外存的速度差异比力大。
3.1.4 同伴系统

1.概述
同伴系统是一种一连存储分配的办法,比力好地折中管理了分配和采取过程当中分配块位置、归并、处理惩罚碎片的问题。
同伴系统将可以分配的分区大小约定为2的幂,任何一块要分的时候只是将这个分区从中间切开,大概切多次大概切一次,然后切到合适的分区再举行分配。
<ul>整个可分配的分区为2u。
如果需要的分区大小为2i - 1< s
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

发布主题

专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )