CPU读取磁盘数据的操作时序(CPU和磁盘控制器)
2015-06-10 20:30
323 查看
CPU
检查ready,确认磁盘控制器空闲,可以接受新的I/O命令;将接收操作结果的内存单元的起始地址送入内存地址寄存器;
数据在内存中的起始扇区号送入数据起始地址寄存器,将待传送的数据的长度(以字节为单位)送入数据长度寄存器;
置命令/状态寄存器:
go置1;
r/w置1;(r/w置1表示读取数据,置0表示写入数据)
ready置0;
磁盘控制器
磁盘控制器定位到指定扇区(通过数据起始地址寄存器),然后将该扇区中的所有内容送入数据缓冲区;从数据缓冲区中取一个字节的数据存入内存地址寄存器所指向的内存单元;内存地址寄存器的值+1;数据长度寄存器的值-1;
重复第二步,直到将数据缓冲区中的所有数据全部送入指定内存单元;如果此时数据长度寄存器的值非零,则重复上述第一步,继续读取下一个扇区,直到数据长度寄存器的值为零为止;
最后,所有的数据全部送入内存中,置ready为1,向CPU发送中断信号;
中断控制程序
中断控制程序在接收到中断信号后,唤醒等待IO结束的进程,该进程上台后,它所需要访问的所有的文件内容就已经出现在内存中了!相关文章推荐
- Android 手动按power键上锁,没有锁屏提示音,无法恢复【单机必现】
- cxf框架和spring框架集成的Webservice例子
- Android中的android:layout_width和android:width
- 企业如何快速搭建大数据处理系统
- Convert Sorted Array to Binary Search Tree
- python解析pcap文件中的http数据包
- 五大算法---分治算法
- BZOJ 1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐( dfs )
- Visual studio 包含目录,库目录搞错了怎么办
- div添加contenteditable属性
- 【源代码】StringBuilder和StringBuffer震源深度分析
- 16进制的简单运算
- 关于union大小的计算
- 在O(1)时间删除链表结点
- PagerAdapter 页面无法刷新问题
- 检测色卡饱和度和色彩偏差
- 关于viewpager删除图片后的页面刷新问题
- Failed to load JavaHL Library
- Cordova webapp实战开发:(4)Android环境搭建
- [leetcode 13]Roman to integer