趣谈Linux操作系统
刘超
网易杭州研究院云计算技术部首席架构师
立即订阅
19393 人已学习
课程目录
已完结 72 讲
0/4登录后,你可以任选4讲全文学习。
入门准备篇 (3讲)
开篇词 | 为什么要学习Linux操作系统?
免费
01 | 入学测验:你究竟对Linux操作系统了解多少?
02 | 学习路径:爬过这六个陡坡,你就能对Linux了如指掌
核心原理篇:第一部分 Linux操作系统综述 (3讲)
03 | 你可以把Linux内核当成一家软件外包公司的老板
04 | 快速上手几个Linux命令:每家公司都有自己的黑话
05 | 学会几个系统调用:咱们公司能接哪些类型的项目?
核心原理篇:第二部分 系统初始化 (4讲)
06 | x86架构:有了开放的架构,才能打造开放的营商环境
07 | 从BIOS到bootloader:创业伊始,有活儿老板自己上
08 | 内核初始化:生意做大了就得成立公司
09 | 系统调用:公司成立好了就要开始接项目
核心原理篇:第三部分 进程管理 (10讲)
10 | 进程:公司接这么多项目,如何管?
11 | 线程:如何让复杂的项目并行执行?
12 | 进程数据结构(上):项目多了就需要项目管理系统
13 | 进程数据结构(中):项目多了就需要项目管理系统
14 | 进程数据结构(下):项目多了就需要项目管理系统
15 | 调度(上):如何制定项目管理流程?
16 | 调度(中):主动调度是如何发生的?
17 | 调度(下):抢占式调度是如何发生的?
18 | 进程的创建:如何发起一个新项目?
19 | 线程的创建:如何执行一个新子项目?
核心原理篇:第四部分 内存管理 (7讲)
20 | 内存管理(上):为客户保密,规划进程内存空间布局
21 | 内存管理(下):为客户保密,项目组独享会议室封闭开发
22 | 进程空间管理:项目组还可以自行布置会议室
23 | 物理内存管理(上):会议室管理员如何分配会议室?
24 | 物理内存管理(下):会议室管理员如何分配会议室?
25 | 用户态内存映射:如何找到正确的会议室?
26 | 内核态内存映射:如何找到正确的会议室?
核心原理篇:第五部分 文件系统 (4讲)
27 | 文件系统:项目成果要归档,我们就需要档案库
28 | 硬盘文件系统:如何最合理地组织档案库的文档?
29 | 虚拟文件系统:文件多了就需要档案管理系统
30 | 文件缓存:常用文档应该放在触手可得的地方
核心原理篇:第六部分 输入输出系统 (5讲)
31 | 输入与输出:如何建立售前售后生态体系?
32 | 字符设备(上):如何建立直销模式?
33 | 字符设备(下):如何建立直销模式?
34 | 块设备(上):如何建立代理商销售模式?
35 | 块设备(下):如何建立代理商销售模式?
核心原理篇:第七部分 进程间通信 (7讲)
36 | 进程间通信:遇到大项目需要项目组之间的合作才行
37 | 信号(上):项目组A完成了,如何及时通知项目组B?
38 | 信号(下):项目组A完成了,如何及时通知项目组B?
39 | 管道:项目组A完成了,如何交接给项目组B?
40 | IPC(上):不同项目组之间抢资源,如何协调?
41 | IPC(中):不同项目组之间抢资源,如何协调?
42 | IPC(下):不同项目组之间抢资源,如何协调?
核心原理篇:第八部分 网络系统 (7讲)
43 预习 | Socket通信之网络协议基本原理
43 | Socket通信:遇上特大项目,要学会和其他公司合作
44 | Socket内核数据结构:如何成立特大项目合作部?
45 | 发送网络包(上):如何表达我们想让合作伙伴做什么?
46 | 发送网络包(下):如何表达我们想让合作伙伴做什么?
47 | 接收网络包(上):如何搞明白合作伙伴让我们做什么?
48 | 接收网络包(下):如何搞明白合作伙伴让我们做什么?
核心原理篇:第九部分 虚拟化 (7讲)
49 | 虚拟机:如何成立子公司,让公司变集团?
50 | 计算虚拟化之CPU(上):如何复用集团的人力资源?
51 | 计算虚拟化之CPU(下):如何复用集团的人力资源?
52 | 计算虚拟化之内存:如何建立独立的办公室?
53 | 存储虚拟化(上):如何建立自己保管的单独档案库?
54 | 存储虚拟化(下):如何建立自己保管的单独档案库?
55 | 网络虚拟化:如何成立独立的合作部?
核心原理篇:第十部分 容器化 (4讲)
56 | 容器:大公司为保持创新,鼓励内部创业
57 | Namespace技术:内部创业公司应该独立运营
58 | CGroup技术:内部创业公司应该独立核算成本
59 | 数据中心操作系统:上市敲钟
实战串讲篇 (9讲)
60 | 搭建操作系统实验环境(上):授人以鱼不如授人以渔
61 | 搭建操作系统实验环境(下):授人以鱼不如授人以渔
62 | 知识串讲:用一个创业故事串起操作系统原理(一)
63 | 知识串讲:用一个创业故事串起操作系统原理(二)
64 | 知识串讲:用一个创业故事串起操作系统原理(三)
65 | 知识串讲:用一个创业故事串起操作系统原理(四)
66 | 知识串讲:用一个创业故事串起操作系统原理(五)
67 | 期末测试:这些操作系统问题,你真的掌握了吗?
结束语 | 永远别轻视任何技术,也永远别轻视自己
免费
专栏加餐 (2讲)
学习攻略(一):学好操作系统,需要掌握哪些前置知识?
“趣谈Linux操作系统”食用指南
免费
趣谈Linux操作系统
登录|注册

