能源及电源,有了电能就可以控制电子管的通与不通,从而实现与、或、非、异或、位移、脉冲、传输、存储等基础功能。
 
1:CPU通过系统总线(3合1的通信总线)与其他外设相接。
大多数控制器、控制卡都集成于主板上,以大规模集成电路芯片组成的功能电路。
把控制器、控制卡集成到南桥芯片和北桥芯片中。
 
2:CPU与IO接口控制器、控制卡通信接口是IO端口。
IO端口类型及作用
访问数据:数据端口。
输出命令:命令端口。
访问控制器状态:状态端口。
 
IO端口地址的设置方法:
统一编址:将IO端口地址归入存储器寻址地址空间范围内,访问IO端口使用访问内存的指令。
独立编址:将IO端口的寻址空间单独作为一个独立的地址空间,使用专门的IO指令来访问端口。
cat  /proc/ioports  #查看linux本机的IO端口地址范围。
 
IO接口数据传输控制方式:
程序循环查询(耗费CPU时间,linux只在设备或者控制器能立即返回信息时才会在很少几个地方采用)。
中断处理(IO设备通过中断向CPU提出处理请求,及硬件中断。CPU在事先设置好的中断向量表中找到中断处理服务过程并上下文切换执行。大多数设备采用的方式)。
DMA传输(直接存储器访问,IO设备与系统内存之间进行批量数据传送,过程中无需CPU插手)。
 
3:主存储器、BIOS、CMOS
主存储器:
初代个人电脑:1981年IBM PC机:640KB RAM内存,20根地址线 8088/8086CPU寻址1024KB。BIOS处于CPU能寻址的内存最高端位置处。
二代:intel 32位CPU(寻址4GB、64GB(通过修改页面大小实现))。BIOS任然处于CPU能寻址的内存最高端位置处,为了与原来的PC机在软件上兼容,系统1MB以下物理内存的使用和分配仍然与原来的PC基本一致,BIOS将从4G处以下位置拷贝一份(称为影子)放到1MB位置处以下的位置, 以到达兼容一代。
物理内存使用规范:
除了[0xA0000, 0xFFFFF](640KB-1MB)和[0xFFFE0000, 0xFFFFFFFF](4GB最后64KB)两段被用于IO设备和BIOS程序。其他地址可以作为系统内存。
Linux不使用BIOS功能,也不使用BIOS设置的中断向量表。所以此部分[0x00000, 0x00500]也可以当做系统内存。
BIOS:(存放于ROM中)
Linux只在初始化时会利用BIOS提供的一些系统参数(因为BIOS的功能是必要的),运行中不使用BIOS中的功能(因为BIOS不能并发)。
系统引导时的控制流:(加电)->0xFFFFFFF0->[0xFFFF0000, 0xFFFFFFFF]->(Big Mode)->(Self-Test and Init)->(copy 64KB to 0xF0000)->[0xF0000, 0x100000]->(CPU进入实地址模式)->(load boot to 0x7c00)->(load os kernel)
CMOS:
存储空间很小(例如64Byte/128Byte),存放实时时钟信息、系统硬件配置信息。通常和实时时钟芯片做在一块集成块中。CMOS地址空间是独立编址。
 
 
4:控制器和控制卡
4.1:中断控制器:实现IO设备的中断控制数据存取方式。IBM PC/AT 80x86兼容微机使用两片级联的8259A可编程中断控制芯片组成一个中断控制器。
1:初始时ROM BIOS对中断控制器芯片进行初始化。
2:并把15级中断优先级分配给时钟定时器、键盘、串行口、打印口、软盘控制、协处理器、硬盘等设备或控制器使用。
3:同时在内存开始处[0x000, 0xFFF]区域内建立一个中断向量表。
注:这些设置违背了Intel公司的要求,Linux kernel初始化期间又会重新设置中断控制器及中断向量表。
中断控制器电路图:
ROM BIOS根据上图中的 硬件中断请求号 设置成 下图中的 中断向量号(电信号->内存记录)。(后期Linux会重新设置)
4.2:DMA控制器:让外设和内存直接传输数据来增强系统性能。通常由Intel 8237芯片或其他兼容芯片实现。
4.3:定时/计数器:每隔一个固定间隔发出一个信号产生中断请求信号(IRQ0),产生内核工作脉搏。Intel 8253/8254芯片(可编程定时/计数器)。
4.4:键盘控制器:对接收到的键盘扫描码进行解码,把解码后的数据发送到操作系统的键盘数据队列中。Intel 8042单片微处理器芯片或其他兼容电路。
键盘编码器(键盘上的处理器,Intel8048或兼容芯片)收集扫描码(按下(接通码)和松开(断开码)的状态信息),并发送到键盘控制器。
键盘所有按键的接通码和断开码组成了键盘的一个扫描码集。
扫描码集已有三套:
AT键盘默认发送的是第二套扫码集。为了向前兼容,键盘控制器会把它转换成第一套扫码集,也就意味着软件只需要认识第一套扫码集。
键盘控制器收到键盘发来的11位串行格式数据,其中,第1位是起始位,第2-9位是8位键盘扫描码,第10位是奇校验校验位,第11位是停止位。然后转换成第一套扫码集中的扫描码,然后通过中断控制器IRQ1引脚向CPU发送中断请求。当CPU响应该中断请求后,就会调用键盘中断处理程序来读取控制器中的扫描码(第一套扫码集,同一个键盘按键的接通码加上0x80就是断开码)。
注意:扫描码不等于字符代码。
第一套扫码集(PC/XT)标准83键键盘以后新添加的(扩展)AT键盘上的按键(例如右手边的ctrl、右手边的alt键等),其接通码和断开码通常有2-4字节,并且第1字节一定是0xE0。(第一套原有键接通码只有1字节)
现今主板上不再包括独立的8042芯片,但会主板上的其他集成电路会兼容8042芯片的功能,所以现在键盘的编程方式仍然采用8042的编程方法。
另外键盘控制器8042的输出端口P2用于其他目的:P20引脚用于实现CPU复位,P21引脚用于控制A20信号线开关。
 
