(2021) 23 [持久化] I/O设备与驱动

(2021) 23 [持久化] I/O设备与驱动

南京大学操作系统课蒋炎岩老师网络课程笔记。

视频:https://www.bilibili.com/video/BV1HN41197Ko?p=23
讲义:http://jyywiki.cn/OS/2021/slides/13.slides#/

背景

很多人 (你们的同学们、家长们) 都有一个认识,“计算机系就是装 (修) 电脑的”,因为大家对电脑的印象只有 I/O 设备。但上了计算机系发现根本不是这么回事啊,根本没有直接教怎么 “修电脑”。

但不应该是这样的!

  • 学 “计算机” 的人不仅会修电脑,还会造电脑!

只要我们有一个设备的手册或者文档等充足的信息,就可以结合自己在操作系统等课程上的知识,来查找并修复问题。

本次课的内容和目标

理解 “I/O 设备是什么”

  • 键盘
  • 磁盘
  • 中断控制器
  • 总线
  • DMA
  • GPU

学习 I/O 设备在操作系统中的抽象

  • 设备 = 可以读、写、控制的对象
  • “设备驱动程序”

常见 I/O 设备

孤独的CPU

CPU 只是 “无情的指令执行机器”,不断地从内存上进行取指令、译码、执行

我们是通过各种各样IO设备实现与CPU的交互的。

CPU眼中的IO设备

I/O 设备是一个能与 CPU 交换数据的接口

在这里插入图片描述

通俗来讲:

  • 就是 “几组线”
    • 每一组线有约定的功能 (RTFM)
    • CPU 通过握手信号从线上读出/写入数据
  • 每一组线有自己的地址
    • CPU 可以直接使用指令 (in/out/MMIO) 和设备交换数据

在CPU看来,与常见的IO设备的交互,就是按照特定的规则(RTFM)来读写一组寄存器。比如下面介绍的键盘控制器和磁盘控制器。

键盘控制器

IBM PC/AT 8042 PS/2 (Keyboard) Controller

  • “硬编码” 到两个 I/O port: 0x60 (data), 0x64 (status/command)
Command ByteUse说明
0xEDLED 灯控ScrollLock/NumLock/CapsLock
0xF3设置重复速度30Hz - 2Hz; Delay: 250 - 1000ms
0xF4/0xF5打开/关闭N/A
0xFE重新发送N/A
0xFFRESETN/A

参考 AbstractMachine 的键盘部分实现

磁盘控制器

ATA (Advanced Technology Attachment)

  • IDE (Integrated Drive Electronics) 接口磁盘
    • primary: 0x1f0 - 0x1f7; secondary: 0x170 - 0x177
void readsect(void *dst, int sect) {waitdisk();out_byte(0x1f2, 1);          // sector count (1)out_byte(0x1f3, sect);       // sectorout_byte(0x1f4, sect >> 8);  // cylinder (low)out_byte(0x1f5, sect >> 16); // cylinder (high)out_byte(0x1f6, (sect >> 24) | 0xe0); // driveout_byte(0x1f7, 0x20);       // command (write)waitdisk();for (int i = 0; i < SECTSIZE / 4; i ++)((uint32_t *)dst)[i] = in_long(0x1f0); // data
}

总之,以上这些IO设备,在CPU看来,就是按照特定的规则(RTFM)来读写一组寄存器。

特殊的IO设备

中断控制器

我们的设备中通常有许多IO设备,那我们只想在这些IO设备有有意义的数据/信号时,CPU才回去处理这些数据,而在平时IO设备没有数据时,不要打扰CPU的其他正常工作。这就要通过中断来实现。

CPU有一个中断引脚收到某个特定的电信号会触发中断

  • 保存 5 个寄存器 (cs, rip, rflags, ss, rsp)
  • 跳转到中断向量表对应项执行

在这里插入图片描述

CPU有且只有一个中断引脚(如图中6502的4号引脚 IRQˉ\bar{IRQ}IRQˉ)。那CPU是怎样管理各种不同的中断,以及不同中断到来时的处理优先级的呢?这就要用到一个特殊的IO设备:中断控制器

