关于前端:程序员不得不学的操作系统知识三

53次阅读

共计 5054 个字符,预计需要花费 13 分钟才能阅读完成。

存储器治理

存储器层次结构

存储档次至多具备三级:最高层为 CPU 寄存器,两头为主存,最底层是辅存。

程序的装入和链接

程序装入形式

  • 相对装入形式:相对装入程序依照装入模块的地址,将程序和数据装入内存。
  • 可重定位形式:在采纳可重定位装入程序将装入模块装入内存后,会使装入模块中的所有逻辑地址与理论装入内存的物理地址不同。
  • 动静运行时装入形式:装入内存后的所有地址都依然是绝对地址,而将绝对地址转换为相对地址是在程序真正执行的时候。

程序链接形式

内存治理

内存调配形式

繁多间断调配:将内存分为零碎区、用户区,将零碎区的内存交给操作系统应用,而用户区内存调配给用户应用。

固定分区调配:内存空间被划分为若干个固定大小的区域,每个分区提供给某个过程应用。

动静分区调配:依据过程理论须要,联合数据结构动静分配内存。

  • 位图:由位图标记相干分区是否被应用
  • 闲暇链表:由双向链表将闲暇区域作为节点相连

相干调配算法

  1. 首次适应算法:从头部程序查找,分配内存应用。
  2. 最佳适应算法:闲暇区链表依照容量大小排序,遍历闲暇区链表找到最佳闲暇区,分配内存应用。
  3. 疾速适应算法:领有多个闲暇区链表,每个闲暇区链表存储一种容量的闲暇区,疾速找到适合的内存调配应用。

内存回收过程

  • 回收区和一块闲暇区相邻,且回收区在闲暇区下边:将回收区蕴含进闲暇区
  • 回收区和一块闲暇区相邻,且闲暇区在回收区下边:将回收区和闲暇区合并,新的闲暇区采纳回收区的地址
  • 回收区在两块闲暇区两头:将三个区域合并,新的闲暇区应用顶部的闲暇区地址
  • 独自的回收区:转为闲暇区插入闲暇区链表

内存存储管理

页式存储管理 :将过程逻辑空间等分为若干个页面,物理内存空间分为若干个物理块,以页面为单位将过程装入物理块。 由页表记录过程逻辑空间与物理空间的映射

  • 毛病:因为页面大小的起因,会导致碎片多,繁多的页式存储也会导致页表占用内存空间大。
  • 长处:合乎计算机的存储管理要求
  • 解决方案:采纳多级页表,避免一次页表的页表项过大

段式存储管理 :将过程逻辑空间划分为若干段(非等分), 由段表记录逻辑空间到物理空间的映射

  • 长处:适宜用户需要,满足程序的共享

段页式存储管理:联合了进步内存利用率的分页治理、满足用户需要的分段,将过程先分为段,再分为页。

页面置换算法

当产生缺页异样的时候,须要相干的页面置换算法。

最优页面置换算法:将不再须要或者很久当前才须要的页面置换进来,这是一种现实的置换算法。

先进先出页面置换算法:由操作系统保护一个所有在以后内存中的页面的链表,缺页时移除头部的页,并且把新的页增加到表尾。

最近起码应用页面置换算法:在缺页中断时,置换未应用工夫最长的页面。

虚拟地址空间

将物理内存地址裸露给过程的毛病:

  • 用户程序能够寻址内存中的字节,容易毁坏操作系统
  • 多个用户程序容易发生冲突,并发艰难

虚拟地址空间:创立了一种形象内存供程序应用。地址空间是过程能够用来寻址内存的地址集。每个过程都有它本人的地址空间,独立于其余过程的地址空间。

在没有虚拟内存的计算机上,零碎间接将虚拟地址送到内存中线上,读写操作都应用同样地址的物理内存。在应用虚拟地址空间技术时,虚拟地址不会间接发送到内存总线上 。相同,会应用 MMU 内存治理单元虚构地址映射为物理内存地址

基址寄存器和变址寄存器 :采纳了虚拟地址空间后,要理论定位到程序的物理内存地址,采纳 动静重定位办法,应用 CPU 中的基址寄存器、变址寄存器 来对地址空间转换为物理内存地址。

  • 基址寄存器:存储数据内存的起始地位
  • 变址寄存器:存储应用程序的长度。


虚拟地址空间由固定大小的单元组成,这种固定大小的单元称为 页 (pages)。而绝对的,物理内存中也有固定大小的物理单元,称为 页框(page frames)

映射关系由页表进行治理,如果 MMU 留神到该页面没有被映射,于是 CPU 会 陷入 (trap) 到操作系统中。这个陷入称为 缺页中断 (page fault) 或者是 缺页谬误。操作系统会抉择一个很少应用的页并把它的内容写入磁盘。

针对虚拟地址到物理地址映射速度优化次要有:TLB(转换检测缓冲区)位于 MMU 外面。

TLB

TLB 是一个内存治理单元用于改良虚拟地址到物理地址转换速度的缓存。

