我是靠谱客的博主 重要蜜蜂,最近开发中收集的这篇文章主要介绍系统调用与内存虚拟地址空间联系,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

怎么说呢?最近在写系统调用的时候,牵扯到从User空间拷贝内存到Kernel空间的问题,因为当前写的进程都是和Kernel一起编译的,也没有什么虚拟地址的问题,就都是保护模式下的4G空间的地址。所有的Kernel中的代码包括好几个进程都是在这个空间运行的。

比如TTY进程虽然是自己单独运行在Task特权级上的,但是因为和Kernel一起编译,Kernel中的代码随时可以调用TTY中的代码并修改TTY中的数据结构或者变量的值。
如果进程是单独编译,并且不使用虚拟地址空间,那么需要链接时候指定自己在内存中的地址,但是由于ldt的存在使得它其实还是可以被存放到其他实际内存地址的,如果它的内存地址已经有进程在用了。这里就要涉及到内存管理了,会稍微复杂一些。

所以这里暂时先不考虑 虚拟地址,不考虑内存管理每次都先将进程和kernel一起编译,并且ldt都设为初始地址为0,这样能降低复杂度,等我掌握基本知识之后,再去看Linux内核,学习虚拟地址和内存管理。

并且明白当前系统调用将指针传给kernel,并让Kernel到User空间中复制数据在加入了虚拟地址后也是这么做的,所以暂时可以不考虑虚拟地址,不然那样会增加我学习的复杂度

最后

以上就是重要蜜蜂为你收集整理的系统调用与内存虚拟地址空间联系的全部内容,希望文章能够帮你解决系统调用与内存虚拟地址空间联系所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部