系统中的其他设备可以向中断控制器连线。从而实现上面提到的中断优先级的判断、中断屏蔽等功能。

  • Intel 8259 PIC(programmable interrupt controller),(微机原理中也介绍过,配合8086),可以设置中断屏蔽、中断触发等……
  • APIC (Advanced PIC)(现代CPU中使用的中断控制器)
    • local APIC(每个CPU内部的中断管理): 中断向量表, IPI, 时钟, ……
    • I/O APIC(外部IO的中断管理): 其他 I/O 设备

总线

想法

如果你只造 “一台计算机”,随便给每个设备定一个端口/地址,用 mux 连接到 CPU 就行。

但如果你希望给未来留点空间?

  • 想卖大价钱的 “大型机”
    • IBM, DEC, …
  • 车库里造出来的 “微型机”
    • 名垂青史的梦想家
  • 都希望接入更多 I/O 设备
    • 甚至是未知的设备,即可扩展性

在多个IO设备时,每个IO设备中的每个寄存器都有一个自己的地址,那肯定不能将这些寄存器全部直连到CPU上。

总线介绍

总线提供地址到设备的转发。把从CPU传来的地址(总线地址)和数据转发到相应的设备上(按照上面说的每个设备中的每个寄存器的地址)。例如: port I/O 的端口就是总线上的地址,IBM PC 的 CPU 其实只看到这一个 I/O 设备。

