摘要: 1 内嵌汇编1)__asm__用于指示编译器在此插入汇编语句2)__volatile__用于告诉编译器,严禁将此处的汇编语句与其它的语句重组合优化。 即:原原本本按原来的样子处理这这里的汇编。The format of basic inline assembly is very much straight forward. Its basic form is asm("assembly code");Example. asm("movl %ecx %eax"); /* moves the contents of ecx to eax */__asm__( 阅读全文
posted @ 2011-09-13 18:45 Jack204 阅读(3091) 评论(0) 推荐(0) 编辑
摘要: 怎么说呢?最近在写系统调用的时候,牵扯到从User空间拷贝内存到Kernel空间的问题,因为当前写的进程都是和Kernel一起编译的,也没有什么虚拟地址的问题,就都是保护模式下的4G空间的地址。所有的Kernel中的代码包括好几个进程都是在这个空间运行的。比如TTY进程虽然是自己单独运行在Task特权级上的,但是因为和Kernel一起编译,Kernel中的代码随时可以调用TTY中的代码并修改TTY中的数据结构或者变量的值。如果进程是单独编译,并且不使用虚拟地址空间,那么需要链接时候指定自己在内存中的地址,但是由于ldt的存在使得它其实还是可以被存放到其他实际内存地址的,如果它的内存地址已经有进 阅读全文
posted @ 2011-09-13 10:06 Jack204 阅读(368) 评论(0) 推荐(0) 编辑
摘要: 作为一个初学者,我们可能一直迷惑为何自己的代码不能直接访问kernel中的变量和资源,还要这么麻烦的使用系统调用?就比如最近我在写一个tty模块,这个模块负责接受键盘操作并在Console上做相应的显示。当然也可以在其他进程中直接操作tty的输入缓冲,或者直接在这个tty的控制台上进行显示。现在问题来了:我该怎么调用tty模块中的代码让其在控制台上显示呢?直接在其他进程中的代码调用tty中的代码使用系统调用,让kernel去调用tty中的代码去操作已经运行起来的进程中的数据。一般在操作系统上层,大家的理解就是利用系统调用进入kernel,让kernel来操作这一块。但并没有想过为什么?如果想要 阅读全文
posted @ 2011-09-13 00:27 Jack204 阅读(625) 评论(0) 推荐(0) 编辑