IO

阻塞IO:
阻塞read过程假想:
sys_call read-->新起一个进程调用io驱动程序read; 本进程调用wait_event(),将本进程的状态设置为阻塞,并放入wait队列
-->驱动程序read完成后,发送一个中断请求-->cpu调度程序将wait队列里的阻塞进程设置为就绪状态。

外设接口的访问以前有两种方式:
1.中断
2.程序轮询 -- 但是随着外部设备种类的增多、速度差异的加大,这种方式逐渐成为系统性能提高的障碍到8位机出现以后,这种外设控制方式(体系结构)被淘汰

=====================================================================================================

printf函数是c语言函数,它调用了write函数,write是系统调用接口。printf和write都是在用户层执行。
write调用了int 0x80,陷入内核,执行了sys_write。printf->write->int 0x80->sys_write

sys_read的调用层次:
文件系统主要数据结构>>从文件 I/O 看 Linux 的虚拟文件系统 https://www.ibm.com/developerworks/cn/linux/l-cn-vfs/

DMA数据传输可以以两种方式触发:一种 软件请求数据 ,另一种 由硬件异步传输
a -- 软件请求数据
     调用的步骤可以概括如下(以read为例):
(1)在进程调用 read 时,驱动程序的方法分配一个 DMA 缓冲区,随后指示硬件传送它的数据。进程进入睡眠。
(2)硬件将数据写入 DMA 缓冲区并在完成时产生一个中断。
(3)中断处理程序获得输入数据,应答中断,最后唤醒进程,该进程现在可以读取数据了。
b -- 由硬件异步传输
      在 DMA 被异步使用时发生的。以数据采集设备为例(例如网卡传输):
(1)硬件发出中断来通知新的数据已经到达。
(2)中断处理程序分配一个DMA缓冲区。
(3)外围设备将数据写入缓冲区,然后在完成时发出另一个中断。
(4)处理程序利用DMA分发新的数据,唤醒任何相关进程。
     
=========================================================================================================



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值