这样 CPU 只需要直连一个总线 (例如今天的 PCI总线 (Peripheral Component Interconnect) 就行了

  • 总线可以负责IO设备寄存器的地址编址
  • 总线可以桥接其他总线 (例如 PCI → USB)
  • lspci -tvlsusb -tv: 查看系统中总线上的设备
  • 概念简单,实际非常复杂
    • 电气特性、burst 传输、中断……

例子:PCI Device Probe

DMA(Direct Memory Access)

想法

假设程序希望写入 1 GB 的数据到磁盘

  • 即便磁盘已经准备好,依然需要非常浪费缓慢的循环
  • out 指令写入的是设备缓冲区,需要去总线上绕一圈
    • cache disable; store 其实很慢的
for (int i = 0; i < 1 GB / 4; i++) {outl(PORT, ((u32 *)buf)[i]);
}

能否把 CPU 从执行循环中解放出来?

  • 比如,在系统里加一个 CPU,专门复制数据?
  • 好像 memcpy_to_port(ATA0, buf, length);

DMA介绍

  1. DMA可以理解为一个只能执行memcpy这一条指令的迷你处理器,它只负责直接将内存上的内容搬运的磁盘。而不需要真正的CPU的参与,不需要占用真正的CPU时间。实际实现:直接把 DMA 控制器连接在总线和内存。

  2. 由于DMA处理器只进行memcpy这样一条指令,因此它的实现比通用的真正的CPU简单得多。

  3. DMA不仅可以完成内存和设备之间的内容搬运,而也可以是内存和内存之间。即可以有:

    • memory → memory
    • memory → device (register)
    • device (register) → memory
  4. PCI 总线支持 DMA,即PCI中自带DMA,这就是为什么 CPU 会有 PCIe lanes。

GPU

在CPU眼中,显卡(GPU)也是一种IO设备,通过读写某些寄存器来交互。

一切皆可计算

for (int i = 1; i <= H; i++) {for (int j = 1; j <= W; j++)putchar(j <= i ? '*' : ' ');putchar('\n');
}

难办的是性能

  • NES: 6502 @ 1.79Mhz; IPC = 0.43
    • 屏幕共有 256 x 240 = 61K 像素 (256 色)
    • 60FPS → 每一帧必须在 ~10K 条指令内完成
      • 如何在有限的 CPU 运算力下实现 60Hz?

既然能做一个只专注于 memcpy 的硬件DMA,为什么不能做一个画图的硬件?在输出图形时,可以认为对每个像素点做的是相同的计算指令,不同的数据的计算,因此,可以认为是一种并行计算。因此,我们也可以用一个专注于处理并行计算的非通用功能的处理器:GPU,只用来处理图形相关的这类并行计算

现代GPU:一个通用计算设备

一个完整的众核多处理器系统

  • 注重大量并行相似的任务
    • 程序使用例如 OpenGL, CUDA, OpenCL, … 书写
  • 程序保存在内存 (显存) 中
    • nvcc: 把 main 编译/链接成 ELF; kernel 编译成 GPU 指令
  • 数据也保存在内存 (显存) 中
    • 可以输出到视频接口 (DP, HDMI, …)
    • 也可以通过 DMA 传回系统内存

gpgpu:通用图形处理器

通过对处理图形显示这类并行计算任务的推广,出现了通用图形处理器。它们不再只关注图形处理,而是可以针对更广范围的并行计算,比如神经网络的计算、矩阵计算。

通用图形处理器(General-purpose computing on graphics processing units,简称GPGPU),是一种利用处理图形任务的图形处理器来计算原本由中央处理器处理的通用计算任务。这些通用计算常常与图形处理没有任何关系。由于现代图形处理器强大的并行处理能力和可编程流水线,令流处理器可以处理非图形数据。特别在面对单指令流多数据流(SIMD),且数据处理的运算量远大于数据调度和传输的需要时,通用图形处理器在性能上大大超越了传统的中央处理器应用程序。

I/O设备的抽象

I/O设备是操作系统中的对象(文件)

无论何种 I/O 设备,都是可以读 (read) 写 (write) 的字节序列 (流或数组)。

在这里插入图片描述

I/O设备应该是操作系统中怎样的对象?操作系统最简单,或者说最不负责任的做法,当然是可以直接将IO设备的寄存器,或者PCI总线的控制寄存器,暴露给应用程序。微内核的操作系统就是这么做的,微内核的系统只做最少、最必要的部分。

但如果操作系统再负责一点,将我们的每个IO设备(比如键盘、磁盘等)都抽象成操作系统中的一个对象。

操作系统:设备 = 支持以下三种操作的对象 (文件)

  • read: 从设备某个指定的位置读出数据
  • write: 向设备某个指定位置写入数据
  • ioctl: 读取/设置设备的状态

而以上这三种操作,恰恰就是文件系统中,一个文件应该支持的操作。 Everything is a file !

设备驱动程序:实现抽象

设备驱动程序把对设备的 read/write/ioctl 系统调用 “翻译” 成设备的寄存器命令序列。

以 “面向对象” 的方式访问 I/O 设备,设备 = 支持 read, write, ioctl, … 功能的对象。

例子:/dev 中的对象

  • /dev/pts/[x] - pseudo terminal
  • /dev/zero - “零” 设备
  • /dev/null - “null” 设备,一般不想要的输出可以直接重定位到这个设备。
  • /dev/random/dev/urandom- 随机数生成器

未必一定要有物理设备

设备驱动程序:将设备抽象为一个对象和操作,未必一定要有物理设备,比如/dev/null, /dev/urandom。就是操作系统中不需要物理设备的一种设备/文件/对象的抽象。

试一试

  1. 试一试执行命令:head -c 512 [device] | xxd,并观察它们的strace来查看访问设备的系统调用。

  2. tty查看当前终端,输出/dev/pts/3,即当前终端是3号终端。

    如果我们再打开一个终端并向之前的3号终端输出,是可以直接出现在3号终端上的:echo Hello > /dev/pts/3

    也就是说,每个打开的终端也被看做是在设备目录/dev下的一个设备。

存储设备的抽象

磁盘 (存储设备) 的访问特性与其他的设备的读写略有不同,是以块为单位的。

  1. 以数据块 (block) 为单位访问,传输有 “最小单元”,块内不支持任意随机访问
  2. 大吞吐量,使用 DMA 传送数据。
  3. 应用程序不直接访问
    • 访问者通常是文件系统 (维护磁盘上的数据结构)
    • 大量并发的访问 (操作系统中的进程都要访问文件系统)

对比一下终端和 GPU,的确是很不一样的设备

  • 终端:小数据量、直接流式传输
  • GPU:大数据量、DMA 传输

总结

本次课内容与目标

  • 理解 “什么是 I/O 设备
    • 终端、键盘、鼠标、总线、DMA、GPU……
  • 理解 “I/O 设备在操作系统中的抽象
    • 可以读/写/控制的对象

Takeaway messages

  • 如果你 “自己造一台计算机”,你会发现这一切都是自然的
    • “不容易理解” 的部分是随时间积累的复杂性

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(2021) 24 [持久化] 文件系统API

(2021) 24 [持久化] 文件系统API 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p24 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/14.slides#/ 背景 回顾 硬件视角&#xff1a;持久化的“层层抽象” 物…

计算机辅助应用的缩写有什么,计算机辅助设计的英文缩写是什么

2008-10-09是什么的英文缩写?BOBO......头型里的.....其实"BOBO头"准确的名称应该是BOB头。它是娃娃头的一种。BOB头有许多变种&#xff0c;标准的类似于樱桃小丸子的发型&#xff0c;专业发型师把它称为BOB。最初是由巴黎发型师Antoine 在1909年发明&#xff0c;但…

Linux中的硬链接和软链接

Linux中的硬链接和软链接 节选自南大蒋炎岩老师操作系统网络课程笔记&#xff1a;(2021) 24 [持久化] 文件系统API 硬&#xff08;hard&#xff09;链接 UNIX文件指针 在UNIX中&#xff0c;文件和目录完全不是同一个概念&#xff0c;虽然我们平时看着它们仿佛并列地躺在某个…

计算机win10开机音乐,大师传授win10系统电脑开机总是自动播放音乐的方案

今天小编分享一下win10系统电脑开机总是自动播放音乐问题的处理方法&#xff0c;在操作win10电脑的过程中常常不知道怎么去解决win10系统电脑开机总是自动播放音乐的问题&#xff0c;有什么好的方法去处理win10系统电脑开机总是自动播放音乐呢&#xff1f;今天本站小编教您怎么…

Linux中的tty、pts、pty等概念辨析

Linux中的tty、pts、pty等概念辨析 基本概念 tty、pty、pts、ptmx tty&#xff08;终端设备的统称&#xff09;&#xff1a;tty一词源于Teletypes&#xff0c;或teletypewriters&#xff0c;原来指的是电传打字机&#xff0c;是通过串行线用打印机键盘通过阅读和发送信息的东…

(2021) 25 [持久化] 文件系统实现:FAT和UNIX文件系统

(2021) 25 [持久化] 文件系统实现&#xff1a;FAT和UNIX文件系统 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p25 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/15.slides#/ 背景 回顾 应用眼中的文件…

用计算机模拟地球诞生,计算机模拟显示早期金星或像地球一样宜居

虽然金星的绰号是“地球的邪恶孪生化身”&#xff0c;但它和地球上的一切都不同&#xff1a;灼热、干燥并且被有毒烟云笼罩。不过&#xff0c;就在10亿或20亿年前&#xff0c;这两个任性的“兄弟”可能更加相似。最新的计算机模拟显示&#xff0c;早期的金星看上去和地球很像&a…

海南大学计算机原理,海南大学微机原理课件 第一章 计算机基础知识

第一章计算机基础知识数 制1.1一.计算机使用的数制及其相互转换 十进制(D)、二进制(B)、八进制(O)和十六进制(H). 数制中用少量数码按次序排列成数位&#xff0c;并按由低到高的进位方式进行计 数。(数码的个数称为基数) D---0,1,2,3,4,5,6,7,8,9------数码十个(基为10)-------…

pe能用的固态硬盘测试软件,通用pe工具箱教你如何让硬盘4K对齐

昨天小编教大家如何查看电脑硬盘是否4K对齐&#xff0c;马上就有读者告诉小编&#xff0c;查看电脑硬盘是否4K对齐的方法学到了&#xff0c;那么我使用的固态硬盘如何做到4K对齐呢&#xff1f;问的好啊&#xff01;现如今用户对电脑硬件的要求是越来越高。很多用户都不仅仅满足…

[2020-ECCV]PIPAL-a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration论文简析

[2020-ECCV] PIPAL: a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration 论文简析 论文&#xff1a;https://arxiv.org/abs/2007.12142 代码及数据集&#xff1a;https://github.com/HaomingCai/PIPAL-dataset 概述 本文认为随着图像重建&…

郫都区计算机老师周俊老师,教师节,带你走进郫都教师背后的故事

点击“郫都教育”关注我们&#xff1a;)有这样一群人“师者&#xff0c;所以传道&#xff0c;授业&#xff0c;解惑也”是他们奉献一生的事业“随风潜入夜&#xff0c;润物细无声”是他们培养英才的责任“春蚕到死丝方尽&#xff0c;蜡炬成灰泪始干”是他们追求终生的信仰值此第…

(2021) 18 [代码讲解] 可执行文件

(2021) 18 [代码讲解] 可执行文件 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p18 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/C8.slides#/ 背景 回顾 程序 状态机 状态机执行 状态机上的路径状…

如何学习计算机思维,刘康平:为什么我们每个人都应该学习计算思维?

不久前&#xff0c;微软亚洲研究院资深学术合作经理刘康平应邀在“造就”做了演讲&#xff0c;以下为演讲节选&#xff0c;由“造就”授权转载。刘康平 微软亚洲研究院资深学术合作经理以中国象棋为例&#xff0c;在这样一个棋局上&#xff0c;你怎么用最快的方式找到「将」和「…

链接与加载-NJU-JYY

(2021) 19 [代码讲解] 从零实现动态加载 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1N741177F5?p15 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/C9.slides#/ 背景 回顾&#xff1a; ELF可执行文件 只要能完成…

饥荒联机自建服务器有什么用,联机版饥荒使用专用服务器的好处 | 手游网游页游攻略大全...

发布时间&#xff1a;2016-02-15存档保存位置是?很多玩家对此并不是很了解,不过别着急哟,下面99单机小编就为你带来高玩分享的相关技巧心得攻略,希望大家能喜欢. 联机版的存档与单机版是不同的,由于联机版饥荒建 ...标签&#xff1a;游戏资讯 攻略秘籍发布时间&#xff1a;201…

(2021) 26 [持久化] 持久数据的可靠性:RAID和journaling

(2021) 26 [持久化] 持久数据的可靠性&#xff1a;RAID和journaling 南京大学操作系统课蒋炎岩老师网络课程笔记。 视频&#xff1a;https://www.bilibili.com/video/BV1HN41197Ko?p26 讲义&#xff1a;http://jyywiki.cn/OS/2021/slides/16.slides#/ 背景 回顾 文件系统 …

win10无法检验服务器出示的ssl证书,win10系统网站启用ssL安全证书的操作方法

win10系统网站启用ssL安全证书的操作方法?很多win10用户在使用电脑的时候&#xff0c;会发现win10系统网站启用ssL安全证书的的现象&#xff0c;根据小编的调查并不是所有的朋友都知道win10系统网站启用ssL安全证书的的问题怎么解决&#xff0c;不会的朋友也不用担心&#xff…

Nplayer本地文件拷到服务器,手把手教你简易NAS构建,手机/平板/智能电视随意调取,家庭存储云共享,有了自己的网络云盘后再也不用担心容量不够了!...

之前嫌键盘侠烦&#xff0c;写这些也没意义所以把账号注销了文章删除了&#xff0c;现在想了想我抗吧12级老蛆还喷不过这帮小兔崽子&#xff1f;换了skt.ruo秽土转生&#xff0c;求喷子和我在各评论对线。特别是匿名dog见一个怼死一个。下面是之前号写的内容原文 -#简介NAS全称…

gdb 入门

gdb 入门 简介 gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。 一般来说&#xff0c;GDB主要帮助你完成下面四个方面的功能&#xff1a; 1、启动你的程序&#xff0c;可以按照你的自定义的要求随心所欲的运行程序。 2、可让被调试的程序在你所指定的调置的断点…

Linux下的CUDA多版本管理

Linux下的CUDA多版本管理 关于CUDA、cuDNN等的简介和安装可参考&#xff1a;显卡、显卡驱动、CUDA、CUDA Toolkit、cuDNN 梳理。 CUDA多版本 有时我们会在一台机器上同时看到多个版本的CUDA&#xff0c;比如nvcc -V和nvidia-smi的输出就可能会不同&#xff1a; 在我们实验室…