copy_from_user函数的目的是从用户空间拷贝数据到内核空间,失败返回没有被拷贝的字节数,成功返回0.
4b,5b的意思是当出错地址在4b标号对应的地址上时,就转入5b标号对应的地址去接着运行,
也就是修复的地址。依次类推。所以理解这一点后,fixup_exception()函数就很容易看明白了
就是根据出错地址搜索异常地址表,找到对应的修复地址,跳转到那里去执行就ok了。
ok,到这里copy_from_user函数也就分析完了,假如有什么不明白的话,能够通过阅读
/usr/src/linux/Documentation/exception.txt来得到更多关于异常处理方面的知识。copy_from_user的使用,有一个前提:
1) 当前进程必须未锁定from所在的page,
或者,
2)from所在的page已经up_to_data,并且page -> count多余一个引用。
否则,如果from所在的page不在影射中,则缺页异常处理程序会搜索/新增这个page,在page未up_to_data时,要求锁定这个page,然后提交IO读page。
如 ( 当前进程已锁定本page ) && (page未up_to_data)成立,则死锁。
那么,在generic_file_write中,因to所在的page必须被当前进程锁定,则当(from所在page == to所在page)时,只能用第二种保证办法。
kernel好象并没有这样做,而只是在锁定to所在page之前,另from所在page为up_to_data,但并没有增加任何多余引用

相关文章:

  • 2022-02-10
  • 2021-12-01
  • 2021-12-29
  • 2022-02-10
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-06
  • 2022-12-23
相关资源
相似解决方案