feisky

云计算、虚拟化与Linux技术笔记
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  Linux kernel

摘要:进程是执行期间的程序及其它所包含的资源的总称。 进程通过fork()系统调用产生,该系统调用通过复制一个现有进程来创建一个全新的进程。fork()调用一次返回两次:一次回到父进程、一次回到新创建的子进程。 进程描述符及任务结构 内核把进程放在task list的双向循环链表中,其中每一项都是一个task_struct结构(即进程描述符)。task_struct结构比较大(32位机... 阅读全文

posted @ 2012-04-05 15:47 feisky 阅读(515) 评论(0) 推荐(0)

摘要:Linux中一切都是文件,这样可以通过相同的系统调用接口来操作数据和设备。 处理器的运行状态可以分为: 运行于内核态,处于进程上下文中,代表某个进程执行了系统调用; 运行于内核态,处于中断上下文,代表正在处理中断; 运行于用户态,正在执行用户进程。 单内核与微内核 单内核:内核作为一个整体构成一个大过程,运行在一个地址空间中,这样的内核以单个二进制文件的形式存在。内核... 阅读全文

posted @ 2012-04-05 15:46 feisky 阅读(460) 评论(0) 推荐(0)

摘要:本文为原创文章,出自http://cnodejs.org,转载请注明出处和作者作者:爱多原文:http://cnodejs.org/blog/?p=2426 在高性能的服务器编程中,IO 模型理所当然的是重中之重,需要谨慎选型的,对于网络套接字,我们可以采用epoll 的方式来轮询,尽管epoll也有一些缺陷,但总体来说还是很高效的,尤其来大量套接字的场景下;但对于Regular File 来说,是不能够用采用 poll/epoll 的,即O_NOBLOCK 方式对于传统文件句柄是无效的,也就是说我们的 open ,read, mkdir 之类的Regular File操作必定会导致阻塞... 阅读全文

posted @ 2012-03-02 17:21 feisky 阅读(2524) 评论(0) 推荐(0)

摘要:知道异步IO已经很久了,但是直到最近,才真正用它来解决一下实际问题(在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上。预先知道这些数据的位置,所以预先发起异步IO读请求。等到真正需要用到这些数据的时候,再等待异步IO完成。使用了异步IO,在发起IO请求到实际使用数据这段时间内,程序还可以继续做其他事情)。假此机会,也顺便研究了一下linux下的异步IO的实现。linux下主要有两套异步IO,一套是由glibc实现的(以下称之为glibc版本)、一套是由linux内核实现,并由libaio来封装调用接口(以下称之为linux版本)。glibc版本接口glibc版本主要包含如下接口: 阅读全文

posted @ 2012-03-02 17:19 feisky 阅读(3749) 评论(0) 推荐(1)

摘要:IntroductionToMiniosApplicationsMini-OS现有应用介绍Mini-OS是跟随Xen hypervisor发布的一款小内核操作系统,目前有一些基于Mini-OS的应用:HP实验室在2007年发布了基于Mini-OS的Xen Library OS;2008年剑桥大学进一步完善了HP的工作,完成了HVM stubdom并置于Xen源码树中;伊利诺伊大学芝加哥分校(UIC)正致力于开发一款基于Mini-OS的小内核系统—Ethos。Mini-OS 启动简介arch_init()trap_init()init_mm()Xen Library OSXen Library 阅读全文

posted @ 2012-02-04 16:11 feisky 阅读(1707) 评论(0) 推荐(0)

摘要:Linux内核之系统调用1. 应用程序通过API而不是直接调用系统调用来编程;2. getpid()系统调用示例:asmlinkage long sys_getpid(void){ return current->tgid;} asmlinkage 编译器仅从栈中提取参数 系统调用的命名规则:sys_syscallname()3. 每个系统调用都对应一个唯一的系统调用号,如果系统调用被删除,但它占用的系统调用号不回收。4. 系统调用通过软中断实现(int $0x80),通过引发一个异常陷入懂啊内核态去执行异常处理程序system_call。最近的x86处理器已经支持了sysenter指令 阅读全文

posted @ 2011-12-11 17:32 feisky 阅读(823) 评论(0) 推荐(0)

摘要: 阅读全文

posted @ 2011-12-01 22:13 feisky 阅读(416) 评论(0) 推荐(0)

摘要:Linux设备驱动中的异步通知与异步I/O异步通知的概念与作用 异步通知的意思是:一旦设备就绪,则主动通知应用程序,这样应用程序根本就不需要查询设备状态,这一点非常类似于硬件上"中断"的概念,比较准确的称谓是"信号驱动的异步I/O"。 Linux信号 Linux系统中,异步通知使用信号来实现。信号也就是一种软件中断。信号的产生:kill raise alarm用户按下某些终端键;硬件异常;终止... 阅读全文

posted @ 2010-06-01 16:46 feisky 阅读(2542) 评论(0) 推荐(1)

摘要:Linux设备驱动中的阻塞与非阻塞I/O阻塞与非阻塞I/O 阻塞操作是指在执行设备操作时若不能获得资源则挂起进程,直到满足可操作的条件后再进行操作。 因为阻塞的进程会进入休眠状态,因此,必须确保有一个地方能够唤醒休眠的进程。唤醒进程的地方最大可能发生在中断里面,因为硬件资源获得的同时往往伴随着一个中断。 注意:驱动程序需要提供阻塞(等待队列,中断)和非阻塞方式(轮询,异步通知)访问设备。 休眠(被... 阅读全文

posted @ 2010-06-01 16:14 feisky 阅读(2181) 评论(1) 推荐(1)

摘要:并发与竞态 解决竞态问题的途径是保证对共享资源的互斥访问。 访问共享资源的代码区域称为临界区,临界区需要以某种互斥机制加以保护。中断屏蔽、原子操作、自旋锁和信号量等是Linux设备驱动中可采用的互斥途径。 中断屏蔽 中断屏蔽将使得中断与进程之间的并发不再发生,而且,由于Linux内核的进程调度等操作都依赖中断来实现,内核抢占进程之间的并发也就得以避免了。但是,需要注意是的是长时间的中断是危险的,有... 阅读全文

posted @ 2010-05-30 10:43 feisky 阅读(1044) 评论(0) 推荐(0)

摘要:一、printk 我们在前面几章中使用 printk 函数, 简单地假设它如同 printf 一样使用. 现在到时候介绍一些不同的地方了. 一个不同是 printk 允许你根据消息的严重程度对其分类, 通过附加不同的记录级别或者优先级在消息上. 你常常用一个宏定义来指示记录级别. 例如, KERN_INFO, 我们之前曾在一些打印语句的前面看到过, 是消息记录级别的一种可能值. 记录宏定义扩展成一... 阅读全文

posted @ 2010-05-30 09:51 feisky 阅读(2429) 评论(0) 推荐(0)

摘要:因为本身从事存储行业,在工作中多次碰到用户有这样的要求:我的linux系统中原来有一块SCSI硬盘,系统分配的设备文件是/dev/sda。现在新增加了一个外置的磁盘阵列,通过SCSI卡连接。但接上这个磁盘阵列后,/dev/sda变成了磁盘阵列的硬盘了,原来内置的SCSI硬盘变成了 /dev/sdb,我希望将设备文件固定下来。 过去,我总是对用户说,这个比较麻烦,因为/dev/sda等文件都... 阅读全文

posted @ 2010-05-30 09:09 feisky 阅读(785) 评论(1) 推荐(1)

摘要:Linux 2.6内核的一个重要特色是提供了统一的内核设备模型。随着技术的不断进步,系统的拓扑结构越来越复杂,对智能电源管理、热插拔以及plug and play的支持要求也越来越高,2.4内核已经难以满足这些需求。为适应这种形势的需要,2.6内核开发了全新的设备模型。2.6 设备模型提供了这个抽象. 现在它用在内核来支持广泛的任务, 包括:电源管理和系统关机这些需要一个对系统的结构的理解. 例如... 阅读全文

posted @ 2010-05-30 09:06 feisky 阅读(2258) 评论(1) 推荐(1)

摘要:编译和加载 本章开头的 "hello world" 例子包含了一个简短的建立并加载模块到系统中去的演示. 当然, 整个过程比我们目前看到的多. 本节提供了更多细节关于一个模块作者如何将源码转换成内核中的运行的子系统. 2.4.1. 编译模块 第一步, 我们需要看一下模块如何必须被建立. 模块的建立过程与用户空间的应用程序的建立过程有显著不同; 内核是一个大的, 独立的程序, 对于它的各个... 阅读全文

posted @ 2010-05-29 11:07 feisky 阅读(3690) 评论(0) 推荐(0)

无觅相关文章插件,快速提升流量