31 | 输入与输出:如何建立售前售后生态体系?

刘超 2019-06-07
到这一节,操作系统作为一家外包公司,里面最核心的职能部门差不多都凑齐了。我们有了项目管理部门(进程管理),有为了维护项目执行期间数据的会议室管理部门(内存管理),有项目执行完毕后归档的档案库管理部门(文件系统)。
这一节,我们来规划一下这家公司的售前售后生态体系(输入输出系统)。这里你需要注意“生态”两个字,我们不仅仅是招聘一些售前和售后员工,而是应该建立一套体系让供应商,让渠道帮着我们卖,形成一个生态。
计算机系统的输入和输出系统都有哪些呢?我们能举出来的,例如键盘、鼠标、显示器、网卡、硬盘、打印机、CD/DVD 等等,多种多样。这样,当然方便用户使用了,但是对于操作系统来讲,却是一件复杂的事情,因为这么多设备,形状、用法、功能都不一样,怎么才能统一管理起来呢?

用设备控制器屏蔽设备差异

这有点像一家公司要做 To B 的生意,发现客户多种多样,众口难调,不同的地域不一样,不同的行业不一样。如果你不懂某个地方的规矩,根本卖不出去东西;如果你不懂某个具体行业的使用场景,也无法满足客户的需求。怎么办呢?一般公司采取的策略就是建立生态,设置很多代理商,让各个地区和各个行业的代理商帮你屏蔽这些差异化。你和代理商之间只要进行简单的标准产品交付就可以了。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《趣谈Linux操作系统》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(12)

  • why
    - 用设备控制器屏蔽设备差异
        - I/O 设备多种多样, 通过设备控制器范文设备( 类似代理商 )
        - 控制器像小电脑, 有芯片和寄存器, CPU 可通过读写寄存器访问设备
        - I/O 设备可分为两类: 块设备, 信息存于块中, 有自己的地址, 例如硬盘; 字符设备, 信息为字节流, 无法寻址, 例如鼠标.
        - 块设备控制器有缓冲区, 数据缓冲区即内存映射 I/O; 控制器寄存器有 I/O 端口, 可通过汇编指令操作.
        - 如何通知设备操作已完成:
            - 轮询检测控制器寄存器的状态标志位
            - 中断通知, 通过硬件中断控制器通知 CPU; ( 而软中断是在代码中调用 INT, 可触发系统调用 )
        - DMA 功能, 设备在 CPU 不参与下, 自行完成内存读写; 由 DMA 协调控制磁盘控制器, 并发送中断通知 CPU 操作完成
    - 驱动程序屏蔽设备控制器差异
        - 设备控制器不属于操作系统的一部分; 而驱动程序属于, 可以被内核代码调用.
        - 驱动程序应有统一的接口, 中断处理也在驱动里完成
        - 驱动初始化时, 注册中断处理函数; 中断统一出发 do_IRQ, 其找到注册的中断处理函数并执行
        - 对于块设备, 驱动与文件系统之间需要通用设备层; 通用设备层实现与块设备相关的通用逻辑, 位于与设备无关的操作
    - 用文件系统接口屏蔽驱动程序的差异
        - 统一设备名称, 设备在 /dev/ 下有特殊设备文件, 其有 inode 但不关联存储介质数据, 只建立与驱动的连接; /dev/ 是在 devtmpfs 文件系统下, c→字符设备文件, b→块设备文件; 设备号: 主设备号(驱动程序), 次设备号(相应的单元); 可对设备文件使用文件的操作命令
        - 添加新设备, 需要安装驱动( Linux 中即加载一个内核模块 ), 用 lsmod 查看加载的内核模块, 可通过 insmod 安装; 有了驱动, 可用 mkmod 在 /dev/ 下创建设备文件.
        - 或 /sys/sysfs 中是实际设备数的反映
            - /sys/devices 所有设备层次结构
            - /sys/dev char block 中用设备号链接到 /sys/devices 中
            - /sys/block 所有块设备
        - 守护进程 udev
            - 内核检测到新设备插入, 或创建 kobject 对象, 通过 sysfs 展现给用户, 并发送热插拔消息, udev 监听到消息并在 /dev/ 中创建设备文件
            - ioctl 可用于配置和修改设备信息.
    2019-06-13
    6
  • 刘強
    老师,可不可以这么理解。假设硬盘被格式化为ext 文件系统。如果我们直接读写裸设备,相当于绕过ext文件系统的这部分代码直接让驱动程序指挥硬盘。当然这种指挥由于没有一定的规则,没有什么意义。而把文件系统挂载到某个目录下后,我们访问这个目录,相当于特定于ext文件系统的这部分代码代替我们刚才的“瞎指挥”,还是通过驱动程序操作裸设备,现在由于有了特定文件系统的规则,所以就能读写文件了。 这么理解文件系统 驱动程序 裸设备之间的关系,对吗?

    作者回复: 是的,裸写肯定会写坏

    2019-06-19
    2
  • 安排
    直接读写操作/dev/sdb是操作的裸设备吗?也就是这时候的读入和写出的数据都不经过文件系统?
            直接读写/dev/sdb1具有相同的效果吧,只不过sdb代表整块硬盘,sdb1只代表一个分区,但是他们都是裸设备?
            只有操作文件才会经过文件系统层吗?

    作者回复: 是的,读写操作/dev/sdb是操作的裸设备,所以读写他没啥意义。也不经过文件系统。只有mount之后,才走文件系统层

    2019-06-08
    1
  • 许童童
    这篇文章讲得很好,深入浅出,给老师点赞!
    2019-06-07
    1
  • 石维康
    在Linux正常运行的过程中,如果用 int 0x80来调用系统条用,是否要走文中所画的通用中断处理流程?

    作者回复: 要的

    2019-06-07
    1
  • hello
    在高速SSD设备上面创建文件系统,读写文件的速度非常慢。而通过/dev目录下的设备文件去读写SSD时,能发挥出他的性能。
    2019-09-23
  • 一塌糊涂
    麻烦问下 是在阻塞 和非阻塞 体现在哪
    2019-08-09
    1
  • 靠人品去赢
    ls -all 命令用的好多,这个块设备和字符设备之前只是一个概念。现在其实可以理解块设备就是类似于硬盘这种存储类的,而字符流类似于我们用的触屏,鼠标等更面向用户的输入输出设备。

    作者回复: 对的

    2019-07-01
  • kkxue
    [作业]
    插入U盘后:
    [root@openstack-rocky ~]# fdisk -l

    Disk /dev/sdb: 31.5 GB, 31490834432 bytes, 61505536 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disk label type: dos
    Disk identifier: 0xcad4ebea

       Device Boot Start End Blocks Id System
    /dev/sdb4 * 256 61505535 30752640 c W95 FAT32 (LBA)

    [root@openstack-rocky ~]# ll /dev/sdb4
    brw-rw---- 1 root disk 8, 20 Jun 23 08:54 /dev/sdb4

    在openstack上创建卷(硬盘)后:
    Disk /dev/mapper/cinder--volumes-volume--6549d51c--9c4f--47f0--aaa6--5bf924b206ec: 1073 MB, 1073741824 bytes, 2097152 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 65536 bytes / 65536 bytes

    [root@openstack-rocky ~]# ll /dev/mapper/cinder--volumes-volume--6549d51c--9c4f--47f0--aaa6--5bf924b206ec
    lrwxrwxrwx 1 root root 7 Jun 23 09:01 /dev/mapper/cinder--volumes-volume--6549d51c--9c4f--47f0--aaa6--5bf924b206ec -> ../dm-7
    2019-06-23
  • alexgzh
    /dev 下的文件和设备驱动程序关联,通过对/dev 下的文件进行api操作可以和设备互动

    作者回复: 是的

    2019-06-11
  • 大龄小学生
    买了个新机,安官网下的centos,安不起,查网上说要改几个配置,毛用没有,好吧,ubuntu,安装十分畅快,想从另一个机子登,ssh,远程桌面,按网上的改了十几个配置,重装系统四次,然而毛用没有,ssh远程桌面能给用一个我就很好了,现在只能说windows万岁。

    作者回复: windows单机好用,集群难管理,越大的集群越难管理。因为业内很多开源工具都是用于linux的。当然微软会推出工具,但是可能就贵了。

    2019-06-09
  • 安排
    /dev/sdb这个设备文件是在devtmpfs文件系统上的,假设将这个设备挂载到/mnt/sdb目录下,这个时候读写这个硬盘上的文件时,最终是否还会通过/dev/sdb设备文件来找到设备驱动程序?毕竟读写文件最底层也是操作具体的磁盘。

    作者回复: 对的,这比较绕,后面会讲,这里涉及到三个文件系统,倒腾过来倒腾过去

    2019-06-08
收起评论
12
返回
顶部