1. 软件是如何访问硬件的

1 软件是如何访问硬件的

  • 操作系统作为硬件层的上层,是对硬件的管理和抽象。对于操作系统上面的运行库和应用程序来说,他们希望看到的是一个统一的硬件访问模式。作为应用程序开发者,不希望在开发应用程序的时候直接读写硬件端口、处理硬件中断等这些繁琐的事情。这些繁琐的硬件细节全都交给了操作系统,具体的讲是操作系统中的硬件驱动

  • 驱动程序可以看做是操作系统的一部分,往往跟操作系统内核一起运行在特权级,但又有独立性,使得驱动程序很灵活。

  • 硬件是各种各样的,操作系统不可能随时更新各种硬件的驱动方法,总不能刚出来某个硬件,OS开发者就写驱动。所以就需要各种硬件适配设备,也就是IO接口。接口就是标准,只要硬件生产商按照接口来工作,就能实现通用。

硬件在输入输出上可以分为串行和并行,对应的接口就是串行接口和并行接口。串行硬件通过串行接口与CPU通信,CPU也可以通过串行接口与串行设备进行通信。并行设备类似。

访问外部硬件有两种方式

  • 将某个外设的内存映射到一定范围的地址空间中,CPU通过地址总线访问该内存区域时会落到外设的内存中,这种映射让CPU访问外设的内存就如同访问主板上的物理内存一样。

    • 比如显卡;显卡就是显示器的适配器,CPU不直接和显示器交互,它只和显卡通信,显卡上有片内存叫显存,往这片内存上写字节便是往屏幕上打印内容。
  • 外设通过IO接口与CPU通信,CPU访问外设,就是访问IO接口,由IO接口将信息传递给另一端的外设。也就是说CPU从来不知道有这些设备的存在,它只知道自己操作的IO接口。

    • 如何访问到IO接口?IO接口上有一些寄存器,访问IO接口本质上就是访问这些寄存器,这些寄存器就是人们常说的端口,这些端口是IO接口给提供的接口,(接口提供接口)接口电路有自己的系统,看到寄存器中写了什么就做出相应的反应。

    • 在x86平台上,共有65536个硬件端口寄存器,不同的硬件被分配到了不同的IO端口地址,CPU提供了两条专门的指令inout 来实现对硬件端口的读和写。

    • 举个例子:对IDE(电子集成驱动器)接口来说,有两个通道,分别为IDE0和IDE1,每个通道上可以连接两个设备,分别为Master和Slave,一个PC中最多可以有4个IDE设备。假设我们文件位于IDE0的Master硬盘上,在PC中,IDE0通道的IO端口地址是0x1F0~0x1F70x376~0x377 ,通过读写这些端口就能与IDE硬盘进行通信。以读取1000号逻辑扇区开始的8个扇区为例:

      • 0x1F3~0x1F6 4个字节(32位寻址空间)的端口地址是用来写入LBA(逻辑区块,磁盘的逻辑地址,用于和实际的物理地址映射,转换成盘面、磁道等位置)地址的,那么1000号逻辑扇区的LBA地址为0x0000003E8 ,所以我们需要往0x1F3、0x1F4 写入0x00 ,往0x1F5 写入0x030x1F6 写入0xE8

      • 0x1F2 这个地址用来写入命令所需要读写的扇区数,比如读取8个扇区即写入8

        • 0x1F7 这个地址用来写入要执行的操作的命令码,对于读取操作来说,命令字为0x20 所以指令为

          out 0x1F3, 0x00
          out 0x1F4, 0x00
          out 0x1F5, 0x03
          out 0x1F6, 0xE8
          out 0x1F2, 0x08
          out 0x1F7, 0x20
          

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

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

相关文章

Linux第89步_了解异步通知及其结构和函数

1、了解“异步通知” “异步通知”的核心就是信号。信号是采用软件模拟的“中断”,它由“驱动程序”主动向“应用程序”发送信号,并报告自己可以访问了,“应用程序”收到信号以后,就从“驱动设备”中读取或者写入数据。整个过程就…

数据库(4)

目录 16.MySQL主从复制? 17.MySQL主从的延迟是怎么解决的呢? 18.MySQL读写分离方案? 19.什么是Redis,为什么用Redis? 20.为什么Redis是单线程的以及为什么这么快? 16.MySQL主从复制? 主要涉…

杰发科技AC7840——CAN通信简介(3)_时间戳

0. 时间戳简介 时间戳表示的是收到该CAN消息的时刻,通过连续多帧的时间戳,可以计算出CAN消息的发送周期,也可以用于判断CAN消息是否被持续收到。 1. 使用步骤 注意分别是发送和接收的功能: 2. 现象分析_接收时间戳 看下寄存器的…

帝国cms仿《鳄鱼下载站》网站源码

