linux内核
yyt8yyt8
点点滴滴,从烂笔头开始~
所有blog均为自己工作中遇到问题,网上搜集整理所来,归类统一为【翻译】。 如有侵权,请联系QQ12680009。
展开
-
Linux - fork
给出如下C程序,在linux下使用gcc编译: #include "stdio.h" #include "sys/types.h" #include "unistd.h" int main() { pid_t pid1; pid_t pid2; pid1 = fork(); pid2 = fork();翻译 2011-11-30 11:02:08 · 1002 阅读 · 0 评论 -
linux 中断处理 tasklet workqueue
linux中注册中断历程用request_irq,isr原型为: irqreturn_t *(int irq, void* dev_id, struct pt_reg* regs)为了使中断关闭的时间尽可能的短,linux提出了中断上半部和下半部。上半部为request_irq注册的ISR,要求时间尽可能的短,而将尽可能的工作推迟到下半部去做。下半部由上半部调度,并在安全的时间内执行,此时中断原创 2012-04-16 10:24:02 · 1436 阅读 · 0 评论 -
LINUX IO端口、IO内存释疑
IO端口是指接口电路中能够被CPU直接访问的寄存器,一般有数据端口、控制端口和状态端口。每个连接到IO总线的设备都有自己的地址(集合),即端口,可以被映射到物理地址空间。IO内存和IO端口的主要区别是,IO端口操作具有边际效应,而内存则没有(所以可以用多种方法进行优化,比如重新排序、告诉缓存等)。 使用IO内存前要先申请request_mem_region,然后ioremap映射;使用翻译 2012-09-21 13:29:59 · 687 阅读 · 0 评论 -
linux udev 机制
1. linux的热插拔事件由kernel通过中断发现(比如,USB设备插入系统时,usb host会检测到这一事件,然后向CPU发送中断请求,并获取该usb设备的信息,usb core会根据usb id来匹配调用一个合适的usb driver处理该usb设备),然后kobject_add需要为用户空间添加信息(通过sysfs文件系统实现。sysfs文件系统用来表示设备的结构.将设备的层次结构形象原创 2012-09-26 11:21:40 · 2548 阅读 · 0 评论 -
RHEL 6.2 安装步骤
1. 配置BIOS网络启动,自动从dhcp获取IP,加载image; RHEL6.2 不能在文本模式下安装,只能通过vnc远程安装(说是为了避免文本模式下不能修改分区)2. 默认情况下,软件包非常少。如果后续要安装的话,需要用yum mount -t nfs server:/ISO /mnt mount -o loop /mnt/*.iso /mnt/iso原创 2012-10-16 14:21:47 · 664 阅读 · 0 评论 -
linux 电源管理
ACPI共有六种状态,分别是S0到S5,它们代表的含义分别是: S0--实际上这就是我们平常的工作状态,所有设备全开,功耗一般会超过80W; S1--也称为POS(Power on Suspend),这时除了通过CPU时钟控制器将CPU关闭之外,其他的部件仍然正常工作,这时的功耗一般在30W以下。In this state, no system context is lost (CPU原创 2012-10-24 15:58:08 · 7156 阅读 · 0 评论 -
VMware ESXi v5.1.0 / vSphere client v5.1.0 配置SRIOV
1. install the VMware ESXi v5.1.0 on the host (USB or DVD or via network)2. install the client in personal desktop3. create VM and install client OS(RHEL 6)4. install the VMware TOOLs in the cli原创 2013-04-07 13:54:56 · 2588 阅读 · 0 评论 -
MSI 与 MSIX
PCI 规范2.2 描述了MSI, optional MSI 目的:1. 允许一个设备申请多个中断,避免了共享中断,提高了效率,(最多32, 必须是2的倍数,MSIX则最多2048个);2. 当设备写入内存数据然后发起中断的时候有可能数据并未写入,CPU必须读设备的寄存器才能确定写完了;但是如果MSI中断,同样是写操作,中断肯定在数据写完以后才能收到;MSI操作: 在configrat原创 2013-04-10 17:56:47 · 2763 阅读 · 0 评论 -
Linux 并发、竞态管理的实现机制
linux下用于并发、竞态管理的机制有:spinlock_t,semaphore,mutex,completion,atomic_t等, 下面依次分析其实现原理1. spinlock_t:其实就是一个volatile unsigned int。在lock的时候关闭bh,调用lock锁住内存总线禁止其他cpu访问内存,然后将变量从内存读出减一后再写入。spin_unlock只是锁住内存总线的情况原创 2012-09-19 17:39:35 · 856 阅读 · 0 评论 -
linux 设备模型
2.6内核的设备模型支持以下特性:1. 电源管理2. 与用户空间通信3. 热插拔设备4. 设备类型管理5. 对象生命周期 §1. 底层组件kobject, kset, kobj_type, ksubsystem(merge to kset after 2.6.31) kobject对象有名字和引用计数。每个kobject对应一个kobj_type(由kobject结原创 2012-09-06 17:39:09 · 941 阅读 · 0 评论 -
多线程 模型
有关多线程实现的疑问, 暂时想通一部分, 以此为记。 (网上很多资料ms矛盾, 这里仅取最*可能*的)LWP: 轻量级线程,建立在内核上并由内核支持的用户线程。它由clone()系统调用创建,参数是CLONE_VM(即与父进程共享地址空间和系统资源)。每一个LWP均与内核线程关联,由内核管理并像普通进程一样调度。根据管理线程(即调度者)是在用户态和内核态分为内核级线程和用户级线程,前者更翻译 2012-08-30 10:53:16 · 798 阅读 · 0 评论 -
debug module with kgdb
1. 重编内核 when make menuconfig, make sure the 'enalbe kernel hacking -> kgdb' is selected. For some of the old versions of the kernel, need to select the serial port to communicate with ( /dev/ttyS0原创 2012-04-24 09:59:01 · 1486 阅读 · 0 评论 -
linux 内存映射 PCI内存映射 DMA映射
内存映射, 就是指把外设的内存映射到用户空间访问。系统调用为: #include void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); 其中fd 可以为打开的普通文件或设备文件。返回的地址为用户地址(即vma的地址, vm_area_struct,原创 2012-04-13 13:50:38 · 6050 阅读 · 0 评论 -
Linux 正则表达式 vi, grep, sed, awk
1. vi 表示内容的元字符模式含义.匹配任意字符[abc]匹配方括号中的任意一个字符。可以使用-表示字符范围,如[a-z0-9]匹配小写字母和阿拉伯数字。[^abc]在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符。\d翻译 2012-05-15 10:51:26 · 3309 阅读 · 0 评论 -
shell 脚本中的 随机数生成
1。 利用date命令date +%s # 输出自1970年1月1日以来经历的秒数date +%N #输出当前的计算机纳秒数 2。 利用环境变量 $RANDOM 返回0~32767之间的随机数 3。 利用系统设备 /dev/urandomdd if=/dev/urandom bs=1 count=2048翻译 2012-05-14 11:23:42 · 3291 阅读 · 0 评论 -
几个linux常用的命令 sort,cut, uniq, split, tr
1. sort 按行排序-n 按照字符串的数字顺序排列: 9排在10前-f 忽略大小写(按照都大写)-i 只考虑可以打印的字符-r 反序-c check文件是否已经排序过-k 按照指定的域排序(有的版本是+)-t 指定域的分隔符-u 严格排序,若有重复则只输出第一行 2. cut 从文本行中选择部分-b 选取字节-c 选取字符翻译 2012-05-16 12:38:19 · 913 阅读 · 0 评论 -
内核调度 之schedule
学OS的时候经常讲到处理机(即CPU)的调度也即任务的调度,现如今与linux的内核代码联系起来。理解处理机调度要回答3个问题:1> 调度的时机2> 调度的策略3> 调度的实现 高级调度: 为任务建立PCB,装入内存中级调度: 为提高吞吐量和利用率,将任务临时换出内存(swap)低级调度: 进程调度,为进程分配CPU 考虑的因素:公平 资源利用率原创 2012-05-18 11:41:41 · 1146 阅读 · 0 评论 -
自动测试脚本 continuous test
#要考虑的几点:1. 保存到log, 最好命令、输出以及错误都重定向到文件中(同时显示到屏幕),将log软连接到latest,方便每次查看2. 每一步的结果都要校验并做对应处理(提示出错,或者自动做某些work)3. 结果报告,理论上可以通过远程的IP查出用户,并发对应邮件(但是不要发太多的邮件,例行的发,偶然的结果不用发)4. 持续更新中。。。 #############原创 2012-04-28 10:49:40 · 867 阅读 · 0 评论 -
Linux 系统启动过程详解
以RedHat9.0和i386平台为例----BIOS第一步:PC在上电以后,CPU从地址FFFF:0000开始执行(这个地址在ROM BIOS中,ROM BIOS一般是在FEOOOh到FFFFFh中),无论是Award BIOS还是AMI BIOS,这里只是一条跳转指令,跳到系统BIOS中真正的启动代码处。第二步: BIOS的首先进行POST(Power-On Self原创 2012-09-06 17:36:13 · 3342 阅读 · 0 评论 -
KVM QEMU 解读(原理及源码分析)
本文涉及到libvert,virt-manager,KVM,以及qemu,将按照操作的顺序依次记录1. RHEL的虚拟机管理界面virt-manager,命令行程序是virsh。virt-manager和virsh都是通过调用libvirt-API来实现的。2. 在libvritd 启动过程中会注册qemuDriver -> qemudDomainStart : qemudDomainSt原创 2013-07-09 09:02:18 · 8000 阅读 · 0 评论