文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>kernel related

kernel related

时间:2007-02-14  来源:ffjnfj

char device的driver是怎样与device_driver发生关系的?
这2个东东应该作用很不一样。chr driver(open/close)等是用在当你对设备文件
进行操作时调用的,而device_driver则是由总线调用的.比如说当有一个设备插入
总线时,这时就会调用device_driver的probe函数。比如usb设备就是usb_probe_interface,
该函数又会调用usb_driver中的probe,而这个probe则会注册该设备,并且将相应
的file_operations对应上,从而用户就可以使用/dev下的设备文件

softirq为什么不能sleep
在中断上下文中是不能block的,如果使用的是进程的栈,挂入的waitqueue也是
使用该进程,那么就影响了该进程的行为。如果使用的不是独立的栈,那就不知
怎么再调度回去了。
而异常是进程上下文的,比如/0异常,就是特定进程自己的事,而不像中断那样
是系统范围的

The elements of the per-CPU array are aligned in main memory so that each data
structure falls on a different line of the hardware cache (see the section
"Hardware Cache" in Chapter 2). Therefore, concurrent accesses to the per-CPU
array do not result in cache line snooping and invalidation, which are costly
operations in terms of system performance.
因为在不同的cache line,所以如果不是本cpu的数据,是不会被cache的,也就不需要
invalidation

fix-mapped, temporary kernel mapping, permanent kernel mapping
fix-mapped, 就是一些地址常量,主要是为了效率,相比较指针,使用这些地址不用检查
指针是否有效,也不用解引用,因为使用fix-mapped的地址就是直接的数字(常量)。
temporary kernel mapping,在不能sleep的情况下使用,每个cpu有单独的一份,每一个
pte都具体到应用,这样各个应用间就不会争用了。现在好像是fix-mapped的一部分。
不会block的主要原因是他所需要的页表是存在的。
permanent kernel mapping,一般会有2M/4M的空间,可以block,一般的高端内存都可以
使用他,不过空间仍然较小,需要及时释放

get_user, .fixup
在copy_to_user中使用了一个section __ex_table来包括可能产生异常的情况(也就是存取
user space空间的那条语句)和其对应的异常处理语句,这样当异常时,便可以搜到想要的
异常处理,一般就是置错误码然后返回,这样的异常只有当addr invalid时(不在地址空间
中的)。如果是有效的地址,只是没有swapin,do_page_fault会swapin,也就是请求调页。
一般,内核是不允许异常的,除了access用户空间地址,而这种情况由__ex_table来catch
所有内核发生的其他异常都会oops
See Documentation/exception.txt
get_user的作用就是简化以前使用verify_area的复杂,verify_area会检查系统调用参数
的正确性,根据vmas,这样就很慢了。而get_user之类的函数则使用mmu的功能,只有在
异常产生时才加以处理。这也就是要把数据拷贝到内存的原因之一,否则不通过类似
verify_area的方法就没法判断指针是否有效。另外的原因可能是,有的地方是不允许block
的,如果没有拷贝到kernel,则可能要swapin.

除了"Demand Paging" and "Copy On Write" and "Noncontiguous Memory Area Accesses"
和get_user类以外的异常都会Oops,get_user类函数也起到了一种区别Oops异常的方法(使用
ex_table),比如Oops的异常也可能是因为存取了userspace的数据

进入中断处理函数后会disable所有的中断吗? yes

prio tree的实现
一般用于查找interval。使用2个key进行insert,比如(r, h):
1) h可以是heap的key,比如说最大堆
2) r可以是search tree的key,左子树的key < r.key < 又子树的key
比如要查找point,满足y<ymax, xmin < x < xmax
就可以把y作为h,当然就不能再把x当作r,否则就不能构建这样一颗树了,不过可以先根据
y确定一个root,然后把该点的r设置为所有x的中间值,这样就平分了整个tree

排行榜 更多 +
我的酒厂

我的酒厂

音乐节奏 下载
一起单车

一起单车

模拟经营 下载
文字成精

文字成精

休闲益智 下载