仿《鳄鱼下载站》网站源码手机安卓软件网站模版 PHP网站源码 帝国cms内核 采用帝国cms7.5 环境PHPmysql 恢复数据库后如何修改密码: 双击表,进入对应的详细数据表,然后找到:www_96kaifa_com_enewsuser这个表,双击打开修改&…

mac 配置前端开发环境brew,git,nvm,nrm

我的电脑是mac 3 pro 一、配置Homebrew 打开终端,执行指令 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"查看版本 brew -v 安装nvm brew install nvm 再执行 brew reinstall nvm 我这边安装好了…

Linux 中 CPU 利用率是如何算出来的?

在线上服务器观察线上服务运行状态的时候,绝大多数人都是喜欢先用 top 命令看看当前系统的整体 cpu 利用率。例如,随手拿来的一台机器,top 命令显示的利用率信息如下: 这个输出结果说简单也简单,说复杂也不是那么容易就…

线程池-异步编排-完成时回调-线程串行化

上图中用exceptionally可以感知异常也可以处理返回结果 同时 我们使用handle也可以做到这种情况 线程串行化

error:0308010C:digital envelope routines::unsupported(问题分析)

error:0308010C:digital envelope routines::unsupported 情况一:就是网上大部分人说的node 17版本的问题 出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制,可能会对生态系统造成一些影响…

vue iview table实现全选

之前我们在文章《iview Table实现跨页勾选记忆功能以及利用ES6的Map数据结构实现根据id进行对象数组的去重》里实现过全选功能,不过那有一个弊端就是需要调接口一次性获取全部的数据,这会造成请求数据响应超时或报错,因为数据量大的话这样体验也不好,于是我们改了一下,因为…

【数据结构与算法】:二叉树经典OJ

目录 1. 二叉树的前序遍历 (中,后序类似)2. 二叉树的最大深度3. 平衡二叉树4. 二叉树遍历 1. 二叉树的前序遍历 (中,后序类似) 这道题的意思是对二叉树进行前序遍历,把每个结点的值都存入一个数组中,并且返回这个数组。 思路&…

【机器学习300问】66、ReLU激活函数相对于Sigmoid和Tanh激活函数的优点是什么?ReLU它有局限性吗?如何改进?

一、ReLU相对于Sigmoid和Tanh的优点 (1)计算效率高 ReLU函数数学形式简单,仅需要对输入进行阈值操作,大于0则保留,小于0则置为0。Sigmoid和Tanh需要指数运算但ReLU不需要。所以相比之下它会更快,降低了神经…

C++算法题 - 双指针

目录 125. 验证回文串392. 判断子序列167. 两数之和 Ⅱ - 输入有序数组11. 盛最多的水15. 三数之和 125. 验证回文串 LeetCode_link 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 …

滑动窗口例题

一、209:长度最小的子数组 209:长度最小的子数组 思路:1、暴力解法:两层for循环遍历,当sum > target时计算子数组长度并与result比较,取最小的更新result。提交但是超出了时间限制。 class Solution {public int minSubArray…

Object和Objects

Object Object是Java中的顶级父类.所有的类都直接或间接的继承Object类. Object类中的方法可以被所有子类访问,所以我们要学习Object类和其中的方法. Object的构造方法: Object的成员方法 public class test {public static void main(String[] args) {//1.toString 返回对象…

03 Git 之 远程仓库 + IDEA 集成使用 GitHub

1. 远程仓库 origin:即远程仓库 url 的指代。 从网上随意 clone 一个仓库,进入 .git/config 文件, 即可编辑远程仓库的 url,也可以自定义想要指代该 url 的名词。 1.1 本地仓库绑定远程仓库 并 推送、拉取 git remote add 【想要起的指代…

ruoyi单体+react+antdesign

基于ruoyi vue和Ruoyi-React实现的快速开发工具。 源码地址:GitHub - hebian1994/ruoyi-react-single: use ruoyi to generage java backend code and reacr front end code 前端:基于ant-design-pro 后端:单体springboot项目(非cloud)mysq…

人工智能——大语言模型

5. 大语言模型 5.1. 语言模型历史 20世纪90年代以前的语言模型都是基于语法分析这种方法,效果一直不佳。到了20世纪90年代,采用统计学方法分析语言,取得了重大进展。但是在庞大而复杂的语言信息上,基于传统统计的因为计算量巨大…

【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器

【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSON2WEB前端框架搭建 【J…

服务器中文字体问题

首先,确保fc-list、fc-cache命令可用,如果该命令不存在,需要安装该命令:https://command-not-found.com/fc-list fc-list 输出: /usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf: DejaVu Serif:styleBold /us…

APP开发_Hammer.js 触摸事件处理库教程

1 Hammer.js 概述 Hammer.js 是一个开源的、轻量级的触屏设备 JavaScript 手势库。它可以在不需要依赖其他工具或库的情况下识别触摸和鼠标事件,允许同时监听多个手势,甚至自定义识别器,并识别滑动方向。 Hammer.js 的主要特点包括&#xf…