TLB 是位于内存中的 页表的 cache,如果没有 TLB,则每次取数据都须要两次拜访内存, 即查页表取得物理地址和取数据.

虚拟内存

替换技术 :针对于内存不足以程序运行的状况,有两种形式,第一种是 替换 ,将过程放入内存中执行后,再把它放回磁盘。故闲暇过程会寄存在磁盘中。第二种是 虚拟内存

虚拟存储器,是指具备申请调入性能和置换性能,能从逻辑上对内存容量加以裁减的一种存储器零碎。

具备屡次性、对换性和虚拟性三大次要特色。

  • 屡次性:屡次性是指一个作业被分成屡次调入内存运行
  • 对换性:对换性是指容许在作业的运行过程中进行换进、换出
  • 虚拟性:虚拟性是指可能从逻辑上裁减内存容量

虚拟内存次要由虚拟存储器实现,具体内存治理也大体一样,分为:请求分页、申请分段、申请段页式,

相干置换算法

  • 先进先出算法(FIFO)
  • 最不常常应用算法(LFU)
  • 最近起码应用算法(LRU)

文件系统

文件系统存储在 磁盘 中。大部分的磁盘可能划分出一到多个分区,叫做 磁盘分区 。每个分区都有独立的文件系统,每块分区的文件系统能够不同。磁盘的 0 号分区称为 主疏导记录 (MBR),用来 疏导 (boot) 计算机。在 MBR 的结尾是 分区表(partition table)

当计算机开始引 boot 时,BIOS 读入并执行 MBR。

疏导块

MBR 做的第一件事就是 确定流动分区 读入疏导块(boot block) 并执行。疏导块中的程序将加载分区中的操作系统。为了一致性,每个分区都会从疏导块开始,即便疏导块不蕴含操作系统。疏导块占据文件系统的前 4096 个字节,从磁盘上的字节偏移量 0 开始。疏导块可用于启动操作系统。

超级块

超级块 的大小为 4096 字节,从磁盘上的字节偏移 4096 开始。超级块蕴含文件系统的所有要害参数

  • 文件系统的大小
  • 文件系统中的数据块数
  • 批示文件系统状态的标记
  • 调配组大小

在计算机启动或者文件系统首次应用时,超级块会被读入内存。

闲暇空间块

用位图或者链表治理闲暇块。

inode

索引节点。它是一个数组的构造,每个文件有一个 inode,inode 十分重要,它阐明了文件的方方面面。

  • 模式 / 权限(爱护)
  • 所有者 ID
  • 组 ID
  • 文件大小
  • 文件的硬链接数
  • 上次访问工夫
  • 最初批改工夫
  • inode 上次批改工夫

文件分为两局部,索引节点和块。一旦创立后,每种类型的块数是固定的。

文件的实现

间断调配:依照间断数据块进行调配。

  • 长处:实现简略、高性能
  • 毛病:碎片问题

链表调配:依照链表形式调配数据块,节点的是磁盘指针

  • 长处:充分利用数据块
  • 毛病:不反对随机拜访,IO 代价大

inode:给每个文件赋予一个称为 inode(索引节点) 的数据结构,每个文件都与一个 inode 进行关联,inode 由整数进行标识。只有在文件关上时,其 inode 才会在内存中。

* 文件的字节数

  * 文件拥有者的 User ID

  * 文件的 Group ID

  * 文件的读、写、执行权限

  * 文件的工夫戳,共有三个:ctime 指 inode 上一次变动的工夫,mtime 指文件内容上一次变动的工夫,atime 指文件上一次关上的工夫。* 链接数,即有多少文件名指向这个 inode

  * 文件数据 block 的地位

目录的实现

目录项提供了查找文件磁盘块所须要的信息。目录零碎的次要性能就是 将文件的 ASCII 码的名称映射到定位数据所需的信息上

对于采纳 inode 的零碎,每个目录项,由两局部组成:所蕴含文件的文件名,以及该文件名对应的 inode 号码。

共享文件

硬链接:多个文件名指向同一个 inode 号码。【inode 链接数会发生变化】

ln 源文件 指标文件

软链接:文件 A 和文件 B 的 inode 号码尽管不一样,然而文件 A 的内容是文件 B 的门路。

ln -s 源文文件或目录 指标文件或目录

磁盘调度算法

  • 先来先服务:磁盘臂依照 FIFO 准则挪动
  • 最短门路优先:磁盘臂依照最短门路优先准则挪动
  • 电梯算法:磁盘臂向一端挪动后回来

晋升性能

  • 高速缓存:块高速缓存、缓冲区高速缓存
  • 块提前读:提前预读下一个块【针对程序读取的文件】
  • 缩小磁盘臂静止:把有可能程序拜访的块放在一起,当然最好是在同一个柱面上,从而缩小磁盘臂的挪动次数

IO

I/O 分为两种:物理 I /O 和 逻辑 I /O(Logical I/O)

物理 I/O 通常是从磁盘等存储设备理论获取数据。逻辑 I/O 是对存储器(块,缓冲区)获取数据。

