《程序是怎么跑起来的》读书笔记(11)-- 应用与硬件无关?

计算机如果没有软件,就仅仅是个箱子。
硬件想要正常运行,就必须需要软件存在。

应用与软件无关?

对于c语言来说,其开发的windows的应用,很少有直接控制硬件的命令,这是因为硬件的控制是Windows全权负责的,windows提供了通过应用来简介控制硬件的方法,利用操作系统提供的系统调用功能就可以实现硬件的控制,windows中,系统调用称为api,各个api就是应用调用的函数。这些函数的实体被存储在DLL文件中。

假如希望计算机打印字符串,windows api的TextOut函数,windows本身也是软件,由其去向系统调用函数。

支撑硬件输入输出的In指令和Out指令

windows控制硬件时借助的输入输出指令。
IN指令通过制定端口号的端口输入数据,并将其存储在cpu内部的寄存器中。
OUT指令则是把CPU寄存器中的存储的数据,输出到指定端口号的端口。
计算机内部附带了用来连接计算机主机同键盘等外围设备的连接器,而各个连接器的内部,都连接有用来交换计算机主机同外围设备之间电流特性的IC。这些IC统称为I/O控制器
I/O是Input/Output的缩写。显示器、键盘等外围设备都有各自专用的I/O控制器。I/O控制器由用于临时保存输入输出数据的内存。这个内存就是端口,port的字面意思是港口,由于端口就像是计算机和外围设备之间进行货物装卸的港口。
I/O控制器内部的内存,也称为寄存器,虽然都是寄存器,但它与cpu内部的寄存器在功能上是不同的。cpu的寄存器是用来进行数据运算处理的,而I/O寄存器则主要是用来临时存储数据的。
各端口之间通过端口号进行区分,端口号也被称为I/O地址,IN指令通过OUT指令在端口号指定的端口和cpu之间进行数据的输入输出。

I/O装置一般直接附带在计算机主机的主板上,例如键盘、鼠标等等一般都是主板上,显卡有自己的I/O装置。

现在的windows系统禁止了应用直接控制硬件的方式,从XP以后。

外围设备的中断请求

I/O范围下有IRQ项目,对应的值是0x00000006(06).IRQ(Interrupt Request)是中断请求的意思。
IRQ是用来暂停当前正在运行的程序,并跳转到其他程序运行的必要机制,该机制称为中断处理。
中断处理在实际上有很大的价值,不可能线性等待。

实施中断请求的是连接外围设备的I/O控制器,负责实施中断处理程序的是CPU。为了进行区分,外围设备的中断请求会使用不同于I/O端口的其他编号,该编号称为中断编号。

外围设备请求中断控制器,中断控制器会把多个外围色呗发出的中断请求有序的传递给 CPU

中断处理程序的第一步处理,就是cpu所有寄存器的数值保存到内存的栈中,在中断处理程序中完成外围色呗的输入输出后,把栈中保存的数值还原到cpu中,然后继续进行对主程序的处理。

DMA可实现段时间内传送大量数据

DMA(direct memory access),指在不通过cpu的情况下,外围设备直接和主内存进行数据传送,磁盘等都用到了这个DMA进制,通过使用DMA,大量数据就可以在短时间内转送到主内存。

文字和图片的显示机制

显示器的显示的信息一直都存储在某内存中,该内存称为VRAM,只要忘VRAM写入数据,该数据就会在显示器上先死出来,实现该功能的程序,是由操作系统或bios提供,并借助中断来进行处理的。
现在的计算机,经常带有独立的显卡,显卡等专用硬件中一般都配置有与主内存想独立的VRAM和GPU(Graphics processing Unit)。
正常情况下,计算机的主板是存在VRAM来进行显示器的显示的,但有时为了提高图形的描绘速度,有时需要专门的图形处理器,也就是显卡。

发表评论

电子邮件地址不会被公开。