# define __user __attribute__((noderef, address_space(1)))
__user这个特性,即__attribute__((noderef, address_space(1))),是用来修饰一个变量的,这个变量必须是非解除参考(no dereference)的,即这个变量地址必须是有效的,而且变量所在的地址空间必须是1,即用户程序空间的。
这里把程序空间分成了3个部分,0表示normal space,即普通地址空间,对内核代码来说,当然就是内核空间地址了。1表示用户地址空间,这个...
阅读全文
当进程以阻塞的方式通信,在得到结果前进程会挂起休眠。
为了将进程以一种安全的方式进入休眠,我们需要牢记两条规则:
一、永远不要在原子上下文中进入休眠。
二、进程休眠后,对环境一无所知。唤醒后,必须再次检查以确保我们等待的条件真正为真
简单休眠
完成唤醒任务的代码还必须能够找到我们的进程,这样才能唤醒休眠的进程。需要维护一个称为等待队列的数据结构。等待队列就是一个进程链表,其中包含了等待某个特定事件...
阅读全文
当你在用户空间需要读写一大片数据的时候,这个就用上了。
以下来自:http://www.yuanma.org/data/2006/1207/article_1916.htm
假设我们在 kernel 里产生一个 buffer,user 可以经由 read,write 等 system call 来读取或写资料到这个 buffer 里。如果有一个 user 写资料到 buffer 时,此时 buffer 已经满了。那请问你要如何去处理这种情形呢 ? 第一种,传给 user 一个错误讯息,说 buffer 已经满了,不能再写入。第二种,...
阅读全文
1.在主机的vm1网下设置ip、掩码和网关。
eg:192.168.2.23 255.255.255.0 192.168.2.1
2.虚拟机中设置连接方式为host-only
3.netconfig配置ip与vm1为同一网段,网管为vm1的ip。
eg:192.168.2.24 255.255.255.0 192.168.2.23
4.service vsftpd start
5.关闭防火墙service iptables stop
6.ifup eth0
阅读全文
1. 首先使用切换到root用户;
2. 使用fdisk -l命令查看磁盘信息,找到u盘(可以根据显示的大小确定)
3. 在/mnt下创建挂载点,例如创建usb文件夹:mkdir /mnt/usb
4. 使用mount挂载u盘,例如执行:mount /dev/sdb /mnt/usb
5. 有时候加载出来的u盘显示的文件名称是乱码,遇到这种情况挂载u盘时需要制定编码,例如通过如下命令进行挂载:mount -o iocharset=utf8 /dev/sdb /mnt/usb
6. 挂载完成好,可以cd /mnt/usb访问u盘的内...
阅读全文
作者:牛鹏飞
原创作品转载请注明出处+《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
下图是一段简单的C代码,通过对它进行反汇编来分析函数调用时的堆栈工作情况;
通过命令
gcc –S –o main.s main.c -m32
生成main。s汇编文件;去掉以‘.’开头的汇编代码如下图:
分析代码首先代码从main标识符开始执行:
从图中看出第2/3 9/10 18/19执行的指令相同,主要工作是保存当前栈基地址...
阅读全文
由于对linux系统的好奇,想按在机器上玩玩。昨天忙活了一晚上,最终才把linux安装好。但高兴的有点太早了,我还以为进linux就像进windows那么简单哪,没有想到却蹦出来一个引导命令(grub),让我引导,我一看麻木了。一点也不会。没有办法我实在熬不住了,就关机睡了。今天中午,上网查资料。把有关的命令给熟悉了一边。不过看后挺费劲的。试了几次还是不行。我就没有弄了。本打算放弃的。没有想到下午来灵感了。敲几个命令就...
阅读全文
源自:http://www.712100.com/thread-6734720-1-1.html
1 unix教程 外国教材 如果英文好的话可以看原版的 入门性的教材,在脑袋中建立起unix的概念并学会基本的操作。
2 unix环境高级编程,被称为unix编程的圣经,看书之前,需要有操作系统基础,比如进程,内存管理,文件系统等。而且要知道unix下各个组件的特性。3 unix系统编程 比较深入,里面有好多好的东西,比如网络服务器的设计,而且讨论很详细,比如服务器性能...
阅读全文