发布时间:2014-09-05 16:46:55作者:知识屋
彼岸花,花语是悲伤的回忆。
很久很久以前,城市的边缘开满了大片大片的曼珠沙华,它的花香有一种魔力,可以让人想起自己前世的事情。守护曼珠沙华的是两个妖精,一个是花妖叫曼珠,一个是叶妖叫沙华。他们守候了几千年,可是从来没有见过面,因为开花时,就没有叶子,有叶子时没有花。他们疯狂地想念着彼此,并被这种痛苦折磨着。终于有一天,他们决定违背神的规定偷偷地见一次面。那一年的曼珠沙华红艳艳的花被惹眼的绿色衬托着,开得格外妖冶美丽。
曼珠和沙华受到惩罚,被打入轮回,并被诅咒永远也不能在一起,生生世世在人世间受到磨难。从那以后,蔓珠沙华又叫彼岸花,意思是开放在天国的花,它的花的形状像一只只在向天堂祈祷的手掌,可是再也没有在这个城市出现过。每年的秋彼岸期间(春分前后三天叫春彼岸,秋分前后三天叫秋彼岸)她会开在黄泉路上,曼珠和沙华的每一次转世在黄泉路上闻到彼岸花的香味就能想起前世的自己,然后发誓不分开,但只有在这一刻,因为他们会再次跌入诅咒的轮回,灵魂借着花的指引,走向幽冥。
Linux内核中引入了守护进程,也正是与这个传说对应,守护进程也叫内核精灵,当然,如果你是无神论者,你可以叫它为内核线程。我们来看具体的代码。
799行,调用了kthread_create()函数,kthread_create(usb_stor_control_thread, us, "usb-storage"),如果从前您对内核本身不是很熟悉,那这个函数就会让你有点儿头疼了。这个函数将会创建一个内核线程,而函数usb_stor_control_thread()将会执行,us将是传递给它的参数,对Linux内核不是很熟悉的话,可以将kthread_create看做类似于fork的函数。
实际上,简单一点说,kthread_create()这么一执行呢,就会有两个进程,一个是父进程,一个是子进程,子进程将会执行usb_stor_control_thread(),而us是作为usb_stor_control_thread函数的参数(实参),执行完usb_stor_control_thread()之后,子进程就结束了,它会调用exit()函数退出。而父进程继续顺着usb_stor_acquire_resources()函数往下走,kthread_create()函数对于父进程而言返回的是子进程的进程task_struct结构体指针,800行调用IS_ERR(th)判断返回的指针是否是错误代码,若是IS_ERR(th)为真,则调用PTR_ERR(th)读出实际的错误代码。
于是,咱们接下来必须再次兵分两路,分别跟踪父进程和子进程前进了。先看父进程,811行:
811 wake_up_process(th);
唤醒子进程,之所以需要唤醒子进程,是因为当你用kthread_create()创建一个子进程之后,它并不会立即执行,它要等待你唤醒了之后才会执行,所以这个函数就相当于田径运动中裁判的发令声。运动员跑得再快,他也要等到裁判发令声之后才会开始跑。那么我们来看子进程,也就是usb_stor_control_thread()函数,这个函数定义于drivers/usb/storage/usb.c中
linux一键安装web环境全攻略 在linux系统中怎么一键安装web环境方法
Linux网络基本网络配置方法介绍 如何配置Linux系统的网络方法
Linux下DNS服务器搭建详解 Linux下搭建DNS服务器和配置文件
对Linux进行详细的性能监控的方法 Linux 系统性能监控命令详解
linux系统root密码忘了怎么办 linux忘记root密码后找回密码的方法
Linux基本命令有哪些 Linux系统常用操作命令有哪些
Linux必学的网络操作命令 linux网络操作相关命令汇总
linux系统从入侵到提权的详细过程 linux入侵提权服务器方法技巧
linux系统怎么用命令切换用户登录 Linux切换用户的命令是什么
在linux中添加普通新用户登录 如何在Linux中添加一个新的用户
2012-07-10
CentOS 6.3安装(详细图解教程)
Linux怎么查看网卡驱动?Linux下查看网卡的驱动程序
centos修改主机名命令
Ubuntu或UbuntuKyKin14.04Unity桌面风格与Gnome桌面风格的切换
FEDORA 17中设置TIGERVNC远程访问
StartOS 5.0相关介绍,新型的Linux系统!
解决vSphere Client登录linux版vCenter失败
LINUX最新提权 Exploits Linux Kernel <= 2.6.37
nginx在网站中的7层转发功能