4.5:串行控制卡:串行数据的收发工作。2个符合RS-232C标准的串行接口+串行控制器(由通用异步接收/发送器控制芯片UART组成,或者16650A及兼容芯片(支持FIFO传输(最多16字节才引发一次中断)))。
串行接口:25芯的DB-25或9芯的DB-9链接器,主要连接MODEM设备。
串行通信:在线路上以一次一个bit进行传输的通信方式。可分为同步和异步两种类型。
异步串行通信:一个字符作为一个通信单位(帧)进行传输。
发送方:无数据传输时发送方处于传号(MARK,1)状态,持续发1。需要发送数据时,发送方需要首先发送一个空号(SPACE)起始位。接收方收到空号后就开始与发送方同步,然后接收随后的数据位,奇偶校验位,停止位。多个字符帧之间可以不用传号,也可以任意多个传号。
注:数据位长范围是[5, 8]bit,奇偶校验位可有可无,停止位可以是1、1.5、2位。但是再通信开始之前,双方必须设置成相同的格式。
接收方:每接收到一字符帧时,可能检测到三种错误之一。
奇偶校验错误:应要求对方重发。
过速错误:取字符速度慢于接收速度,修改程序加快取字符频率。
帧格式错误:线路干扰、或者双方帧格式设置的不一样导致。
同步串行通信:以多个字符或字节 组成的序列作为一帧数据进行传输。
PC启动时通过MR引脚对串行控制卡复位,此后使用之前需要初始化编程操作设置工作波特率、数据位数以及工作方式等。
 
4.6:显示控制:
可以使用多种不同标准的显卡,有单色和彩色的。后面的AGP显示卡也兼容前几种标准。
单色MDA标准:(Monochrome Display Adapter)
    仅支持黑白两色显示,只支持独有的文本字符显示方式(BIOS显示方式7)。
    显示规格是80列*25行,共可以显示2000字符。
    每个字符除了ASCII编码1字节外,还带有1个属性字节。因此显示1屏(1帧)内容需要占4KB,其中偶数地址(0,2,4...,3998)字节存放字符代码,奇数地址(1,3,5...,3999)字节存放属性字节。
    MDA显卡配置了8KB显示内存,在PC机内存寻址范围是[0xb0000, 0xb2000]。能够通过计算得出屏幕中指定位置字符在内存寻址中的地址。
    每个字符的属性:D7置1使字符闪烁,D3置1使字符高亮度显示。其他位对显示的影响效果如下图。