大部分 物理 IO(physical I/O) 是异步的。CPU 传输实现后会转而做其余事件,等到中断产生后,CPU 才会回到传输这件事件上来。

比拟条件 同步传输 异步传输
概念 块头序列开始 它别离在字符后面和前面应用开始位和进行位。
传输方式 以块或帧的模式发送数据 发送字节或者字符
同步形式 同步时钟
传输速率 同步传输比拟快 异步传输比较慢
工夫距离 同步传输通常是恒定工夫 异步传输工夫随机
开销 同步开销比拟低廉 异步传输开销比拟小
是否存在间隙 不存在 存在
实现 硬件和软件 只有硬件
示例 聊天室,视频会议,电话对话等。 函件,电子邮件,论坛

缓冲

通常状况下,从一个设施收回的数据不会间接达到最初的设施。其间会通过一系列的校验、查看、缓冲等操作能力达到。长处:先达到缓冲区,从而打消缓冲区填满速率和缓冲区过载。

共享和独占

有些 I/O 设施可能被许多用户独特应用,然而某些设施必须具备独占性,即只容许单个用户应用实现后能力让其余用户应用。

此时采纳 **SPOOLing 技术(假脱机技术)** 将物理设施虚构为多个逻辑设备,在队列中调用设施,从而实现共享。

一共有三种管制 I/O 设施的办法

  • 应用程序控制 I/O
  • 应用中断驱动 I/O
  • 应用 DMA 驱动 I/O

应用程序控制 I/O

应用程序控制 I/O 又被称为 可编程 I /O,它是指由 CPU 在驱动程序软件管制下启动的数据传输,来拜访设施上的寄存器或者其余存储器。CPU 会收回命令,而后期待 I/O 操作的实现。因为 CPU 的速度比 I/O 模块的速度快很多,因而可编程 I/O 的问题在于,CPU 必须期待很长时间能力等到处理结果。CPU 在期待时会采纳 轮询 (polling) 或者 忙等(busy waiting) 的形式,后果,整个零碎的性能被重大拉低。

  1. CPU 申请 I/O 操作
  2. I/O 模块执行响应
  3. I/O 模块设置状态位
  4. CPU 会定期检查状态位
  5. I/O 不会间接告诉 CPU 操作实现
  6. I/O 也不会中断 CPU
  7. CPU 可能会期待或在随后的过程中返回

应用中断驱动 I/O

在 CPU 期待 I/O 设施的同时,可能做其余事件,等到 I/O 设施实现后,它就会产生一个中断,这个中断会进行以后过程并保留以后的状态。

  1. CPU 进行读取操作
  2. I/O 设施从外围设备获取数据,同时 CPU 执行其余操作
  3. I/O 设施中断告诉 CPU
  4. CPU 申请数据
  5. I/O 模块传输数据

应用 DMA 的 I/O

DMA 即间接内存拜访,它意味着 CPU 授予 I/O 模块权限在不波及 CPU 的状况下读取或写入内存。即 IO 过程不须要 CPU 的参加。因为 DMA 设施能够间接在内存之间传输数据,而不是应用 CPU 作为中介,因而能够缓解总线上的拥塞。DMA 通过容许 CPU 执行工作,同时 DMA 零碎通过零碎和内存总线传输数据来进步零碎并发性。

中断处理程序

中断处理程序步骤:

  1. 保留所有没有被中断硬件保留的寄存器
  2. 为中断服务程序设置上下文环境,可能包含设置 TLBMMU 和页表
  3. 为中断服务程序设置栈
  4. 对中断控制器作出响应,如果不存在集中的中断控制器,则持续响应中断
  5. 把寄存器从保留它的中央拷贝到过程表中
  6. 运行中断服务程序,它会从收回中断的设施控制器的寄存器中提取信息
  7. 操作系统会抉择一个适合的过程来运行。如果中断造成了一些优先级更高的过程变为就绪态,则抉择运行这些优先级高的过程
  8. 为过程设置 MMU 上下文,可能也会须要 TLB,依据理论状况决定
  9. 加载过程的寄存器,包含 PSW 寄存器
  10. 开始运行新的过程

设施驱动程序

操作系统通常会将驱动程序归为 字符设施 块设施

提供 I/O 设施到设施控制器转换的过程的代码称为 设施驱动程序(Device driver)

设施驱动程序承受到读写申请后,会查看以后设施是否在应用,如果设施在应用,申请被排入队列中,期待后续的解决。如果此时设施是闲暇的,驱动程序会查看硬件以理解申请是否可能被解决。在传输开始前,会启动设施。期待设施就绪实现,再进行理论的管制。管制设施就是对设施收回指令

设施控制器的次要主责是 管制一个或多个 I/O 设施,以实现 I/O 设施和计算机之间的数据交换

设施控制器接收从 CPU 发送过去的指令,继而达到管制硬件的目标。

理解更多常识干货,🙋‍♂️关注公众号:学编程的文若

正文完
 0