今日头条
应用程序运行在用户空间,而Linux 驱动属于内核的一部分,因此驱动运行于内核空间。当我们在用户空间想要实现对内核的操作,比如使用open 函数打开/dev/led 这个驱动,因为用户空间不能直接对内核进行操作,因此必须使用一个叫做“系统调用”的方法来实现从用户空间陷入到内核空间,这样才能实现对底层驱动的操作。
os分配给每个进程一个独立的、连续的、虚拟的地址内存空间,通常32位Linux内核(2^32)虚拟地址空间划分0~3G为用户空间,3~4G为内核空间。
进程寻址空间0~4G
进程在用户态只能访问0~3G,只有进入内核态才能访问3G~4G
进程通过系统调用进入内核态
每个进程虚拟空间的3G~4G部分是相同的
32位系统用户进程最大可以访问3GB,内核代码可以访问所有物理内存。
进程从用户态到内核态的转换:
系统调用
异常
外设中断
lw
全部0条评论
快来发表一下你的评论吧 !