彩色CGA标准:(Color Graphics Adapter)
    支持7种 彩色和图形显示 方式(BIOS显示方式0--6)。
    其中有两种80列*25行的文本字符显示方式:单色和16色彩色两种(BIOS显示方式2和3),这两种和MDA标准类似。
    CGA显卡标配有16KB显示内存(内存地址范围为[0xb8000, 0xbc000]),能存放4帧显示信息。在console.c程序中只使用了8KB([0xb8000, 0xba000])。
    在CGA16色彩色文本显示方式中,每个字符属性字节的格式如下表:
RGB位标识了每个字符的颜色和背景色:
EGA标准、VGA标准:(增强型图形适配器(Enhanced Grpahics Adapter)、视频图形阵列(Video Graphics Adapter))
    除了兼容MDA和CGA的显示方式外,还支持其他在图形显示方面的增强显示方式。标配32KB显示内存,还是占用从0xa0000开始的物理内存地址。兼容(MDA/CGA)模式下运行的话显存地址也是兼容的。
 
4.7:软盘、硬盘控制器:(FDC(Floppy Disk Controller))
外存原理:利用磁性介质在电磁化后的剩磁状态来存储信息。
外存控制子系统=盘片+盘驱动器。硬盘驱动器和硬盘盘片放在一起不可分割。
例如:软盘:300转/分钟。硬盘:5000转/分钟。
磁头先转到相应的磁道,磁盘相对于磁头做匀速运动,相当于磁头在切割磁介质上的磁力线,从而根据剩磁状态方向不同在磁头的读线圈上产生不同方向的电流,并转换成0/1信号读入。
GAP:间隔字段,起隔离作用,通常是12字节的0。
地址场的地址字段:存放柱面号、磁头号、扇区号。读这个区域就能得到唯一标识地址。
磁盘控制器:CPU和驱动器之间的逻辑接口电路,他从CPU接收请求命令,向驱动器发送寻道、读写和控制信号,并控制和转换数据流形式。控制器与驱动器之间串行传输所有驱动器读到的数据,控制器负责分离出地址信息、其他控制信息和数据,并转为并行字节数据。
 

读书笔记《Linux内核完全注释》第二章硬件部分的更多相关文章

  1. 2013337朱荟潼 Linux第一章读书笔记——Linux内核简介

    一.Unix历史 二.Linux足迹 类Linux系统.非商业化产品.用途广泛 三.操作系统和Linux内核简介 1.操作系统 (1)是指在整个最基本功能系统中负责完成最基本功能和系统管理的部分. ( ...

  2. 【读书笔记】C#高级编程 第二章 核心C#

    (一)第一个C#程序 创建一个控制台应用程序,然后输入代码,输入完毕后点击F5 Console.WriteLine();这条语句的意思:把括号内的内容输出到界面上: Console.ReadKey() ...

  3. 《深入理解linux内核架构》第二章 进程管理和调度

    2.1进程优先级 进程优先级 硬实时进程 软实时进程 抢占式多任务处理 2.2进程生命周期 用户太切换到核心态的办法 系统调用 中断 抢占调度模型优先级普通进程<系统调用<中断 普通进程可 ...

  4. Linux内核分析第四章 读书笔记

    Linux内核分析第四章 读书笔记 第一部分--进程调度 进程调度:操作系统规定下的进程选取模式 面临问题:多任务选择问题 多任务操作系统就是能同时并发地交互执行多个进程的操作系统,在单处理器机器上这 ...

  5. linux内核分析第3章&第18章读书笔记

    linux内核分析第3章&第18章读书笔记 第三章 进程管理 进程:处于执行期的程序(目标码存放在某种存储介质上) 包含资源:可执行程序代码,打开的文件,挂起的信号,内核内部数据,处理器状态, ...

  6. 《Linux内核分析》第二周学习笔记

    <Linux内核分析>第二周学习笔记 操作系统是如何工作的 郭垚 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/ ...

  7. linux内核代码注释 赵炯 第三章引导启动程序

    linux内核代码注释 第三章引导启动程序 boot目录中的三个汇编代码文件   bootsect.s和setup.s采用近似intel的汇编语法,需要8086汇编器连接器as86和ld86 head ...

  8. linux内核参数注释与优化

    目录 1.linux内核参数注释 2.两种修改内核参数方法 3.内核优化参数生产配置 参数解释由网络上收集整理,常用优化参数对比了网上多个实际应用进行表格化整理,使查看更直观. 学习linux也有不少 ...

  9. 《C#从现象到本质》读书笔记(七)第9章 泛型

    <C#从现象到本质>读书笔记(七)第9章 泛型 泛型的三大好处:类型安全,增强性能(避免装箱和拆箱),代码复用. 泛型方法是传入的参数至少有一个类型为T(尚未制定的类型,根据微软的命名规则 ...

  10. Linux内核设计(第二周)——操作系统工作原理

    Linux内核设计(第二周)--操作系统工作原理 by苏正生 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/U ...

随机推荐

  1. c#生成一个某文本中不包含的随机字符串

    //生成一个某文本中不包含的随机字符串 private static string GetRandomStr(string allStr) { int number; string resStr; d ...

  2. Web前端入门第 23 问:CSS 选择器的优先级

    任何地方都存在阶级,CSS 选择器也不例外,也会讲一个三六九等. 选择器类别 通配符选择器 标签选择器 类选择器 ID选择器 属性选择器 伪类选择器 伪元素选择器 关系选择器 流传已久的阶级划分 选择 ...

  3. 大量数据topk-分桶+堆+多路并归解决方案

    利用分桶.堆与多路归并解决 TopK 问题:结果处理阶段解析 在处理大规模数据时,TopK 问题是一个常见且具有挑战性的任务,即从海量数据中找出最大(或最小)的 K 个元素.为了高效地解决这个问题,我 ...

  4. kafka 基础入门

    kafka是什么 Kafka (Apache kafka is a distributed streaming platform) ,官方定义是一个分布式流式计算平台.在我开发的项目中,是把kafka ...

  5. eolink对数据进行四舍五入处理

    下图"BalanceAmount"返回值显示小数点2位以后的值,这样就与预计匹配值不等导致脚本错误 对这个值进行四舍五入处理,比如返回值变成整数 var num = eo.env. ...

  6. 拆解 Cursor Pro 自动化工具,看看它是怎么实现的?

    深入解析Cursor Pro自动化工具的核心实现 ‍ 从源码角度剖析关键技术 完整解读:注册.认证.机器码重置的自动化方案 项目概述 大家好,我是松哥.这篇文章将为大家详细解析一个Cursor自动化管 ...

  7. 15.4K Star!Vercel官方出品,零基础构建企业级AI聊天机器人

    嗨,大家好,我是小华同学,关注我们获得"最新.最全.最优质"开源项目和高效工作学习方法 "基于Next.js 14和AI SDK打造的Chat SDK,让开发者快速构建支 ...

  8. LM Studio本地使用

    一.概述 LM Studio 是一款桌面应用程序,用于在您的计算机本地开发和实验 LLM. 官方地址:https://lmstudio.ai 官方中文地址:https://lm-studio.cn 主 ...

  9. MySql技术之"虚拟表增加索引"

    一.虚拟表增加索引 创建虚拟表,并且增加SKU索引:INDEX idx_sku (sku) CREATE TEMPORARY TABLE t_sku_analy_temp ( sku VARCHAR( ...

  10. flannel,canal,网络控制

    docker网络: bridge 自连网络名称空间 joined 与另外容器共享使用网络名称空间 open 容器直接共享宿主机的网络名称空间 none 不使用任何网络名称空间 k8s网络通信模型 容器 ...